TCP/IP

DaewoongJeon·2021년 6월 10일
0

Web

목록 보기
5/6

밑의 교재와 함께 TCP/IP에 대해 정리할 것입니다.

1. TCP/IP

A. TCP/IP란?

  • TCP/IP는 현재의 인터넷에서 사용하는 프로토콜 그룹입니다.

B. TCP/IP의 계층

1) 계층적 구조

TCP/IP 프로토콜 그룹의 계층들이 두 호스트 간의 통신과 어떻게 관련되어 있는지 보여주기 위해 아래 그림과 같이 작은 인터넷 그룹을 가정해봅시다.

  • 사진 속엔 세 종류의 통신장비가 있는데, 각 장비는 역할에 따라 계층들과 관련됩니다.
  1. 호스트 A, B, C 에서의 컴퓨터는 응용층에서 메시지를 생성하고 아래 계층들에게 보냄으로서 메시지가 물리적으로 목적지 호스트로 도달할 수 있게 합니다.
  2. 스위치는 노드 간의 다양한 제어를 수행합니다. 링크층과 물리층만 존재하는 스위치는 오직 하나의 프로토콜을 갖습니다. 스위치간 사용하는 프로토콜의 종류는 상이할 수 있습니다.
  3. 그림에서 세 개의 스위치를 연결하는 라우터는 라우팅(길 찾기 기능)만 수행하므로 전송층과 응용층을 갖지 않습니다. 라우터가 n개의 스위치와 연결 되어 있다면, 해당 라우터는 n개의 링크층, 물리층과 관련됩니다.(각 스위치가 갖는 프로토콜의 종류는 상이할 수 있기 때문)

2) 각 계층에 대한 설명

  1. 물리층
  • 프레임의 각 비트들을 링크 건너편으로 전달할 책임이 있습니다.
  • 실제 전송매체에 의해 전송되는 비트들은 전기 또는 광학 신호의 형태로 전송되어집니다.
  • 비트를 신호로 변형시키는 여러 개의 프로토콜이 존재합니다.
  1. 데이터 링크층
  • 인터넷은 여러개의 링크(LAN, WAN 등)으로 구성되어 있습니다.
  • 출발지에서 목적지까지는 링크를 경유하는 여러 개의 경로가 존재할 수 있고, 라우터가 최상의 경로를 정해주면 데이터 링크층에서 데이터그램을 받아 다음 링크로 전송할 책임이 있습니다.
  • TCP/IP의 데이터링크층은 특정 프로토콜을 정의하지 않고, 상황에 따라 모든 표준과 적절한 프로토콜들을 지원합니다. 데이터그램을 받아 링크를 통해 운반할 수 있다면 어떤 프로토콜이라도 사용이 가능합니다.
  • MAC 주소 사용 : LAN 또는 WAN 안에서 특정 호스트나 라우터를 가리킬 때 사용
  1. 네트워크층
  • 네트워크층은 발신지 컴퓨터와 목적지 컴퓨터 사이의 연결을 생성하기 위한 책임을 가집니다.
  • 목적지까지 경로상의 라우터들은 각 패킷을 위한 최선의 경로를 선택할 책임이 있습니다.
  • 라우팅 기능을 전송층에 추가하고 네트워크 층을 없앨 수 있지만, 라우터는 전송층과 응용층을 필요로 하지 않아서 네트워크층을 따로 분리하여 라우터를 경량화 하였습니다.
  • TCP/IP에서 네트워크층 프로토콜로 IP 프로토콜이 사용됩니다.
  • IP 프로토콜은 흐름 제어, 오류 제어, 혼잡 제어를 제공하지 않는 비연결형 프로토콜이므로, 위 서비스를 요구하는 응용층이 있다면 해당 응용층은 오직 전송층 프로토콜을 통해 중계해야 합니다.
  • 라우팅을 위한 포워딩 테이블을 생성합니다.
  • 라우팅을 도와주는 보조 프로토콜이 존재합니다.(ICMP, IGMP, DHCP, ARP)
  • IP 주소 사용 : 전체 인터넷에서 특정 장치를 찾는 데 사용
  1. 전송층
  • 전송층은 응용층으로부터 메시지를 받아 전송층 패킷으로 캡슐화한 후에 논리적 연결을 통해 전송합니다. 즉, 응용층에 서비스를 제공하기 위한 책임이 있습니다.
  • 전송층과 응용층은 통합될 수도 있지만, 종단간의 통신을 책임지는 전송층은 반드시 응용층으로부터 독립적이어야 합니다. 왜냐하면, 작업과 역할이 분리되어야 하고, 각 응용층에 가장 적합한 전송층 프로토콜이 다르기 때문입니다.
  • 인터넷에서 전송층 프로토콜로 주로 TCP 프로토콜이 사용됩니다.
  • port number 사용 : 발신지와 목적지의 응용들을 나타냄
  1. 응용층
  • 프로세스간 프로토콜을 담당하고 이미 정의된 많은 프로토콜이 존재합니다.
  • 응용층에서 두 호스트에서 동작하는 한 쌍의 프로세스를 만드는 것이 가능합니다.(ex. HTTP, SMTP, FTP, TELNET, SSH, SNMP, DNS, IGMP)

