컴퓨터 네트워크에 대한 기본 지식(매우 상세함)

1. 네트워크 모델

1.1 OSI 7계층 참조 모델

OSI(Open System Interconnection) 참조 모델이라고도 알려진 7계층 모델은 개방형 시스템 상호 연결이며 네트워크 통신을 위한 표준 모델 입니다 . 일반적으로 OSI 참조 모델 또는 7계층 모델이라고 합니다.

이는 일련의 추상적인 용어나 개념뿐만 아니라 특정 프로토콜도 포함하는 7개 계층의 추상 모델 본체입니다.

  1. 물리 계층: 원본 비트 스트림 전송, 디지털-아날로그 변환, 아날로그-디지털 변환을 담당합니다.
  2. 데이터 링크 계층: 직접 연결된 노드 간 데이터 프레임의 안정적인 전송, 오류 감지 및 수정, 물리적 주소(MAC 주소) 정의를 담당합니다.
  3. 네트워크 계층: 주소 지정을 위해 논리 주소(IP 주소)를 사용하여 네트워크의 여러 노드 간에 데이터 패킷의 전송 및 라우팅을 담당합니다.
  4. 전송 계층: 종단 간 데이터 전송 서비스 제공, 안정적인 데이터 전송 보장, 데이터 분할 및 재조립 처리, 오류 복구 및 흐름 제어 기능 제공을 담당합니다.
  5. 세션 계층: 애플리케이션 간의 세션 설정, 관리, 종료를 담당하고 데이터 동기화, 세션 복구 등의 기능을 제공합니다.
  6. 프리젠테이션 계층: 데이터 형식화 및 구문 분석, 데이터 암호화 및 해독, 데이터 압축 및 변환 처리를 담당합니다.
  7. 애플리케이션 계층: 파일 전송, 이메일, 원격 로그인 및 기타 애플리케이션을 포함하여 네트워크 애플리케이션 간의 통신 서비스 제공을 담당합니다.

1.2 TCP/IP 모델

TCP/IP 모델은 사실상 네트워크 통신 모델 이며 아래에서 위로 4개의 계층으로 나뉩니다.

  1. 데이터링크 계층
  2. 네트워크 계층
  3. 전송 계층
  4. 애플리케이션 레이어

TCP/IP 모델은 실제로 엔지니어링에서 사용되는 모델입니다. 엔지니어링 구현에서는 전송 계층과 응용 계층에만 주의하면 됩니다!

TCP/IP 모델 아키텍처는 다음과 같습니다.

인터뷰 질문: OSI 모델과 TCP/IP 모델의 차이점은 무엇입니까?

OSI(Open Systems Interconnection, Open Systems Interconnection)는 네트워크 통신의 표준 모델 이지만 TCP/IP 모델은 사실상의 모델 이며 OSI 모델을 단순화합니다.

TCP/IP 모델과 TCP/IP 모델의 차이점은 하위 2개의 물리 계층과 데이터 링크 계층이 데이터 링크 계층으로 병합되고, 상위 3개 계층인 세션 계층, 프리젠테이션 계층 및 애플리케이션 계층이 애플리케이션으로 병합된다는 점입니다. 층;

전송 계층 아래 네트워크를 캡슐화한 소켓 위의 세 계층에 대한 통합 인터페이스를 제공합니다. 이렇게 하는 이유는 다음과 같은 이점이 있습니다.

1) 상위 3개 계층은 통신 세부 사항에 주의를 기울이지 않고 애플리케이션의 비즈니스 세부 사항을 처리하는 데 사용되며 상당히 다릅니다. 하위 4개 계층은 비즈니스 세부 사항에 주의를 기울이지 않고 통신 세부 사항을 구현하며 더 다양합니다. ;

2) 상위 3개 계층은 일반적으로 사용자 프로세스 내에 있고 하위 4개 계층은 OS 커널의 일부로 제공됩니다.

1.3 TCP/IP 프로토콜 제품군

인터뷰 질문: TCP/IP에는 어떤 프로토콜이 포함됩니까? 각각의 기능은 무엇입니까?

(1) 전송 계층 프로토콜:

  1. TCP : 전송 제어 프로토콜, 전송 제어 프로토콜 . 안정적인 전이중 바이트 스트림을 제공하는 연결 지향 프로토콜 (Full Duplex는 데이터를 동시에 양방향으로 전송할 수 있도록 하는 통신 방식, 즉 송신자와 수신자가 동시에 데이터를 전송할 수 있는 통신 방식입니다. 데이터를 보내고 받습니다. .), 스트림 소켓을 사용합니다 (스트림 소켓은 안정적인 데이터 전송과 파일 전송, HTTP 통신 등과 같은 양방향 통신이 필요한 시나리오에 적합합니다). 메시지 확인, 시간 초과, 재전송과 같은 메커니즘이 있습니다.
  2. UDP : 사용자 데이터그램 프로토콜, 사용자 데이터그램 프로토콜. 데이터그램 소켓을 사용하는 연결 없는 프로토콜 (데이터그램 소켓은 오디오 및 비디오 전송, DNS 쿼리 등과 같이 실시간 요구 사항이 높고 데이터 전송 순서 및 신뢰성 요구 사항이 낮은 시나리오에 적합함), 메시지 전달이 보장되지 않습니다. 성공할 것이다;
  3. SCTP : Stream Control Transmission Protocol, 흐름 제어 전송 프로토콜. 안정적인 전이중 연결을 제공하는 프로토콜입니다 . SCTP는 멀티홈이며 통신의 양쪽 끝은 여러 그룹(IP, 포트) 통신을 포함할 수 있습니다. 메시지 서비스 제공( SCTP 와 TCP의 주요 차이점은 SCTP가 멀티 스트림 및 멀티 호밍 기능을 제공한다는 점입니다 )

(2) 네트워크 계층 프로토콜:

  1. IPv4 : 인터넷 프로토콜 버전 4, 32비트 주소 사용( 사용 가능한 주소는 제한됨 )
  2. ICMP : 인터넷 제어 메시지 프로토콜(Internet Control Message Protocol), 네트워크 제어 메시지 프로토콜은 호스트와 라우터 간의 메시지 통신을 처리합니다.
  3. IGMP : 인터넷 그룹 관리 프로토콜(Internet Group Management Protocol), 네트워크 그룹 관리 프로토콜로 브로드캐스트 통신에 사용됩니다.
  4. ARP : IPv4 주소를 하드웨어 주소(MAC 주소)에 매핑하고 브로드캐스트 네트워크에서 사용되는 주소 확인 프로토콜 .
  5. RARP : 역방향 주소 확인 프로토콜, 역방향 주소 확인 프로토콜, 하드웨어 주소(MAC 주소)를 IPv4 주소에 매핑합니다 .
  6. IPv6 : 64비트 주소를 사용하는 인터넷 프로토콜 버전 6( 사용 가능한 주소 공간이 넓음 )
  7. ICMPv6 : 인터넷 제어 메시지 프로토콜(Internet Control Message Protocol) 버전 6은 IPv6 프로토콜에 대한 주소 확인, 네트워크 그룹 관리 및 기타 기능을 제공하며 ICMPv4, IGMP 및 ARP 프로토콜의 기능을 갖습니다.

(3) 데이터 링크 계층 프로토콜(그냥 이해하세요):

  1. BPF : BSD 패킷 필터, BSD 패킷 필터. 데이터 링크 계층에 대한 액세스 기능을 제공합니다(Berkeley 커널).
  2. DLPI : 데이터링크 제공자 인터페이스, 데이터링크 제공자 인터페이스. 데이터 링크 계층에 대한 액세스 기능을 제공합니다(SVR4 커널).

1.4 TCP/UDP/SCTP 프로토콜

인터뷰 질문: TCP와 UDP 프로토콜의 차이점은 무엇입니까?

(1) UDP 프로토콜 : 애플리케이션 계층 데이터를 UDP 데이터그램 으로 캡슐화한 다음 UDP 데이터그램을 IP 데이터그램 으로 캡슐화하여 전송하는 비연결형 전송 프로토콜입니다 .

1) UDP 데이터그램 에는 길이가 있으며 (메시지 길이는 데이터그램을 읽을 때 클라이언트에게 시작과 끝을 알려주는 데 사용됨) 메시지 길이는 메시지(TCP 스트리밍 메시지가 아님)와 함께 피어에 전송됩니다.

2) UDP 프로토콜에는 전송 신뢰성이 없습니다 . 확인, 시퀀스 번호, R1TT 추정, 시간 초과 및 재전송과 같은 메커니즘을 제공하지 않습니다.

  1. UDP 데이터그램이 최종 목적지에 도달한다는 보장은 없습니다(피어 메시지 확인 메커니즘, 시간 초과 및 재전송 메커니즘 없음).
  2. 각 UDP 데이터그램이 대상에 도달하는 순서는 보장되지 않습니다(메시지 시퀀스 번호 없음).
  3. UDP 데이터그램이 한 번만 전달된다는 보장은 없습니다(메시지 시퀀스 번호 없음).

