TCP Header
아래 그림은 TCP 헤더의 구조이다.
빨간 네모박스는 TCP-Flag에 해당한다.
FLAG | 설명 |
SYN(연결 요청 플래그) | - TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷이다. 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 것에 사용되며, 초기에 시퀀스 번호를 보냄. |
ACK(응답 플래그) | - 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷. - ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송하거나 다음 패킷을 전송한다. - 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK을 보낸다. (일반적으로 +1 하여 보냄) |
FIN(연결종료 플래그) | - 세션 연결을 종료 시킬 때 사용되며, 더이상 전송할 데이터가 없음ㅇ르 나타낸다. |
RST(연결 재설정 플래그) | - 재설정(Reset) 하는 과정이며, 양방향에서 동시에 일어나는 중단 작업이다. - 비정상적인 세션 연결 끊기에 해당한다. |
PSH(밀어넣기) | - TELNET과 같은 상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요하여 데이터를 즉시 OSI 7계층으로 전송하도록 하는 FLAG - 데이터는 버퍼링 없이 바로 위 계층이 아닌 7 계층의 응용프로그램으로 바로 전달한다. |
URG(긴급데이터플래그) | - Urgent Pointer란 전송하는 데이터 중에서 긴급히 처리해야할 내용이 있을 경우에 사용한다. - Urgent Pointer가 유효한 것인지를 나타낸다. Ex) ping 명령어 실행 도중 CTRL + C 입력 |
3 Way HandShaking
TCP는 장치들 사이에 논리적인 접속을 성립(Establish)하기 위해서 핸드쉐이크 방법을 사용한다.
정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
Client -> Server : TCP SYN
Server -> Client : TCP SYN,ACK
Client -> Server : TCP ACK
SYN = synchronize sequence numbers (연결 요청 플래그)
ACK = acknowledgement (응답 플래그)
[Step 1]
클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다.
클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 되고, 서버는 Wait For Client 상태이다.
[Step 2]
SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK SYN flag가 설정된 패킷을 발송하고
클라이언트가 다시 ACK으로 응답하기를 기다린다. 서버는 SYN_RECEIVED 상태가 된다.
[Step 3]
클라이언트는 서버에 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다.
이때의 서버 상태는 ESTABLISHED 이다.
4 Way HandShaking
3 Way HandShaking은 TCP의 연결을 초기화 할 때 사용한다면,
4 Way HandShaking은 세션을 종료하기 위해 수행되는 절차이다.
* 흔히 불리는 Graceful Shutdown (우아한 종료)의 과정이다.
Client -> Server : TCP FIN
Server -> Client : TCP ACK
Server -> Client : TCP FIN
Client -> Server : TCP ACK
FIN = Finish (연결 종료 플래그)
[Step 1]
클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다. 클라이언트는 FIN-WAIT 상태가 된다.
[Step 2]
서버는 FIN 플래그를 받고, 확인 메세지 ACK을 보내고 자신의 통신이 끝날때까지 기다리는 CLOSE_WAIT 상태가 된다.
[Step 3]
서버가 연결을 종료할 준비가 되면 클라이언트에게 FIN 플래그를 전송한다.
서버의 상태는 LAST-ACK 상태가 된다.
[Step 4]
클라이언트가 해지 준비가 되었다는 ACK을 확인했다는 메세지를 보낸다.
클라이언트 상태는 FIN-WAIT -> TIME-WAIT 으로 변경된다.
TIME-WAIT 상태란 일정시간(디폴트 : 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거친다.
일정 시간이 지나면 세선을 만료하고 연결을 종료시키며 CLOSED 상태가 된다.
'Tech Blog > TCP-IP' 카테고리의 다른 글
미디어 프로토콜 정리 글 (0) | 2023.02.08 |
---|---|
IPC란 ? (Inter-Process Communication) (0) | 2023.01.30 |
TCP IP의 I/O 모델 (Linux & Windows) (0) | 2023.01.29 |
빅엔디안과 리틀엔디안 (0) | 2023.01.27 |
멀티캐스팅과 브로드캐스팅 (UDP) (+ 서브넷팅) (0) | 2023.01.26 |