TCP 는 장치들 사이에 논리적인 접속을 성립하기 위해 handShake 를 사용한다.
1. TCP 3-way handShake
: TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결하는데 필요한 프로세스이며, 데이터를 주고받기 전에 서버와 클라이언트가 확인 패킷을 3단계로 교환하여 연결을 맺는다.
TCP Flag
Flag | 설명 |
SYN(연결 요청 플래그) | - TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데 사용되며 초기에 시퀀스 번호를 보낸다. |
ACK(응답 플래그) | - 상대방에게 패킷을 받았다는 것을 알려주는 패킷으로 다른 플래그와 같이 출력되기도 한다. - 수신자가 송신자의 시퀀스 번호에 ACK를 보낸다. (보통 +1 하여 보냄) - ACK 응답을 통해 보낸 패킷에 대한 성공 여부를 판단하여 재전송하거나 다음 패킷을 전송한다. |
TCP의 3-way handShaking 과정
1) 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 전송한다.
이때 클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
2) 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN Flag 가 설정된 패킷을 발송한 다음,
클라이언트가 다시 ACK 로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.
3) 클라이언트가 서버에게 ACK 를 보낸 다음 연결이 이루어지고 데이터가 오가게 된다.
이때 서버는 ESTABLISHED 상태가 된다.
상태 | 설명 |
LISTEN | 포트가 열려있어 연결을 기다리고 있는 상태 |
SYS_SENT | SYN 을 보내서 연결을 요청한 상태 |
SYN_RECEIVED | SYN 요청을 받아서 SYN+ACK 로 응답했으나 ACK 는 받지 못한 상태 |
ESTABLISHED | 클라이언트와 서버가 연결된 상태 |
2. 4-way handShake
: TCP/IP 네트워크 환경에서 서버와 클라이언트 연결을 해제(세션 종료)하는데 필요한 프로세스
TCP Flag
Flag | 설명 |
FIN(연결 종료 플래그) | - 세션 연결을 종료시킬 때 사용되며 더이상 전송할 데이터가 없음을 나타낸다 |
TCP의 4-way handShaking 과정
1) 클라이언트에서 연결 종료를 위해 서버에 FIN 패킷을 보내고 FIN_WAIT1 상태가 된다. (서버에서 먼저 끊을 수도 있음)
2) 서버는 클라이언트에게 FIN 패킷을 받은 뒤 응답 패킷 ACK 를 보내고 CLOSE_WAIT 상태가 된다.
3) 서버의 통신이 끝나 연결을 종료할 준비가 되면 클라이언트에게 FIN 패킷을 보내고 LAST_WAIT 상태가 된다.
4) 클라이언트는 확인 패킷 ACK 를 보내고 TIME_WAIT 상태가 된다.
상태 | 설명 |
FIN_WAIT1 | Close 를 호출한 측의 소켓이 FIN 을 보내고 진입하는 상태 |
CLOSE_WAIT | Close 를 받으면 ACK 를 보내고 진입하는 상태 |
FIN_WAIT2 | ACK 신호를 받은 소켓은 FIN_WAIT1 -> FIN_WAIT2 상태로 변경됨 |
LAST_WAIT | Close 호출 후 FIN 을 보내고 진입하는 상태 |
TIME_WAIT | Close 를 받고 ACK 를 보낸 다음 진입하는 상태 |
CLOSED | 연결이 종료된 상태 |
'CS 지식' 카테고리의 다른 글
HTTP의 GET 과 POST (0) | 2022.11.12 |
---|---|
HTTP 와 HTTPS (0) | 2022.11.12 |
대칭키와 공개키 (0) | 2022.11.10 |
TCP와 UDP의 특징과 차이 (0) | 2022.11.04 |
OSI 7계층이란 ? (1) | 2022.11.03 |