3) UDP 프로토콜은 연결 없는 프로토콜이며 양쪽 끝의 소켓에는 바인딩 관계가 없습니다 .

  1. UDP 클라이언트는 소켓을 생성하고 한 서버에 데이터그램을 보낸 다음 즉시 동일한 소켓을 사용하여 다른 데이터그램을 다른 서버에 보낼 수 있습니다.
  2. UDP 서버는 동일한 소켓을 사용하여 여러 다른 클라이언트로부터 데이터그램을 수신할 수 있습니다.

4) UDP 프로토콜은 전이중 프로토콜 입니다 .

다시 채우다:

데이터그램과 스트림은 네트워크 통신에서 일반적으로 사용되는 두 가지 데이터 전송 방법으로 다음과 같은 차이점이 있습니다.

1) 데이터그램:

   - 데이터그램은 비연결형 전송 방식이며, 각 데이터그램은 독립적이고 독립적인 데이터 단위입니다.

   - 각 데이터그램에는 고유한 대상 주소와 소스 주소가 있으며 네트워크를 통해 독립적으로 전송될 수 있습니다.

   - 데이터그램 전송이 불안정하여 패킷 손실, 중복, 순서 이상 등의 문제가 발생할 수 있습니다.

   - 예: UDP(사용자 데이터그램 프로토콜)는 데이터그램 전송을 사용합니다.

2) 데이터 스트림(Stream):

   - 데이터 스트리밍은 연결 지향 전송 방법으로, 데이터는 송신자와 수신자 사이에 지속적이고 순서가 지정된 바이트 스트림을 설정합니다.

   - 데이터 스트림은 명확한 구분 단위가 없는 연속적이고 무한한 바이트 시퀀스입니다.

   - 데이터 스트림의 전송은 안정적이며 질서 있고 완전하며 오류 없는 데이터 전송을 보장합니다.

   - 예: TCP(Transmission Control Protocol)는 데이터 스트리밍 전송을 사용합니다.

데이터그램과 데이터 스트림은 서로 다른 두 가지 데이터 전송 방법입니다. 데이터그램은 독립적이고 독립적인 데이터 단위입니다. 각 데이터그램에는 고유한 대상 주소와 소스 주소가 있습니다. 전송이 신뢰할 수 없습니다. 데이터 스트림은 연결에 설정된 지속적인 바이트 스트림입니다. 전송은 안정적이며 질서 있고 완전하며 오류 없는 데이터 전송을 보장합니다. 사용할 방법의 선택은 특정 애플리케이션 요구 사항과 통신 방법의 특성에 따라 달라집니다.

(2) TCP 프로토콜 : 데이터 흐름을 기반으로 상위 계층 메시지를 여러 세그먼트로 캡슐화하고 각 세그먼트가 IP 데이터그램 으로 전송되는 연결 프로토콜이 있습니다 .

1) TCP 프로토콜은 데이터 스트림 전송을 기반으로 하며 메시지 길이 자체가 없습니다 .

2) TCP 프로토콜은 전송의 신뢰성을 보장합니다( 100% 신뢰성이 아닌 보다 신뢰성 있음 ).

  1. 피어 메시지 확인 메커니즘 제공 : 메시지가 전송된 후 피어의 확인을 기다린 후에만 성공한 것으로 간주됩니다.
  2. 시간 초과 및 재전송 메커니즘 제공 : 메시지가 전송된 후 일정 시간이 지나도 확인을 받지 못하면 메시지가 성공하거나 지정된 재시도 시간을 초과할 때까지 메시지가 재전송됩니다.
  3. RTT 추정 제공 : 클라이언트와 서버 간 RTT(왕복 시간) 알고리즘의 동적 추정을 제공하여 RTT에 필요한 대략적인 시간을 알 수 있습니다.
  4. 메시지 시퀀스 번호 제공 : 피어가 메시지를 수신할 때 시퀀스 번호를 기준으로 메시지를 정렬하고 중복 제거할 수 있도록 각 세그먼트에 시퀀스 번호(바이트 오프셋)를 제공합니다.
  5. 흐름 제어 제공 : 현재 수신할 수 있는 데이터의 양을 피어에게 알려주는 보급 창을 제공하여 발신자가 보낸 데이터의 양이 수신 버퍼를 오버플로하지 않도록 보장합니다. 보급 창은 메시지가 수신됨에 따라 동적으로 변경됩니다. 0인 경우 수신 버퍼가 가득 차서 피어로부터 데이터를 다시 수신하기 전에 애플리케이션이 버퍼에서 데이터를 읽을 때까지 기다려야 함을 의미합니다. 송신단은 수신단의 속도를 통해 전송됩니다.

참고: TCP 프로토콜은 100% 신뢰성을 보장하지 않지만, 상위 계층에서는 최대한 신뢰성을 보장하면서 메시지 전달의 이상을 감지할 수 있습니다.

3) TCP 프로토콜에는 연결 프로토콜이 있으며, 양쪽 끝은 통신하기 전에 연결을 설정해야 합니다 .

4) TCP 프로토콜은 전이중 프로토콜이며 특정 연결의 응용 프로그램은 언제든지 데이터를 보내고 받을 수 있습니다.

(3) SCTP 프로토콜 : 신뢰성, 순서화, 흐름 제어 및 전이중 데이터 전송을 제공하는 연결 프로토콜이 있으며 연관을 통해 양단의 통신 방법을 나타내며 연결은 두 IP 주소 간의 통신만을 포함 합니다 . 연결은 두 끝 사이의 첫 번째 통신을 의미하지만 반드시 두 IP 주소 사이의 통신은 아닙니다.

1) SCTP는 메시지 지향적이고 메시지 길이를 가지고 있으며 각 메시지는 순서대로 피어에게 전달됩니다(TCP는 메시지 길이가 없으며 상위 계층 응용 프로그램에 의존하여 응용 프로그램 계층 프로토콜의 길이를 설계합니다).

2) 각 연결에는 여러 스트림(연결)이 포함 되어 있습니다. 단일 스트림에서 메시지가 손실되어도 다른 스트림에서 메시지 전송이 차단되지 않습니다(TCP에는 단일 스트림만 있으므로 차단됩니다).

3) SCTP는 멀티호밍 기능을 제공 합니다. 즉, 양쪽 끝이 여러 IP 주소를 지원할 수 있고 하나의 끝점이 서로 다른 인프라를 통해 여러 중복 연결을 가질 수 있으므로 네트워크 오류에 대한 견고성이 향상됩니다.

보충 :

SCTP(Stream Control Transmission Protocol)에서는 멀티스트림(Multi-Stream)과 멀티호밍(Multi-Homing)이 그 특징 중 하나로 보다 유연하고 효율적인 데이터 전송 기능을 제공합니다.

1) 멀티스트림:

   - 멀티 스트림은 단일 SCTP 연결에서 여러 개의 독립적인 데이터 스트림을 동시에 전송할 수 있음을 의미합니다.

   - SCTP를 사용하면 응용 프로그램이 동일한 SCTP 연결에서 각각 고유한 시퀀스 번호와 전송 제어를 갖는 여러 논리 스트림을 생성할 수 있습니다.

   - 멀티 스트림 기능을 사용하면 애플리케이션이 다양한 유형의 데이터를 다양한 스트림으로 그룹화하여 병렬 전송을 달성하고 네트워크 리소스 활용을 최적화할 수 있습니다.

   - 애플리케이션은 다양한 데이터 스트림의 요구 사항을 충족하기 위해 필요에 따라 여러 스트림을 생성, 선택 및 관리할 수 있습니다.

2) 멀티 호밍:

   - 멀티호밍은 SCTP 연결에서 통신을 위해 여러 네트워크 인터페이스 또는 IP 주소를 동시에 사용할 수 있음을 의미합니다.

   - SCTP를 사용하면 하나의 엔드포인트(호스트)가 여러 네트워크 인터페이스에서 여러 IP 주소를 바인딩하고 통신 과정에서 네트워크 상태에 따라 데이터 전송에 적합한 주소를 선택할 수 있습니다.

   - 멀티호밍 기능은 이중화 및 로드 밸런싱 기능을 제공하며, 네트워크 인터페이스나 IP 주소를 사용할 수 없는 경우 자동으로 사용 가능한 다른 인터페이스나 주소로 전환할 수 있습니다.

   - 애플리케이션은 멀티호밍 기능을 활용하여 연결 안정성과 가용성을 향상하고 다중 네트워크 환경에서 데이터 전송 요구 사항에 적응할 수 있습니다.

1.5 TCP 프로토콜

1.5.1 TCP 링크 설정: 3방향 핸드셰이크

인터뷰 질문: TCP의 3방향 핸드셰이크란 무엇입니까? 프로세스는 무엇입니까?