3) 캡슐화와 역캡슐화(encapsulation and decapsulation)

네트워크층부터 실행되는 캡슐화에 대해 살펴보겠습니다.

  1. 발신지 호스트에서 캡슐화
    A. 응용층에서 전송하고자 하는 데이터를 전송층에 전송합니다.(헤더는 포함되지 않음)
    B. 전송층은 응용층에서 보낸 데이터를 반드시 처리해야 하는 payload형태로 받아 헤더를 붙입니다. 헤더는 응용의 식별자들과 제어 정보와 같은 종단 간의 전송에 필요한 정보를 포함합니다. 이를 전송층 패킷이라고 하고, 세그먼트(TCP) 또는 데이터그램(UDP)라 불립니다. 캡슐화된 패킷은 네트워크층에 보내집니다.
    C. 네트워크층은 전송층 패킷을 payload형태로 받아 헤더를 붙입니다. 헤더는 발신지, 목적지 주소와 헤더의 오류검사, 단편화 정보 등과 같은 추가적인 정보를 포함합니다. 이를 네트워크층 패킷이라고 하고, 데이터그램이라 불립니다. 캡슐화된 패킷은 데이터 링크층에 보내집니다.
    D. 데이터 링크층은 네트워크층 패킷을 payload형태로 받아 헤더를 붙입니다. 헤더는 호스트 또는 다음 홉의 링크층 주소를 포함합니다. 이를 링크층 패킷이라고 하고, 프레임이라 불립니다. 캡슐화된 프레임은 전송을 위해 물리층에 보내집니다.

  2. 라우터에서 역캡슐화와 캡슐화
    A. 데이터 링크층에 일련의 비트들이 전송된 후에 데이터그램으로 역캡슐화한 후, 네트워크층에 보냅니다.
    B. 네트워크층은 데이터그램 헤더에서 오직 발신지 및 도착지 주소만 확인하고 다음 홉을 찾기 위해 포워딩 테이블을 조사합니다. 데이터그램의 내용은 단편화하지 않는 이상 변경되면 안됩니다. 다음 홉을 갱신시켜준 후에 데이터그램은 데이터 링크층에 보내집니다.
    C. 데이터 링크층은 데이터그램을 프레임으로 캠슐화 하고 전송을 위해 물리층에 보냅니다.

  3. 목적지 호스트에서 역캡슐화

  • 목적지 호스트에서 각 계층은 메시지가 응용층에 도달할 때까지 수신된 패킷을 역캡슐화하고, 페이로드를 떼어내어 상위 계층에 전송하는 역할만을 수행합니다. 하지만 수신지에서의 오류 검사는 반드시 필요합니다.

