※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)

 

우선 TCP와 UDP의 차이부터 설명하고자 한다. 가장 큰 차이점은 뭐니뭐니해도 reliable한 프로토콜인지 unreliable한 프로토콜인지에 대한 여부이다. 왜 reliable/unreliable 개념을 만들어놨을까? 모두다 reliable하면 좋은 것 아닌가? 굳이 왜 unreliable한 것까지 만들었을까?


속도 때문이다. 아무레도 이 동네에서도 trade-off는 발생하기 마련인가보다. 여러분은 여러분들이 모르면서도 UDP를 사용하고 있다. 동영상이나 음악 등을 웹사이트로부터 들을 때도 UDP를 사용한다. 프레임 하나가 살짝 깨져도 전체적으로 동영상 보는데는 영향이 없다. 만일 reliable한 TCP같은 경우에는 그런 일이 없겠지만 UDP는 unreliable하기 때문에 이런 일이 발생하는 것이다.


이번 포스팅에서는 우선 TCP와 UDP의 헤더를 설명하고 그 차이를 설명할 예정이다. 그 차이를 설명하면서 왜 TCP는 reliable한 프로토콜이고 왜 UDP는 unreliable한 프로토콜인지 설명할 것이다. 우선 UDP 헤더를 먼저 보자.

해당 필드를 하나하나 설명해보자.

source port number : 출발지 포트 번호를 의미한다.

destination port number : 도착지 포트 번호를 의미한다.

 

출발지/도착지 포트 번호를 의미한다. 포트 번호란 무엇인가? 포트 번호는 각각의 프로그램에 부여된 번호이다. 하나의 컴퓨터에 몇 개의 프로그램이 동작하고 있는가? 무수히 많다. 네트워크 상에서는 한 쪽 PC의 프로그램과 다른 쪽 PC의 프로그램을 적절하게 연결해야한다. 그렇게 하기 위해서는 해당 프로그램 혹은 프로세스의 identifier 같은 것이 필요하지 않겠나? 그것이 바로 포트 번호이다.

 

여기서 잠깐, 프로그램 혹은 프로세스의 identifier 같은 것이 포트 번호라고? 그러면 PID(process ID)와는 무슨 차이인가? 이 부분은 나도 잘 모르겠다. 하지만 한 가지는 확실히 할 수 있다. 두 개는 다른 것이다. 진정한 의미에서 프로세스 identifier는 PID이다. 지금 커널 공부도 하고 있으니까 언젠가 두 개가 어떻게 다른지 확실하게 알면 포스팅할 예정이다.

 

커널에서 PID와 포트 번호가 다르다는 것에 대한 증명은 아래와 같이 할 수 있다. SSH 프로토콜에 대한 PID와 포트번호를 확인해보자.





 

위의 그림을 보면 PID를 저장하는 변수의 구조체와 포트번호를 저장하는 변수의 구조체가 완전히 다른 구조체라는 것을 알 수 있다. 또한 netstat 명령어와 ps 명령어를 통해 구별도 가능하다.

 

아무튼 source port number와 destination port number는 그런거다.

그 다음은 length 필드이다.

 

length : UDP header와 data를 합친 것의 길이이다. IP header에도 비슷한 필드가 있었던 것을 기억해보면 좋다.

 

UDP checksum : checksum... 어디에서 많이 들어봤다. IP header에서 header checksum이라는 필드가 있었다. 이 필드의 역할을 생각해보니, header가 변조되었는지 확인하는 역할이었다. 그렇다면 UDP checksum에서 checksum의 역할은 무엇일까? 데이터가 변조되었는지 확인하는 것이다. 어? 이상하다. 분명히 UDP는 unreliable 하기 때문에 데이터가 변조되는지 여부는 신경쓰지 않을 것 같은데 이런 기능이 있네? 

 

이 부분을 해명?하자면 이렇다. 이 필드는 option 이다. UDP를 사용하는 프로그램을 만들 때 설정해줄 수 있는 부분이라고 이해하면 편하다. "내가 만들 프로그램이 UDP를 사용하는데 나는 이 프로그램이 reliable했으면 좋겠다." 이렇게 생각하는 사람이 코드를 작성할 때 UDP checksum을 enable 시키겠지?

 