TCP 링크 구축의 일반적인 과정은 다음과 같습니다.

1) 수동적 개방 : 서버 는 모니터링을 시작하기 위해 소켓 , 바인드 청취 의 세 가지 기능을 호출합니다 .

2) Active open : 클라이언트 는 서버에 연결하기 위해 연결 함수를 호출합니다. 클라이언트는 SYN 세그먼트를 보내 클라이언트에게 초기 시퀀스 번호를 보내라고 지시합니다. SYN 세그먼트는 데이터를 전달하지 않으므로 해당 IP 데이터그램은 위치에는 IP 헤더, TCP 헤더 및 선택적 TCP 옵션만 포함되어 있습니다.

3) 서버는 클라이언트가 보낸 SYN을 확인하기 위해 ACK를 보내고 동시에 자체 SYN을 클라이언트에 보내 서버에 초기 시퀀스 번호를 보내라고 지시합니다.

4) 클라이언트는 서버가 보낸 SYN을 확인하기 위해 ACK를 보냅니다 .

참고 1 : 서버는 동일한 섹션에서 ACK SYN을 보냅니다 .

참고 2 : 서버의 초기 일련번호와 클라이언트의 초기화 일련번호는 두 개의 독립적인 필드로, 각각이 보낸 메시지의 순서 번호를 나타냅니다.

참고 3 : SYN이 전송될 때마다 현재 시퀀스 번호가 전달되고, ACK가 응답될 때마다 다음 메시지의 시퀀스 번호, 즉 현재 시퀀스 번호 + 1 이 전달됩니다 .

 

시나리오 예: 두 사람이 전화 통화를 시작하기 전에 먼저 상대방이 통화 내용을 들을 수 있는지 확인합니다.

고객: 안녕하세요, 내 말 들리나요? (SYN)

서버: 들려요, 들리나요? (ACK+SYN)

클라이언트: 들을 수 있음(ACK)

... ...(후속 대화 시작)

TCP 옵션이란 무엇입니까?

TCP 링크를 설정할 때 전달되는 연결 제어 매개변수입니다.

TCP_MAXSEG: MSS(Max Segment Size)를 설정하고 SYN을 보낼 때 허용할 수 있는 최대 세그먼트 크기, 즉 현재 연결에서 각 TCP 세그먼트에서 허용할 수 있는 최대 데이터 양을 피어에게 알립니다. 그에 따라 전송될 세그먼트의 최대 크기를 설정합니다. TCP_MAXSEG에 의해 설정됩니다.

SO_RCVBUF: 수신 버퍼 크기를 설정하여 피어에게 알림 창의 크기를 알립니다.

SO_SNDBUF: 전송 버퍼 크기를 설정합니다.

1.5.2 TCP는 연결을 끊는다: 네 개의 파동

인터뷰 질문: TCP의 네 가지 물결은 무엇입니까? 프로세스는 무엇입니까?

TCP가 연결을 닫는 과정:

1) 활성 닫기: End A는 닫기 기능을 호출하고 시퀀스 번호가 포함된 FIN 섹션을 보내 B에게 데이터가 전송되었음을 알립니다.

2) Passive close: B end는 FIN을 수신한 후 A end에게 ACK 세그먼트로 응답하고 , 동시에 수신된 데이터는 FIN으로 처리됩니다.

EOF(파일 끝)는 상위 계층 애플리케이션에 전달되어 데이터가 전송되었음을 상위 계층 애플리케이션에 알립니다.

3) EOF를 수신한 후 B 측의 상위 계층 애플리케이션은 닫기 함수를 호출하고 FIN 섹션을 보내 A 측에 데이터가 전송되었음을 알립니다.

4) FIN 세그먼트를 수신한 후 End A는 End B에 ACK 세그먼트로 응답합니다 . 이제 양쪽 끝이 모두 닫힙니다.

 

참고 1: 양쪽 끝에서 FIN을 보내야 하는 이유는 TCP가 전이중이고 양쪽 끝에서 데이터를 보낼 수 있기 때문입니다. 따라서 전송이 완료되었음을 상대방에게 알리려면 양쪽 끝에서 FIN을 보내야 합니다.

참고 2: FIN이 전송될 때마다 현재 시퀀스 번호가 전달되고, ACK가 응답될 때마다 다음 메시지의 시퀀스 번호, 즉 현재 시퀀스 번호 + 1이 전달됩니다.

참고 3: 1) 및 2) 단계를 실행한 후에도 수동적으로 닫힌 끝(끝 B)은 여전히 ​​능동적으로 닫힌 끝(끝 A)으로 데이터를 보낼 수 있습니다. 이를 반 닫힘이라고 합니다.

참고 4: Unix 프로세스가 자발적으로 종료되거나(exit 호출 또는 메인에서 복귀) 비자발적으로(프로세스 종료 신호 수신) 종료되면 열려 있는 모든 파일 핸들이 닫히고 열려 있는 TCP 연결도 FIN 섹션을 전송하게 됩니다. 피어에게 닫으라고 알립니다. (커널 동작, 이는 프로세스 중단이기도 하지만 운영 체제가 다운되지 않은 경우 피어는 링크가 끊어진 이유를 온라인으로 감지할 수 있습니다.)

참고 5: 클라이언트와 서버 모두 적극적으로 연결을 닫을 수 있습니다(close 함수 호출).

장면 예: 두 사람이 통화를 끝내기 전 서로 작별인사를 하는 것 같다.

A: 괜찮아요, 전화 끊을게요 (FIN)

B: 알았어(ACK)

B: 이제 괜찮아요 이제 전화 끊어도 돼요 (FIN)

A: OK(ACK, 대화 종료)

질문: 3방향 핸드셰이크 중에 서버가 한 세그먼트에서 동시에 ACK SYN 에 응답할 수 있는 이유는 무엇입니까 ? 그리고 4개의 웨이브 중 패시브클로즈는

한쪽 끝에서 ACK FIN을 두 세그먼트로 보내야 합니까 ?

TCP는 완전 이중 방식이기 때문에 4번 웨이브할 때 양쪽 끝을 닫는 것은 독립적인 작업이며, 각 끝은 메시지 전송을 위해 자체 채널을 닫을지 여부를 제어할 수 있습니다. 따라서 이는 2개의 메시지 그룹(FIN 하나와 ACK 하나)으로 나뉩니다.

보충 :

1) Three-Way Handshake의 두 번째 단계에서 서버는 ACK와 SYN 응답을 하나의 세그먼트로 결합하여 전송할 수 있습니다. 이는 서버가 클라이언트의 SYN 세그먼트를 수신한 후 클라이언트의 초기 시퀀스 번호(ISN)를 이미 알고 있고 서버도 자체 ISN(초기 시퀀스 번호)을 클라이언트에 보내야 하기 때문입니다. 따라서 서버는 ACK와 SYN 응답을 결합하여 한 섹션으로 보내 통신의 왕복 시간(RTT)을 줄일 수 있습니다.

2) 연결이 끊어진 능동적인 당사자는 데이터를 받을 수 있지만 연결이 끊어진 후에는 데이터를 보낼 수 없기 때문에 연결이 끊긴 수동적인 당사자는 아직 연결이 끊어지지 않았으며 데이터를 주고받는 것이 모두 가능합니다. 수동적 연결 해제 당사자와 활성 연결 해제 당사자는 다른 요구 사항이 있을 수 있으므로 ACK와 SYN을 별도로 실행해야 합니다.

1.6 TCP 상태 머신

인터뷰 질문: TCP 연결 상태는 무엇입니까? 각각의 의미는 무엇입니까?

서버 측 링크 구축 상태 머신

CLOSED -> LISTEN: 서버가 청취 기능을 호출하고 이를 수동적으로 엽니다.

LISTEN -> SYN_RCVD: 서버는 SYN을 수신하고 SYN + ACK를 보냅니다.

SYN_RCVD -> ESTABLISHED: 서버가 ACK를 수신하고 링크 설정을 완료합니다.

 

 클라이언트 링크 구축 상태 머신

CLOSED -> SYN_SENT: 클라이언트가 SYN을 보냅니다.

SYN_SENT -> CLOSED: 클라이언트가 시간 초과를 기다렸지만 ACK + SYN을 수신하지 못했습니다.

SYN_SENT -> ESTABLISHED: 클라이언트가 ACK + SYN을 수신하고 ACK를 보냅니다.

 

상태 머신을 적극적으로 종료

ESTABLISHED -> FIN_WAIT_1: End A는 닫기 함수를 호출하고 FIN을 전송하며 적극적으로 연결을 닫습니다.

FIN_WAIT_1 -> FIN_WAIT_2: 끝 A가 ACK를 받습니다.

FIN_WAIT_1 -> CLOSING: A단이 FIN을 수신하면 B단이 동시에 닫기 함수를 호출하고 동시에 연결을 닫을 수도 있습니다.

