TCP
TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜이다. 신뢰성을 보장하는 연결형 서비스이다. 인터넷 상에서 데이터를 메시지의 형태(세그먼트 블록단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다. 주로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리하면, TCP는 패킷을 추적 및 관리한다.
연결형 서비스로 가상 회선 방식을 제공한다.
3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
포트 상태 정보
- CLOSED: 포트가 닫힌 상태
- LISTEN: 포트가 열린 상태로 연결 요청 대기 중
- SYN_RCV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED: 포트 연결 상태
SYN : ‘동시에 발생하다’의 약자. 다른 컴퓨터로 전송된 TCP 패킷으로 연결이 이루어지도록 요청함
ACK : ‘승인’의 약자. 요청을 보낸 것을 확인한 응답을 나타냄
FIN : ‘연결 해제’. 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미함
3-way handshake : 연결 설정
TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정이다.
데이터 전송하는쪽, 전송받는 쪽 모두 준비가 되었다는 것을 확인하는 과정이다.
A 프로세스 (Client) → 연결 요청 → B 프로세스 (Server)
- A → B : SYN
- (A : B야~ 나 너한테 메시지 전송해도돼?)
- 접속 요청 프로세스 A가 연결 요청 메시지 전송 (SYN)
- PORT 상태 - B: LISTEN, A: CLOSED
- B → A : SYN+ACK
- (B : 응 ! 너 전송하는거 받을게. 너도 포트 열어줘~)
- 접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어 달라는 메시지 전송 (SYN + ACK)
- PORT 상태 - B: SYN_RCV, A: CLOSED
- A → B : ACK
- (A : 응 나도 수락했어~ 연결 완료!)
- 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺음 (ACK)
- 최종 PORT 상태 - B: ESTABLISHED, A: ESTABLISHED
4-way handshake : 연결 해제
TCP의 연결을 해제하는 과정이다.
A 프로세스 (Client) → 연결 해제 → B 프로세스 (Server)
- A → B : FIN
- (A : B야~ 연결 종료할게)
- 프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송
- 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
- B → A: ACK
- (B : 응 일단 알겠어. 나 하던 통신 마저 끝낼게 잠시만 ~)
- 프로세스 B는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. (TIME_WAIT 상태)
- 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다. 그리고 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다.
- B → A: FIN
- (B : A야 나 통신 끝났어 이제 종료하자!)
- 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송
- A → B: ACK
- (A : 오케이 확인!)
- 프로세스 A는 확인했다는 메시지를 전송
참고자료1
+인터넷서치