tcp nodelay 分析


参考文章如下:
http://www.iteye.com/topic/1110883?page=2

第一次数据包交互过程

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..:..@[email protected]
        0x0010:  0ad2 d633 d31a 1f40 1071 3443 0fde a75a  [email protected]
        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..@[email protected]
        0x0010:  0ad2 d633 1f40 d31a 0fde a75a 1071 3449  [email protected]
        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..;..@[email protected]
        0x0010:  0ad2 d633 d31a 1f40 1071 3449 0fde a75a  [email protected]
        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..@[email protected]
        0x0010:  0ad2 d633 1f40 d31a 0fde a75a 1071 3450  [email protected]
        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..@..@[email protected]
        0x0010:  0ad2 d633 1f40 d31a 0fde a75a 1071 3450  [email protected]
        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..@[email protected]
        0x0010:  0ad2 d633 d31a 1f40 1071 3450 0fde a766  [email protected]
        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..:..@[email protected]
        0x0010:  0ad2 d633 d31a 1f40 1071 3450 0fde a766  [email protected]
        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..@[email protected]
        0x0010:  0ad2 d633 1f40 d31a 0fde a766 1071 3456  [email protected]
        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..;..@[email protected]
        0x0010:  0ad2 d633 d31a 1f40 1071 3456 0fde a766  [email protected]
        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..@[email protected]
        0x0010:  0ad2 d633 1f40 d31a 0fde a766 1071 345d  [email protected]]
        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..@..@[email protected]
        0x0010:  0ad2 d633 1f40 d31a 0fde a766 1071 345d  [email protected]]
        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..@[email protected]
        0x0010:  0ad2 d633 d31a 1f40 1071 345d 0fde a772  [email protected]]...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应答,于是客户端内核将剩余的数据发送,之后就正常了









你可能感兴趣的:(node)