FIN_WAIT_1 -> TIME_WAIT: A측은 SYN + ACK를 수신하고 ACK로 응답하여 B측이 링크 설정을 주도적으로 수행함을 나타냅니다.

FIN_WAIT_2 -> TIME_WAIT: End A는 FIN을 수신하고 ACK로 응답합니다.

CLOSING->TIME_WAIT: End A가 ACK를 수신합니다.

TIME_WAIT-> CLOSED: A측은 2MSL 시간 초과를 기다립니다.

 

수동 종료 상태 머신

ESTABLISHED -> CLOSE_WAIT: A단이 FIN을 수신하고 ACK를 복구합니다. 이는 B단에서 A단으로의 연결이 닫혔음을 나타냅니다.

CLOSE_WAIT -> LAST_ACK: A단이 FIN을 보내 A단에서 B단으로의 연결이 닫혔음을 나타냅니다.

LAST_ACK -> CLOSED: 끝 A가 ACK를 수신합니다.

완전한 TCP 데이터 송수신 과정은 다음과 같습니다.

참고 1 : 링크가 설정된 후 서버가 클라이언트에서 요청한 ACK가 기록할 데이터와 함께 전송됩니다. 이 프로세스는 한 번의 IO 상호 작용을 줄여서 피기백 ( piggybacking)이라고 하며 피기백 에는 시간 창이 있습니다. 창을 초과하는 경우 , ACK 패킷은 독립적으로 전송됩니다 .

참고 2 : 연결을 닫을 때 적극적으로 닫힌 끝은 TIME_WAIT 상태를 경험 하고, 수동적으로 닫힌 끝은 CLOSE_WAIT   상태를 경험합니다.

보충 :

시간 창이란 해당 시간에 보낼 데이터가 없으면 ACK 전송이 너무 오래 기다리지 않고(대기 시간이 너무 길면 클라이언트가 ACK를 받지 못하면 다시 전송함) 의미입니다. ACK는 독립적으로 전송됩니다.

 

패킷을 별도로 보내고 받는 경우 TCP 프로토콜을 사용하면 최소 8개의 패킷(핸드셰이크 3개 + 웨이브 4개 + 전송 1개)이 필요하고, UDP 프로토콜을 사용하면 2개의 패킷(요청 패킷 1개 + 응답 그룹 1개)만 필요합니다. TCP 프로토콜을 사용하는 것보다 UDP를 사용하는 경우 상호 작용 프로세스의 데이터 양이 적으므로 성능은 더 좋지만 신뢰성도 희생되는 것을 볼 수 있습니다.

1.7 TIME_WAIT 상태

인터뷰 질문: TCP 프로토콜의 TIME_WAIT 상태는 무엇입니까? 이 상태는 왜 존재하는가?

연결을 적극적으로 닫는 끝은 TIME_WAIT 상태를 경험하게 되며, 이는 CLOSED 상태로 변경되기 전 2MSL 동안 지속됩니다 . 권장되는 TIME_WAIT 값은 2min 이지만 일반적으로 1~4min 입니다 .

MSL (최대 세그먼트 수명): 최대 세그먼트 수명 주기, IP 데이터그램이 네트워크에서 생존할 수 있는 가장 긴 시간을 나타냅니다 . 이 시간을 초과하는 IP 데이터그램은 무시됩니다.

홉 제한 : 각 IP 데이터그램에는 데이터그램이 링크에서 교차할 수 있는 최대 라우터 수인 홉 제한이 포함 됩니다. 이 숫자를 초과하면 IP 데이터그램이 무시됩니다. 홉 제한 필드는 8비트이므로 최대값은 255입니다.

Lost Duplicate /Wandering Duplicate: 라우팅 이상으로 인해 TCP 세그먼트가 네트워크에서 방황하여 시간 초과 후 세그먼트가 반복적으로 전송되어 중복이 발생합니다.

TIME_WAIT 상태 존재의 중요성:

1) 안정적인 TCP 전이중 연결 종료 달성 : 마지막 ACK가 손실된 후 재전송해야 할 수 있으므로 전송을 위해 TIME_WAIT 상태가 필요합니다.

2) 네트워크에서 오래된 중복 세그먼트가 사라지도록 허용 : TCP 연결이 끊어지고 동일한 IP 및 포트를 사용하여 온라인으로 연결이 설정된 경우 새 연결은 이전 연결로부터 보고서를 받을 수 있습니다. , 새 연결을 활성화하기 전에 이전 연결의 모든 패킷이 사라지는 것을 확인하려면 TIME_WAIT 상태에서 2MSL을 기다려야 합니다.

1.8 연결 포트 번호

TCP, UDP 및 SCTP 프로토콜에는 모두 포트 번호 개념이 있으며 모두 16비트 정수를 사용하여 포트 번호 범위를 나타냅니다.

서로 다른 프로토콜 간의 포트 번호 간에 충돌이 없으므로 TCP, UDP 및 SCTP에 대해 동일한 포트 번호를 동시에 열 수 있습니다.

서버에서 지정된 포트로 링크를 설정할 때 클라이언트도 서버와 통신하기 위해 임시 포트를 사용해야 하며, 임시 포트는 프로토콜 스택에 의해 자동으로 할당됩니다.

소켓 쌍 : 두 개의 연결 끝점(로컬 IP 주소, 로컬 TCP 포트 번호, 외부 IP 주소, 외부 TCP 포트 번호)을 정의하는 4-튜플인 소켓 쌍(IP + 포트)을 포함하는 TCP 통신 링크입니다.

일반적으로 사용되는 포트 번호 범위:

1) 0~1023, SSH 포트 번호 22와 같은 공용 서비스의 포트 번호

2) 1024~49151, 웹 서비스의 8080 포트와 같이 열린 수신 포트 번호를 등록하는 데 사용됩니다.

3) 49152~65535, 임시 포트 번호를 열고 서버와 통신하는 데 사용됩니다 .

참고: 포트 번호의 범위는 OS 에 따라 다를 수 있습니다 . 일반적으로 1024 이전의 포트는 예약된 포트이므로 자유롭게 사용할 수 없습니다.

질문: 서버가 전달할 수 있는 연결 수는 어떻게 결정됩니까?

클라이언트의 경우 물리적 수준 에서 소켓 연결도 파일로 간주되므로 파일 핸들(클라이언트 측 시스템)을 차지합니다.

논리적 레벨 에서는 5개의 튜플(프로토콜, 소스 IP, 소스 포트, 대상 IP, 대상 포트)을 사용하여 연결을 고유하게 식별하므로 열 수 있는 연결 수는 5개의 튜플에 따라 달라집니다. 조합이 많나요?

오해: 머신이 열 수 있는 포트 범위는 항상 65535 미만이므로 클라이언트 머신이 열 수 있다는 것을 이해하기 쉽습니다.

서버에 설정된 연결의 상한은 열 수 있는 포트 수입니다. 실제로 포트는 논리적인 개념이며, 위의 5튜플에 있는 각 요소의 값의 조합에 따라 설정된 연결의 개수가 달라집니다.

 

질문: 고정된 수의 클라이언트 시스템이 있고 동일한 서버에 수백만 개의 연결을 시작하려고 한다고 가정합니다. 포트 제한을 극복하는 방법은 무엇입니까?  

머신 수가 고정되어 있으므로 5개 튜플 ( 프로토콜, 소스 IP , 소스 포트, 대상 IP , 대상 포트 )에서 프로토콜, 소스 IP 및 대상 IP가 고정됩니다. 동일한 대상 포트(서버 포트)의 경우 동일한 클라이언트 시스템에서 열 수 있는 최대 포트 수는 65535를 초과하지 않습니다. 따라서 수백만 개의 연결을 시작하려면 여러 대상 포트(서버 포트)를 제공해야 합니다. ) . ), 각 포트는 포트 제한을 극복하여 60,000개의 다중 클라이언트 연결을 견딜 수 있습니다.

1.9 TCP 데이터 전송 과정(이해)

TCP 소켓에는 전송 버퍼가 있습니다 (전송 버퍼가 가득 찼을 때만 데이터가 전송됩니다(데이터를 바이트 단위로 전송하면 효율성이 떨어집니다). 이는 풀에 물을 채우는 것과 같으며 데이터는 한 번) 물 한 숟갈이 물 한 방울보다 효율적입니다.) SO_SNDBUF 옵션을 통해 설정하며, 데이터 전송 과정은 다음과 같습니다.

1) TCP 계층: 애플리케이션이 쓰기를 호출하면 커널은 애플리케이션 프로세스의 버퍼에서 모든 데이터를 복사하여 소켓의 송신 버퍼에 씁니다.

2) TCP 계층: 전송 버퍼가 모든 데이터를 저장할 수 없으면 응용 프로그램 프로세스는 절전 상태로 들어가고, IO 차단의 경우 전송 버퍼가 공간을 확보할 때까지 커널은 쓰기 시스템 호출에서 반환되지 않습니다. 사용자 프로세스가 전송 버퍼에 복사됩니다.

