L4 - TCP Header 구조
TCP는 L4 프로토콜의 일종이며. Transmission Control Protocol 의 약자이다.
전송을 제어 하는 기능을 가진 L4 통신방식이다.
L4 얘기를 한다고 하면 TCP 얘기를 많이 할것이다. 그만큼 중요하다.
통신방식을 쉽게 빠르게 이해하기를 원한다면
가장 첫번째로 보아야할 것은 바로 통신에 사용되는 Header이다.
위의 그림이 뭘 헤더라고 부르냐? 했을때 가장 간단하게 표현한 그림인듯 하다.
친구한테 메일로 HELLO라고 보낸다고 하자.
실제로는 HELLO말고도 통신에 필요한 정보들이 필요하다.
이것도 주고 받아야 컴퓨터 끼리 통신을 잘한다.
그렇다 Header, Payload는 랜선 따라서 같이가는 동반자다.
컴퓨터 네트워크 상의 통신에 사용되는 여러가지 데이터는 Header다. HELLO는 Payload다.
헤더가 뭔지 모른다면 아래를 읽어보면 이해가 될것이다.
https://so-what-93.tistory.com/38
TCP Header는 기본적으로 20 바이트이다.
기본적으로 20 바이트라는 이야기는 TCP 헤더크기가 20+@ 라는 이야기다.
또한, 옵션을 제외하더라도 TCP를 사용해 통신하기 위해서는
TCP 헤더로 적어도 20바이트는 반드시 필요하다는 것을 의미하기도 한다.
Options and Padding은 가변길이 이다. 0바이트가 될수도 있다는 이야기이다.
그 위를 보면 총 20바이트의 데이터가 차곡차곡 자리잡고 있다.
이 친구들은 TCP 통신시 반드시 필요하다.
이제 20 + @ 바이트가 필요하다고 이야기 했던 것이 이해가 될것이다.
용도를 차례대로 나열하면 다음과 같다.
(0 ~ 15) 16bit 즉 2byte 로, Source Port Address 이다. 발신지 포트 번호이다.
(16~31) 16bit 즉 2byte 로, Destination Port Address 이다. 수신지 포트 번호이다.
(32 ~ 63) 32bit 즉 4byte 로, Sequence Number, 흔히 Seq라고 부르는 정수가 들어간다.
패킷에 실린 데이터가 '전체 데이터에서의 보면 몇번째 데이터부터인지' 나타낸다.
쉬운 이해를 위해 다음의 예시를 보자.
송신지 측에서 어떤 데이터 24바이트를 보낸다고 가정하자.그런데 어떠한 이유에 의해서 3번에 걸쳐 나눠 보내게 되었다.이때 TCP 헤더에 들어가는 SEQ 는 다음과 같이 나타난다.
(64 ~ 95) 32bit 즉 4byte 로, Acknowledgement Number, 흔히 Ack 라고 부르는 정수가 들어간다.
수신측에서 '몇번째 데이터 까지 잘 받았다'라고 통보하는 역할을 한다.
위의 그림에서 그러면 수신측은 Ack를 어떻게 보냈고, 송신측은 Seq를 어떻게 세팅할까?
Source 측에서는 Destination 으로부터의 Ack가 몇이 오는지를 예의 주시한다.
TCP 가 왜 신뢰성이 있는 L4 프로토콜이라고 불리는지가 약간은 이해가 될것이다.
위의 과정에서 보이듯이 Seq와 Ack를 주고받는 과정으로 끊임없이
'어디까지 받았냐?' '~까지 받음.' '~부터 보낸다' 의 의사소통을 수행하기 때문이다.
위의 경우는 어떠한가? 12바이트, 7바이트, 5바이트 씩 보냈고 전부다 잘 받았다는
통보가 수신지 측에서 돌아왔다.
그림대로 보내면 보내는대로 다 도착한다고 생각할 수 있지만, 그렇지 않은 경우
또한 언젠가는 존재한다.
Seq와 Ack의 용도가 어디까지나 '확인의 용도' 임을 기억하자.
다음의 그림을 보면 무슨 말을 하는지 조금 이해가 될것이다.
TCP 의 핵심이 Seq와 Ack 이다.
핑퐁, 즉 탁구와 같이 위와 같이 수신측에서 Ack를 보낼때까지 기다린다라고 생각할 수 있지만
TCP에서 위 과정은 사실 슬라이딩 윈도우 방식으로 동작한다.
설명이 길어지니 우선은 '어디까지 받았냐?' '~까지 받음.' '~부터 보낸다' 인 것을 확실히 기억해 두면 된다.
(96 ~ 99) 4bit , HLEN은 Header Length를 나타낸다.
즉 헤더자체가 몇바이트이고,실제로 알맹이인 데이터(Payload라고 부름)가 어디서부터 시작되는지 나타낸다.
(100 ~ 105) 6bit 예약 공간... 인데, 현재는 사용되지 않는 공간이다.
(106 ~ 111) 6bit 제어 플래그 세팅에 사용되는 공간이다. 용도는 차례대로 다음과 같다.
URG : 긴급포인터가 유효한지 아닌지 를 플래그로 세팅.
ACK : 수신데이터 필드(위의 Ack가 들어가는 4byte) 필드가 유효함을 알린다.
즉 '헤더내의 Ack 필드에 Ack 값이 세팅됨' 을 알리는 용도의 플래그.
PSH : flush 동작이 수행되고, 이로 인해 이 패킷이 송신되었음을 알리는 플래그.
RST : 접속에 문제가 생겼다. 한마디로 '내 쪽에서 뭔가 문제가 생겼으니 나는 통신 못한다. 너도 끊어라. 안녕.' 라는 의미의 플래그.
SYN : Source와 Destination 측이 Seq를 확인하고 세팅하는 과정인데...
3Way Handshake에서 SYN 보낼때 이게 세팅되는 거다.
'Seq를 이걸로 세팅하자. 이제 부터 보내는건 일련번호가 이렇게 붙는다?' 'Okay'
FIN : 4Way Handshake 에서 FIN 이 FIN이다. 이 FIN 비트가 세팅된패킷을 받았다면, '상대방 측에서 연결 종료를 원함' 으로 이해하면 된다.
RST와는 무엇이 다르냐.
RST는 '나는 끊을테니 이제 통신 못함. 그런줄 알아라' 이면,
FIN은 '연결 종료 하려합니다. 절차대로 진행합시다.' 이다.
(112 ~ 127) 16bit 즉 2byte로, 윈도우 사이즈가 들어간다.
이 윈도우 사이즈는 TCP 데이터 통신 방식에 대해 더 설명할 기회에 슬라이딩 윈도우 방식과 함께 따로 글을 포스팅하기로한다.우선은 Dest 측에서 Source 측으로
'이만큼은 한번에 보내도 된다' 라는 사이즈를 통보하는데,
이를 윈도우 사이즈라고 부른다고만 생각하자.
(128 ~ 143) 16bit 즉 2byte로, 오류 체크를 위한 체크섬이 들어가는 공간이다.
(144 ~ 159) 16bit 즉 2byte로, 긴급 포인터가 들어가는 공간이다.
'네트워크 및 데이터통신 이론' 카테고리의 다른 글
L3 - ARP(Address Resolution Protocol) (0) | 2021.12.30 |
---|---|
L4 - TCP Sliding Window (0) | 2021.12.29 |
L4 - TCP의 Connect 과정시 3Way-Hand Shake (0) | 2021.12.23 |
네트워크/데이터 통신 기본 이론 - Socket (0) | 2021.12.22 |
네트워크/데이터 통신 기본 이론 - OSI 7 계층 , TCP/IP 4 계층 (0) | 2021.12.22 |
댓글
이 글 공유하기
다른 글
-
L3 - ARP(Address Resolution Protocol)
L3 - ARP(Address Resolution Protocol)
2021.12.30 -
L4 - TCP Sliding Window
L4 - TCP Sliding Window
2021.12.29 -
L4 - TCP의 Connect 과정시 3Way-Hand Shake
L4 - TCP의 Connect 과정시 3Way-Hand Shake
2021.12.23 -
네트워크/데이터 통신 기본 이론 - Socket
네트워크/데이터 통신 기본 이론 - Socket
2021.12.22