2. IP (Internet Protocol)

A. IPv4

IPv4는 Internet Protocol 버전 4로서, 비신뢰적이고 비연결형의 데이터 프로토콜이고 최선형 전송 서비스입니다.

  • 최선형 전송 : 패킷이 훼손되거나 손실, 순서에 맞지 않게 도착, 지연되어 도착 그리고 네트워크에 혼잡을 발생시킬 수 있는 전송입니다.

1) IPv4 데이터그램 형식

  • Ver : 4비트의 버전 숫자 필드는 IP 프로토콜의 버전을 정의합니다.
  • HLEN : 4비트의 헤더 길이 필드는 헤더의 전체 길이를 4바이트 워드로 표현합니다. (ex. 위 그림에서 option 필드를 제외한 헤더의 최소 길이는 20byte({32bit / 8} * 5)입니다. 20byte를 4로 나눈 값이 HLEN 필드에 들어갑니다.)
  • Service Type : ??
  • Total length : 16비트의 전체 길이 필드는 IP 데이터그램의 전체 바이트 수를 정의합니다. 이 필드를 통해 수신자는 언제 패킷이 완전히 도착하는지 알 수 있고, 헤더를 제외한 실제 데이터의 길이도 알 수 있습니다.
  • Identification : 데이터그램 단편화 시에 사용되는 필드입니다. 해당 필드와 IP 주소의 조합으로 근원지 호스트를 구분합니다. 데이터그램이 송신될 때마다 1씩 증가합니다. 같은 데이터그램에서 단편화된 데이터그램들은 모두 동일한 값을 가집니다.
  • Flags : 데이터그램 단편화 시에 사용되는 필드입니다. 세 가지 플래그를 정의합니다. 가장 왼쪽 비트는 예약 비트로 현재 사용하지 않습니다. 두 번째 비트는 단편화 금지 비트입니다. 해당 비트가 1일 때 단편화하면 안됩니다. 단편화를 하지 않으면 송신이 불가능한 경우, 해당 데이터그램을 폐기하고 ICMP 오류 메시지를 근원지 호스트로 보냅니다. 세 번째 비트는 추가 단편화 비트입니다. 해당 비트가 0이라면 이 단편이 마지막 단편이거나 오직 하나의 단편임을 의미합니다.
  • Fragmentation offset : 데이터그램 단편화 시에 사용되는 필드입니다. 전체 데이터그램에서 해당 단편의 상대적인 위치를 나타냅니다. 단편화된 첫 번째 비트 값을 8로 나눈 값으로 표현합니다.
  • Time-to-live : 데이터그램이 방문할 수 있는 최대 라우터의 수입니다. 이 값은 보통 라우터 수의 약 두배로 정의됩니다. 라우터를 거칠 때마다 이 값을 1씩 감소시킵니다. 데이터그램이 목적지를 찾지 못하고 네트워크에 남아있는 문제를 방지합니다.
  • Protocol : IP 프로토콜로 전달된 페이로드가 어떤 프로토콜을 통해 캡슐화 되어있는지 알 수 있습니다. 데이터그램이 목적지에 도착하면 어느 프로토콜로 페이로드가 전달되어야 할지 알려줍니다. (ex. ICMP : 01, TCP : 06, UDP : 17)
  • Header checksum : IP는 오류검사를 하지 않지만, 헤더 부분은 IP에서 추가한 것이기 때문에 IP에서 헤더에 대한 오류 검사를 실시해야합니다. 라우터마다 헤더의 데이터가 바뀌기 때문에 각 라우터마다 해당 필드는 다시 계산되어야 합니다. (checksum 알아보기)

2) 단편화