참고: 피어로부터 ACK를 받은 후에만 전송 버퍼의 확인된 데이터를 계속 지울 수 있습니다.

3) TCP 계층: 로컬 TCP는 MSS 크기 이하의 블록으로 데이터를 IP 계층으로 전송하며, 각 데이터 블록에는 TCP 헤더(20바이트)가 있으며, (MSS 값은 피어 MSS 옵션에 의해 전달됩니다.)

4) IP 계층: TCP 세그먼트에 IP 헤더를 설치하여 IP 데이터그램을 형성하고 대상 IP 주소에 따라 라우팅 테이블을 검색하여 나가는 인터페이스를 결정한 다음 해당 데이터 링크로 데이터를 보냅니다. 레이어는 IP 데이터그램이 여러 조각으로 나뉘어 전송될 수 있습니다.

5) 데이터 링크 계층: 각 데이터 링크는 출력 큐를 유지하며, 큐가 가득 차면 새 패킷을 폐기하고 프로토콜 스택을 따라 오류가 반환되며, TCP 계층은 오류를 캡처하여 재전송을 시도합니다. 섹션, 이 프로세스는 상위 계층 애플리케이션에서 인식되지 않습니다.

참고: 쓰기 시스템 호출이 성공적으로 반환됩니다. 이는 전송 버퍼를 재사용할 수 있다는 의미일 뿐 피어가 전송된 데이터를 수신했다는 의미는 아닙니다.

 

1.10 시간 초과 재전송 및 빠른 재전송

시간 초과 재전송 및 빠른 재전송은 컴퓨터 네트워크에서 사용됩니다.

손실된 패킷과 네트워크 정체를 처리하기 위한 두 가지 재전송 메커니즘.

1 ) 타임아웃 재전송

Timeout Retransmission은 송신자가 데이터 패킷을 보낸 후 타이머를 설정하는 것을 의미하며, 지정된 시간 내에 승인(ACK) 또는 중복 승인(Duplicate ACK)이 수신되지 않으면 송신자는 데이터 패킷이 손실된 것으로 간주한 후 패킷을 다시 전송합니다. 이 메커니즘은 타임아웃 가정을 기반으로 합니다. 즉, 패킷 손실의 원인은 네트워크 정체, 전송 지연 등일 수 있습니다. 타임아웃 재전송의 단점 은 데이터 패킷을 재전송하기 전에 타임아웃 기간을 기다려야 하므로 네트워크 전송이 비효율적이라는 것입니다 .

 

동작 : 시간 초과 내에 승인을 받지 못한 경우 보낸 사람은 패킷이 손실된 것으로 가정하고 패킷을 다시 보냅니다.

트리거 조건 : 타임아웃 재전송은 일반적으로 네트워크 정체 또는 전송 지연으로 인해 패킷 손실이 발생할 때 발생합니다.

2 ) 빠른 재전송

빠른 재전송은 수신자의 피드백 메커니즘을 기반으로 한 재전송 메커니즘입니다. 송신자가 데이터 패킷을 보내면 수신자는 데이터 패킷이 성공적으로 수신되었음을 나타내는 승인(ACK)을 송신자에게 보냅니다. 그러나 수신자가 순서와 맞지 않는 패킷을 수신한 경우(예를 들어 수신자가 패킷 5를 수신했지만 패킷 3을 수신하지 못한 경우, 패킷 4를 반복적으로 확인하고 데이터를 세 번 전송합니다. 패킷 4 이후 송신자는 패킷 3을 다시 전송합니다), 수신자는 특정 데이터 패킷이 손실되었음을 나타내는 Duplicate ACK 를 발신자에게 보냅니다 . 발신자가 연속해서 3 번의 반복 확인을 받으면 제한 시간을 기다리지 않고 해당 데이터 패킷을 즉시 재전송합니다 . 이를 통해 손실된 데이터 패킷을 신속하게 복구하고 네트워크 전송 효율성을 향상시킬 수 있습니다.

 

원리 : 순서가 잘못된 데이터 패킷을 수신한 후 수신자는 중복 ACK를 발신자에게 보냅니다.

동작 : 발신자가 특정 개수의 중복 확인을 연속해서(보통 3개) 수신하면 시간 초과를 기다리지 않고 즉시 해당 데이터 패킷을 재전송합니다.

트리거 조건 : 빠른 재전송은 일반적으로 네트워크 패킷 손실로 인해 데이터 패킷의 순서가 잘못되었을 때 발생합니다. 수신자는 중복 승인을 전송하여 패킷이 손실되었음을 발신자에게 알립니다.

요약하면, 타임아웃 재전송은 송신자가 설정한 타이머가 만료된 후 데이터 패킷을 재전송하는 것이고, 빠른 재전송은 수신자가 중복 확인을 보낸 후 즉시 데이터 패킷을 재전송하는 것입니다. 이 두 가지 재전송 메커니즘은 데이터 전송의 신뢰성과 효율성을 향상시키기 위해 다양한 상황에서 사용됩니다.

1.11 TCP 헤더 구조

팁: 데이터 전송 시간 추정

ping()을 사용하여 TCP 데이터 전송 시간을 추정합니다. 하나의 ping()은 84바이트 IP 데이터그램을 사용합니다.

30회 동안 ping()으로 측정된 평균 RTT 길이가 175ms이고 2000바이트의 데이터를 전송해야 하며 매번 40바이트를 전송하여 총 50회 전송한다고 가정합니다.

전송될 때마다 40바이트의 데이터 외에 20바이트의 IP 헤더와 20바이트의 TCP 헤더도 포함되어 총 80바이트가 포함됩니다. 이 2000바이트를 전송하는 데 걸리는 대략적인 시간은 대략적으로 추정할 수 있습니다. 175ms * 50회 = 8750ms입니다.

1.12 TCP 신뢰성 있는 전송

(1) 신뢰성 있는 전송이란 무엇입니까?

네트워크의 두 노드 사이의 통신을 위해서는 중간에 긴 링크를 통과해야 하며, 이 기간 동안 많은 문제가 발생할 수 있으므로 네트워크에서 직접 데이터를 전송하는 것은 신뢰할 수 없다고 생각합니다.

소위 신뢰성이란 데이터가 정상적이고 완전하며 질서 있는 방식으로 피어에 의해 수신될 수 있음을 의미합니다. TCP 프로토콜은 안정적인 통신을 달성하기 위해 다음 메커니즘을 사용합니다.

  1. ACK 메커니즘
  2. 일련번호 메커니즘
  3. 재배열 메커니즘
  4. 창 메커니즘

보충 :

TCP(전송 제어 프로토콜)의 안정적인 전송에는 재정렬과 창이라는 두 가지 중요한 메커니즘이 있습니다.

1) 재배치 메커니즘:

   재정렬이란 네트워크의 패킷이 비순차적 방식으로 수신기에 도착할 수 있다는 사실을 의미합니다. 이는 네트워크 토폴로지, 라우팅, 정체 등으로 인해 발생할 수 있습니다. TCP는 전송된 데이터 패킷을 식별하기 위해 시퀀스 번호를 사용하고, 수신자는 시퀀스 번호를 사용하여 데이터의 올바른 순서를 복원합니다.

   수신기가 순서가 잘못된 패킷을 수신하면 이러한 패킷을 캐시한 다음 시퀀스 번호별로 정렬하여 패킷이 올바른 순서로 상위 계층 응용 프로그램에 전달되도록 합니다. TCP는 수신 창을 사용하여 순서가 잘못된 패킷의 버퍼링과 순서를 관리합니다.

2) 창 메커니즘:

   윈도우 메커니즘은 TCP의 흐름 제어 및 혼잡 제어의 기초입니다. 송신자와 수신자 모두 창 크기 개념을 가지고 있습니다.

   보낸 사람의 창 크기는 보낼 수 있지만 아직 승인을 받지 못한 데이터의 양을 나타냅니다. 발신자는 수신자가 보낸 확인 정보를 기반으로 창 크기를 동적으로 조정하여 전송 속도를 제어하고 수신자가 제 시간에 처리할 수 없는 너무 많은 데이터를 보내는 것을 방지합니다.

   수신기의 창 크기는 수신할 수 있는 데이터의 양을 나타냅니다. 수신자는 창 크기 정보를 발신자에게 전송하여 현재 수신 능력을 발신자에게 알립니다. 송신자는 너무 많은 데이터를 전송하여 수신자의 버퍼 오버플로를 방지하기 위해 수신자의 창 크기에 따라 전송 속도를 제어합니다.

   윈도우 메커니즘을 사용하면 송신자와 수신자가 네트워크 상태와 수신자의 처리 능력에 맞게 데이터 전송 속도를 조정할 수 있으므로 안정적인 데이터 전송이 가능합니다.

