美文网首页
tcp报文实践

tcp报文实践

作者: sunpy | 来源:发表于2022-04-05 01:18 被阅读0次

根据域名获取ip地址


wireshark一些设置


  1. 设置相对序列号(实际上序列号是随机的),这样看得清楚一些。

    配置:Wireshark菜单栏中的 Edit -> Preferences ->protocols ->TCP
  2. 采用wireshark提供数据流图。

    配置:Wireshark菜单栏中的 Statistics ->Flow Graph...->TCP flow ->OK

wireshark抓取分析报文


过滤表达式:

ip.addr == 222.169.228.146 and tcp.port == 1923
抓取包图: 数据流包图:
包1

包1发送[SYN]报文,相对序列号为0。默认开始时候,虽然没有交互报文,但是确认号为0。FLAG标志位占2字节。窗口大小初始化为8192字节。最大报文长度为1460字节。默认开启SACK传输(SACK传输就是为了使用选择确认算法的时候,传输已确认的序列号范围)。tcp头部占32字节。

包2
包2发送[SYN,ACK]报文,相对序列号为0,确认号为上一个报文seq+1=1。最大报文段长度为1412,支持SACK传输。窗口值大小为14600字节。
为什么窗口值win为14600字节?
1)刚开始想要明确窗口值,需要快速增长(指数增长),探索窗口值的边界。所以默认使用慢启动算法。
2)慢启动算法计算公式:IW = min(10MSS,max(2MSS,14600))
上一个报文传输过来的MSS = 1460字节。通过上面公式计算IW为14600字节。具体参考RFC文档6928
包3

包3发送[ACK]报文,相对序列号为1,确认号为1。客户端发送数据的窗口值大小为64952字节。双方都已经处于ESTABLISHED状态。


包1、包2、包3联合分析

3段报文实现了序列号的交换,完成了tcp的三次握手建立连接。
包4

包4是通信双方传输数据首个包(客户端使用http发的请求),因为一直没传输数据,所以序列号和确认号不变化,沿用上次的。窗口大小为64952字节。Flag标识位为PSH,将数据交给了应用层处理,希望迅速得到对面应用程序的回复,而不是等到缓冲区满了再发。这里是希望服务器222.169.228.146快速应答。tcp报文段数据部分大小为683字节(tcp报文段数据内容就是http请求报文信息,包含了请求行、请求头、空行、请求体)。

包5

包5是服务器收到包4后,对包5的确认报文[ACK],序列号为1。但是确认号为上一个报文的序列号加上数据包的大小(Ack=1+683=684)。窗口值为15709字节。只是确认包,没有数据,所以tcp数据包长度len为0。

包6、包7

1. 包6、包7都是服务器向客户端发送数据包。[ TCP segment of a reassembled PDU ]报文段出现是由于,http应用层将一整块响应报文发送给客户端,交由tcp协议分段发送。

  1. 数据部分:

    tcp传输数据包长度为1412字节。而数据包的内容也只是http协议的一部分(已经看到了一些响应字段HTTP/1.1 200 OK)。

包8

包8是客户端对于服务器发送的包6和7的数据包的响应报文。tcp是采用累积确认的方式,所以不会一包一应答。


剩下的数据包都是和包6、7、8一样处理。


包42

包42是数据传输的最后一个数据包,数据包长度为537字节。FLAG为PSH,还是要将缓冲区中数据及时发出去。
段数量(Segment count)为27。需要重组tcp长度为36661字节。需要重组tcp数据(16进制):48515450...........。

包43

包43是客户端对于服务器发送的数据包的确认报文[ACK]。收到了服务器发送的所有数据包。

包49、50、51
  1. 包49是由于之前向服务器请求资源,服务器响应给客户端就是没有找到对应的资源,所以包49是对服务器没找到资源这个情况的回复[ACK]确认包。
  2. 而这一次网页全部加载完毕了,资源能加载的都加载了。但是我将浏览器关闭了。tcp提供了保活功能。发送了一个保活探测报文包(包50)。该包特点就是序列号比之前小1(包49的序列号为1849,包50序列号为1848)。数据长度为1。
  3. 包51出现是由于,我的浏览器客户端已经关闭了,所以服务器发送包50(保活探测报文),客户端根本就无法接收和确认。所以触发了服务器的SACK重传机制,又发送了包51,来通知客户端。

    SACK选项,通知客户端已经发送了1848到1849范围的字节了。SACK范围的数量也只有1个。

包52、53、54、55
  1. 包52、53、54、55四个包,通过交换序列号完成了四次挥手断开连接,释放了资源。
  2. 标识位FALG为FIN,主动发起向对方关闭连接。
  3. 标识位FALG为RST,出现这个标识位是由于被我快速关闭网页,关闭连接,序列号错乱,出现RST的报文,可以看到包53、54出现了相同的序列号1849。

文件下载:https://gitee.com/spy1249463314/download-library.git

相关文章

网友评论

      本文标题:tcp报文实践

      本文链接:https://www.haomeiwen.com/subject/sqdxjrtx.html