赞
踩
TCP协议在网络过程中,是一个最常见不过的协议了。在分析tcp网络协议报文时,借助当前强力的工具wireshark可以起到很好的辅助作用。
首先抓取了一个简单的http请求报文,
选取其中的一次完整请求,追踪tcp流:
可以在报文中看到tcp的3次握手,以及http 的request 和 response ,还有tcp的4次断开。
另外整个封包列表的面板中也有显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 可以看到不同的协议用了不同的颜色显示,当然也可以在View ->Coloring Rules中修改显示颜色的规则。
上图圈起来的就是封包详细信息(Packet Details Pane):
这是最重要的信息,用来查看协议中的每一个字段。而OSI七层模型分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
在封包信息中,每行对应的含义及在OSI模型中的对应关系如下:
Frame: 物理层的数据帧概况 ->对应OSI七层模型中的【物理层】
Ethernet II: 数据链路层以太网帧头部信息 ->对应OSI七层模型中的【数据链路层】
Internet Protocol Version 4: 互联网层IP包头部信息 ->对应OSI七层模型中的【网络层】
Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP ->对应OSI七层模型中的【传输层】
Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议 ->对应OSI七层模型中的【应用层】
这根据报文的抓取的设备以及报文被封装的程度,会有不同的显示,比如截图里面的报文是在虚拟机上抓取的,就不会有物理设备的报文信息,在有些网络拓扑环境下,还会有封装成vlan或vxlan的报文,就可以在wireshark那里成功看到。
不同的模型层和不同协议报文,对应的报文头部长度是不一致的,所以在计算报文的lengeth时,要考虑这些地方。
首先示例图来说明下tcp的连接/数据传输/断开的过程:
百度百科解释TCP三次握手过程如下:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN SENT状态,等待服务器确认;SYN:即是同步序列编号(Synchronize Sequence Numbers);
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
结合报文情况对比查看;
client ----> SYN seq=480449269 ------> server
Server -----> SYN seq=1569499109,ACK=480449270 ----> client
Clinet (seq = 480449270) -----> ACK=1569499110 ------> server
如下截图:
这里的seq num 显示的是绝对值,所以在单纯分析本次请求流时,绝对值的seq num可能不易与阅读,可以调整wireshark配置,查看相对seq num。
数据报文中,第1,2,3条数据包是进行tcp 3次握手,
而,第4 到 9 是进行的数据传输,这里是完成了一次http 请求;
第10,11,12,13 四条报文是进行了tcp的4次断开。
在数据传输中的报文,需要注意报文大小,length和 tcp传输窗口大小,大包/小包,切片/聚合等等,场景各种都有需要灵活分析,经验推理。
tcp协议4次断开:
关于断开请求的报文数据这一块,一般会主要关心是那端主要发起的FIN报文标记进行断开,非正常情况更会有RST报文标记。
总之网络数据报文内容奇多无比,涉及到的知识和工具使用技巧都很多,在运维过程中,还是对运维过程有很大的帮助的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。