요약하면 TCP는 재정렬 메커니즘과 창 메커니즘을 통해 안정적인 전송을 달성합니다. 재배열 메커니즘은 수신자가 순서가 잘못된 데이터 패킷을 올바르게 정렬할 수 있도록 보장하고, 창 메커니즘은 송신자와 수신자 간의 데이터 전송이 합리적이고 효율적으로 수행될 수 있도록 흐름 제어 및 혼잡 제어에 사용됩니다.

(2) ARQ 프로토콜이란 무엇입니까?

ARQ(Automatic Repeat Request) 프로토콜은 안정적인 데이터 전송을 위해 사용되는 프로토콜로 전송 계층에 위치합니다 . 데이터 통신에서 전송 오류와 손실된 데이터를 처리하고 수정하기 위한 메커니즘입니다.

ARQ 프로토콜의 주요 목표는 ACK 확인시간 제한 재전송 메커니즘을 도입하여 안정적인 데이터 전송을 보장하는 것입니다.

  1. ACK 확인 : 송신자는 데이터 패킷을 보낸 후 수신자의 확인을 기다립니다.
  2. 타임아웃 재전송 메커니즘 : 송신자가 일정 시간 내에 확인을 받지 못하거나 수신자가 데이터 패킷에 오류가 있음을 알리면 송신자는 데이터 패킷을 다시 전송합니다.

ARQ 프로토콜에는 세 가지 주요 모드가 있습니다 .

1) 중지 및 대기 ARQ : 송신자는 데이터 패킷을 보낸 다음 수신자의 확인을 기다리는 것을 중지합니다. 보낸 사람은 승인을 받은 후에만 다음 패킷을 보냅니다.

2) 연속 ARQ : 송신자는 각 데이터 패킷의 확인을 기다리지 않고 여러 데이터 패킷을 연속적으로 전송합니다. 수신자는 패킷을 수신한 후 일련의 패킷이 성공적으로 수신되었음을 나타내는 누적 승인을 보냅니다. 보낸 사람이 승인을 받지 못하거나 받은 승인이 오류를 나타내는 경우 해당 패킷을 다시 전송합니다. (파이프라인과 유사)

  1. Go-Back-N : 수신자가 오류나 패킷 손실을 감지하면 발신자는 확인되지 않은 패킷의 전체 창을 다시 보냅니다 .
  2. 선택적 반복 : 수신자가 오류나 패킷 손실을 감지하면 발신자는 전체 창의 모든 패킷이 아닌 문제의 패킷만 재전송합니다 .

3) 피드백 ARQ : 수신자는 데이터 패킷이 성공적으로 수신되었음을 나타내는 확인 메시지를 주기적으로 보냅니다 . 발신자는 수신된 확인 정보를 기반으로 재전송합니다.

 

참고 1 : 중지 및 대기 ARQ는 메시지의 요청 - 응답을 하나씩 처리해야 하므로 성능 문제가 발생할 수 있으므로 거의 사용되지 않습니다.

참고 2 : Kafka는 또한 애플리케이션 계층에서 메시지 전달 일관성을 보장할 때 연속 ARQ 피드백 ARQ와 유사한 구현 메커니즘을 사용합니다. 

(3) 정지 및 대기 ARQ

정지 및 대기 ARQ의 작동 원리는 다음과 같습니다.

1) 발신자는 수신자에게 데이터 패킷을 보낸 다음 수신자가 ACK로 응답할 때까지 기다리고 타이밍을 시작합니다.

2) 대기 프로세스 동안 발신자는 새로운 데이터 패킷 전송을 중지합니다.

3) 수신자가 데이터 패킷을 성공적으로 수신하지 못한 경우 수신자는 ACK를 보내지 않습니다. 발신자는 일정 시간 동안 기다린 후 데이터 패킷을 다시 보냅니다.

단점: 대기 시간이 길어 데이터 전송 속도가 느려집니다 .

(4) 고백엔

오랫동안 ACK를 기다리는 일시 중지된 ARQ 프로토콜의 단점을 극복하기 위해 연속 ARQ 프로토콜은 일련의 데이터 패킷을 지속적으로 보낸 다음 이러한 데이터 패킷의 ACK를 기다립니다.

슬라이딩 윈도우란 무엇인가요?

송신자와 수신자 모두 윈도우라고 불리는 일련의 데이터 프레임을 유지합니다 . 송신자의 창 크기는 수신자에 의해 결정됩니다. 목적은 수신자의 버퍼가 충분히 크지 않아 오버플로가 발생하는 것을 방지하기 위해 전송 속도를 제어하는 ​​것입니다. 동시에 흐름을 제어하면 네트워크 혼잡도 피할 수 있습니다. 이 프로토콜은 해당 창 내에서 확인되지 않은 패킷을 재전송해야 한다고 규정합니다.

고백엔이란?

N단계 백오프 프로토콜을 사용하면 발신자는 시간 초과를 기다리는 동안 계속해서 패킷을 보낼 수 있습니다. 전송된 모든 패킷에는 시퀀스 번호가 있습니다. Go-Back-N 프로토콜에서:

발신자는 다음 세 가지 이벤트에 응답해야 합니다 .

1) 상위 계층 비즈니스가 데이터를 보내고 send()를 호출할 때 보낸 사람은 먼저 전송 창이 가득 찼는지 확인 해야 합니다 .

2) 발신자는 ACK를 수신합니다. 이 프로토콜에서 시퀀스 번호 n이 있는 패킷에 대한 확인은 누적 확인 의 형태를 취하며, 이는 수신자가 시퀀스 번호 n(n 포함) 이전의 모든 패킷을 올바르게 수신했음을 나타냅니다.

3) 발신자는 타임아웃을 기다립니다: 타임아웃이 발생하면 발신자는 전송되었지만 아직 확인되지 않은 모든 패킷을 다시 전송하고 , 발신자는 창에서 모든 패킷을 보낸 후 가장 큰 유효한 확인을 확인합니다. 그런 다음 가장 큰 유효한 승인이 있는 마지막 패킷부터 재전송을 시작합니다.

수신자의 경우 처리 작업은 다음과 같습니다.

1) 시퀀스 번호 n이 있는 패킷이 올바르게 수신되고 순서와 일치하면 수신자는 해당 패킷에 대한 ACK로 응답하고 처리를 위해 상위 계층 서비스에 패킷을 넘깁니다. 그렇지 않으면 패킷이 폐기됩니다.

2) 패킷 n이 수신되어 처리를 위해 상위 계층 비즈니스로 넘겨졌다면 이는 n보다 작은 모든 패킷이 올바르게 수신되어 처리를 위해 전달되었음을 의미합니다.

 

예를 들어, 송신자는 시퀀스 번호 1, 2, 3, 4, 5의 패킷을 한 번에 전송하는데, 시퀀스 번호 2의 패킷이 손실되면 시퀀스 번호 3, 4, 5의 패킷도 올바르게 수신됩니다. (그러나 수신 요구 사항을 충족하지 않습니다. 주문) 발신자는 여전히 패킷 2, 3, 4 및 5를 재전송합니다.

 

Go-Back-N 이 사용하는 기술에는 일련번호, 누적 확인, 검증, 시간 초과 재전송 등이 포함됩니다.

 

단점: Go-Back-N은 stop-and-wait 프로토콜의 긴 대기 시간 문제를 개선하지만 여전히 성능 문제가 있습니다. 창이 매우 클 때 재전송이 발생하면 메시지 재전송 간격이 늘어나고, 더 커질 것이며 효율성이 크게 감소합니다.

(5) 선택적 반복(선택적 재전송)

Go-Back-N 프로토콜과 비교하여 Selective-Repeat 프로토콜은 불필요한 재전송을 방지하고 송신자가 수신자에서 손실되거나 손상된 패킷만 재전송하도록 허용하여 효율성을 향상시킵니다.

선택적 반복 프로토콜에서 발신자는 다음 세 가지 이벤트에 응답해야 합니다.

1) 상위 계층으로부터 데이터를 수신한다. 상위 계층으로부터 데이터를 수신한 후 송신자는 해당 패킷에 사용할 수 있는 다음 시퀀스 번호를 확인해야 합니다. 시퀀스 번호가 창에 있으면 데이터가 전송됩니다.

2) ACK를 수신합니다.

  1. ACK가 수신되고 패킷이 창 내에 있는 경우 보낸 사람은 확인된 패킷을 수신된 것으로 표시합니다.
  2. 패킷 시퀀스 번호가 기본 시퀀스 번호와 같으면 윈도우 시퀀스 번호는 시퀀스 번호가 가장 작은 확인되지 않은 패킷으로 이동합니다.
  3. 창이 이동되고 창 내에 시퀀스 번호가 있는 전송되지 않은 패킷이 있는 경우 해당 패킷이 전송됩니다.

3) 시간 초과. 시간 초과가 발생하면 보낸 사람은 전송되었지만 아직 확인되지 않은 패킷을 다시 전송합니다.

