TCP는 연결할 때 3-way handshake를 하며, 연결을 끊을 때는 4-way handshake를 진행한다. 여기서 handshake는 악수로 만나면 3번의 과정을 통해 악수를 하고 헤어질 땐 4번의 과정의 악수를 한다고 생각하면 된다.
A -> B: FIN
프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송
프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
B -> A: ACK
프로세스 B는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. (이 상태가 TIME_WAIT 상태)
수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
그리고 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다.
B -> A: FIN
프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송
A -> B: ACK
프로세스 A는 확인했다는 메시지를 전송
출처: https://gmlwjd9405.github.io/2018/09/19/tcp-connection.html
응용프로그램의 논리적인 주소라고 볼 수 있다.
포트 번호는 TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식이다. 이 중 인터넷 환경에서 많이 사용하는 응용 서비스의 할당된 포트 번호를 well-known 포트라고 하는데, 전 세계 모든 컴퓨터가 동일한 포트 번호를 사용하도록 권고되어 있다. 예를 들어 HTTP나 SMTP 같은 것들 말이다.
이러한 포트 번호는 어느 응용프로그램에서 처리할 것인지를 결정하는 데에 사용된다. 요약하자면 어느 응용프로그램이 보낸 데이터인지를 구분하기 위해 송신측 포트 번호가 사용되고 어느 응용 프로그램이 수신해야 하는지를 구분하기 위해 수신측 포트 번호가 사용된다.
그렇다. 우리는 각각의 포트에 대해 정보 및 알림을 받을 수 있고 해당 포트에 대한 연결을 관리할 수 도 있다. 따라서 PORT가 달라도 응용 프로그램이 같을 수 있다.