众所周知,MTU是1500,TCP的MSS是1460,所以当recv函数中使用的buf大于1460字节时,TCP会被拆分成很多部分。
我写了一个简单的 echo prog,并想使用 tcpdump 来检查碎片。但是buf小的时候不显示分片,buf在20K左右的时候显示。
这是代码:
服务器:
import socket
import sys
import os
addr = ('10.0.0.2',10086)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(addr)
server.listen(5)
while True:
connfd, addr= server.accept()
print 'connection ip:', addr
data = connfd.recv(8192);
Run Code Online (Sandbox Code Playgroud)
客户:
import socket
import os
import sys
addr = ('10.0.0.2', 10086)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(addr)
data = '';
for num in range(0,8192):
data += '1'
client.sendall(bytes(data))
Run Code Online (Sandbox Code Playgroud)
这是我使用的 tcpdump cmd:
须藤 tcpdump -i lo 端口 10086 -s 1514 -v
从代码上看,buf是8192,MSS是1460。所以,在我看来,数据包将被拆分为1460、1460、1460、1460、1460、892。但在截图中没有。
另外,我不确定这是否是由 [DF] 标志引起的。prog 使用的是 python,所以内置的 …