TCP/IP는 현재 가장 많이 사용하는 통신 프로토콜로, TCP(Transmission Control Protocol)와 IP는 구별해서 이야기할 수 있다. TCP에서는 신뢰성 보장과 흐름 제어(Flow Control)를 하며 여기에서 ‘3-Way Handshaking’이라는 과정을 거쳐 연결된다. 혼잡 제어(Congestion Control)로 네트워크 상황에 따라 속도를 조절할 수 있는 기능이 추가되어 한정된 네트워크 대역폭에서 많은 사용자가 동시에 통신할 수 있도록 해 준다
TCP 3-Way Handshaking
TCP 프로토콜은 신뢰성을 보장하기 위해서 연결 전에 3번의 확인 절차를 거치는데, 이 절차를 ‘3- Way Handshaking’이라고 한다. (TCP를 사용한 데이터 송수신 간의 정확한 전송을 보장하기 위한 세션 수립 과정)
3-Way Handshaking 과정은 클라이언트에서 연결하고자 하는 서버로 SYN 패킷을 전송하 면 클라이언트는 SYN-SENT 상태가 된다. 서버는 어떤 서비스에 대한 포트가 열려 있지 않은 경 우 CLOSED 상태이므로 클라이언트의 응답을 받기 위해서 통신 서비스를 하려는 서비스 포트를 LISTEN 상태로 만들어 클라이언트의 SYN 패킷을 받아 준다. 클라이언트가 보낸 SYN 패킷의 응 답으로 SYN+ACK 패킷을 보낸 후 서버는 SYN-RECEIVED 상태로 설정된다. SYN+ACK 패킷 을 받은 클라이언트는 ESTABLISHED 상태로 변경되어 연결된 것을 확인한다.
이후 클라이언트는 서버로 SYN에 대한 응답으로 ACK 패킷을 보내면 서버에서는 ACK 패킷을 받 고 해당 클라이언트에 포트를 ESTABLISHED 상태로 변경하여 서로 간의 신뢰성을 확보하게 된다. 이외에도 TCP는 [표 2-5]와 같은 다양한 상태 정보로 통신 상태를 확인한다.
TCP 4-Way Handshaking
TCP를 사용한 데이터 송수신 간의 정확한 전송을 보장하기 위한 세션 종료 과정
그림의 4 way handshake 는 아래와 같은 방법으로 이루어진다.
최초에는 서로 통신 상태이기 때문에 양쪽이 ESTABLISHED 상태이다.
1. 통신을 종료하고자 하는 Client가 서버에게 FIN 패킷을 보내고 자신은 FIN_WAIT_1 상태로 대기한다.
2. FIN 패킷을 받은 서버는 해당 포트를 CLOSE_WAIT으로 바꾸고 잘 받았다는 ACK 를 Client에게 전하고 ACK를 받은 Client는 상태를 FIN_WAIT_2로 변경한다.
그와 동시에 Server에서는 해당 포트에 연결되어 있는 Application에게 Close()를 요청한다.
3. Close() 요청을 받은 Application은 종료 프로세스를 진행시켜 최종적으로 close()가 되고 server는 FIN 패킷을 Client에게 전송 후 자신은 LAST_ACK 로 상태를 바꾼다.
4. FIN_WAIT_2 에서 Server가 연결을 종료했다는 신호를 기다리다가 FIN 을 받으면 받았다는 ACK를 Server에 전송하고 자신은 TIME_WAIT 으로 상태를 바꾼다. (TIME_WAIT 에서 일정 시간이 지나면 CLOSED 되게 된다.)
최종 ACK를 받은 서버는 자신의 포트도 CLOSED로 닫게 된다.
현재 포트의 상태는 netstat 명령어를 통해 확인할 수 있다.
참고문헌
정상근(맥스), 『네트워크 보안 시스템 구축과 보안 관제』, 한빛미디어, 2016, 33쪽
'네트워크' 카테고리의 다른 글
ARP / RARP (0) | 2020.02.14 |
---|---|
IP (0) | 2020.02.14 |
TCP/IP (0) | 2020.02.14 |
OSI 7 계층 (0) | 2020.02.14 |
네트워크망(LAN, MAN, WAN) (0) | 2020.02.14 |