TCP 3 way handshake
TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결하는데 필요한 프로세스
TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이
데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해
상대방 컴퓨터와 사전에 세션을 수립하는 과정 (= 전송 제어 프로토콜(TCP)에서
통신을 하는 장치간 서로 연결이 잘 되어있는지 확인하는 과정, 방법)
TCP 3 way handshake 과정
데이터를 주고받기 전에 서버와 클라이언트가 확인 패킷을 3단계로 교환하여 연결을 맺는다.
1) 클라이언트에서
서버에 SYN 패킷을 보내고
( 클라이언트 상태 : SYN_SENT로 변경 )
2) 서버는
클라이언트로부터 SYN를 받고
응답 패킷 ACK과 SYN 패킷을 보냄
( 서버 상태 : LISTEN ➡️ SYS-SENT로 변경 )
3) 클라이언트는
받은 패킷에 대한 응답으로 ACK 패킷을 서버로 보냄
( 클라이언트 상태 : ESTABLISHED )
( 서버 상태 : ESTABLISHED로 변경 )
➡️ 위 과정을 통해 서버와 클라이언트는 신뢰된 연결을 맺게 됩니다.
LISTEN : 포트가 열려있어서 연결을 기다리고 있는 상태 SYS-SENT : 연결 요청한 상태(SYN 보냄) SYN_RECEIVED : 요청을 받아서(SYN) 응답한 상태(SYN+ACK), 그러나 아직 ACK는 받지 못한 상태임 ESTABLISHED : 연결된 상태
TCP FLAG
- SYN: 연결 요청 플래그
- ACK: 응답플래그
- FIN: 연결종료 플래그
- RST: 연결 재설정 플래그
- PSH: 밀어넣기
- URG: 긴급 데이터 플래그
3-way Handshake 확인
1. 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 ➡️ 서버 : .
2. wireshark로 3-way Handshake 확인
192.168.210.102(출발지)에서
목적지 KT DNS 서버(168.126.63.1) 53 포트 telnet 접속을
wireshark로 덤프를 뜬 내용이다.
클라이언트 ➡️ 서버 : SYN
서버 ➡️ 클라이언트 : SYN, ACK
클라이언트 ➡️ 서버 : ACK
(참고)
공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.