[네트워크] TCP란?

Yoon Uk·2023년 4월 24일
0

네트워크

목록 보기
17/34
post-thumbnail

TCP는 Transmission Control Protocol의 약자로, 인터넷에서 데이터를 주고받을 때 사용하는 통신 규약입니다.
TCP는 데이터를 작은 단위인 패킷으로 나누어 보내고, 수신 측에서는 패킷을 다시 원래의 데이터로 조립합니다.
이 과정에서 TCP신뢰적 데이터 전송이라는 특징을 가지고 있습니다.

TCP의 신뢰적 데이터 전송

  • 패킷에 순서 번호를 부여하여 수신 측에서 올바른 순서로 조립할 수 있도록 합니다.

  • 패킷에 체크섬을 부여하여 오류가 발생한 패킷을 감지하고 재전송 요청할 수 있도록 합니다.

  • 수신 측에서 패킷을 받으면 잘 받았다는 응답 메시지인 ACK를 보내어 송신 측에 알려줍니다.

  • 송신 측에서 ACK를 받지 못하면 일정 시간 후에 패킷을 다시 보내어 손실된 패킷을 보충합니다.

  • 송신 측과 수신 측은 각각 자신이 처리할 수 있는 패킷의 양인 윈도우 크기를 조정하여 네트워크의 혼잡 상황을 피하고 전송 속도를 최적화합니다.

3-way handshake

TCP에서 두 장치가 통신을 시작하기 전에 3-way handshake를 사용해 연결을 수립합니다.

3-way handshake는 TCP가 두 장치 간의 안전하고 신뢰할 수 있는 연결을 설정하는데 사용됩니다.

3-way handshake 과정

3-way handshake는 다음과 같은 순서로 이루어집니다.

  1. 클라이언트가 서버에게 SYN 패킷을 보내고, SYN_SENT 상태가 됩니다. SYN 패킷에는 클라이언트의 초기 시퀀스 번호가 포함됩니다.

  2. 서버가 SYN 패킷을 받으면, 클라이언트의 요청을 수락한다는 의미로 SYN/ACK 패킷을 보내고, SYN_RECEIVED 상태가 됩니다. SYN/ACK 패킷에는 서버의 초기 시퀀스 번호와 클라이언트의 시퀀스 번호에 1을 더한 값이 포함됩니다.

  3. 클라이언트가 SYN/ACK 패킷을 받으면, 서버와의 연결이 성립되었다는 의미로 ACK 패킷을 보내고, ESTABLISHED 상태가 됩니다. ACK 패킷에는 서버의 시퀀스 번호에 1을 더한 값이 포함됩니다.

3-way handshake를 통해 두 장치는 각자의 시퀀스 번호를 동기화하고, 데이터 전송을 위한 준비를 마칩니다.

3-way handshake는 TCP의 연결 지향적이고 신뢰성 있는 특성을 보장하는데 중요한 역할을 합니다.

4-way handshake

4-way handshake는 TCP 세션을 종료하기 위해 성행되는 절차입니다.

이 과정은 클라이언트와 서버 간의 연결을 안전하고 깔끔하게 종료하기 위해 사용됩니다. 이를 통해 클라이언트와 서버는 더 이상 데이터를 전송하지 않고 연결을 종료할 수 있습니다.

4-way handshake 과정

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송합니다. 이때 클라이언트는 FIN-WAIT 상태가 됩니다.

  2. 서버는 FIN 플래그를 받고, 일단 확인 메시지 ACK를 보내고 자신의 통신이 끝날 때까지 기다리는데 이 상태가 서버의 CLOSE_WAIT 상태입니다.

  3. 연결을 종료할 준비가 되면, 연결 해지를 위한 준비가 되었음을 알리기 위해 클라이언트에게 FIN 플래그를 전송합니다. 이 때 서버의 상태는 LAST-ACK입니다.

  4. 클라이언트는 해지 준비가 되었다는 ACK를 확인했다는 메시지를 보냅니다.

0개의 댓글