Computer Science Illuminated

Computer Science Illuminated

2010년 12월 11일 토요일

TCP vs. UDP


           개인적으로 수업 시간에 매우 열심히 들었던 15단원 네트워크 부분에서 내 눈에 딱 들어오는 부분이 있었다.  그거는 다름이 아닌 내가 요즘 연습하고 있는 스타크래프트 II가 쓰고 있다는 파일 전송 방법이었다.  평상시에 항상 쓰던 TCP방법이라는 다르게 스타크래프트 II UDP방법을 사용했다는 소리를 듣고 매우 흥미를 가지고 수업을 들었다.  하지만, 수업 시간에 물론 수업 시간이 짧은 관계로 UDP TCP에 비해 자료를 보내기만 하기 때문에 속도가 매우 빠르지만, 불안전하다는 내용을 배웠다.  이러한 자료에 성이 차지 않은 나는 자료를 조금 더 찾아보도록 하였다. (아무래도 스투랑 관련이 있어서 그런지도 모르겠다.)
           바로 UDP의 내용으로 설명을 하고 싶지만 불행히도 UDP 내용을 설명하기 위해서는 TCP의 내용을 먼저 알아야 되기 때문에 TCP에 대해서 먼저 말하도록 하겠다.  일단 TCP UDP는 모두 IP을 기반으로 인터넷 통신을 한다.  TCP는 네트워크를 통한 전송 제어 프로토콜로 데이터의 흐름을 관리하고, 데이터가 정확한지 확인하는 작업을 한다.  TCP의 장점은 일단 연결이 되면 송신 시스템과 목적지 시스템은 연결이 끊길 때까지 끊임없이 자료를 주고 받는다.  다시 말하자면, 송신 시스템에서는 시스템에게 데이터를 전송하고, 목적지 시스템은 데이터를 데이터를 받은 경우 이에 다시 응답을 하도록 되어있다.  혹시, 목적지 시스템이 받은 데이터에 대한 응답을 하지 않을 경우, 송신 시스템은 일정 기간을 대기한 후에 똑 같은 데이터를 다시 전송한다.  이러한 방식으로 실행을 하면 데이터가 안전히 이동 가능하다.  뭐 요즘 흔히 쓰는 http가 바로 이에 대한 예라고 말할 수 있다. 
           TCP의 연결 과정을 보도록 하겠다
           S:Port확인->목적지와 연결(3way)->데이터사이즈 조절(window)->송신->송신 메시지 전달
           D:수신->Port확인->데이터 확인->수신 메시지 전달->종료
예를 들어서 상황을 만들어서 조금 더 이해하기 쉽도록 설명을 하겠다. 
호스트 A가 호스트 B에게 연결을 한다는 상황이다.
호스트 A                                          호스트 B
       ----------------------------------------à
                          SYN(1000)
        ß--------------------------------------
                     SYN(4000), ACK(1001)
        ----------------------------------------à
                          ACK(4001)


1.     호스트 A는 호스트 B에 연결을 설정하고 싶다는 요청과 함께 랜덤하게 만든 시퀀스 넘버 1000으로 SYN패킷을 호스트 B에게 보낸다.
2.     호스트 B는 랜덤하게 생성된 시퀀스 넘버 4000으로 SYN 패킷에, ACK 번호 1001로 설정하여 호스트 A에게 보낸다.(ACK 번호는 대부분 A에게서 받은 SYN+1의 값을 가진다.)
3.     호스트 A는 호스트 B에게서 받은 시퀀스 넘버를 사용하여 ACK번호(SYN+1)를 호스트 B에게 보낸다.
한마디로 말하자면, 서로에게 자기들만이 정한 숫자를 보내고 그 숫자에 1을 더한 숫자를 받아야지만 자료 전송을 시작한다는 뜻이다.  만약, 서로 보낸 숫자가 다르면 즉시 자료 전송은 취소된다.

           이렇게 자료를 전송하면 전송을 하는 것을 종료시키는 방법도 말하도록 하겠다.
