Formato de encabezado TCP y encapsulación

12.3 Encabezado y encabezado TCP

La siguiente figura muestra la encapsulación de TCP en un datagrama IP:
Inserte la descripción de la imagen aquí
el encabezado TCP es seguido inmediatamente por el encabezado IP o el encabezado de extensión IPv6, que a menudo es de 20 bytes (sin el campo de opción por defecto). Con el campo de opción, el encabezado TCP puede tener hasta 60 bytes de longitud . Los campos de opciones comunes incluyen tamaño máximo de segmento , marca de tiempo , escala de ventana y ACK selectivo .

El encabezado TCP es mucho más complicado que los protocolos como UDP, porque cada segmento que mantiene la conexión debe admitir la información de estado más reciente. El formato del encabezado TCP se muestra a continuación:
Inserte la descripción de la imagen aquí

La longitud estándar del encabezado TCP es de 20 bytes a menos que aparezca el campo de opción. El campo de longitud del encabezado proporciona el tamaño del encabezado en unidades de 4 bytes (el valor mínimo es 5). campo de sombra ( número de acuse de recibo (Número Acknowledagment), el tamaño de la ventana (Window Size) y ECE bits, y ACK bits) para los datos de flujo en la dirección inversa asociada con el remitente del segmento de mensaje.