다른 링크마다 프로토콜이 다르고, 각 프로토콜마다 MTU의 크기가 다릅니다. MTU의 크기가 상대적으로 작은 링크로 데이터그램이 전송될 때, 데이터그램의 크기를 전송할 링크 MTU의 크기에 맞춰주기 위해 수행하는 작업이 단편화(fragmentation)입니다.

  • 최대 전송 단위 (MTU, Maximum Transfer Unit) : 데이터그램이 프레임으로 캡슐화될 때, 하드웨어와 소프트웨어에서 지정한 데이터그램(프레임에서 payload) 최대 크기입니다.
  • 목적지 호스트에서만 단편화된 필드가 재조립되는 과정을 수행합니다.
  • 단편화와 관련된 필드는 위 데이터그램 형식에서 다뤘습니다.

B. ICMPv4

1) 등장 배경

  1. 문제
    : IPv4는 오류 보고와 오류 수정 기능이 없습니다. 그래서 오류가 발생하여 데이터그램이 폐기될 경우, 원래의 호스트에게 오류 사실을 통보할 방법이 없습니다. 또한, IP 프로토콜은 경로 상의 라우터의 상태에 대한 정보 획득 메커니즘도 없습니다.
  2. 해결책
    : 위 두가지 단점을 보완하기 위해 ICMPv4 프로토콜이 설계되었습니다.

2) ICMPv4란?

: IP 프로토콜의 동반 프로토콜이고, 오류 보고와 질의를 위해 설계된 프로토콜입니다. 원래의 호스트에게 데이터그램을 전달하기 위해 ICMP 메시지로 캡슐화됩니다.(동작 원리에 대한 부분은 다음 기회에 다루겠습니다.)

3. TCP (Transmission Control Protocol)

A. TCP 란?

: 전송 제어 프로토콜 (TCP, Transmission Control Protocol)은 연결-지향, 신뢰성 있는 프로토콜입니다.

  • 연결지향 서비스를 제공하기 위해 연결 설정, 데이터 전송, 연결 해제 단계를 정의해야 합니다.
  • 신뢰성을 제공하기 위해 GBN과 SR 프로토콜의 결합을 사용합니다.

B. TCP 서비스

TCP가 제공하는 서비스를 알아보겠습니다.

1) 프로세스 대 프로세스 통신

  • TCP는 포트 번호를 사용하여 프로세스 간 통신을 제공합니다.

2) 스트림 전송 서비스

  • 사용자 데이터그램(User datagram)이라는 미리 정의된 경계를 가지는 메시지를 전송하는 UDP 와는 달리, TCP에서 송신 프로세스는 바이트(byte)의 흐름으로 데이터를 전달하고 수신 프로세스도 바이트의 흐름으로 데이터를 수신하도록 합니다.

3) 송신 및 수신 버퍼

  • 송신 및 수신 프로세스는 똑같은 속도로 데이터를 만들고 처리할 수 없기 때문에 TCP는 저장을 위해 버퍼가 필요합니다. 이 버퍼들은 TCP에 의한 흐름 및 오류 제어에 사용됩니다.
  • 버퍼는 원형 배열로 구현될 수 있고, 버퍼의 크기는 수백 또는 수천 바이트를 가질 수 있습니다.
  • 송신 측 버퍼는 세 가지 형태의 공간으로 나눠질 수 있습니다.
  1. 송신 프로세스에 의해 채워질 공간
  2. 송신은 되었으나 수신 프로세스에게 확인응답을 받지 못한 데이터들의 공간
  3. 앞으로 송신될 데이터들의 공간
  • 수신 측 버퍼는 두 가지 형태의 공간으로 나눠질 수 있습니다.
  1. 수신될 데이터에 의해 채워질 공간
  2. 수신 프로세스에 의해 소비될 데이터들의 공간

4) 세그먼트

  • 네트워크층은 바이트 스트림이 아닌 패킷으로 데이터를 전송하기 때문에, TCP는 세그먼트라고 하는 패킷으로 다수의 바이트를 묶어서 그룹화합니다.

