参考文章如下:
[url]http://www.iteye.com/topic/1110883?page=2[/url]
第一次数据包交互过程
这里没有出现延迟
第二次就出现了延迟
第二次发送的过程
[url]http://www.iteye.com/topic/1110883?page=2[/url]
第一次数据包交互过程
18:18:49.344878 IP 10.210.214.51.54042 > 10.210.214.51.8000: P 1:7(6) ack 1 win 1025 <nop,nop,timestamp 1350350382 1350345381>
0x0000: 4500 003a 96e9 4000 4006 e1c9 0ad2 d633 E..:..@.@......3
0x0010: 0ad2 d633 d31a 1f40 1071 3443 0fde a75a ...3...@.q4C...Z
0x0020: 8018 0401 c237 0000 0101 080a 507c b62e .....7......P|..
0x0030: 507c a2a5 6865 6c6c 6f20 P|..hello.
18:18:49.345069 IP 10.210.214.51.8000 > 10.210.214.51.54042: . ack 7 win 1024 <nop,nop,timestamp 1350350382 1350350382>
0x0000: 4500 0034 05ff 4000 4006 72ba 0ad2 d633 E..4..@.@.r....3
0x0010: 0ad2 d633 1f40 d31a 0fde a75a 1071 3449 ...3.@.....Z.q4I
0x0020: 8010 0400 c231 0000 0101 080a 507c b62e .....1......P|..
0x0030: 507c b62e P|..
18:18:49.345209 IP 10.210.214.51.54042 > 10.210.214.51.8000: P 7:14(7) ack 1 win 1025 <nop,nop,timestamp 1350350382 1350350382>
0x0000: 4500 003b 96ea 4000 4006 e1c7 0ad2 d633 E..;..@.@......3
0x0010: 0ad2 d633 d31a 1f40 1071 3449 0fde a75a ...3...@.q4I...Z
0x0020: 8018 0401 c238 0000 0101 080a 507c b62e .....8......P|..
0x0030: 507c b62e 776f 726c 640d 0a P|..world..
18:18:49.345417 IP 10.210.214.51.8000 > 10.210.214.51.54042: . ack 14 win 1024 <nop,nop,timestamp 1350350383 1350350382>
0x0000: 4500 0034 0600 4000 4006 72b9 0ad2 d633 E..4..@.@.r....3
0x0010: 0ad2 d633 1f40 d31a 0fde a75a 1071 3450 ...3.@.....Z.q4P
0x0020: 8010 0400 c231 0000 0101 080a 507c b62f .....1......P|./
0x0030: 507c b62e P|..
18:18:49.345483 IP 10.210.214.51.8000 > 10.210.214.51.54042: P 1:13(12) ack 14 win 1024 <nop,nop,timestamp 1350350383 1350350382>
0x0000: 4500 0040 0601 4000 4006 72ac 0ad2 d633 E..@..@.@.r....3
0x0010: 0ad2 d633 1f40 d31a 0fde a75a 1071 3450 ...3.@.....Z.q4P
0x0020: 8018 0400 c23d 0000 0101 080a 507c b62f .....=......P|./
0x0030: 507c b62e 6161 6161 6161 6161 6161 0d0a P|..aaaaaaaaaa..
18:18:49.345586 IP 10.210.214.51.54042 > 10.210.214.51.8000: . ack 13 win 1025 <nop,nop,timestamp 1350350383 1350350383>
0x0000: 4500 0034 96eb 4000 4006 e1cd 0ad2 d633 E..4..@.@......3
0x0010: 0ad2 d633 d31a 1f40 1071 3450 0fde a766 ...3...@.q4P...f
0x0020: 8010 0401 c231 0000 0101 080a 507c b62f .....1......P|./
0x0030: 507c b62f P|./
这里没有出现延迟
第二次就出现了延迟
18:18:49.345784 IP 10.210.214.51.54042 > 10.210.214.51.8000: P 14:20(6) ack 13 win 1025 <nop,nop,timestamp 1350350383 1350350383>
0x0000: 4500 003a 96ec 4000 4006 e1c6 0ad2 d633 E..:..@.@......3
0x0010: 0ad2 d633 d31a 1f40 1071 3450 0fde a766 ...3...@.q4P...f
0x0020: 8018 0401 c237 0000 0101 080a 507c b62f .....7......P|./
0x0030: 507c b62f 6865 6c6c 6f20 P|./hello.
18:18:49.385257 IP 10.210.214.51.8000 > 10.210.214.51.54042: . ack 20 win 1024 <nop,nop,timestamp 1350350423 1350350383>
0x0000: 4500 0034 0602 4000 4006 72b7 0ad2 d633 E..4..@.@.r....3
0x0010: 0ad2 d633 1f40 d31a 0fde a766 1071 3456 ...3.@.....f.q4V
0x0020: 8010 0400 c231 0000 0101 080a 507c b657 .....1......P|.W
0x0030: 507c b62f P|./
18:18:49.385367 IP 10.210.214.51.54042 > 10.210.214.51.8000: P 20:27(7) ack 13 win 1025 <nop,nop,timestamp 1350350423 1350350423>
0x0000: 4500 003b 96ed 4000 4006 e1c4 0ad2 d633 E..;..@.@......3
0x0010: 0ad2 d633 d31a 1f40 1071 3456 0fde a766 ...3...@.q4V...f
0x0020: 8018 0401 c238 0000 0101 080a 507c b657 .....8......P|.W
0x0030: 507c b657 776f 726c 640d 0a P|.Wworld..
18:18:49.385380 IP 10.210.214.51.8000 > 10.210.214.51.54042: . ack 27 win 1024 <nop,nop,timestamp 1350350423 1350350423>
0x0000: 4500 0034 0603 4000 4006 72b6 0ad2 d633 E..4..@.@.r....3
0x0010: 0ad2 d633 1f40 d31a 0fde a766 1071 345d ...3.@.....f.q4]
0x0020: 8010 0400 c231 0000 0101 080a 507c b657 .....1......P|.W
0x0030: 507c b657 P|.W
18:18:49.385504 IP 10.210.214.51.8000 > 10.210.214.51.54042: P 13:25(12) ack 27 win 1024 <nop,nop,timestamp 1350350423 1350350423>
0x0000: 4500 0040 0604 4000 4006 72a9 0ad2 d633 E..@..@.@.r....3
0x0010: 0ad2 d633 1f40 d31a 0fde a766 1071 345d ...3.@.....f.q4]
0x0020: 8018 0400 c23d 0000 0101 080a 507c b657 .....=......P|.W
0x0030: 507c b657 6161 6161 6161 6161 6161 0d0a P|.Waaaaaaaaaa..
18:18:49.385968 IP 10.210.214.51.54042 > 10.210.214.51.8000: F 27:27(0) ack 25 win 1025 <nop,nop,timestamp 1350350423 1350350423>
0x0000: 4500 0034 96ee 4000 4006 e1ca 0ad2 d633 E..4..@.@......3
0x0010: 0ad2 d633 d31a 1f40 1071 345d 0fde a772 ...3...@.q4]...r
0x0020: 8011 0401 c231 0000 0101 080a 507c b657 .....1......P|.W
0x0030: 507c b657 P|.W
第二次发送的过程
1.客户端 发送 hello --> 服务端 此时立刻发送
2.服务端由于没有处理完逻辑,暂时不发送数据,因此ack就延迟了40毫秒,从tcpdump的时间戳可以看到,超时以后服务端发送ack包
3.客户端将没有发送完的数据发送给服务端
4.服务端收到了数据,发送ack应答
5.服务端处理完逻辑后发送返回的数据
6.客户端对服务端数据做ack应答
从这里可以看到延迟出现在第二次 客户端发送包的时候,尽管上次的java代码已经发送了,但此时数据还在内核中,没有真正的发送,因此 客户端在 read数据的时候会出现一次停顿,这个停顿就是等待服务端返回数据
而服务端又等待客户端内核中的数据, 等到40毫秒超时后,服务端返回了一个ack应答,于是客户端内核将剩余的数据发送,之后就正常了