이 경우도 호스트 A와 호스트 B가 연결을 종류 시키는 상황에 대해서 말을 하도록 하겠다.
호스트 A                                                     호스트 B
           ----------------------------------------------à
                                FIN(2500)
           ß----------------------------------------------
                     ACK(seq:7000, ack:2501)
           ß----------------------------------------------
                     FIN(seq:7001, ack:2501)
           -----------------------------------------------à
                     ACK(seq:2502, ack:7501)

1.     호스트 A가 연결을 종료하는 요청 세그먼트를 호스트 B에 전달한다.
2.     호스트 B는 호스트 A의 요청에 따라 ACK 메시지를 전송한다.
3.     호스트 A에서 호스트 B로 한쪽 방향의 연결만 종료 되고, 호스트 B는 여전히 호스트 A에 데이터 전송이 가능하다.
4.     호스트 B가 데이터를 모두 전송한 후에 연결 종료 메시지를 전송하면 호스트 A ACK 메시지를 전송하고 모든 연결이 종료된다.

이 그래프에서 간단한 용어 설명을 하겠다.
Source, Destination Port: 출발지와 목적지 포트 번호
Sequence Number: 전달되는 바이트에 대한 Sequence Number 1씩 증가한다.
Acknowledgement: 수신 측에서 수신하고자 하는 바이트의 번호
Checksum: 데이터를 포함한 세그먼트 전체의 오류를 검사하기 위한 필드
Urgent Pointer: 긴급 데이터를 우선적으로 처리할 것을 수신 측에게 알리기 위한 목적으로 사용하사 필드
Flag
-URG: 긴급 포인터가 있다는 것을 나타냄 (1-긴급, 0-일반)
-ACK: 확인 응답번호가 기술되어있음(1-ACK, 0:ACK 없으)
-PSH:데이터를 주고 받을 때 사용한다.
-RST: 연결을 재설정 할 때 사용한다.
-SYN: 연결을 초기화하기 위해 순서번호를 동기화
-FIN: 송신 측이 데이터 전송을 종료

여기까지가 TCP에 관한 설명이다.  드디어!!!UDP에 관한 이야기를 할거지만 바랬던 것처럼 길지는 않다.  거의 TCP 내용에서 몇 가지 빠진 정도이기 때문에 매우 짧게 느껴질지도 모른다.  여튼, UDP에 관한 설명을 시작하겠다.  
           UDP TCP와 달리 상대방이 보낸 응답을 확인하지 않아서 송신 시스템이 전송하는 데이터에 대한 목적지 시스템이 생략되어 있어서 네트워크에 부하를 걸지 않는다.  하지만, 데이터 자체의 신뢰성이 없어서 수신된 데이터의 무결성을 보장받지 못한다.  또한, UDP의 단점은 상호 커뮤니케이션이 이루어지는 것이 아니기 때문에 전송 도중 손실된 데이터 대한 재전송을 요구하지 않는 다는 것이다.  , 손실된 데이터를 그대로 둔 상태에서 데이터를 전송하는 것이다.  또한, UDP는 손실된 데이터의 정보를 알 수 없고 손실 데이터를 재전송할 수도 없다.
           뭐 위에서 TCP에서 한 듯이 UDP도 연결 과정을 말해보도록 하겠다.
S: Port확인->송신
D:수신->Port확인->종료
이에서 볼 수 있듯이 매우 단순화 되 있어서 속도 하나만큼은 짱이다.
Source, Destination Port: 출발지, 목적지 포트번호


Length: 헤더와 데이터를 합한 사용자 데이터 그램의 전체 길이(0~65,535)
Checksum:데이터 그램의 헤더와 데이터 전체의 오류 검사를 위해 사용

총 정리를 하자면, TCP는 수신자와 일단 확인을 한 뒤에 자료 전송을 시작하지만, UDP는 단순히 상대방을 확인하고 바로 자료를 전송하기 때문에 자료 전송 도중에 자료가 손상될 가능성도 있지만 TCP에 비해 속도가 비약적으로 빠르다.  이 때문에 스타크래프트 II에서도 UDP의 방식을 사용한 거 같다.  그럼 나는 여기까지!












