[TCP] 3-way Handshake란? / 와이어샤크, tcpdump 확인
- IT/OS
- 2021. 1. 26.
3-way Handshake란?
TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결하는데 필요한 프로세스입니다.
데이터를 주고받기 전에 서버와 클라이언트가 확인 패킷을 3단계로 교환하여 연결을 맺습니다.
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 입력 |
3-way Handshake 프로세스
1) 클라이언트에서 서버에 SYN 패킷을 보내고 SYN_SENT 상태가 됩니다.
2) 서버는 클라이언트로부터 SYN를 받고 응답 패킷 ACK과 SYN 패킷을 패킷을 보냅니다.
상태는 LISTEN에서 SYS-SENT로 바뀝니다.
3) 클라이언트는 받은 패킷에 대한 응답으로 ACK 패킷을 보내고 상태는 ESTABLISHED가 됩니다.
4) 클라이언트로부터 ACK 패킷을 받은 서버는 상태가 ESTABLISHED로 변경됩니다.
위 과정을 통해 서버와 클라이언트는 신뢰된 연결을 맺게 됩니다.
상태 | 설명 |
LISTEN | 포트가 열려있어서 연결을 기다리고 있는 상태 |
SYS-SENT | 연결 요청한 상태(SYN 보냄) |
SYN_RECEIVED | 요청을 받아서(SYN) 응답한 상태(SYN+ACK), 그러나 아직 ACK는 받지 못한 상태임 |
ESTABLISHED | 연결된 상태 |
tcpdump로 3-way Handshake 확인
test-1 서버(출발지)에서 목적지 KT DNS 서버(168.126.63.1) 53 포트 telnet 접속을 tcpdump로 덤프를 뜬 내용이다.
tcpdump에서는 ACK 플래그를 "."(점)으로 표시합니다.
test-1-> 서버 : S
서버 -> test-1 : S.
test-1 -> 서버 : .
20:20:22.646395 IP test-1.60692 > kns.kornet.net.domain: Flags [S], seq 3473260904, win 29200, ...
20:20:22.649867 IP kns.kornet.net.domain > test-1.60692: Flags [S.], seq 2800645117, ack 3473260905, win 5792,...
20:20:22.649913 IP test-1.60692 > kns.kornet.net.domain: Flags [.], ack 1, win 229, ...
wireshark로 3-way Handshake 확인
192.168.210.102(출발지)에서 목적지 KT DNS 서버(168.126.63.1) 53 포트 telnet 접속을 wireshark로 덤프를 뜬 내용이다.
클라이언트 -> 서버 : SYN
서버 -> 클라이언트 : SYN, ACK
클라이언트 -> 서버 : ACK
참고.
4-way Handshake에 대해서는 아래 링크를 참고하세요
출처 : pmj0403.tistory.com/entry/TCP-flagURG-ACK-PSH-RST-SYN-FIN
'IT > OS' 카테고리의 다른 글
[TCP] 4-way Handshake란? / 와이어샤크, tcpdump 확인 (0) | 2021.01.29 |
---|---|
Cisco Packet Tracer(패킷트레이서) 설치하기 (0) | 2021.01.27 |
Netstat 명령어 사용 방법 & 상태값 정리 (0) | 2021.01.13 |
[Linux] VirtualBox로 리눅스(Ubuntu 18.04) 설치하기 (0) | 2021.01.11 |
HP Gen9 Raid - Cache Ratio 설정 변경 (0) | 2021.01.05 |