TCP(Transmission Control Protocol)
TCP는 연결 지향 서비스 형태로, 대표적인 통신 프로토콜 중 하나다.
근거리 통신망(LAN), 인트라넷, 인터넷 등에서 신뢰성있는 연결을 돕는다.
앞서 OSI 참조모델 포스팅에서도 소개했듯이,
전송계층간 데이터를 전송할 땐 기존의 데이터 앞에 헤더를 추가하여 캡슐화하게 된다.
상위 계층에서 하위계층으로 전송할 때 단위를 PDU(Protocol Data Unit)라 하며,
전송계층에서의 TCP가 가진 PDU는 세그먼트(Segment)다.
헤더(Header)
(이미지 출처 : mars.netanya.ac.il)
TCP 세그먼트만 떼어서 헤더를 살펴보면 위와 같은 모습이다.
명칭 | 크기(Bit) | 내용 | |
Source port | 16 | 송신 포트값이 들어있다. | |
Destination port | 16 | 수신 포트값이 들어있다. | |
Sequence number | 32 | 송신 데이터에 순서를 부여한다. | |
Acknowledgement number | 32 | 수신 데이터에 순서를 부여하며, Sequence number에 대한 응답 값에 해당한다. | |
TCP Header length (Data Offset) |
4 | TCP 헤더의 전체 길이를 담아 워드(4Byte)단위로 표현한다. 최소 20byte에서 최대 60byte까지 가능하다. | |
Unused (Reserved) |
3~6 | 미래의 통신이 어찌될지 몰라서 남겨둔 예비필드이며, 0으로 세팅하게 된다. | |
Flags (Control Bit) |
URG(Urgent) | 1 | Urgent pointer 값의 유효성을 나타낸다. |
ACK(Acknowledgement) | 1 | Acknowledgement 값의 유효성을 나타낸다. | |
PSH(Push) | 1 | 버퍼링된 데이터를 상위 계층에 즉시 전달할 것을 요청한다. | |
RST(Reset) | 1 | 연결을 초기화한다. | |
SYN(Synchronize) | 1 | 동기화를 위한 번호이며, 양측 최초 패킷에만 값이 부여된다. | |
FIN(Finish) | 1 | 전송을 마친다. | |
CWR(Congestion Window Reduced) | 0~1 | 혼잡제어를 위해 송신측에서 윈도우 크기를 줄인다. | |
ECE(Explicit Congesion Notification) | 0~1 | 혼잡이 발생하면 수신자가 송신측에게 알린다. | |
NS(ECN-nonce) | 0~1 | 은폐보호를 위해 추가된 비트다. | |
Window size | 16 | 수신자의 버퍼 크기를 지속적으로 보고받아 흐름을 제어할 목적으로 사용한다. | |
Check sum | 16 | 오류를 체크하기 위한 필드영역이다. (가상헤더 + 실제헤더 + 데이터 + Padding) | |
Urgent pointer | 16 | URG 값이 있을 경우, 요청한 부분까지 긴급한 데이터 처리를 위해 마지막 바이트에 대한 일련번호를 갖는다. | |
Options | 0~320 | 다양한 TCP 옵션을 사용할 때 추가적으로 사용한다. |
표의 Flags 항목을 보면 크게 3부분으로 나눈 것을 볼 수 있다.
두번째 블록은 TCP 연결설정 및 종료시 주체적으로 사용되는 플래그이며,
세번째 블록은 때에 따라 사용되기도 하고, 아예 헤더에서 제외되기도 한다.
세번째 블록에 대해서는 좀더 공부해봐야 할 것 같다.
차후, 확실해지면 수정해보겠다.
UDP(User Datagram Protocol)
비연결형 서비스로, TCP와 대비되는 프로토콜이다.
위 이미지와 같이, 무작정 데이터를 뿌리고 보는 성격이 있다.
즉, TCP와 달리 가상회선 설정없이 데이터를 전송하기때문에 수신 순서가 불규칙하거나 손실될 수 있다.
UDP 또한 TCP와 마찬가지로 OSI 참조모델의 전송계층에서 사용되며, PDU는 Datagram이다.
헤더
(이미지 출처 : 정보통신기술용어해설)
TCP에 비해 귀여운 몸집의 UDP 헤더를 볼 수 있다.
그래서 별도로 표를 그리진 않겠다.
1) 발신 포트번호(Source port) : TCP와 동일한 필드영역으로, 16bit 크기를 가진다.
2) 수신 포트번호(Destination port) : TCP와 동일한 필드 영역으로, 16bit 크기를 가진다.
3) 길이(UDP Header Length) : UDP 헤더가 붙은 패킷 전체 길이를 바이트로 담는다. 헤더만 있을 경우 최소값은 8이된다.
4) 체크섬(Check sum) : 오류를 체크하는 기능이며, TCP에서는 오류가 발견되면 재전송이 가능하지만 UDP는 그냥 알고 넘어갈 뿐이다.
마치며
TCP가 신중한 성격이라면, UDP는 쿨한 성격이다.
이처럼 어울리는 듯 어울리지 않는 TCP와 UDP는 늘 단짝처럼 붙어다닌다.
그러므로 비교하며 두 프로토콜의 차이를 알아두는 것이 도움될 것이다.
끝.
참고자료
정보통신기술용어해설 / 위키 / 지식과 생각정리 블로그
'IT > 네트워크' 카테고리의 다른 글
[네트워크] HTTP 프로토콜의 구조와 메소드 (0) | 2016.06.08 |
---|---|
[네트워크] OSI 7 계층(OSI 7 Layers)과 TCP/IP 모델 (0) | 2016.04.23 |
네트워크 :: 쿠키와 세션의 개념 (0) | 2016.03.29 |