5) 전이중 통신

  • 데이터는 동시에 양 방향으로 전달될 수 있습니다.

6) 다중화와 역다중화

  • TCP는 송신기에서 다중화를, 수신기에서 역다중화를 수행한다.(전송층 프로토콜로 TCP를 활용하는 응용층 프로토콜이 다양하기 때문)

7) 연결-지향 서비스

  • 송신지에서 목적지로 데이터를 전송하기 위해 연결 설정 과정을 거칩니다.

8) 신뢰성 있는 서비스

  • TCP는 데이터의 안전하고 확실한 도착을 확인하기 위하여 확인응답 기법을 사용합니다.

C. TCP 특징

1) 번호 부여 시스템

  1. 바이트 번호
  • TCP는 연결 상태에서 전송되는 모든 데이터 바이트에 번호를 부여합니다.
    (ex. 첫 전송 바이트 번호 1057, 전송할 바이트 6000 바이트, 바이트에 할당되는 번호 : 1057~7056)
  • 흐름 및 오류제어에 사용됩니다.
  1. 순서 번호
  • 바이트 번호가 매겨진 후, 각 세그먼트에게 순서번호를 할당합니다.
  • 첫 번째 세그먼트의 순서번호는 임의 번호입니다.
  • 다음 전송될 세그먼트의 순서번호는 이전 세그먼트의 순서번호에 이전 세그먼트에 의해 전송된 바이트의 수를 합한 수입니다.
  • 세그먼트가 데이터와 제어 정보를 조합해서 운반한다면, 수신자로부터 확인응답을 받기 위해 세그먼트는 순서번호를 사용합니다.
  1. 확인응답 번호
  • 수신측은 데이터를 받으면 송신측으로 확인응답 번호와 함께 확인응답을 보냅니다.
  • 확인응답 번호는 수신측이 수신해야 할 다음 바이트 번호를 정의합니다.

D. 세그먼트

  • Source port address : 송신 호스트에 있는 응용 프로그램의 포트 번호를 정의합니다.
  • Destination port address : 수신 호스트에 있는 응용 프로그램의 포트 번호를 정의합니다.
  • Sequence number : 해당 세그먼트에 포함된 첫 번째 데이터 바이트에 할당된 번호입니다. 순서 번호는 수신측에 어느 바이트가 세그먼트에서 첫 번째 바이트를 의미하는지 알려줍니다. 연결 설정하는 동안 랜덤 번호 생성기를 사용하여 순서번호를 지정합니다.
  • Acknowledgment number : 다음 수신하기를 원하는 바이트의 번호를 정의합니다. 확인응답과 데이터는 함께 송신될 수 있습니다.
  • HLEN : TCP 헤더의 길이를 4바이트 단위의 개수로 표현합니다. (ex. 헤더의 길이 : 20byte, HELN : 5 = 20 / 4)
  • Reserved : 사용되지 않습니다.
  • Control : 6개의 제어 비트나 플래그 비트를 정의합니다.
  1. URG : 긴급한 데이터가 있는경우 1
  2. ACK : 확인응답일 경우 1
  3. PSH : 데이터가 버퍼를 경유하지 않고 바로 프로세스에 전송할 경우 1
  4. RST : 연결 초기화 1
  5. SYN : 초기 순서 번호일 때 1
  6. FIN : 연결을 해제할 때 1
  • Window size : 바이트 단위의 윈도 크기를 정의합니다. 수신자에 의해 결정되고, 최대 65536 바이트를 가집니다.
  • Checksum : 오류 검사를 위해 검사합을 가집니다.
  • Urgent pointer : 세그먼트가 긴급 데이터를 포함하고 있을 때 사용합니다. 세그먼트의 데이터 부분에서 마지막 긴급 바이트의 번호를 구하기 위해 순서번호에 해당 필드 값이 더해집니다.

