tcp nodelay 分析

参考文章如下:
[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应答,于是客户端内核将剩余的数据发送,之后就正常了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值