[TCP] 4-way Handshake란? / 와이어샤크, tcpdump 확인

제목 사진

4-way Handshake란?

 

TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결을 해제(세션 종료)하는데 필요한 프로세스입니다.

 

 

TCP FLAG

 

FLAG 설명
SYN(연결 요청 플래그) - TCP에서 세션을 성립할 때 가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 
  세션을 연결하는 데에 사용되며 초기에 시퀀스 번호를 보내게 된다.
ACK(응답플래그) - 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷
- 다른 플래그와 같이 출력되는 경우도 있습니다.

- 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은  ACK를 보냅니다.(일반적으로 +1 하여 보냄) 
- ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 
재전송 하거나 다음 패킷을 전송한다.
FIN(연결종료 플래그) - 세션 연결을 종료시킬 때 사용되며 더이상 전송할 데이터가 없음을 나타낸다.
RST(연결 재설정 플래그) - 재설정(Reset)을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업이다. 
- 비 정상적인 세션 연결 끊기에 해당한다. 
- 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다
PSH(밀어넣기) - TELNET과 같은 상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요한데, 이 때 받은 데이터를 즉시 목적지인 OSI 7 Layer 의 Application 계층으로 전송하도록 하는 FLAG. 
- 대화형 트랙픽에 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달한다. 
- 데이터는 버퍼링 없이 바로 위 계층이 아닌 7 계층의 응용프로그램으로 바로 전달한다.
URG(긴급 데이터 플래그) - Urgent pointer 유효한 것인지를 나타낸다. 
- Urgent pointer란 전송하는 데이터 중에서 긴급히 전당해야 할 내용이 있을 경우에 사용한다. 
- 긴급한 데이터는 다른 데이터에 비해 우선순위가 높아야 한다. 
-  EX) ping 명령어 실행 도중 Ctrl+c 입력

 

 

 

4-way Handshake 프로세스

 

4 way handshake process

 

1) 클라이언트에서 서버와의 연결 종료를 위해 서버에 FIN 패킷을 보내고 FIN_WAIT1 상태가 됩니다.

(반대로 서버에서 먼저 끊을 수 도 있습니다.)

2) 서버는 클라이언트로부터 FIN을 받고 응답 패킷 ACK을 보냅니다. 

상태는 CLOSE_WAIT가 됩니다

3) 서버가 통신이 끝나면, 즉 연결을 종료할 준비가 되면 클라이언트에게 FIN패킷을 보내고 LAST_WAIT 상태가 됩니다  

4) 클라이언트는 확인 패킷 ACK을 보내고 TIME_WAIT 상태가 됩니다.

 

위 과정을 통해 서버와 클라이언트는 안전하게 세션을 종료하게 됩니다.

상태 설명
FIN_WAIT1  Close 를 호출한 측의 소켓이 진입하는 상태, FIN 보냄 
CLOSE_WAIT  Close를 받으면 CLOSE_WAIT 상태로 진입함, Ack 보냄 
FIN_WAIT2  Ack 신호를 받은 소켓은  FIN_WAIT1 > FIN_WAIT2로 상태 변경됨 
LAST_WAIT  Close 호출 후 진입하는 상태, FIN 보냄 
TIME_WAIT Close를 받으면 진입하는 상태, ACK 보냄 
CLOSED   연결 종료!!!

 

 

 

tcpdump로 4-way Handshake 확인

 

test-1 서버(출발지)에서 목적지 KT DNS 서버(168.126.63.1) 53 포트 telnet 접속 후

연결 해지를 tcpdump로 덤프를 뜬 내용이다.

tcpdump에서는 ACK 플래그를 "."(점)으로 표시합니다.

서버 -> test-1 : FIN ACK

test-1 -> 서버 : FIN ACK

서버 -> test-1 : ACK

22:10:30.702306 IP kns.kornet.net.domain > test-1.54926: Flags [F.], seq 1, ack 1, win 46, ...
22:10:30.702497 IP test-1.54926 > kns.kornet.net.domain: Flags [F.], seq 1, ack 2, win 229, ...
22:10:30.706080 IP kns.kornet.net.domain > test-1.54926: Flags [.], ack 2, win 46,...

 

 

wireshark로 4-way Handshake 확인

 

192.168.210.102(출발지)에서 목적지 KT DNS 서버(168.126.63.1) 53 포트 접속 후 연결을 끊은 내용입니다.

아래 내용을 보면 서버에서 먼저 FIN을 날려 연결을 끊으려는 하는 모습이네요 

서버 -> 클라이언트 : FIN ACK

클라이언트 -> 서버 : ACK

클라이언트-> 서버 : FIN ACK

서버 -> 클라이언트 : ACK

 

 

4 way handshake wireshark

 

 

참고.

 

3-way Handshake에 대해서는 아래 링크를 참고하세요

sh-safer.tistory.com/142

 

[TCP] 3-way Handshake란? / 와이어샤크, tcpdump 확인

3-way Handshake란? TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결하는데 필요한 프로세스입니다. 데이터를 주고받기 전에 서버와 클라이언트가 확인 패킷을 3단계로 교환하여 연결을 맺습니다

sh-safer.tistory.com

 

출처 : pmj0403.tistory.com/entry/TCP-flagURG-ACK-PSH-RST-SYN-FIN

댓글

Designed by JB FACTORY

loading