E. TCP 연결

TCP는 IP보다 상위층 프로토콜로서 세그먼트들을 수신자에게 전달하기 위해 IP 서비스를 사용하지만 연결 자체를 제어합니다. IP는 TCP와는 달리 이러한 TCP의 동작을 알지 못합니다.
TCP에서 연결-지향 전송은 연결 설정, 데이터 전송 및 연결 종료 3단계를 필요로 합니다. 각 단계의 통신 방식은 다양하지만, 본 글에서는 일반적인 방식만 다루겠습니다.

1) 연결 설정

TCP는 전이중 모드로 데이터를 전송합니다. 이는 데이터를 전송하기 전에 수신측으로부터 승인을 얻어야 하는 것을 의미합니다.

3-way handshaking

  • 3-way handshaking 방식은 TCP의 다양한 연결 설정 방식 중 가장 일반적인 방식입니다. 클라이언트-서버 간의 TCP 통신을 예시로 들어 살펴보겠습니다.
  1. 서버 프로그램은 데이터를 받을 준비가 되어 있다고 TCP에게 알립니다.(수동 개방)
  2. 서버와 연결을 원하는 클라이언트는 이를 TCP에게 알립니다.(능동 개방)
  3. 클라이언트는 SYN 플래그만 설정되어 있는 SYN 세그먼트를 서버에 전송합니다. 이때, 랜덤으로 초기 순서번호(ISN)를 정하여 함께 보냅니다. SYN 세그먼트는 실제 데이터를 운반하지 않습니다.
  4. SYN 세그먼트를 받은 서버는 클라이언트에 SYN + ACK 세그먼트를 전송합니다. SYN에 대한 확인응답(ACK)을 포함하기 때문에 수신 윈도 크기를 정의해주어야 합니다. 해당 세그먼트는 두 개의 목적을 갖고 있습니다.
    • 서버에서 클라이언트로의 통신을 위한 SYN 전송(클라이언트로 보낼 세그먼트의 바이트 번호를 초기화)
    • 클라이언트로부터 다음 수신이 예상되는 순서번호를 표시하여 ACK 전송.
  5. 클라이언트가 서버의 SYN에 대한 ACK 세그먼트를 전송합니다. 이때, 해당 세그먼트에 대한 확인응답을 필요로 하는 SYN가 아니기 때문에 순서번호를 소비하지 않습니다.

2) 데이터 전송

연결 설정이 끝나면 실제 데이터 전송이 이루어집니다. 데이터 전송에 대한 확인응답이 필요하고, 확인응답과 함께 데이터가 같이 전송될 수 있습니다.

데이터 밀어넣기(Pushing Data)

: 전송받은 데이터는 수신측 응용프로그램 상태에 따라 버퍼를 통해 프로그램으로 전달될지, 직접 전달될지 결정됩니다. 하지만 이러한 유연성이 필요하지 않을 때, 밀어넣기 플래그를 설정하여 세그먼트를 전송함으로서 버퍼(윈도)가 채워지면 안된다는 것을 수신측에 알려줍니다.

3) 연결 종료

대부분 연결 종료 방식으로 3-way handshaking방식이 사용되고 있습니다.

3-way handshaking

  1. 클라이언트 TCP는 프로세스로부터 종료 명령을 수신한 후에 FIN 플래그가 설정된 FIN 세그먼트를 전송합니다.
  2. 서버 TCP는 프로세스로부터 FIN 세그먼트를 받으면 이에 대한 확인응답(ACK)과 클라이언트로의 연결 종료를 알리는 FIN 플래그를 설정하여 세그먼트를 전송합니다.
  3. 서버로부터 온 FIN 에 대한 확인응답(ACK)을 전송합니다.

F. TCP의 제어 기능

TCP에서는 흐름 제어, 오류 제어, 혼잡 제어 기능을 제공합니다.