Campo Longitud Significado
Puerto de origen 16 bits Puerto de origen, identificando qué aplicación enviar
Puerto de destino 16 bits Puerto de destino, identificando qué aplicación recibir
Número de serie 32 bits Campo de número de secuencia. Cada byte en el flujo de datos transmitido en el enlace TCP se codifica con un número de secuencia. El valor del campo de número de secuencia se refiere al número de secuencia del primer byte de los datos enviados en este segmento.
Numero de confirmacion 32 bits El número de confirmación es el número de secuencia del primer byte de los datos que se espera recibir el siguiente segmento de la otra parte, es decir, el número de secuencia del byte de datos que se recibió con éxito la última vez más 1. Solo el indicador ACK es 1, este campo es válido.
Longitud del encabezado 4 bits La longitud del encabezado indica qué tan lejos está el inicio de datos del segmento TCP desde el inicio del segmento TCP, con 32 bits (4 bytes) como unidad de cálculo. Hay un encabezado de 60 bytes como máximo. Si no hay un campo de opción, normalmente es de 20 bytes.
Bit reservado 4 bits Se requiere 0
CWR 1 bit Reducción de la ventana de congestión (el remitente reduce su tasa de envío)
ECE 1 bit ECN echo (el remitente recibió un anuncio de congestión anterior)
URG 1 bit El puntero efectivo del puntero de emergencia. Le dice al sistema que hay datos urgentes en este segmento, que deben transmitirse lo antes posible (equivalente a datos de alta prioridad). Raramente usado
ACK 1 bit Confirme que el número de serie es válido. El campo del número de confirmación solo es válido cuando ACK = 1. Cuando ACK = 0, el número de confirmación no es válido.
Pensilvania 1 bit El receptor de identificación debe entregar este segmento a la capa de aplicación lo antes posible. Al recibir el segmento TCP con PSH = 1, el proceso de solicitud de recepción se debe entregar lo antes posible, en lugar de esperar a que se llene todo el búfer antes de entregarlo hacia arriba.
RST 1 bit Reconstruya la ID de conexión. Cuando RST = 1, indica que se produjo un error grave en la conexión TCP (por ejemplo, debido a un bloqueo del host u otras razones), debe liberar la conexión y luego restablecerla.
SYN 1 bit El número de serie de sincronización se usa para iniciar una conexión. SYN = 1 significa que esta es una solicitud de conexión o una solicitud de aceptación de conexión.
FIN 1 bit El creador completa la ID de la tarea de envío. Se usa para liberar una conexión. FIN = 1 indica que los datos en el extremo de envío de este segmento han sido enviados y solicita liberar la conexión.
Tamaño de la ventana 16 bits Ventana: control de flujo TCP. La ventana comienza con el valor indicado en el campo de número de secuencia de confirmación. Este valor es el número de bytes que el extremo receptor espera recibir. El tamaño máximo de la ventana es de 65535 bytes.
Suma de comprobación 16 bits El campo de verificación, incluido el encabezado TCP y los datos TCP, es un campo obligatorio que debe ser calculado y almacenado por el extremo emisor y verificado por el extremo receptor. En el cálculo de la suma de comprobación, 要在TCP报文段的前面加上12字节的伪首部.
Puntero de emergencia 16 bits Puntero de emergencia, el puntero de emergencia solo es válido cuando el indicador URG se establece en 1. El modo de emergencia de TCP es una forma para que el remitente envíe datos de emergencia al otro extremo. El puntero de emergencia indica cuántos bytes de datos de emergencia hay en este segmento (los datos de emergencia se colocan en la parte superior de los datos en este segmento).
Opciones 选项字段。TCP协议最初只规定了一种选项,即最长报文段长度(数据字段加上TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。 新的RFC规定有以下几种选型:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳。 窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。 时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。 选项确认选项:

12.3.1 端口号

​ 每一个TCP头部都包含了源端口和目的端口。这两个值与IP头部中的源和目的IP地址唯一标识一个连接(四元组)。这个特点在TCP服务器同时与多个客户端提供服务时特别重要,服务器就是根据四元组信息(或者五元组信息)来确定客户端的。

12.3.2 序列号

用于判断接收方是否重复接收到某一报文以及报文的乱序重组功能

​ 该字段标识了TCP发送端到TCP接收端的数据流中的一个字节,该字节代表着包含该序列号报文段的数据中的第一个字节。如果我们考虑在两个应用程序之间的一个方向上流动数据流,TCP给每一个字节赋予一个序列号。这个序列号是一个32位的无符号整数,到达2^32 -1 后再循环从0开始。因为每一个没交换的字节都被编号,确认号字段(ACK位置1,确认号字段生效)包含的值是数据的接收方(即ACK的发送方)期待接收到的下一个序列号。即最后被成功接收的数据字节序号加1。这个字段之后再ACK位被启动的情况才有效。

  • 当建立一个连接时,从客户端发送至服务器的第一个报文段中的SYN位字段被启用。这样的报文段简称为SYN;并且序列号字段包含了在这个方向上要是用的第一个序列号后续的序列号和返回的ACK都在这个方向上

    • 注意:这个初始的序列号不是0或1,而是随机生成的一个数值,成为初始序列号(Inital Sequence Number, 简称ISN), ISN不是0/1,是为了提高安全性,防止被黑客攻击利用。

    • 客户端发送的第一个报文时,第一个字节的序列号为ISN+1, 这意味着SYN报文消耗一个序列号,而消耗一个序列号意味着可以使用重传机制进行可靠传输。因此SYN、以及FIN报文是可以可靠传输的,而ACK报文不消耗序列号,因此无法保证ACK报文的可靠传输

  • TCP可以被描述为“一种带积累正向确认的滑动窗口协议”。ACK确认号字段被用于构建知名在接收方已经顺序收到的最大字节(确认号 -1 = 成功接收的字节)。然而现代的TCP有一个选择确认(Selective Acknowledgment, SACK)选项,可以允许接收方告诉发送方它正确的接收到的次序杂乱的数据。 当它与一个具有选择重发(selective repeat)能力的TCP进行通信时,可以显著的提高通讯效率。

12.3.3 头部长度

​ 头部长度用来指出TCP头部的长度,以32比特为单位,由于存在选项字段,因此它是必须的。它的长度为4比特,因此TCP头部的长度限定为20~60字节(15*4=60),如果不带选项字段,即标准头部长度为20字节。

12.3.4 相关控制位

​ 当前,为TCP头部定义了8位的字段,尽管有些老的实现只能理解最后的6位。

  • CWR : 拥塞窗口减(发送方减低它的发送速率)
  • ECE : ECN回显(发送方接收到了一个更早的拥塞通告)
  • URG : 紧急(紧急指针字段有效,很少被用到)
  • ACK : 确认 (确认号字段有效,连接建立后一般都处于启用状态)
  • PSH : 推送 (接收方应尽快给应用程序发送这个数据,目前没有可靠地实现或者用到)
  • RST : 重置连接 (当前连接关闭,重新建立新的连接)
  • SYN : 用于初始化一个连接的同步序列号
  • FIN : 该报文的发送方已经没有数据要发送,请求对方关闭当前连接。

12.3.5 窗口大小

El control de flujo de TCP está controlado por el tamaño de la ventana de anuncio . El tamaño de la ventana se refiere al número de bytes, especificado a partir del número de confirmación, que se calcula a partir de los datos que el receptor desea recibir. Es un campo de 16 bits, por lo que el tamaño de la ventana de TCP está limitado a un máximo de 65535 bytes, lo que limita el rendimiento de rendimiento de TCP. Este valor puede modificarse mediante el escalado de la ventana .

12.3.6 Suma de verificación

El campo de suma de verificación TCP cubre el encabezado TCP y los datos TCP, y también incluye un pseudo-encabezado. Este campo es obligatorio y debe ser calculado y guardado por el remitente y verificado por el receptor. Es lo mismo que calcular la suma de comprobación de UDP.

12.3.7 Campos de opciones

campo Opciones Lo más importante es el campo MSS (también conocido como el tamaño máximo de segmento ). Cada punto final de la conexión generalmente especifica el valor de MSS en su primer mensaje SYN, que se utiliza para indicar el segmento más grande del mensaje que desea recibir.

81 artículos originales publicados · Me gusta 69 · Visitantes 50,000+

Supongo que te gusta

Origin blog.csdn.net/s2603898260/article/details/105547805
Recomendado
Clasificación