深度解秘HTTP通信细节 (4)

把上表的最后一列连起来,就是:

GET /data?cmd=Fence2Area&meta={%22caller%22:%22test%22,%22TraceId%22:%22test%22}&request={%22fence%22:[{%22lng%22:10.2,%22lat%22:10.2},%20{%22lng%22:10.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:10.2}],%22coordtype%22:2} HTTP/1.1 Host: 10.96.92.212:7080 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15 Accept-Language: zh-cn Accept-Encoding: gzip, deflate Connection: keep-alive

其中,cr nl表示回车,换行。

docker收到数据后,会回复一个ack包。第四个包的总长度为661字节,去掉IP头部20字节,TCP头部固定部分20字节,TCP头部可选长度为12字节,共52字节,因此TCP数据部分总长度为661-52=609字节。

序列号为2778351310.

再来看第5个包,字节流如下:

0x0000: 4500 0034 d28b 4000 4006 8810 0a60 5cd4 0x0010: ac17 ccdc 1ba8 db9b 6d03 e87d a59a 492f 0x0020: 8010 00ec e04e 0000 0101 080a 0f20 3af7 0x0030: 2e4c b2ef 字节值 字节含义
0x4   IP版本为ipv4  
0x5   首部长度为5 * 4字节=20B  
0x00   服务类型,现在基本都置为0  
0x0034   总长度为52字节,即整个包的长度是52字节  
0xd28b   标识。同一个数据报的唯一标识。当IP数据报被拆分时,会复制到每一个数据中。  
0x4000   3bit 标志 + 13bit 片偏移。3bit 标志对应 R、DF、MF。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。13bit 片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8 )  
0x40   生存时间TTL。IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为 0 时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。TTL可以防止数据报陷入路由循环。 此处为54.  
0x06   协议类型。指出IP报文携带的数据使用的是哪种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程。TCP 的协议号为6,UDP 的协议号为17。ICMP 的协议号为1,IGMP 的协议号为2。该 IP 报文携带的数据使用 TCP 协议,得到了验证。  
0x8810   16bitIP首部校验和。  
0x0a60 5cd4   32bit源ip地址。  
0xac17 ccdc   32bit目的ip地址。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpywyy.html