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

剩余的数据部分即为TCP协议相关的。TCP也是20B固定长度+可变长度部分。

字节值 字节含义
0x1ba8   16bit源端口7080  
0xdb9b   16bit目的端口。56219  
0x6d03 e87d   32bit序列号。1828972669  
0xa59a 492f   32bit确认号。2778351919  
0x8   4bit首部长度,以4byte为单位。共8*4=32字节。因此TCP报文的可选长度为32-20=12字节  
0b000000   6bit保留位。目前置为0.  
0b011000   6bitTCP标志位。从左到右依次是紧急 URG、确认 ACK、推送 PSH、复位 RST、同步 SYN 、终止 FIN。ack有效,同时psh有效  
0x00ec   滑动窗口大小,滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制。236  
0xe113   16bit校验和。  
0x0000   紧急指针。仅在 URG = 1时才有意义,它指出本报文段中的紧急数据的字节数。当 URG = 1 时,发送方 TCP 就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。  

可变长度部分,协议如下:

字节值 字节含义
0x01   无操作  
0x01   无操作  
0x0402   表示支持SACK  
0x080a 0f20 3af8 2e4c b2ef   时间戳。Ts val=0x2e4c b2ef=253770488, ecr=0x0f20 3acf=776778479  

剩下来的就是数据部分了。我们一行一行地看。

首地址 字节流 字符
0x0030   4854 5450 2f31 2e31 2032 3030   HTTP/1.1 200  
0x0040   204f 4b0d 0a41 6363 6573 732d 436f 6e74   OK \r\n Access-Cont  
0x0050   726f 6c2d 416c 6c6f 772d 4f72 6967 696e   rol-Allow-Origin  
0x0060   3a20 2a0d 0a44 6174 653a 2054 6875 2c20   : * \r\n Date: Thu,  
0x0070   3033 204a 616e 2032 3031 3920 3132 3a32   03 Jan 2019 12:2  
0x0080   333a 3437 2047 4d54 0d0a 436f 6e74 656e   3:47 GMT \r\n Conten  
0x0090   742d 4c65 6e67 7468 3a20 3438 0d0a 436f   t-Length: 48\r\n Co  
0x00a0   6e74 656e 742d 5479 7065 3a20 7465 7874   ntent-Type: text  
0x00b0   2f70 6c61 696e 3b20 6368 6172 7365 743d   /plain; charset=  
0x00c0   7574 662d 380d 0a0d 0a7b 2264 6174 6122   utf-8\r\n\r\n{"data"  
0x00d0   3a7b 2261 7265 6122 3a34 3837 3634 3133   :{"area":4876413  
0x00e0   3535 3937 2e38 3432 3630 367d 2c22 6572   5597.842606},"er  
0x00f0   7273 7472 223a 2222 7d   rstr":""}  

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

HTTP/1.1 200 OK Access-Control-Allow-Origin: * Date: Thu, 03 Jan 2019 12:23:47 GMT Content-Length: 48 Content-Type: text/plain; charset=utf-8 {"data":{"area":48764135597.842606},"errstr":""}

Content-Length: 48,最后一行的长度即为48个字节。

最后,第七个包,字节流如下:

0x0000: 4500 0034 0000 4000 3606 649c ac17 ccdc 0x0010: 0a60 5cd4 db9b 1ba8 a59a 492f 6d03 e942 0x0020: 8010 100f 1eb9 0000 0101 080a 2e4c b314 0x0030: 0f20 3af8 字节值 字节含义
0x4   IP版本为ipv4  
0x5   首部长度为5 * 4字节=20B  
0x00   服务类型,现在基本都置为0  
0x0034   总长度为52字节,即整个包的长度是52字节  
0x0000   标识。同一个数据报的唯一标识。当IP数据报被拆分时,会复制到每一个数据中。  
0x4000   3bit 标志 + 13bit 片偏移。3bit 标志对应 R、DF、MF。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。13bit 片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8 )  
0x36   生存时间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 协议,得到了验证。  
0x649c   16bitIP首部校验和。  
0xac17 ccdc   32bit源ip地址。  
0x0a60 5cd4   32bit目的ip地址。  

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

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