1.1 OSI分层
OSI 是 OSI/RM(Open Systems Interconnecation Reference Model)开放互联基本参考模型的简称,由 ISO 于 1983 年制定,形成正式文件。
OSI 分层是一种网络架构模型,它将网络通信分为七个不同的层次。每个层次都有自己的功能和任务。下面是由上到下每个层次的简要介绍:

虽然标准已经制定了,但是由于一些缺陷,现今规模最大的、覆盖全世界的因特网并未使用 OSI 标准,而是使用 TCP/IP 标准。
1.2 TCP/IP 分层
相比OSI 7层模型,TCP/IP协议只有4层,它将部分层进行了合并。

通常讲的TCP/IP协议是指TCP/IP协议簇,按照分层可以分为以下部分
下面抓包使用的 WireShark 用的就是TCP/IP标准。
2.1 Socket代码
使用 Java 编写服务端和客户端代码, 通过调用 Socket API 实现两者通讯。
Socket 即套接字,是应用层 与 协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议簇 的编程接口(API),ServerSocket 是使用 TCP 协议,如果想使用 UDP 协议,可以使用 DatagramSocket。
WireShark 需要管理员权限启动,默认不能查看不走网卡的 loopback,需要下个 npcap。
- Server.java
- Client.java
2.2 过滤包
- 使用管理员权限开启 Wireshark
- 选择对应的网卡接口

- 开启过滤

4. 启动Server,再启动Client,发送hello
5. 已过滤的包

3.1 TCP首部
TCP 首部如下所示:

3.2 实战分析
- 源端口和目的端口,各占2个字节

2. 序号,占4个字节

3. 确认号,占4个字节

4. 数据偏移,占4位,半个字节

5. 保留,占6位

6. flag 控制位: URG/ACK/PSH/RST/SYN/FIN,占6位

7. 窗口,占2个字节

8. 检验和,占2个字节

9. 紧急指针,占2个字节

10. 选项,字节数不固定,下面是12字节

3.3 三次握手
tcp 建立连接的最先三个包就是握手的三个包,下面会从理论结合实际抓包分析三次握手具体流程
- 客户端发送给服务端
客户端在建立TCP连接时,会启用一个随机的序列号,并将其值存入相互交换的第一个报文段的TCP头部的序列号字段,后续TCP报文段的序列号字段值将依次递増
在以下抓包过程中,可以发现 0x4cf2bfaa 就是第一个包的随机序列号,而且 wireshark 已经标注相对序号Seq为0,就是第一个包.
而且TCP 客户端在发送时需要将 SYN 设置为1,此时客户端进入SYN-SENT 状态

2. 服务端发送给客户端
服务端接到报文后,同意建立连接后向客户端发送确认报文,此报文需要将 SYN 和 ACK 都设置为1,ack 设为发送过来的 seq+1,并且为自己启用一个随机序号,在报文中,可以发现随机序号为 0x890b1b78 ,此时服务器进入到 SYN-RCVD 状态

3. 客户端发送给服务端
客户端收到后还需要进行确认,再次发送报文,这次报文将 ACK 设为1,序号设为之前自身序号+1=0x4cf2bfab, 将 ack 设为服务器发送过来的序号+1=0x890b1b79,当发送过去后,进入ESTABLISHED状态,服务器接收到后也会进入ESTABLISHED状态

以上过程可以总结如下,在上述例子中 x 实际为 0x4cf2bfaa,y 实际为 0x890b1b78
#mermaid-svg-5NbsNdmuZ3pnSuIz {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz .error-icon{fill:#;}#mermaid-svg-5NbsNdmuZ3pnSuIz .error-text{fill:#;stroke:#;}#mermaid-svg-5NbsNdmuZ3pnSuIz .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-5NbsNdmuZ3pnSuIz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5NbsNdmuZ3pnSuIz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5NbsNdmuZ3pnSuIz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5NbsNdmuZ3pnSuIz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5NbsNdmuZ3pnSuIz .marker{fill:#;stroke:#;}#mermaid-svg-5NbsNdmuZ3pnSuIz .marker.cross{stroke:#;}#mermaid-svg-5NbsNdmuZ3pnSuIz svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5NbsNdmuZ3pnSuIz .actor{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;}#mermaid-svg-5NbsNdmuZ3pnSuIz text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-5NbsNdmuZ3pnSuIz .actor-line{stroke:grey;}#mermaid-svg-5NbsNdmuZ3pnSuIz .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz .sequenceNumber{fill:white;}#mermaid-svg-5NbsNdmuZ3pnSuIz #sequencenumber{fill:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz .messageText{fill:#333;stroke:#333;}#mermaid-svg-5NbsNdmuZ3pnSuIz .labelBox{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;}#mermaid-svg-5NbsNdmuZ3pnSuIz .labelText,#mermaid-svg-5NbsNdmuZ3pnSuIz .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-5NbsNdmuZ3pnSuIz .loopText,#mermaid-svg-5NbsNdmuZ3pnSuIz .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-5NbsNdmuZ3pnSuIz .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259., 59.%, 87.%);fill:hsl(259., 59.%, 87.%);}#mermaid-svg-5NbsNdmuZ3pnSuIz .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-5NbsNdmuZ3pnSuIz .noteText,#mermaid-svg-5NbsNdmuZ3pnSuIz .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-5NbsNdmuZ3pnSuIz .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-5NbsNdmuZ3pnSuIz .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-5NbsNdmuZ3pnSuIz .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-5NbsNdmuZ3pnSuIz .actorPopupMenu{position:absolute;}#mermaid-svg-5NbsNdmuZ3pnSuIz .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-5NbsNdmuZ3pnSuIz .actor-man line{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;}#mermaid-svg-5NbsNdmuZ3pnSuIz .actor-man circle,#mermaid-svg-5NbsNdmuZ3pnSuIz line{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-5NbsNdmuZ3pnSuIz :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
客户端
服务器
CLOSED
CLOSED
LISTEN
发送SYN=1,seq=x
SYN-SENT
返回SYN=1,ACK=1,seq=y,ack=x+1
SYN-RCVD
回复ACK=1,seq=x+1,ack=y+1
ESTABLISHED
ESTABLISHED
客户端
服务器
TCP三次握手
3.4 四次挥手
从书上226页可以得到的图表如下:

