답변:
우리 TCP segment
는 TCP 헤더와 (상위) 응용 계층에서 오는 응용 프로그램 데이터 조각 (패킷)을 구성하는 프로토콜 데이터 단위 라고 말합니다 . 로 전송 계층 데이터는 일반적으로 이름 segment
과 네트워크 계층 데이터 단위는 다음과 같이 이름 datagram
하지만 우리는 전송 계층 프로토콜로 UDP를 사용할 때 우리는 말을하지 않는 UDP segment
대신, 우리가 말한다 UDP datagram
. UDP 데이터 단위를 분할하지 않기 때문이라고 생각합니다 (TCP를 사용할 때 전송 계층에서 분할이 이루어짐).
원래 TCP RFC는 "세그먼트"라는 용어를 어떻게 사용하는지에 대해 모호합니다.
경우에 따라 "세그먼트"라는 용어는 전송중인 응용 프로그램 데이터 스트림의 현재 부분 만 나타내며 TCP 헤더는 제외됩니다. 예를 들어, TCP "MSS (Maximum Segment Size)"는이 메시지에서 응용 프로그램 데이터 청크의 최대 크기이며 TCP 헤더는 계산하지 않습니다.
그러나 다른 경우에는 "세그먼트"라는 용어는 TCP 헤더를 포함하여 전체 TCP 메시지를 포함합니다. 실제로, 적어도 하나의 경우에, 사양은 애플리케이션 데이터 (예 : 일반 Acks)가없는 TCP 세그먼트를 언급합니다.
하나의 전체 IP 메시지는 "데이터 그램"입니다.
원래 IP RFC는 링크 계층 메시지를 "패킷"이라고합니다. IP 데이터 그램은 소형 패킷 네트워크의 패킷 크기 제한에 맞게 "조각"으로 나눌 수 있습니다.
IEEE 802.3 / 이더넷 링크 계층은 단일 연속 물리 계층 전송을 "패킷"이라고합니다. 패킷의 MAC 데이터 링크 부분을 "프레임"이라고합니다. 프레임은 대상 MAC 주소로 시작하고 프레임 확인 시퀀스로 끝납니다. IP 데이터 그램 (또는 그 단편)을 포함 할 수있는 프레임 부분을 "MAC 클라이언트 데이터 필드"라고합니다.
따라서 기술적으로 "TCP 패킷"또는 "IP 패킷"과 같은 것은 없습니다. 패킷은 IP 아래 계층의 용어입니다. TCP에는 "세그먼트"가 있고 IP에는 "데이터 그램"이 있습니다.
TCP 세그먼트는 개념 일 뿐이며, IP 조각 모음과는 다릅니다.
ip mtu보다 큰 데이터를 보내면 하나의 ip 패킷에 넣어 지지만 ip 레이어는 ip 패킷이 전송하기에 너무 길다는 것을 알기 때문에 큰 패킷을 여러 조각으로 나눕니다. 식별자이지만 오프셋과 데이터 길이가 다릅니다. 수신 측은 모든 피스를 수집 할 책임이 있으며, 모든 피스를 수신 한 후 모든 피스를 하나의 전체 IP 패킷으로 재 조립하여 상위 프로토콜 계층으로 푸시합니다.
그러나 tcp 레이어는 다른 동작을합니다. 충분히 큰 데이터를 보내면 tcp 레이어는 데이터를 하나의 tcp 패킷에 넣지 않고 조각으로 나눕니다 (그러나 ip는 않습니다), 원시 데이터의 일부를 하나의 tcp 패킷으로 가져 와서 푸시합니다. tcp packet to ip layer, tcp 패킷의 길이는 mss에 의해 결정되며, 나중에 나머지 데이터의 다른 부분을 다른 tcp 패킷으로 검색하고 모든 데이터가 전송 될 때까지 프로세스를 반복합니다.
tcp가 mss를 사용하지 않으면 끔찍합니다. mss보다 큰 데이터를 전송한다고 가정하면 하나의 tcp 패킷에만 저장됩니다 (데이터는 사용되지 않은 ms로 인해 작은 조각으로 분할되지 않음) .tcp 패킷은 ip mtu보다 크므로 ip는 tcp를 분할합니다 조각으로 패킷. tcp 패킷은 조각 중 하나라도 손실되면 시간과 대역폭을 낭비하여 다시 전송됩니다.
추신 : tcp_mss = ip_mtu-tcp_header
TCP는 응용 프로그램 계층에서 데이터를 수신하고이 데이터를 여러 데이터 세그먼트로 '잘라냅니다'. TCP 헤더가 추가 된 원본 데이터 조각 이 헤더의 일부는 수신 측의 TCP 프로토콜이 모든 수신 세그먼트 (헤더를 뺀 것)를 올바른 순서로 배치하고 원래 데이터를 다시 어셈블하여 애플리케이션 계층으로 전송하는 데 사용되는 시퀀스 번호입니다. .
따라서 귀하의 질문에 대답하십시오. 'TCP 패킷'이라는 용어는 실제로 존재하지 않습니다. 이를 헤더와 데이터 섹션으로 구성된 '세그먼트'라고합니다. 헤더 자체는 시퀀스 번호, 체크섬 및 소스 및 대상 포트 번호를 포함하는 여러 '필드'로 구성됩니다.
TCP 연결로 생각 된 데이터를 보낼 때 전송하는 데이터의 양이 단일 패킷에서 연결에 허용 된 최대 바이트 크기를 초과 할 수 있습니다. 이 "최대 세그먼트 크기"(MSS라고도 함) 양은 두 TCP 끝점 (클라이언트와 서버) 사이의 연결 시간에 "협상"(1)입니다. OSI 레벨 4 프로토콜 TCP는 분산 / 수집을 담당합니다. 이는 데이터 스트림이 더 작은 부분 (세그먼트라고 함)으로 분할되어 네트워크를 통해 별도로 전송됨을 의미합니다. 다른 쪽에서, TCP 계층은 패킷이 전송 된 것처럼 스트림을 재구성하기 위해 올바른 순서로 패킷을 다시 수집해야합니다. 세그먼트가 출발지와 동일한 순서로 목적지에 도착할 것임을 알 수있는 것은 없습니다. 이것이 패킷의 번호를 매기는 이유이기도합니다. 더, 패킷은 수신자에 의해 하나씩 개별적으로 확인되지만 (2) 때때로 패킷이 손실 될 수 있습니다. 그러면 패킷의 대상에서 이미 터로 ACK가 반환되지 않습니다. 그런 다음 이미 터가 다시 보내야합니다 (TCP의 역할이기도 함). 때때로 패킷이 올바르게 수신되었지만 이미 터가 ack를 수신하지 못합니다 (패킷이 다시 손실 됨). 이 경우 이미 터가 다시 보내지 만 수신자는 이미 수신 한 것을보고 (즉, Dup 패킷)이를 제거하고 보낸 사람에게 ack를 다시 보냅니다.
또한 처리량을 향상시키기 위해 이미 터는 여러 패킷을 직렬로 전송할 수 있으며 이전 ack가 다음 패킷을 보낼 때까지 기다릴 필요가 없습니다. 또한 TCP 프로토콜의 일부이며 슬라이딩 윈도우라고합니다. ack에 보류중인 전송 패킷 수는 제한되어 있습니다.
(1) 실제로, 협상은 전혀 없으며, 각 엔드 포인트는 그가 처리 할 수있는 최대 크기를 알려줍니다. 이 값에는 20 바이트의 IP 헤더와 20 바이트의 TCP 헤더가 포함되지 않습니다. (2) 단일 패킷으로 여러 패킷을 확인할 수도 있습니다.
데이터 그램은 IP 네트워크에서 전송되거나 UDP와 같은 비 연결 프로토콜을 사용하여 캡슐화 된 데이터입니다. 패킷은 TCP와 같은 연결 지향 프로토콜을 위해 캡슐화 된 데이터입니다. 세그먼트는 TCP를 통해 전송되는 데이터 스트림의 일부입니다. W.Richard Stevens "TCP / IP 그림"을 참조 하여이 모든 것들에 대해 훨씬 더 잘 설명하십시오.
이와 같은 용어에 대한 "일반적인"용어는 PDU (Protocol Data Unit)입니다.
LAYER # - OSI NAME - COMMON PROTOCOL OR USE - PDU NAME
------- ------------ ---------------------- --------------------------
Layer 1 - Physical - Transceiver - bits, or a physical signal
Layer 2 - Datalink - Ethernet - frame
Layer 3 - Network - IP - packet
Layer 4 - Transport - TCP - segment
Layer 5 - Session - SIP - data, request, or response
Layer 6 - Presentation - Encryption/compression - data, request, or response
Layer 7 - Application - HTTP - data, request, or response
계층 4 이상에서 특정 프로토콜로 인해 문제가 발생하는 경우가 있습니다 (예 : 현재까지는 순수한 세션 프로토콜인지 전혀 모르고 일반적인 "프레젠테이션"프로토콜과 같은 것은 없습니다. 그러나 많은 소프트웨어 / 통신 스택에서 거의 별개의 계층입니다.)
또한 앞에서 언급했듯이 이러한 PDU 각각에는 페이로드 또는 데이터와 다른 헤더가 있습니다. 헤더에는 데이터에 대한 정보와 다른 쪽의 검증을위한 체크섬이 있습니다.