본문 바로가기
[Linux]

TCP 3-way Handshake, 4-way Handshake

by SAMSUNG Metaverse-Cloud 2023. 8. 10.
728x90

 

 

 

TCP란 무엇인가?

TCP는 전송 제어 프로토콜(Transmission Control Protocol)의 줄임말로 인터넷 프로토콜의 핵심 프로토콜 중 하나로 IP와 함께 TCP/IP로 불린다. 

전송 계층의 대표적인 연결 지향 프로토콜로 하위 계층에서의 패킷 손실, 중복 오류 등의 전송 문제를 검출하고 해결한다.

IP가 패킷을 목적지까지 보내는 가장 효율적인 방법이지만 패킷의 안전성과 순서를 보장하지 못한다면 TCP가 그 역할을 이행한다. 

 

 

 

3 way handshake란 무엇인가?

TCP 통신을 통해 데이터를 전송시키기 위해 네트워크를 연결하는 과정을 의미한다. 

Client -> Server : TCP SYN

Server -> Client : TCP SYN ACK

Client -> Server : TCP ACK

SYN은 연결 설정을 의미한다. 시퀀스 넘버를 랜덤으로 설정 해 세션을 연결하는데 사용하며 초기 시퀀스 넘버를 전송한다. 연결을 하기 위해 사용한다.

ACK는 응답 확인 즉 패킷을 받았다는 것을 의미한다. ACK Num은 필드의 유효성을 나타낸다.

즉 클라이언트가 서버로의 연결 플래그를 보낸다 이 때 SYN을 보낸 후 ACK 응답을 기다리므로 SYN_SENT 상태가 된다. 

그 후 서버는 SYN을 확인한 후 SYN과 ACK를 전송시킨다. 이때 서버는 SYN_RECEIVED 상태가 된다. 

SYN과 ACK를 받은 Client는 서버에게 ACK를 보낸 후 연결 성립을 하게 된다.  연결이 성립된다면 ESTABLISHED 상태가 된다.

 

 

 

4 way HandShake란 무엇인가?

3 way HandShake가 연결을 위한 절차였다면 4way는 세션을 종료하기 위해 수행되는 절차를 의미한다. 

가장 먼저 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전달한다. 

그 후 서버는 확인 메세지를 보낸 후 통신이 끝날 때 까지 대기하는데 이 상태가 TIME_WAIT 상태이다.

세번째로 서버가 통신이 끝난다면 클라이언트에게 FIN 플래그를 보낸다.

클라이언트는 확인했다는 메세지를 보내며 마무리가 된다. 

 

 

실습

나는 VM 2대를 통해서 리눅스 서버에서 window 서버로 telnet 명령어를 통해서 원격접속 포트가 열려있는지 확인을 했다. 

tcpdump -i ens192 를 통해서 먼저 ens192 인터페이스로 들어가고 나오는 패킷을 확인 했다. 

 

 

16:29:57.684375 IP localhost.localdomain.40010 > (윈도우 서버 IP).ms-wbt-server: Flags [S], seq 1751179114, win 29200, options [mss 1460,sackOK,TS val 277801909 ecr 0,nop,wscale 7], length 0

가장 먼저 보이는 것은 리눅스 서버에서 window 서버의 ms-wbt-server(원격접속)으로 SYN 패킷을 보내며 시퀀스 번호가 랜덤으로 생성되어 있으며, win은 수신 버퍼에서 사용 가능한 바이트 수이며 뒤에 있는 options는 TCP의 옵션을 의미한다.

 

 

16:29:57.685045 IP (윈도우 IP).ms-wbt-server > localhost.localdomain.40010: Flags [S.], seq 1308495220, ack 1751179115, win 64000, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0

그 후 윈도우 서버에서 내 리눅스 서버로 [S.] 즉 SYN-ACK 패킷과 함께 ack 1308495220 이라는 승인 번호를 보내게 된다. 

 

 

16:29:57.685144 IP localhost.localdomain.40010 > (윈도우 IP).ms-wbt-server: Flags [.], ack 1, win 229, length 0

그리고 마지막으로 [.] 즉 ACK 승인이 되었음을 확인할 수 있다. 

 

 

4way HandShake는 다음 시간을 통해서 실습을 할 것이다. 

728x90

'[Linux]' 카테고리의 다른 글

Linux ) tar란 무엇인가?  (8) 2023.08.13
CentOS 7 사용자 관리  (7) 2023.08.11
[Linux] 시스템 조회 명령어  (0) 2023.02.23
[Linux] 디렉토리 구조  (0) 2023.02.15
[Linux] Web 서버와 Was 서버의 차이점  (0) 2023.01.31

댓글