2010년 11월 28일 일요일

전자 서명

전자 서명
         이번 단원에 과제를 내야 된다고 하길래 나는 개인적으로 컴퓨터 보안 쪽이 매우 땡겼다.  따라서, 컴퓨터 보안에 관해서 할려고 잠깐 생각해보았지만 역시나 오바였다.  이에 따라서, 요즘같이 인터넷으로 쇼핑, 계좌 관리, 등과 같은 업무를 하는데 필수적인 전자 서명에 관해서 설명을 하겠다.  참고로, 이번 과제는 전자 서명이라는 주제라서 그림이 많지는 않을 거 같다.  그럼에도 불구하고, 이 주제를 정한 이유는 평상시에도 우리가 많이 사용하고 앞으로도 컴퓨터교육과로서 필히 알아야 될 내용인거 같아서 지루할 수 있을 지에도 그냥 하기로 정했다.
         일단 전자 서명에는 크게 두 가지가 있다.  일단 우리가 일상에서 편의점 같은 곳에서 카드로 서명을 한 뒤 어떠한 터치 스크린에 우리가 서명을 하는 것은 전자 서명이라고 한다.  또한, 디지털 서명이란 인터넷에서 결제를 할 경우와 같이 전자상 거래를 할 때 생기는 경우이다.  이렇게 전자 서명은 2가지로 나뉘지만 전자 서명의 의의는 통일 된다.  전자 서명의 의의는 바로 인터넷과 같은 개방형 정보통신망을 이용하여 전자정보를 주고받는 경우에 정보의 누출과 변조를 방지해야 함과, 가상 공간에서 이루어지는 거래의 상대방이 누구인지, 현실적으로 존재하는 자인지, 거래 권한이 있는 자인지를 확인하기 위한 것이다. 


구분
전자 서명
디지털 서명
방법
전자펜을 이용한 서명
비대칭형 암호기술을 이용
서명자 인증
불만족
만족
위조 불가
불만족
만족
변경 불가
불만족
만족
부인 불가
불만족
만족


위의 그래프를 구체적으로 설명을 하자면 전자 서명은 전자 펜을 이용하여서 서명을 하는 방법으로서 시각적으로 서명의 진위를 확인하기 때문에 위조의 위험이 매우 크다.  참고로, 나도 개인적으로 편의점 같은 곳에서 서명을 하라고 하면 손가락으로 선을 찍하고 그어 버리기 때문에 위조의 가능성은 매우높다.  반면, 디지털 서명 같은 경우는 공개키 암호화 기술을 사용한 것으로서 사용자는 전자서명의 키를 사용하여 메시지를 암호화 한 후 그 결과를 수신자에게 보낸다.  수신자의 입장에서는 송신자가 제공하는 전자서명 키를 사용하여 메시지를 확인한 후 메시지를 접수한다.  다시 말하자면, 전에 교수님이 수업 시간에도 말했듯이 여러 사람이 있는 곳에서 내가 어떠한 내용을 반대편에 있는 사람한테 다른 사람들은 이해를 못하게 보내고 싶을 때, 나랑 그 사람만이 아는 코드를 이용해서 내용을 암호화 해서 보내면 받는 사람도 그 코드로 해독을 해서 내용을 보게 하는 방법이다. 
         놀라운 사실은 전자 서명이 유효하기 위해서는 5가지 요구 사항들이 만족 되어야 한다. 
