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 상태가 된다.

+ Recent posts