1. Nagle算法解释含义
Nagle 算法要求,当一个 TCP 连接中有在传数据(已经发出但还未确认的数据)时,小于 MSS 的报文段就不能被发送,直到所有的在传数据都收到了 ACK。同时收到 ACK 后,TCP 还不会马上就发送数据,会收集小包合并一起发送。
2. 测试demo
public class NagleClient {
public static void main(String[] args) throws Exception {
try {
System.out.println(InetAddress.getLocalHost().getHostAddress());
Socket socket = new Socket();
SocketAddress address = new InetSocketAddress("1.117.109.40" , 9091);
socket.connect(address);
OutputStream output = socket.getOutputStream();
String str = "hulanceshi\r\n";
byte[] request = str.getBytes(StandardCharsets.UTF_8);
// 分 5 次发送 5 个小包
for (int i = 0; i < 5; i++) {
output.write(request);
}
TimeUnit.SECONDS.sleep(1);
socket.close();
}catch (Exception e){
System.out.println(e);
}
}
}
nc -l -p 9999
实际包被合并了
socket.setTcpNoDelay(true);
实际上是发了5次
3. 用到的命令
nc 1.117.109.40 9091 > testNoNagle.pcap
nc -l -p 9091 < testNoNagle.pcap