TCP

초보개발·2022년 11월 23일
0

Network

목록 보기
9/10

TCP

전송 계층의 프로토콜로 PORT 번호를 사용해 애플리케이션에서 사용하는 프로세스까지 정확하게 도달하기 위해서 데이터를 패킷 단위로 분할하여 전송함

  • 시퀀스 번호와 ACK 번호를 사용하여 순서가 바뀌거나 패킷이 손실되는 것을 방지함
    - 시퀀스 번호: 패킷에 순서 부여
    • ACK 번호: 응답 번호

TCP의 특징

  1. 신뢰성이 있다.
  • 정보 유실없이 안전하게 연결하고 패킷이 잘 전송되었는지 확인한다.
  • 패킷에 시퀀스 번호를 할당해 잘 전송되었는지 확인 응답(ACK 번호)을 받는다.
  • 수신측에서 받아서 처리할 수 있는 최대 전송 크기(Window size)를 고려해 통신한다.
  1. 혼잡제어: 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
    • 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄임
  2. 흐름제어: 송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 제어
    • 송신측의 전송 속도가 너무 빠를 경우 문제 발생

TCP는 UDP와 달리 상대방이 데이터를 잘 받았는지 확인하기 위해서 ACK 번호를 확인 후 다음 패킷을 보낸다. 모든 패킷에 대해 응답을 확인하게 된다면 응답 시간이 그만큼 길어질 것이다. 따라서 최대한 가능한 만큼의 패킷을 한꺼번에 보내고 나서 응답을 받는 것이 효율적이지만 중간에 장애가 발생하게 된다면 패킷 유실이 발생할 수 있다. 따라서 적절한 송신량(Window size)를 조절해야 한다.(Sliding window)

데이터의 유실이 발생할 경우

  • window size를 절반으로 줄이고 정상적으로 통신이 가능해진다면 점진적으로 늘려나간다.

3-way handshake

TCP는 통신을 시작하기 전에 먼저 연결하는 과정을 거쳐야 한다. 상대방이 통신이 불가한 경우를 데이터가 유실될 수 있기 때문에 데이터를 주고 받을 수 있는 확인 작업이 필요하다.

4-way handshake

모든 데이터를 주고받는 통신이 완료되었다면 연결을 해제해야 한다. 종료 과정에서는 한 단계가 추가가 되어 4-way가 되었으며 송신측에서 수신측으로 남은 데이터를 다 보낼 때까지 기다렸다가(CLOSE_WAIT) FIN을 보내는 과정이 추가되었기 때문이다.

Flag

TCP는 연결 작업이외에도 기존 통신에 대한 응답인지 구별하기 위해서 Flag를 사용한다.

  • SYN: 연결 시작
  • ACK: 메세지에 대한 응답
  • FIN: 연결 종료
  • URG: 긴급 데이터

혼잡제어

  1. Slow start: 보낸 데이터의 ACK가 도착할 때마다 윈도우 크기를 2의 지수와 같이 증가시키다가 혼잡이 감지되면 윈도우 크기를 1로 줄이는 방식
  2. 빠른 재전송: 수신측에서 현재 도착해야할 패킷의 다음 패킷이 도착하더라도 ACK를 송신측에 보낸다. 중간에 패킷이 손실됐다면 송신측은 수신측으로부터 중복된 ACK 번호를 받게 된다. 중복된 순번의 패킷을 3개를 받으면 재전송하고 혼잡을 감지해 윈도우 크기를 줄이는 방식
  3. 빠른 회복: 윈도우 크기를 1이 아닌 절반으로 줄여 선형증가시키는 방식

흐름제어 - 수신측의 buffer overflow 방지

수신측의 Buffer는 한정된 크기를 가지므로 그 이상을 넘어서게 되면 이후에 도착한 패킷을 버퍼에 담지 못하고 버려지게 된다. (계속 유실된다면 불필요한 응답 증가와 재전송 요구 증가)
수신측이 패킷을 지나치게 많이 받지 않도록 송신측의 전송 속도를 조절하기 위해서 수신측이 송신측에게 현재 자신의 상태를 피드백한다.
1. Stop and wait: 매번 전송한 패킷에 대해 확인 응답을 받는다.
2. Sliding window: 수신측에서 설정한 윈도우 사이즈만큼 확인 응답없이 한꺼번에 패킷을 전송한다.

0개의 댓글