
Я просматриваю запись Wireshark, предоставленную кем-то, чтобы проанализировать что-то для них. Wireshark удобно собрал 3 сегмента TCP, которые все передавали один пакет TLS. Пакет TLS не мог вписаться в 1460 байт MSS, поэтому хост сделал из него 3 сегмента TCP, и Wireshark обнаружил это:
[3 Reassembled TCP Segments (5914 bytes): #8(1440), #10(1440), #12(3034)]
[Frame: 8, payload: 0-1439 (1440 bytes)]
[Frame: 10, payload: 1440-2879 (1440 bytes)]
[Frame: 12, payload: 2880-5913 (3034 bytes)]
[Segment count: 3]
[Reassembled TCP length: 5914]
[Reassembled TCP Data: ... ]
Это здорово, но я не понимаю, почему размер третьего сегмента превышает MSS этого TCP-соединения, согласованного на уровне SYN/SYN+ACK и составляющего 1460 байт.
решение1
Впоследствии я сам нашел причину: это происходит из-заБольшой прием разгрузкикак объяснено наhttp://rtoodtoo.net/generic_segmentation_offload_and_wireshark/. Сетевая карта или ядро хоста собирали несколько сегментов TCP и объединяли их в один большой сегмент перед передачей в пространство пользователя.
Так показалось Wireshark, когда он записал трафик как один сегмент TCP/IP-пакет, превышающий допустимые MTU и MSS.