-목차-1. 3 Way Handshake(연결 성립, Connection Established)
1. 3 Way Handshake(연결 성립, Connection Established)
- 클라이언트는 서버에 접속을 요청하는 SYN M 패킷을 보낸다.
- 서버는 클라이언트 요청인 SYN M 을 받고 클라이언트에 요청을 수락한다는 ACK M+1과 SYN N이 설정한 패킷을 전송한다.
- 클라이언트는 서버의 수락 응답인 ACK M+1과 SYN N 패킷을 받고 ACK N+1을 서버로 보내면 연결이 성립한다.
2. 4 Way Handshake (연결 해제, Connectino Termination)
- 클라이언트는 서버에게 연결을 종료한다는 FIN 패킷을 보낸다.
- 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)
- 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 패킷을 클라이언트에게 보낸다.
- 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.)
- 서버는 ACK를 받은 이후 소켓을 닫는다 (Closed)
- TIME_WAIT 시간이 끝나면 클라이언트도 닫는다 (Closed)
3. SYN Packet, ACK Packet, FIN Packet
먼저 각 SYN, ACK, FIN의 약자는 아래와 같다.
SYN : Synchornization
ACK : Acknowledgement
FIN : Finish
위 그림은 TCP Header를 나타낸다. TCP Header에는 Code Bit(Flag Bit)이라는 부분이 존재한다. 이 부분은 총 6Bit로 이루어져 있으며 각각 한 Bit가 의미를 가지고 있다. URG-ACK-PSH-RST-SYN-FIN 순서로 되어 있으며 해당 위치의 Bit가 1이면 해당 패킷이 어떠한 내용을 담고 있는 패킷인지를 나타낸다. SYN Packet이면 Code Bit가 000010이 되는 것이고, ACK Packet이면 010000이 되는것이다.
각 Flag Bit에 대한 의미는 아래와 같다.
- SYN( synchronization ) : 연결 요청 플래그, 통신 시작 시 세션을 연결하기 위한 플래그
- ACK( Acknowledgement ) : 응답 플래그, 송신측 으로부터 패킷을 잘 받았다는 걸 알려주기 위한 플래그
- FIN( Finish ) : 연결 종료 플래그, 더 이상 전송할 데이터가 없고 세션 연결을 종료시키겠다는 플래그
- RST( Reset ) : 연결 재설정 플래그, 비정상적인 세션을 끊기위해 연결을 재설정 하는 과정
- PSH( Push ) : 넣기 플래그, 버퍼가 채워지기를 기다리지 않고 받는 즉시 전달한다. 버퍼링 없이 7 Layer Application Layer의 응용프로그램에게 바로 전달하는 플래그.
- URG( Urgent ) : 긴급 데이터 플래그, 긴급한 데이터의 우선순위를 다른 데이터의 우선순위를 높여 긴급하게 전달하는 플래그
참고 자료
https://hongpossible.tistory.com/entry/TCP-Flag%EB%9E%80
https://asfirstalways.tistory.com/356
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/TCP
'네트워크' 카테고리의 다른 글
TCP와 UDP의 비교 (0) | 2022.02.14 |
---|---|
OSI 7계층, TCP/IP 4계층 (0) | 2022.02.10 |
HTTP의 GET과 POST (0) | 2022.01.07 |
댓글