Algoritmos relacionados con segmentos de información
La función mytcp_sync_mss se utiliza para sincronizar datos de miembros relacionados con MSS en el socket tcp. Su algoritmo básico es:
1. El MSS actual normalmente debe ser mtu-IP primero. TCP primero (opciones no incluidas).
2. La estructura tcp_sock->rx_opt->mss_clamp contiene el valor MSS aceptable anunciado por el par. Si el valor es menor que el MSS calculado en el primer paso, este valor prevalecerá.
3. Si el encabezado IP tiene opciones de IP, reste la longitud de la opción del MSS.
4. Si MSS ya es menor que 48, hágalo igual a 48. Resta la longitud de las opciones en el encabezado TCP.
6. Si el MSS es actualmente mayor que la mitad del tamaño de la ventana deslizante, tome la mitad del tamaño de la ventana deslizante como valor de MSS (pero no menos de 48).
7. El miembro mss_cache se utiliza para almacenar en caché el MSS recién calculado.
Por lo tanto, es incorrecto decir que el MSS en la Ethernet local es 1460, también cambiará dinámicamente. Si hay una opción en el encabezado IP y el encabezado TCP, entonces el MSS se reducirá en consecuencia. En términos generales, habrá una opción de marca de tiempo de 12 bytes en el encabezado TCP (más una opción de relleno de dos bytes), entonces el MSS es igual a 1448.
La función principal de MSS es limitar la longitud de los datos enviados por el host en el otro extremo. Al mismo tiempo, el propio host también puede controlar la longitud de los datagramas que envía. Hosts conectados a redes con MTU más pequeñas para evitar la fragmentación.
La estructura tcp_sock tiene un miembro xmit_size_goal, que se utiliza para registrar el tamaño del segmento de red cuando el socket envía datagramas. En circunstancias normales, su valor es igual a MSS (excepto en circunstancias especiales, que se analizarán más adelante). ).