크~ 아주 간단하다. UDP 헤더에 대한 설명이 모두 끝났다. 이제 TCP 헤더를 보자. TCP 헤더는 조금 더 복잡하다.

 

source port number : 출발지 포트 번호

destination port number : 도착지 포트 번호

포트 번호를 알려주는 필드는 TCP든 UDP든 존재해야겠지? 당연하다 4계층의 역할을 생각해보면 당연한거다.

 

Sequence number : TCP에서 굉장히 중요한 필드이다. 중요하기 때문에 따로 설명하겠다.

Acknowledgement number : 역시나 굉장히 중요한 필드이다. 따로 설명하겠다.

 

Header length : 헤더 길이를 4비트 길이로 나타낸다.

Reserved : 아무런 용도로 사용되지 않는 필드이다. 그냥 000000으로 초기화되어있다.

 

Flags : URG, ACK, PSH, RST, SYN, FIN 등을 묶어서 Flags 필드라고 한다. 이 부분은 이전에 IP 설명할 때 포스팅했던 아래의 링크를 같이 복습하면서 보길 바란다.

http://operatingsystems.tistory.com/entry/Type-of-Service-Differentiated-Service


우선 URG 비트는 다른 패킷들보다 우선적으로 어플리케이션에 전달해달라는 의미이다. 어라? 뭔가 많이 들어본 것 같다. 이전에 IP header에서도 이러한 역할을 하는 필드가 있었다고 했던 것 같은데? 그렇다. ToS필드이다. 

IP header의 DS(Differentiated Service) 필드의 역할과 TCP header에서 Flags의 URG 비트 역할의 가장 큰 차이점은 그 비트들이 해석되는 위치이다. IP header의 DS는 각각의 라우터와 end point PC에서 해석되는 반면, TCP header의 Flags 비트는 오로지 end point PC에서만 해석된다.


ACK, PSH, RST, SYN, FIN 등등은 sliding window를 통해 혹은 그 외의 개념을 통해 설명하겠다. 이번 포스팅에서 설명하기에는 너무나도 많은 이야기가 담겨있다.


Window size : 여기서 말하는 window란 무엇일까? 위에서 sliding window를 나중에 설명하겠다고 했는데 그 window이다. 여기까지만 알고 다음에 알아보자. 


TCP checksum : TCP data를 전부 받았을 때 그 받은 데이터에 오류가 있는지를 검사하는 checksum 이다. 이 부분은 이상없이 이해할 수 있으리라 믿는다.


Options : 이 부분은 필요하다고 느껴질때까지 무기한 연기하도록 하겠다.


뭐하는거야 지금? 이렇게 말씀하실지도 모른다. 맞다!! TCP header의 대부분을 나중에 설명하겠다고 하고 넘기고 있다. 그런데 그렇게 할 수 밖에 없다. 왜냐하면 나도 스스로 준비가 제대로 안 되어있고 그 부분을 설명하려면 error control, flow control 개념을 설명해야하기 때문이다. TCP가 UDP와 가장 근본적으로 다른 것은 reliable인지 unreliable인지에 대한 여부이다. 그것을 구현한다고 생각해보라. 꽤나 복잡한 일이 될 수도 있다. 실제로 그러하다. 그것들이 모두 error control, flow control를 통해 구현되는 것이다. 이것들을 모두 설명하기 위해서는 TCP header에 많은 필드들이 필요한데 그것들이 바로 위에서 내가 설명하지 않고 넘어간 그 모든 것들이다. 따라서 다음 포스팅은 당연히 error control, flow control에 대한 내용이 되겠다.


그렇다 다음 포스팅에서는 error control, flow control를 설명하겠다. 조금은 시간이 걸릴지도 모르지만 최대한 빠르게 포스팅을 하도록 하겠다. 


p.s. 오늘 메일 보내주신 분(netxxxx..xx@naver.com) 너무 감사드려요. 앞으로도 자주 이것 저것 공유했으면 합니다 :-)

'Computer Networks' 카테고리의 다른 글

[NW] TCP Flag  (0) 2013.09.22
[NW] Flow Control and Error Control  (1) 2013.09.17
[NW] Transport Layer  (1) 2013.08.25
[NW] Type of Service (Differentiated Service)  (2) 2013.08.21
[NW] IP header  (5) 2013.07.30
Posted by 빛나유
,