一,TCP报头解析
数据打包与解析直观图:
1.0报文与报文字段
1.0.1 报文
报文是计算机网络中交换信息的基本单位,是一种用于在网络中传递数据的结构化数据格式。在网络通信中,数据会被封装成报文的形式,通过网络传输到目标设备,然后在目标设备上进行解析和处理。
报文通常由报文头和报文体两部分组成。报文头包含了一些关于报文的控制信息,如报文类型、源地址、目标地址、协议版本等等。报文体则包含了具体的数据内容,如文本、图片、音频、视频等等。报文体的长度可以根据需要而变化,而报文头的长度通常是固定的。
不同的网络协议会定义不同的报文格式和规范,例如在 HTTP 协议中,报文通过请求报文和响应报文的形式进行交互,而在 TCP 协议中,报文则包括了一些用于保障数据可靠传输的控制信息,如序列号、确认号等等。
1.0.2报文字段
报文字段指的是计算机网络中通信协议中定义的报文格式中的各个部分或段落,每个字段都负责传递特定的信息。通常,一个报文由报文头和报文体两部分组成,报文头包含各种控制信息,而报文体包含传输的数据。
在不同的协议中,报文字段的类型和含义可以有所不同,但通常包括以下几个方面:
(1)版本号/协议版本:指明报文所使用的协议的版本号。
(2)源地址/目标地址:指明报文发送方和接收方的 IP 地址。
(3)端口号:指明报文发送方和接收方的端口号,用于标识应用程序。
(4)序列号/确认号:用于实现 TCP 协议中的可靠传输,保证数据的顺序和完整性。
(5)标志位:用于表示 TCP 报文的状态,如 SYN、ACK、FIN 等。
(6)数据长度:指明报文体中传输的数据的长度。
(7)校验和:用于校验报文的完整性,防止数据在传输过程中被损坏或篡改。
1.1TCP报文头部详解
-
- Source port:源端口号与Destination port目标端口号:
在TCP(传输控制协议)协议中,源端口和目标端口字段用于标识通信会话的端点。
(1)源端口是一个16位字段,用于标识本地主机上的发送应用程序或进程。它由发送主机选择,并由接收主机用于将响应数据包发送回正确的端口。
(2)目标端口是一个16位字段,用于标识远程主机上的接收应用程序或进程。它由发送主机指定,并由接收主机用于将传入数据包定向到正确的应用程序或进程。
(3)源端口和目标端口字段一起形成一个唯一的套接字(Socket),它标识两个主机之间特定的通信会话。源端口和目标端口的组合允许多个应用程序或进程在同一主机上与不同的端点建立多个通信会话。
- Source port:源端口号与Destination port目标端口号:
-
- Sequence number和Acknowledge numbe:
在TCP协议中,序列号和确认号字段用于提供可靠的数据传输。发送方可以根据确认号确定接收方已经成功接收到哪些数据,从而可以重传丢失的数据。接收方可以使用序列号来将接收到的数据按正确的顺序进行组装,从而保证数据的完整性和正确性。
(1)Sequence number:TCP链接中的每个报文都有序列号。序列号是一个32位的字段,用于标识TCP报文段中第一个字节的序列号。由于TCP报文段可能会分成多个IP数据包进行传输,序列号可以用于确定报文段中的字节在数据流中的顺序。
(2)Acknowledge numbe:,用于对收到的报文的确认的确认号。确认号是一个32位的字段,用于指示期望接收的下一个字节的序列号。当接收方成功接收到一个TCP报文段时,它会发送一个确认报文段回到发送方,其中确认号字段被设置为已接收的最大序列号加1,表示下一个期望接收的字节的序列号。
- Sequence number和Acknowledge numbe:
-
- Window Size:
用于窗口TCP的流量控制,根据接收者能力进行调节,这个值表明当前接受端可接受的最大数据总数(字节),如果没有这个流量控制,传输方会尽最大能力传输数据,如果接收方一次不能接受完所有数据就会导致丢包,还需要重新传送。
- Window Size:
-
- Checksum字段:
在计算机网络中,Checksum(校验和)是一种用于检测数据传输中错误的技术。在TCP协议中,Checksum字段用于检测TCP报文段中的错误。
(1)Checksum字段是一个16位的字段,用于存储计算出的校验和值。发送方在发送TCP报文段时,计算校验和并将其添加到Checksum字段中。接收方在接收到TCP报文段后,也会计算校验和并将其与Checksum字段中的值进行比较,以检测是否存在数据传输中的错误。
(2)计算校验和的方法是将TCP报文段中的每个16位字(包括报文头和报文数据)两两相加,得到一个总和。如果总和大于16位,则将低16位与高16位相加,直到得到一个16位的结果。然后将这个16位结果取反,得到的值就是校验和。
(3)通过Checksum字段,TCP协议可以检测到数据传输中的错误,例如数据丢失、损坏或被篡改等。如果接收方检测到Checksum值与计算得到的校验和值不同,则说明TCP报文段中存在错误,接收方会丢弃这个报文段并要求发送方重新发送数据。
因此,Checksum字段是TCP协议实现可靠数据传输的重要组成部分之一。
- Checksum字段:
-
- Urgent pointer
Urgent pointer" 是 TCP (Transmission Control Protocol) 报文头中的一个字段,用于指示 TCP 报文中的数据应该比其他数据优先处理。
(1)当设置了 “urgent pointer” 字段时,TCP 报文接收方知道该报文包含的是需要立即处理的紧急数据。接收方可以使用 “urgent pointer” 字段中的值来确定 TCP 报文中紧急数据的最后一个字节的位置。
(2)使用 “urgent pointer” 是可选的,通常只有在有特定需要指示某些数据应该优先处理的情况下才会使用它。使用 “urgent pointer” 的例子包括需要实时数据传输的应用程序,如在线游戏或视频流媒体
- Urgent pointer
1.2滑动窗口
- 概念:滑动窗口是TCP协议中用于流量控制和拥塞控制的机制之一,它允许发送方和接收方之间的通信进行自适应调整,以适应网络条件的变化。
- 作用:
(1)在TCP协议中,发送方和接收方都维护一个滑动窗口,用于控制数据的传输。发送方的滑动窗口表示可以发送的数据量,而接收方的滑动窗口表示可以接收的数据量。这个滑动窗口大小可以根据网络条件进行动态调整。
(2)发送方根据接收方的滑动窗口大小来发送数据,确保不会发送超过接收方缓冲区大小的数据。接收方通过发送确认消息来告知发送方它的滑动窗口大小,从而通知发送方可以发送多少数据。
(3)通过滑动窗口,TCP协议可以自适应地调整数据的传输速率,以适应网络的拥塞和性能变化。如果网络拥塞,接收方可以减小滑动窗口的大小,从而减少发送方的数据量,避免网络拥塞加剧。如果网络条件良好,滑动窗口可以增大,从而提高数据传输速率。
二, TCP三次握手
TCP三次握手是建立TCP连接时使用的一种协议,它的目的是确保通信双方都能够正常地发送和接收数据。它的过程如下:
(1)客户端向服务器发送一个SYN包(SYN=1,ACK=0),表示客户端请求建立连接。
(2)服务器收到SYN包后,向客户端返回一个SYN/ACK包(SYN=1,ACK=1),表示服务器已经收到了客户端的请求,并且同意建立连接。
(3)客户端收到服务器的SYN/ACK包后,向服务器发送一个ACK包(SYN=0,ACK=1),表示客户端已经收到了服务器的确认,并且双方已经建立连接。
在这个过程中,每个包都包含了序列号和确认号,用于确保数据的可靠传输。如果任何一个包在传输过程中丢失,TCP协议会自动重传该包,直到成功收到对应的确认包。通过这种方式,TCP协议可以确保通信双方能够可靠地进行数据传输。
三,TCP四次挥手
TCP四次握手是用于关闭TCP连接的一种协议,它的目的是确保通信双方都能够正常地关闭连接并释放相关资源。它的过程如下:
(1)客户端向服务器发送一个FIN包(FIN=1,ACK=0),表示客户端请求关闭连接。
(2)服务器收到FIN包后,向客户端发送一个ACK包(FIN=0,ACK=1),表示服务器已经收到了客户端的请求,并且确认关闭连接。
(3)服务器向客户端发送一个FIN包(FIN=1,ACK=1),表示服务器也请求关闭连接。
(4)客户端收到服务器的FIN包后,向服务器发送一个ACK包(FIN=0,ACK=1),表示客户端已经收到了服务器的确认,并且双方已经关闭连接。
在这个过程中,每个包都包含了序列号和确认号,用于确保数据的可靠传输。如果任何一个包在传输过程中丢失,TCP协议会自动重传该包,直到成功收到对应的确认包。通过这种方式,TCP协议可以确保通信双方能够可靠地关闭连接并释放相关资源。
四,抓包工具Wireshark使用
4.1Wireshark下载
- 下载网站:Wireshark官网
4.2Wireshark安装
4.3软件界面介绍
- 界面介绍:
- 软件外观更改
4.4 软件抓包过程与结果分析
4.4.1 实验过程:
- 确立通信模型:客户端(我们的PC)-----服务端(华为官网:www.huawei.com)
- 找到通信的源地址与目标地址
(1)源地址:
(2)目标地址:域名:www.huawei.com(域名对应的IP地址) - 如何从抓包文件中获取域名对应的IP地址?
(1)使用Wireshark软件过滤器:dns.qry.name==www.hauwei.com
123.125.34.49 - 根据IP地址进行过滤数据包: ip.addr==123.125.34.49
如下:
4.4.2抓包实验
-
网卡选择,鼠标左键选择
-
点击开始抓包,打开浏览器访问网站,用于产生流量
-
停止抓包
-
最后保存文件
-
Wireshark界面主要三部分
数据包中更详细的信息: -
过滤数据包:
dns.qry.name==www.huawei.com
-
过滤结果如下:
-
对响应数据包进行分析:
复制IP值: