-
[Network] TCP 프로토콜의 통신절차(TCP 패킷사이즈, TCP Flags, 3-way handshake, 4-way handshake)Network Basis 2021. 3. 3. 15:28
# TCP의 패킷사이즈
TCP의 패킷사이즈를 논하기 전에, TCP 패킷에 대한 정의를 한번 짚고 넘어가야한다. TCP 패킷의 정의를 내리기 위해선 네트워크에서의 계층마다의 PDU(Protocol data unit)에 대한 정의도 한번 짚고 넘어가야한다.
# TCP model Layers
The Layer 1 The Layer 2 The Layer 3 The Layer 4 (Physical Layer)
(Data Link Layer) (Network Layer) (Transport Layer) (PDU is the bit or symbol)
(PDU is the frame) (PDU is the packet or datagram) (PDU is the segment)
(e.g. TCP segment)패킷(packet)은 일반적으로 Network Layer에서의 PDU(Protocol data unit)이다. 허나 TCP는 Transport Layer에서 정의 되어 사용되는 프로토콜이며, 따라서 TCP의 패킷사이즈라 함은 TCP segment의 사이즈를 의미한다.
* MTU란 Maximum Transmission Unit의 약자이다.
* TCP의 패킷사이즈는 상황에 따라 달라진다.
* 허나 하위 계층인 Network Layer에서 사용하는 프로토콜에 따라 최대크기는 정해져 있다.
일반적으로 Ethernet 이 Network Layer 에서 주로 사용되기에, Ethernet 기준으로는 MTU는 1500 바이트이다.
여기서 IP Header(20bytes), TCP Header(20bytes) 를 제외 한다면, 순 데이터의 최대크기는 1460 바이트이다.
# TCP 패킷(세그먼트)
# TCP Flags
TCP는 3-way handshake 로 세션을 연결하여 통신을 시작하고, 4-way handshake로 세션을 종료하여 통신을 종료한다.
이러한 세션연결 해제 이외에도 데이터 전송, 거부, 세션종료 등 여러기능이 패킷의 Flag 값에 따라 달라지게 된다.
# Sequence Number
전송하는 데이터의 순서를 담음 (쪼개진 데이터들은 순서에 맞게 재배열 되어야 한다.)
# TCP basic 6 Flags
TCP 플래그의 종류 중 기본적인 6가지에 대해 정리해본다.
* SYN(Synchronization)
연결요청, 시퀀스 번호를 보낸다. (시퀀스번호를 서로 동기화한다.)
* ACK(Acknowledgement)
응답, 상대방으로부터 패킷을 받았다는 것을 증명한다.
(해당 플래그를 통해 전송성공여부를 판단하여 재전송하거나 다음 패킷을 전송)
* RST(Reset)
수신거부, 즉시 연결종료 (비정상적 세션 끊기)
* PSH(Push)
밀어넣기, 대화형 트래픽에 사용되는 플래그
(버퍼가 채워지기를 기다리지 않고 데이터를 OSI 7 Layer 의 Application 계층으로 바로 전달한다.)
* URG(Urgent)
긴급, 다른 데이터보다 우선순위로 전달한다.
* FIN(Finish)
연결 종료 요청
# 3-Way handshake
# 목적
송신자(Client)와 수신자(Server) 모두 데이터를 전송할 준비가 되었다는 것을 보장하며, 데이터 전달 시작전에 상대가 준비되었다는 것을 알 수 있게 한다.
양쪽 모두 초기 시퀀스번호를 얻을 수 있도록 한다.
# 과정
Client > Server : SYN (저 세션연결 시작할게요 서버님)
Server > Client : ACK (어 연락받았어 잘들리네) SYN (나도 연결할게)
Client > Server : ACK (넵 알겠습니당 저도 잘들려여)
https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake # 4-Way handshake
# 목적
송신자(Client)와 수신자(Server) 모두 세션을 종료함을 인지하게 한다.
세션종료를 의미하는 FIN 패킷을 서버측에서 받더라도, 패킷유실이나 라우팅지연으로 인한 재전송으로 인한 잔여데이터를 위해
Client는 서버측에서 FIN을 수신하더라도 일정시간(default 240 sec) 동안 ACK 패킷을 서버측에 보내지않고 잉여패킷을 기다린다.
(이를 TIME_WAIT라 한다.)
# 과정
Client > Server : FIN (저 이제 세션종료할게요 서버님)
Server > Client : ACK (어 연락받았어 잘들리네 잠만 기다려봐 보내라고 한거 마저 보내줄게)
Server > Client : FIN (일단 급한대로 다 보냈다. 확인하고 종료해줘)
Client > Server : ACK (아이고 감사합니다. 다 잘받았네여)
https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake 728x90'Network Basis' 카테고리의 다른 글
[Network] SOP 와 CORS Policy (0) 2021.12.01 [Network] DNS란? (0) 2021.11.03 [Network] 윈도우에서 nginx 가 실행되지 않아요! & 윈도우에서 사용 중 포트 종료시키기 (0) 2021.04.12 [Network] 네트워크 통신의 기본 구조 ( OSI 7 Layer, TCP/IP) (0) 2021.03.02 [Network] TCP/IP 기본용어 정리(IP주소, 서브넷마스크, 기본 게이트웨이, Ethernet) (0) 2020.11.19