1) TCP의 윈도

TCP의 제어기능에 대해 살펴보기 전에 TCP의 윈도에 대해 알아보겠습니다.

  • TCP는 데이터 전송을 위해 송수신측 각 1개씩 두 개의 TCP 윈도가 필요하고, 양방향 전송을 위해 총 4개의 TCP 윈도가 필요합니다.

A) 송신 윈도

  • 송신 윈도의 크기는 수신자와 네트워크 혼잡에 의해 조절될 수 있습니다.
  • 윈도를 제어하는 변수는 바이트 번호입니다.

B) 수신 윈도

  • 수신 윈도의 크기는 항상 버퍼의 크기보다 작거나 같습니다. 수신측이 송신측으로부터 넘치지 않고 수신할 수 있는 바이트의 개수를 수신 윈도의 크기로 결정합니다.(흐름 제어)
  • 수신 윈도 크기 : 버퍼 크기 - 프로세스에 당겨질 바이트의 수
  • 확인응답 방법으로 누적과 선택적 확인응답 방법을 모두 사용합니다.

2) 흐름 제어

생산자가 데이터를 만드는 속도와 소비자가 데이터를 사용하는 속도의 균형을 맞추는 것입니다.

  • 흐름 제어 피드백 : 송신 TCP에서 송신프로세스로, 수신 TCP에서 송신 TCP로 이루어집니다.
  • 수신 프로세스에서 수신 TCP로의 피드백은 이루어지지 않고, 수신 프로세스가 준비될 때마다 버퍼에서 데이터를 읽어갑니다.(수신 TCP는 송신 TCP 제어, 송신 TCP는 송신 프로세스 제어, 수신을 거부함으로써 제어)
  • 아래는 흐름 제어 시나리오 입니다.

3) 오류 제어

송신 TCP는 오류 제어를 통해 상대편 응용 프로그램에게 오류, 손실, 중복 없이 전체 스트림을 전달하고 있다는 것을 확신합니다.

  • 오류 제어는 다음과 같은 메커니즘을 포함합니다.
  1. 훼손된 세그먼트의 감지 및 재전송
  2. 손실 세그먼트의 재전송
  3. 분실된 세그먼트가 도착하기 전까지 순서가 맞지 않는 세그먼트를 저장
  4. 중복 세그먼트의 감지 및 폐기
  • 사용 도구는 다음과 같습니다.
  1. 검사합 : 각 세그먼트에는 검사합 필드가 있고, 이 필드를 통해 해당 세그먼트가 훼손되었는지를 검사합니다.
  2. 확인응답 : 데이터 세그먼트의 수신을 확인해 주기 위해 확인응답을 사용합니다.
  3. 타임아웃 : 전송된 세그먼트는 확인응답되기 전까지 버퍼에 저장됩니다. 재전송 타이머가 만료될 경우, 해당 세그먼트는 재전송됩니다.

4) 혼잡 제어

TCP 호스트의 혼잡은 TCP 흐름 제어로 인해 발생하지 않겠지만 호스트 경로 상에 있는 중간 버퍼나 라우터에 혼잡이 발생할 우려가 있습니다. 이를 방지하기 위해 네트워크 혼잡 상황에서는 혼잡 윈도 변수를 사용합니다.

혼잡 감지

  • TCP 송신자가 타임아웃이 발생하기 전 세그먼트나 ACK를 받지 못할 경우, 세그먼트가 혼잡에 의해 손실되었다고 판단합니다.
  • 3개의 중복 ACK를 받으면 세그먼트가 네트워크에서 혼잡에 의해 손실되었다고 판단합니다.

혼잡 정책

  • TCP는 혼잡을 통제하기 위해 세 가지 알고리즘(느린 시작, 혼잡 회피, 빠른 복구)에 바탕을 둡니다.
  • 본 글에서는 자세히 다루지 않겠습니다.

0개의 댓글