1.    위조 불가(Unforgeable)
합법적인 서명자만이 전자서명을 생성할 수 있어야 한다.
2.    서명자 인증(User authentication)
전자 서명의 서명자를 불특정 다수가 검증할 수 있어야 한다.
3.    부인 방지(Non-repudiation)
서명자는 서명행위 이후에 서명한 사실을 부인할 수 없어야 한다.
4.    변경 불가(Unalterable)
서명한 문서의 내용을 변경할 수 없어야 한다.
5.    재사용 불가(Not reusable)
전자 문서의 서명을 다른 전자 문서의 서명으로 사용할 수 없어야 한다.
위의 내용은 법적인 내용 위주인거 같아서 구체적으로 말하지 않도록 하겠다.  , 나는 법학과가 아니라 컴퓨터 교육과니깐~ 여튼, 디지털 서명은 전자 문서에 해쉬 함수(Hash Function)을 사용하여 메시지 요약 (Message digest)을 만든 후에 비대칭 암호화 체계를 이용하여 서명자의 전자문서를 암호화한 정보를 말한다.  알아 듣기 쉽게 사용자의 내용을 특수한 방법으로 암호화한 정보라는 것이다.  또한, 가장 중요한 것은 바로 공개키 암호화 시스템이라고 하는데 이는 암호화 키를 한 쌍을 이용하여 알고리즘을 사용하는 정보시스템이다.  이 한 쌍의 키는 1. 공개 키로는 비밀키로 만들어진 전자서명을 확인할 수 있지만, 2. 공개 키로부터는 컴퓨터를 이용해도 비밀 키를 발견할 수가 없다.  이에 따라서 비밀키를 노출함이 없이 공개키를 신뢰할수 있는 제3기관인 인증기관에 등록하여 공개할 수 있다.  이래서, 우리가 인터넷으로 결제를 할 경우에는 공인인증서라는 것을 이용하는 거 같다. 
         원래는 여기서 끝낼려고 했지만 눈에 들어오는 내용이 있어서 한가지 더 적을란다.  바로 전자서명 검증 절차이다.
1.    서명자의 인증서를 취득한다.
2.    인증서에 첨부된 서명자의 공개키(전자서명검증정보)를 추출한다.  이때 수신자는 인증서의 유효기간, 정지 및 폐지 여부를 확인한다.
3.    수신한 문서로부터 전자문서 원본과 전자 서명을 분리한다.
4.    전자 서명을 서명자의 전자서명검증정보를 이용하여 복호화한다.
5.    전자문서원본에 대하여 서명자가 사용한 해쉬 함수를 이용하여 수시나작 해쉬값을 생성한다.
6.    4에서 얻은 해쉬값과 5에서 얻은 해쉬값을 비교한다.  같을 경우 검증이 완료 되며, 다를 경우 전자 무서에 위조/변조의 가능성이 있게 된다.

이거를 쓰면서 이해하기가 매우 난해하고 어려웠지만 내 나름대로 이해를 해서 썼는데 제대로 됬나 궁금하기도 했지만 내 나름대로 하느라 힘들었으니깐 난 만족!






http://unius.tistory.com/570
http://kin.naver.com/knowhow/detail.nhn?d1id=5&dirId=5&docId=574668&qb=7KCE7J6Q7ISc66qF&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=gn5yng331yVssceP4%2BNssv--430374&sid=TPJHrUMb8kwAAHHtNjY
http://100.naver.com/100.nhn?docid=772367
http://terms.naver.com/item.nhn?dirId=706&docId=6366
http://terms.naver.com/item.nhn?dirId=205&docId=14295
http://blog.naver.com/kjh861019?Redirect=Log&logNo=94920074

2010년 11월 21일 일요일

Windows사의 역사

Windows의 역사
이번 11단원에서 과제를 해서 내야 된다는 생각에 매우 머리가 복잡했다.  일단, 11단원에 Disk Scheduling directory와 같은 여러 가지 다른 내용이 있었다.  하지만,  이중에서 내가 가장 관심이 간 것은 다름이 아닌 Directory에 대해서 설명설 할 때 Windows Unix 시스템과 비교하던 장면이었다.  이때 머리속에 Windows Unix를 기본으로 하여서 짠것이라는 소리였다.(이게 거짓말일수도 있고…)  여튼! 그래서 이번에 Windows가 어떻게 짜여져 있고 역사가 어떻게 되는지 한번 알아볼려고 한다!

1985 11-Windows 1.0

Microsoft사의 첫 작품이다.  이때는 DOS의 형태로 나오고 제한적인 멀티테스킹과 마우스를 지원하며 프로그램 기능도 부족해서 인기가 별로 없었다.

1987 11- Window 2.0