참고: GBN 과 달리 SR 프로토콜의 각 그룹 에는 독립적인 타이머가 있습니다.

수신 창의 기본 번호가 4이고 패킷 길이도 4라고 가정하면 수신자는 다음 세 가지 이벤트에 응답해야 합니다.

1) 시퀀스 번호가 [4,7] 이내인 패킷이 올바르게 수신됩니다. 이 경우,

  1. 수신된 패킷이 수신자의 창(시퀀스 번호가 (4, 7] 범위에 있음) 내에 있으면 ACK가 전송됩니다.
  2. 패킷이 이전에 수신되지 않은 패킷인 경우(순서 번호가 4보다 작음) 캐시됩니다.
  3. 패킷의 시퀀스 번호가 기본 시퀀스 번호 4와 같을 경우 해당 패킷과 이전에 캐시된 일련 번호의 연속된 패킷이 상위 계층으로 전달되고 수신 창이 앞으로 이동합니다.

2) 시퀀스 번호가 [0,3]인 패킷이 올바르게 수신되었습니다. 이 경우, 패킷이 수신자에 의해 이전에 확인된 패킷이더라도 ACK가 생성되어야 합니다. 수신자가 패킷을 승인하지 않으면 송신자 창은 앞으로 이동할 수 없습니다.

3) 그 외의 경우에는 그룹을 무시합니다.

수신자의 경우, 패킷이 순서 여부에 관계없이 올바르게 수신되면 수신자는 해당 패킷에 대한 ACK를 송신자에게 반환합니다. 순서가 잘못된 패킷은 모든 손실된 패킷이 수신될 때까지 캐시됩니다. 이때 패킷 배치는 순서대로 상위 계층에 전달될 수 있으며 수신 창은 앞으로 이동할 수 있습니다.

 

예: 위 그림에서 시퀀스 번호 2의 패킷이 손실된 경우 수신자는 메시지를 수신한 후 매번 최대 확인 ACK 1로 응답합니다. 발신자는 ACK를 받은 후 패킷 2를 다시 전송합니다. 그룹 2에 도달한 후 수신 창을 앞으로 밀고 ACK5를 반환합니다. 이때 [0, 5] 범위의 모든 메시지는 정상적으로 수신되었으며 처리할 수 있습니다.

(6) TCP 프로토콜과 ARQ 프로토콜은 어떤 관계가 있나요?

TCP 는 ARQ 의 승인 및 재전송 메커니즘을 사용하여 안정적인 데이터 전송을 달성하는 ARQ 프로토콜을 기반으로 합니다 . TCP 프로토콜은 ARQ 프로토콜의 변형을 사용합니다. TCP에서는 송신자가 데이터를 작은 데이터 세그먼트로 나누고 ARQ 메커니즘을 사용하여 안정적인 전송을 보장합니다. 발신자는 수신자의 확인을 기다리고 필요한 경우 재전송합니다. 수신자는 수신된 데이터를 확인하고 확인 메시지를 보내거나 재전송을 요청합니다.

(7) RTT와 RTO를 어떻게 이해하나요?

RTT(Round-Trip Time): 왕복 지연. 이는 발신자가 데이터를 보낸 시간부터 발신자가 수신자로부터 확인을 받는 시간까지 경험한 총 지연을 나타냅니다(수신자가 데이터를 받은 후 즉시 확인을 보낸다고 가정). 이는 세 부분으로 구성됩니다.

  1. 링크 전파 시간( 전파 지연 ) ; (링크 전파 시간은 신호가 물리적 링크에서 전파되는 데 필요한 시간을 의미합니다. 송신자에서 수신자에게 전송된 신호로부터의 시간 지연입니다.)
  2. 종단 시스템의 처리 시간 ; (종단 시스템 처리 시간은 네트워크 통신에서 데이터가 수신 종단 시스템에 도달한 후 처리 및 연산에 필요한 시간 지연을 의미합니다.)
  3. 라우터 캐시에서의 큐잉 및 처리 시간( 큐잉 지연 ) ;(라우터의 캐시에서 큐잉 및 처리 시간은 데이터 패킷이 라우터에 들어간 후 처리 및 전달되기까지 기다리는 시간 지연을 나타냅니다.)

그 중 처음 두 부분의 값은 TCP 연결에 대해 상대적으로 고정되어 있으며, 전체 네트워크의 혼잡 수준이 변함에 따라 라우터 캐시의 큐잉 및 처리 시간이 변경됩니다. 따라서 RTT 의 변화는 네트워크 혼잡 정도를 어느 정도 반영합니다 .

 

RTO(Retransmission TimeOut): 재전송 시간 초과; 시간 초과 재전송 시간은 RTT에 따라 동적으로 조정되고 프로토콜 스택에 의해 자동으로 제어됩니다. 일반적으로 RTO는 RTT의 1.5배 이상입니다. RTO가 너무 작으면 재전송이 시작될 수 있습니다. 너무 자주 RTO가 너무 크면 재전송 대기 시간이 너무 길어질 수 있습니다.

1.13 TCP 흐름 제어

(1) 흐름제어란 무엇인가?

두 당사자가 통신할 때 발신자의 속도가 수신자의 속도와 반드시 같지는 않습니다 . 발신자의 전송 속도가 너무 빠르면 수신자가 이를 처리할 수 없게 됩니다. 이때 수신자는 해당 데이터만 처리할 수 있습니다. 캐시 영역(비순차적인 데이터 패킷도 캐시 영역에 저장됨)이 있으며, 캐시 영역이 가득 차고 송신자가 여전히 데이터를 전송 중인 경우 수신자는 수신한 데이터 패킷만 폐기할 수 있습니다 . ; 많은 수의 패킷 손실은 네트워크 자원의 엄청난 낭비입니다 . 따라서 수신자와 송신자가 동적으로 균형을 이루도록 송신자의 전송 속도를 제어해야 합니다. 송신자의 전송 속도를 제어하는 ​​것을 호출합니다. 흐름 제어.

(2) 흐름을 제어하는 ​​방법은 무엇입니까?

통신의 양 당사자 모두 두 개의 슬라이딩 창이 있습니다.

  1. 하나는 수신 창이라고 하는 데이터를 수신하는 데 사용됩니다.
  2. 하나는 혼잡 창(즉, 전송 창)이라고 하는 데이터를 보내는 데 사용됩니다.

수신 창의 크기를 피드백하는 데 사용되는 ACK 알림을 창 알림이라고 합니다.

수신자가 데이터 패킷을 수신할 때마다 ACK를 보낼 때 버퍼에 얼마나 많은 공간이 남아 있는지 발신자에게 알려줄 수 있습니다 . 또한 버퍼 영역에 남아 있는 공간을 수신 창의 크기라고 부르며, 이는 win 변수로 표시됩니다.

발신자가 이를 수신한 후 자체 전송 속도, 즉 자체 송신 창 크기를 조정합니다 .발신자가 수신한 수신 창 크기가 0이 되면 발신자는 데이터 전송을 중지합니다. 대규모 패킷 손실을 방지합니다.

위 프로세스는 TCP 의 부정적인 피드백 메커니즘 입니다. 수신 측의 피드백을 통해 송신 측의 속도가 결정됩니다.

 

참고: 수신 측에서는 수신 창 크기를 송신 측에 직접적이고 적극적으로 알릴 수 없지만 송신 창과 수신 창의 동적 조정을 통해 수신 측에서는 흐름을 달성하기 위해 송신 측의 전송 속도에 간접적으로 영향을 미칠 수 있습니다. 제어.

 

질문 1 : 수신 창이 0 이기 때문에 발신자가 데이터 전송을 중지하는 경우 데이터를 다시 보낼 수 있는지 어떻게 판단합니까?

1) 발신자가 수락 창 win = 0 을 수신하면 메시지 전송을 중지 하고 동시에 타이머를 시작하여 일정한 간격으로 발신자에게 메시지를 보냅니다.

수신측에서는 프로브 메시지를 보냅니다 .

2) 수신자는 메시지를 수신한 후 ACK를 통해 현재 수신 창 win의 크기를 피드백합니다.

3) ACK를 받은 후 보낸 사람은 수신 창 승리의 크기를 결정합니다.

  1. win = 0이면 타이머를 다시 새로 고치고 다음 시험 메시지가 전송될 때까지 기다립니다.
  2. win > 0이면 창 크기에 따라 적절한 양의 데이터를 보냅니다.

질문 2: 수신창 크기는 고정되어 있나요?

고정되어 있지 않으며 수신 창의 크기는 특정 알고리즘에 따라 동적으로 조정 됩니다 .

 

질문 3 : 수신 창은 클수록 좋은가요?

아니요, 한계 수익 감소의 법칙에 따라 수신 창이 특정 값에 도달하면 이를 늘려도 패킷 손실률은 줄어들지 않으며 메모리도 소모됩니다 . 따라서 수신 윈도우의 크기는 네트워크 환경과 송신 혼잡 윈도우에 따라 동적으로 조정되어야 합니다.

 