建立连接的服务端和客户端都可以释放连接,双方需要进行四次挥手,上面 java 代码经抓包发现是服务端先释放连接
- 服务端发送FIN报文
发送FIN=1, ACK=1, seq=u(此次抓包u实际为0x91dd5af1)。
书上记载 u是前面已发送过的数据的最后一个字节的序号加1, 这个不太明白,还有实际ACK也被置为1,是否必须?后续再研究

2. 客户端发送ACK=1,seq=v(此次抓包实际seq为0x6a067550),ack为u+1(此次抓包实际为0x91dd5af2)
v是前面已发送过的数据的最后一个字节的序号加1。

3. 客户端接着发送FIN=1,ACK=1,seq=w(此次抓包实际为0x6a067550),ack=u+1(此次抓包实际为0x91dd5af2)
此处的w实际抓包发现w和v一样

4. 服务端发送ACK=1,seq=u+1(此次抓包实际为0x91dd5af2),ack=w+1(此次抓包实际为0x6a067551 )

上述过程可以总结如下,由于客户端和服务器都可以发送FIN包释放连接,下面图表由客户端释放连接
#mermaid-svg-hkyQ7BTPqA5MAXpF {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF .error-icon{fill:#;}#mermaid-svg-hkyQ7BTPqA5MAXpF .error-text{fill:#;stroke:#;}#mermaid-svg-hkyQ7BTPqA5MAXpF .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hkyQ7BTPqA5MAXpF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hkyQ7BTPqA5MAXpF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hkyQ7BTPqA5MAXpF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hkyQ7BTPqA5MAXpF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hkyQ7BTPqA5MAXpF .marker{fill:#;stroke:#;}#mermaid-svg-hkyQ7BTPqA5MAXpF .marker.cross{stroke:#;}#mermaid-svg-hkyQ7BTPqA5MAXpF svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hkyQ7BTPqA5MAXpF .actor{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;}#mermaid-svg-hkyQ7BTPqA5MAXpF text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-hkyQ7BTPqA5MAXpF .actor-line{stroke:grey;}#mermaid-svg-hkyQ7BTPqA5MAXpF .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF .sequenceNumber{fill:white;}#mermaid-svg-hkyQ7BTPqA5MAXpF #sequencenumber{fill:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF .messageText{fill:#333;stroke:#333;}#mermaid-svg-hkyQ7BTPqA5MAXpF .labelBox{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;}#mermaid-svg-hkyQ7BTPqA5MAXpF .labelText,#mermaid-svg-hkyQ7BTPqA5MAXpF .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-hkyQ7BTPqA5MAXpF .loopText,#mermaid-svg-hkyQ7BTPqA5MAXpF .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-hkyQ7BTPqA5MAXpF .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259., 59.%, 87.%);fill:hsl(259., 59.%, 87.%);}#mermaid-svg-hkyQ7BTPqA5MAXpF .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-hkyQ7BTPqA5MAXpF .noteText,#mermaid-svg-hkyQ7BTPqA5MAXpF .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-hkyQ7BTPqA5MAXpF .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-hkyQ7BTPqA5MAXpF .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-hkyQ7BTPqA5MAXpF .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-hkyQ7BTPqA5MAXpF .actorPopupMenu{position:absolute;}#mermaid-svg-hkyQ7BTPqA5MAXpF .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-hkyQ7BTPqA5MAXpF .actor-man line{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;}#mermaid-svg-hkyQ7BTPqA5MAXpF .actor-man circle,#mermaid-svg-hkyQ7BTPqA5MAXpF line{stroke:hsl(259., 59.%, 87.%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-hkyQ7BTPqA5MAXpF :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
客户端
服务器
ESTABLISHED
ESTABLISHED
发送FIN=1,seq=u
FIN-WAIT-1
返回 ACK=1,seq=v,ack=u+1
FIN-WAIT-2
到此这篇tcpdump pcap文件解析(pcap包解析)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/17024.html