连接建立
10:56:08.947939 IP 127.0.0.1.50007 > 127.0.0.1.8080: S 3117834678:3117834678(0) win 32792 <mss 16396,sackOK,timestamp 64997325 0,nop,wscale 5>
0x0000: 4500 003c a67b 4000 4006 963e 7f00 0001 E..<.{@.@..>....
0x0010: 7f00 0001 c357 1f90 b9d6 61b6 0000 0000 .....W....a.....
0x0020: a002 8018 fe30 0000 0204 400c 0402 080a .....0....@.....
0x0030: 03df c7cd 0000 0000 0103 0305 ............
10:56:08.948083 IP 127.0.0.1.8080 > 127.0.0.1.50007: S 3112532867:3112532867(0) ack 3117834679 win 32768 <mss 16396,sackOK,timestamp 64997325 64997325,nop,wscale 5>
0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001 E..<..@.@.<.....
0x0010: 7f00 0001 1f90 c357 b985 7b83 b9d6 61b7 .......W..{...a.
0x0020: a012 8000 fe30 0000 0204 400c 0402 080a .....0....@.....
0x0030: 03df c7cd 03df c7cd 0103 0305 ............
10:56:08.948132 IP 127.0.0.1.50007 > 127.0.0.1.8080: . ack 1 win 1025 <nop,nop,timestamp 64997325 64997325>
0x0000: 4500 0034 a67c 4000 4006 9645 7f00 0001 E..4.|@.@..E....
0x0010: 7f00 0001 c357 1f90 b9d6 61b7 b985 7b84 .....W....a...{.
0x0020: 8010 0401 fe28 0000 0101 080a 03df c7cd .....(..........
0x0030: 03df c7cd
....
分析一下TCP建立时第一个syn数据包的内容:
10:56:08.947939 IP 127.0.0.1.50007 > 127.0.0.1.8080: S 3117834678:3117834678(0) win 32792 <mss 16396,sackOK,timestamp
64997325 0,nop,wscale 5>
0x0000: 4500 003c a67b 4000 4006 963e 7f00 0001 E..<.{@.@..>....
0x0010: 7f00 0001 c357 1f90 b9d6 61b6 0000 0000 .....W....a.....
0x0020: a002 8018 fe30 0000 0204 400c 0402 080a .....0....@.....
0x0030: 03df c7cd 0000 0000 0103 0305 ............
IP报文
版本 4
首部长度 5
16位服务类型TOS 0
16位总长度 003c 十进制 60
16位表示 a67b 十进制 42619
3位表示和13位偏移量 4000
3位表示010
13位偏移量 0
八位生存时间TTL 40 十进制64
八位协议 06 十进制6
源地址 7f00 0001 127.0.0.1
目的地址 7f00 0001 127.0.0.1
TCP报文从 c357开始,所以前面的IP报文就占了20个字节
源端口 c357 的十进制就是 50007
目的端口 1f90 的十进制就是 8080
32位的序列号 b9d6 61b6 十进制是 3117834678
32位的确认序列号 是 0
a002 对应的二进制 1000 0000 0001 1000
首部长度 1000
保留6位 0000 00
标志位 01 1000
窗口大小 8018 十进制就是 32792
十六位校验和 fe30 十进制 65072
十六位紧急指针 0000 无
TCP报文的选项和数据 有20个字节:
0204 400c 0402 080a 03df c7cd 0000 0000 0103 0305
由tcpdump解析的数据反退可以得到
0204 400c 这个表示的是mss
0204 作用未知
400c 的十进制就是 16396
0402 080a 表示的是 sackOK
03df c7cd 的十进制是 64997325
所以这32个字节就是timestamp
最后8个字节 0000 0000 0103 0305
表示的是 0,nop,wscale 5
第一个syn包的
32位的序列号 b9d6 61b6 十进制是 3117834678
32位的确认序列号 是 0
第二个包 由服务端返回的ack包
32位的序列号 b985 7b83 十进制是 3112532867
32位的确认序列号 b9d6 61b7 十进制是 3117834679
所以确认序列号 就是对收到包的序列号 +1
由IP包头可以看到,这个数据也是60个字节
第三个包
32位的序列号 b9d6 61b7 十进制是 3117834679
32位的确认序列号 b985 7b84 十进制是 3112532868
可以看到确实序列号就是对第二个数据包akc 序列号+1
最后这个数据包的大小是52个字节
连接关闭
14:29:00.669797 IP 10.217.12.137.4264 > 10.210.214.51.8080: F 1:1(0) ack 1 win 65535
0x0000: 4500 0028 b31b 4000 3d06 924d 0ad9 0c89 E..(..@.=..M....
0x0010: 0ad2 d633 10a8 1f90 24a7 53c8 cef6 1ed7 ...3....$.S.....
0x0020: 5011 ffff 20f7 0000 P.......
14:29:00.669947 IP 10.210.214.51.8080 > 10.217.12.137.4264: . ack 2 win 183
0x0000: 4500 0028 2fb6 4000 4006 12b3 0ad2 d633 E..(/.@.@......3
0x0010: 0ad9 0c89 1f90 10a8 cef6 1ed7 24a7 53c9 ............$.S.
0x0020: 5010 00b7 f881 0000 P.......
14:29:00.743090 IP 10.210.214.51.8080 > 10.217.12.137.4264: F 1:1(0) ack 2 win 183
0x0000: 4500 0028 2fb7 4000 4006 12b2 0ad2 d633 E..(/.@.@......3
0x0010: 0ad9 0c89 1f90 10a8 cef6 1ed7 24a7 53c9 ............$.S.
0x0020: 5011 00b7 f881 0000 P.......
14:29:00.743961 IP 10.217.12.137.4264 > 10.210.214.51.8080: . ack 2 win 65535
0x0000: 4500 0028 b31c 4000 3d06 924c 0ad9 0c89 E..(..@.=..L....
0x0010: 0ad2 d633 10a8 1f90 24a7 53c9 cef6 1ed8 ...3....$.S.....
0x0020: 5010 ffff 20f6 0000 P.......
可以看到客户端先关闭,服务端响应一个ack(序列号+1)
然后服务端关闭,客户端也响应一个ack(序列号+1)
另外这4个数据包的大小都是 十六进制的28,也就是40字节,所以只有ip包头和tcp包头没有数据
连接半关闭
11:12:37.322421 IP 10.217.12.22.4929 > 10.210.214.51.8080: F 1:1(0) ack 1 win 65535
0x0000: 4500 0028 81cc 4000 3d06 c40f 0ad9 0c16 E..(..@.=.......
0x0010: 0ad2 d633 1341 1f90 df74 0a6c 2fdc f41a ...3.A...t.l/...
0x0020: 5011 ffff 7736 0000 P...w6..
11:12:37.322563 IP 10.210.214.51.8080 > 10.217.12.22.4929: . ack 2 win 183
0x0000: 4500 0028 77db 4000 4006 cb00 0ad2 d633 E..(w.@.@......3
0x0010: 0ad9 0c16 1f90 1341 2fdc f41a df74 0a6d .......A/....t.m
0x0020: 5010 00b7 f80e 0000 P.......
需要注意的是,关闭输入流不会发送fin包,只有关闭输出流的时候才会向远端发的送一个fin包,同样,对方收到了fin包后会返回一个ack包
超时连接,完整格式如下:
14:41:14.294796 IP 10.217.12.137.4445 > 10.210.214.51.8080: S 3611706660:3611706660(0) win 65535 <mss 1460,nop,wscale 0,nop,nop,sackOK>
0x0000: 4500 0034 bcaf 4000 3d06 88ad 0ad9 0c89 E..4..@.=.......
0x0010: 0ad2 d633 115d 1f90 d746 4524 0000 0000 ...3.]...FE$....
0x0020: 8002 ffff 2959 0000 0204 05b4 0103 0300 ....)Y..........
0x0030: 0101 0402
....
14:41:14.294919 IP 10.210.214.51.8080 > 10.217.12.137.4445: R 0:0(0) ack 3611706661 win 0
0x0000: 4500 0028 0000 4000 4006 4269 0ad2 d633 E..(..@.@.Bi...3
0x0010: 0ad9 0c89 1f90 115d 0000 0000 d746 4525 .......].....FE%
0x0020: 5014 0000 6a10 0000 P...j...
14:41:14.769635 IP 10.217.12.137.4445 > 10.210.214.51.8080: S 3611706660:3611706660(0) win 65535 <mss 1460,nop,wscale 0,nop,nop,sackOK>
0x0000: 4500 0034 bcb2 4000 3d06 88aa 0ad9 0c89 E..4..@.=.......
0x0010: 0ad2 d633 115d 1f90 d746 4524 0000 0000 ...3.]...FE$....
0x0020: 8002 ffff 2959 0000 0204 05b4 0103 0300 ....)Y..........
0x0030: 0101 0402
....
14:41:14.769656 IP 10.210.214.51.8080 > 10.217.12.137.4445: R 0:0(0) ack 1 win 0
0x0000: 4500 0028 0000 4000 4006 4269 0ad2 d633 E..(..@.@.Bi...3
0x0010: 0ad9 0c89 1f90 115d 0000 0000 d746 4525 .......].....FE%
0x0020: 5014 0000 6a10 0000 P...j...
14:41:15.371265 IP 10.217.12.137.4445 > 10.210.214.51.8080: S 3611706660:3611706660(0) win 65535 <mss 1460,nop,wscale 0,nop,nop,sackOK>
0x0000: 4500 0034 bcb6 4000 3d06 88a6 0ad9 0c89 E..4..@.=.......
0x0010: 0ad2 d633 115d 1f90 d746 4524 0000 0000 ...3.]...FE$....
0x0020: 8002 ffff 2959 0000 0204 05b4 0103 0300 ....)Y..........
0x0030: 0101 0402
....
14:41:15.371293 IP 10.210.214.51.8080 > 10.217.12.137.4445: R 0:0(0) ack 1 win 0
0x0000: 4500 0028 0000 4000 4006 4269 0ad2 d633 E..(..@.@.Bi...3
0x0010: 0ad9 0c89 1f90 115d 0000 0000 d746 4525 .......].....FE%
0x0020: 5014 0000 6a10 0000 P...j...
简略格式:
14:50:59.068690 IP 10.217.12.137.4578 > vm11100049.webcache: S 3655962589:3655962589(0) win 65535 <mss 1460,nop,wscale 0,nop,nop,sackOK>
14:50:59.072533 IP vm11100049.webcache > 10.217.12.137.4578: R 0:0(0) ack 3655962590 win 0
14:50:59.549703 IP 10.217.12.137.4578 > vm11100049.webcache: S 3655962589:3655962589(0) win 65535 <mss 1460,nop,wscale 0,nop,nop,sackOK>
14:50:59.549739 IP vm11100049.webcache > 10.217.12.137.4578: R 0:0(0) ack 1 win 0
14:51:00.054506 IP 10.217.12.137.4578 > vm11100049.webcache: S 3655962589:3655962589(0) win 65535 <mss 1460,nop,wscale 0,nop,nop,sackOK>
14:51:00.054527 IP vm11100049.webcache > 10.217.12.137.4578: R 0:0(0) ack 1 win 0
从windows客户端 连接linux服务端
可以看到 客户端发送了三次连接,摘取客户端发送的三次连接时间戳
14:50:59.068690
14:50:59.549703
14:51:00.054506
可以看到大约是500毫秒发送一次
连接复位
15:48:45.078042 IP 10.210.214.51.8080 > 10.217.12.137.1527: S 1343092142:1343092142(0) ack 4174171428 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 5>
0x0000: 4500 0034 0000 4000 4006 425d 0ad2 d633 E..4..@.@.B]...3
0x0010: 0ad9 0c89 1f90 05f7 500d f5ae f8cc cd24 ........P......$
0x0020: 8012 16d0 f88d 0000 0204 05b4 0101 0402 ................
0x0030: 0103 0305 ....
15:48:45.078554 IP 10.217.12.137.1527 > 10.210.214.51.8080: . ack 1 win 65535
0x0000: 4500 0028 f803 4000 3d06 4d65 0ad9 0c89 E..(..@.=.Me....
0x0010: 0ad2 d633 05f7 1f90 f8cc cd24 500d f5af ...3.......$P...
0x0020: 5010 ffff 8637 0000 P....7..
15:48:50.739593 IP 10.217.12.137.1527 > 10.210.214.51.8080: R 1:1(0) ack 1 win 0
0x0000: 4500 0028 f826 4000 3d06 4d42 0ad9 0c89 E..(.&@.=.MB....
0x0010: 0ad2 d633 05f7 1f90 f8cc cd24 500d f5af ...3.......$P...
0x0020: 5014 0000 8633 0000 P....3..
第三个包就是复位包,可以看到复位包里面也包含了确认序列号,就是第一个数据包的确认
序列号 +1
....