질문 4 : 송신 창과 수신 창은 동일합니까?

반드시 같을 필요는 없습니다. 수신자가 ACK 메시지를 보낼 때 송신자에게 자신의 수신 창 크기를 알려주고 보낸 사람의 송신 창은 그에 따라 자체 송신 창을 설정하지만 반드시 같지는 않습니다. ; 수신자가 ACK 메시지를 보내고 이미 자신의 버퍼에 쌓인 데이터를 처리하고 있으므로 일반적인 상황에서는 수신 창 >= 송신 입니다 .

1.14 TCP 혼잡 제어

혼잡 제어와 흐름 제어는 매우 유사한 작업을 수행하지만 서로 다른 문제를 해결합니다.

  1. 혼잡 제어는 네트워크 혼잡 과 관련이 있습니다 .
  2. 그리고 흐름 제어는 수신기의 캐시 상태 와 연관되어 있습니다 .

(1) 혼잡제어란 무엇인가?

호스트 A가 호스트 B로 데이터를 전송한다고 가정합니다. 두 호스트가 데이터 패킷을 전송할 때 송신자가 수신자로부터 오랫동안 ACK를 받지 못하면 송신자는 자신이 보낸 데이터 패킷이 손실되었다고 생각하고 손실된 데이터 패킷을 다시 전송하게 됩니다.

그러나 실제 상황에서는 이때 너무 많은 호스트가 채널 리소스를 사용하고 있어 네트워크 정체가 발생할 가능성 이 있으며, A가 보낸 데이터 패킷이 중간에 차단되어 오랫동안 B에 도달하지 못한 경우도 있습니다. 이때 A는 패킷 손실이 발생한 것으로 잘못 판단하여 데이터 패킷을 재전송하게 된다.

그 결과 채널 자원이 낭비될 뿐만 아니라 네트워크를 더욱 혼잡하게 만듭니다. 그러므로 혼잡제어가 필요하다.

(2) 네트워크의 혼잡 상황을 어떻게 알 수 있나요?

A와 B가 연결을 맺은 후 B에게 데이터를 보낼 수 있습니다. 그러나 이때 A는 현재의 네트워크 혼잡 상황을 알지 못하며, 이 때 A는 한 번에 몇 개의 데이터 패킷을 연속적으로 보내야 하는지 알 수 없습니다. 시간.

혼잡 창(Congestion Window) : A가 한 번에 연속적으로 전송하는 데이터 패킷의 수를 혼잡 창(Congestion Window)이라고 하며 , N은 이때의 혼잡 창의 크기를 나타냅니다 . 네트워크 혼잡을 감지하기 위해 두 가지 전략을 채택할 수 있습니다.

1) 선형 증가: 데이터 패킷이 시간 초과되지 않는 경우(패킷 손실 없음) 먼저 테스트할 데이터 패킷을 보냅니다. 그러면 다음에는 2개가 전송되고, 타임아웃 이벤트가 발생하지 않으면 다음에는 3개가 전송되는 식으로 N = 1, 2, 3, 4, 5....

2) 지수적 증가 : 하나씩 늘리기에는 너무 느리기 때문에 처음에 1개를 보내면 되고, 타임아웃이 발생하지 않으면 2개를 보내면 된다. 그래도 타임아웃 이벤트가 안 보내지면 4개를 보낸 다음 8개를 보내면 된다.. ., 속도를 두 배로 늘리는 비유를 사용하십시오. 즉, N = 1, 2, 4, 8, 16...

단점 : 첫 번째 방법이든 두 번째 방법이든 결국 병목값이 발생하게 됩니다 . 그러나 첫 번째 경우 성장 속도가 너무 느리고

병목 값은 매우 느리게 도달할 수 있으며, 두 번째 경우에는 성장률이 너무 빠르면 병목 값에 빨리 도달할 수 있습니다.

너무 느리거나 너무 빠른 감지 문제를 해결하기 위해 첫 번째 방법과 두 번째 방법을 결합할 수 있습니다. 처음에는 지수 증가를 사용하고 특정 임계값( ssthresh 로 기록됨 )까지 증가한 후에는 선형 증가로 변경합니다. . 우리는 지수 성장 단계의 느린 시작 과 선형 성장 단계의 혼잡 회피를 호출합니다 .

그림 1 느린 시작

 (3) 병목 현상이 발생하면 어떻게 처리합니까?

        혼잡 윈도우(Congestion Window)가 증가함에 따라 전송 속도도 계속 증가하며, TCP에서 패킷 시간 초과 및 재전송이 발생하면 네트워크 혼잡이 발생한 것으로 간주됩니다.

        1) 이때 ssthresh 값은 현재 혼잡 윈도우의 절반으로 업데이트되며, 위 그림에서는 24의 절반인 12로 업데이트됩니다.

        2) cwnd 값을 1로 업데이트합니다.

        3) 그런 다음 위 그림과 같이 느린 시작-혼잡 회피를 계속 수행합니다.

        TCP 송신자가 3번 연속으로 반복해서 승인을 받으면 네트워크 정체로 인한 것이 아닌 정상적인 네트워크 패킷 손실로 간주하는데, 이는 빠른 복구 알고리즘의 영향 입니다 .

        1) 손실된 패킷을 재전송합니다.

        2) 빠른 복구 알고리즘을 실행합니다.

 그림 2 혼잡 회피 

 (4) 속회복이란 무엇입니까?

시간 초과 이벤트가 발생하는 경우 반드시 네트워크 정체로 인한 것은 아닐 수도 있습니다 . 데이터 패킷이 손실되거나 손상되었기 때문일 수도 있습니다. 혼잡 제어로 간주하면 초기 상태부터 시작하면 제어가 더 엄격해지고 전송 속도가 낮아질 수 있습니다 .

위의 상황에서는 중복 ACK를 통해 처리합니다. 즉, 연속 확인을 수신하면 데이터 패킷이 손실되었으며 손실된 데이터 패킷을 신속하게 재전송할 수 있음을 나타냅니다.

A가 M1, M2, M3, M4, M5...N 데이터 패킷을 B에게 보낸다고 가정합니다. B가 M1, M2, M4...를 수신했지만 M3을 수신하지 못한 경우 이 시점에서 M2가 다시 확인됩니다. 즉, A에게 말한 후입니다. M3가 아직 수신되지 않았다면 분실되었을 수 있습니다.

A가 M2를 확인하는 3개의 연속 ACK를 수신 하고 M3 시간 ​​초과 이벤트가 아직 발생하지 않은 경우 . A는 M3가 손실될 수 있음 을 알고 있으며 , 이때 A는 M3가 설정한 타이머가 만료될 때까지 기다리지 않고 신속하게 M3를 재전송합니다 . 그리고 ssthresh=MAX/2 로 조정하는데 이때 제어창 N은 1 로 재설정 되지 않고 N=ssthresh 가 직접 설정되어 선형적으로 증가한다 . 이 프로세스를 빠른 복구라고 하며, 빠른 복구가 포함된 TCP 버전을 TCP Reno라고 합니다.

그림 3 빠른 복구 

참고: 또 다른 TCP 버전에서는 동일한 ACK 3개가 수신되거나 타임아웃 이벤트가 발생하는지 초기 상태부터 혼잡 창 크기를 1 로 설정하는데, 이 버전을 TCP Tahoe 라고 합니다 .

1.15 TCP/IP 프로토콜 스택 보고서 형식 예

UDP 통신을 예로 들어 TCP/IP 모델의 각 계층의 메시지 구조를 살펴보세요.

(1) 링크 레이어

(2) 네트워크 계층(IP 프로토콜)

(3) 전송 계층(UDP 프로토콜)

결론적으로:

MAC 주소는 이더넷의 산물입니다.

IP 주소는 네트워크 계층의 산물입니다.

포트는 전송 계층의 산물입니다.

(4) ARP 프로토콜(네트워크 계층)

주소 확인 프로토콜인 주소 확인 프로토콜은 IPv4 주소를 하드웨어 주소(MAC 주소)에 매핑합니다.

방송망;

 (5) ICMP 프로토콜(네트워크 계층)

 네트워크 제어 메시지 프로토콜인 인터넷 제어 메시지 프로토콜(Internet Control Message Protocol)은 호스트와 라우터 간의 메시지 통신을 처리합니다.

이 기사에 대한 WORD 또는 PDF 관련 문서가 필요한 경우 댓글 영역에 메시지를 남겨주세요! !

이 기사에 대한 WORD 또는 PDF 관련 문서가 필요한 경우 댓글 영역에 메시지를 남겨주세요! !

이 기사에 대한 WORD 또는 PDF 관련 문서가 필요한 경우 댓글 영역에 메시지를 남겨주세요! !

또는

셀프 픽업: https://download.csdn.net/download/weixin_47156401/88336194

추천

출처blog.csdn.net/weixin_47156401/article/details/132780015