이때부터 겹쳐지는 창과 아이콘이 생겼다고 나왔다.  신기한 점은 바로 이때부터 워드와 엑셀이 있었다는 것이다.

위의 그림에서도 볼 수 있듯이 약간의 비쥬얼이 들어갔다.

1990- Windows 3.0

이때부터 멀티 태스킹이 많이 발전 되었다.  이때 6개월 만에 2백만부가 팔릴 정도의 큰 성과를 거두면서 이때부터 본격적인 MS MAC의 본격적인 경쟁이 시작했다고 한다.

위에서 볼수 있듯이 매우 그래픽인 요소들이 향상 되었다.

1992-Windows 3.1

이때부터 True Type Font를 지원하고 멀티미디어를 지원하기 시작했다.  하지만, 가장 큰 특이한 점은 이때부터 Windows사의 상징인 펄럭거리는 모양이 나왔다는 것이다.

1995 8-Windows 95


Windows 95는 사용자 인턴페이스가 대폭 변경이 되었으며, 멀티 태스킹 기능이 대폭 향상이 되었다.  원래 Windows 32비트 운영체제였지만, 이전의 모델들과의 호환성을 유지하기 위해서 16비트 코드를 수용하였지만, 수용함으로 인해 성능과 안정성이 저하 되었다. 

1996-Windows NT 4.0

Windows NT(New Technology) 기술은 기업을 타깃으로 한 제품으로 Windows 95보다 안정적으로 돌아가서 블루스크린을 자주 보지 않게 되었다.

1998 6- Windows 98

이전 버전과 매우 유사하지만 인터넷 익스플로러 4.0을 탑재함으로 인해 덩치가 매우 커져서 Windows 95보다 느리다는 지적을 많이 받은 작품이다.

위의 그림과 같이 전 버전과 그래픽 요소가 많이 바뀌지는 않았다

2000 2- Windows 2000

Windows 2000은 기업 데스크톱 사용자 혹은 소프트웨어 개발자를 위해 출시된 버전이였다.  이 버전은 주로 서버 용으로 구성 되어 있어서 프로페셔널, 서버, 어드밴스드 서버, 데이터 서버등 4가지 버전이 있다.  가장 큰 장점은 바로 이 버전이 XP의 초석이 된다는 것이다.

2000 9- Windows ME

Windows 98의 공식 후속작이다.  시스템 복원 등과 같은 새로운 기술을 추가했지만, 출시한지 별로 지나지 않아서 Windows XP가 출시 되어 제조사들의 지원이 제대로 이루어지지 않아서 호환성이 부족했다.  거기다가 메모리 관리가 미흡하여 리소스 부족이 자주 발생하는 문제까지 가지고 있다.  Windows 시리즈 중에 최악이라는 소리도 있다.

2001 10- Windows XP

우리가 흔히 아는 Windows XP, 이는 Windows NT 커널 기반으로 제작 되었으며 Windows 95 후계작으로 사용자 편의성을 살렸다.  XP는 크게 홈 에디션프로페셔널로 나뉘어서 출시 되었지만 큰 차이는 없다.  2007년 까지 새로운 버전이 나오지 않으면서 장수를 하게됩니다.  또한, 2007년에 나온 Vista가 무겁고 불편한 UAC 그리고 호환성 때문에 XP에 머무는 사람이 많았다.  또한, 넷북등 소형화 기기에 바람이 불면서 Vista 보다 사양이 낮은 XP가 더 적합하여 장수를 하게 되는 버전이였다.

2007 1- Windows Vista

위에서 말했듯이 Windows XP보다 UAV(보안)이 강화 되었으며 에어로 기능으로 화려한 인터페이스를 가지고 있다.  하지만, 화려한 인터페이스등과 같은 기능 때문에 사양이 너무 높으며, 불편한 UAC기능, 호환성이 떨어지는 이유로 욕을 먹게 된다.

2009 10- Windows 7

가장 최근에 나온 뜨끈뜨근 따끈따끈 후끈후끈 한 운영체제이다.  런칭쇼에서도 말했듯이 Vista가 헬스 클럽에 갔다온 버전이라고 할 만큼 UAC 기능이 간소화 되었지만, 화려한 인터페이스를 그대로 유지하면서, 다양한 기능을 추가하였다.  Windows 7은 지금 나오는 스마트 폰에서도 출시된 모델이 손꼽을수 있는 정도로 매우 기대되며 무한한 가능성을 가진 버전이다.


이제는 마무리를 지어야 되겠지만, 그냥 Windows 7를 쓰면서 느낀 점이지만 Windows 7이 짱이라는 소리를 하면서 끝내겠다.









2010년 11월 14일 일요일

Microsoft Mobile OS

Operating System.

         이번에 과제를 하면서 요즘 유행하는 스마트 폰에 쓰이는 모바일 운영체제에 관해 쓸라고 하였습니다.  하지만, 장정수 선배님께서 이미 종류별로 설명을 해주신 관계로 최근에 소개된 Mobile Window에 관하여 구체적으로 설명을 하도록 하겠습니다.  하지만, 이전에 간략하게 모바일 운영체제에 과해 설명을 하도록 하겠습니다. 
         모바일 운영체제에는 크게 4개가 있습니다.
1.    구글이 개발하고 보급한 Android OS
2.    애플의 제품에 쓰이는 iOS
3.    비즈니스, 전문적으로만 사용 되는 블랙베리 OS
4.    삼성이 직접 개발한 바다 OS(아직 그렇게 유명하지는 않지요.)
5.    Microsoft 사에서 최근에 발표한 혁명적인 MS Windows Mobile OS

여기서 제가 구체적으로 MS Windows Mobile OS에 관해서 설명을 드리겠습니다.  일단, 말 그대로 Microsoft사가 직접 개발한 만큼 막강한 자원을 바탕으로 나온 결과물 인만큼 새로운 시도를 많이 하였습니다.


    MS사는 바르셀로나에서 열린 MWC 2010에서 첫번째 윈도우 7 기반 모바일의 OS를 발표했습니다.  당시 스마트 폰 하면 당연히 iPhone이나 Nokia등을 생각해내던 상황에서 MS사는 완전히 새로운 시도를 하였습니다.  현재에도 편히 나오는 대부분 스마트폰의 UI와는 달리 Microsoft사는 이러한 식상함을 과감히 버렸다는 것입니다.  다시 말하자면, 전통적인 스마트폰 특유의 아이콘의 배열도 사라졌다는 말입니다.  이번에 Microsoft사는 Social Network을 매우 중요시 하였습니다.  Window Live facebook과 같이 Social Network가 연동이 이루어지게 한 것이 윈도우폰의 주된 장점중 하나입니다.  뭐니뭐니 해도 가장 중요한 것은 바로 Microsoft사가 만든 OS인 만큼 모바일에서도 MS Office와 같이 연동이 되는 것을 고려한다면 한국인의 업무환경에 가장 적합한 OS 이지 않을까 합니다.  (iPhone아니 Android에는 MS Office와 연동이 안됩니다)



    하지만, Microsoft사에서 게임을 XBOX완 연동하여서 개발하였습니다.  이는 XBOX가 한국에서 그리 멀리 쓰이지 않는 다는 점입니다.  이와 더불어 전에 C/C++/C#등으로 어플리케이션을 제작하던 것이 Microsoft사에서 만든 SilverLight로만 어플이 가능하게 하였습니다. 
    이와 반대로 좋은 점도 매우 많습니다.  처음으로 윈도우 7 OS를 기반으로 출시한 Zune HD 폰에는 최대 4개 까지 동시에 터치가 가능한 기능도 들어있습니다.  이뿐 만이 아니라 가장 좋은 점은 최신 CPU에 적극적인 지원이 있다는 점입니다.  예를 들면, Multi Core-CPU 지원, CPU/Memory/Process 자원 사용률 조정, 프로세스가 사용하는 자원의 할당 및 누수현상 확인 같은 것도 가능해졌다는 것입니다. 
    이외에도 MS 사에 엄청난 기능들이 있지만 제가 1학년인 상황을 비추어 보아 이 정도가 제 한계일거 같습니다.