华为hcia——Datacom实验指南——TCP传输原理和数据段格式

发布于:2025-03-15 ⋅ 阅读:(8) ⋅ 点赞:(0)

什么是TCP

TCP是一种可靠的端到端的传输层协议,仅应用于单波通信。

采用TCP协议作为传输方式的应用层服务,再进行数据传输前,都需要进行TCP协议的创建。

TCP报文的格式

sequence number(序列号)

占4个字节,32比特,序列号是指报文里面data数据中第一个字节的编号。

acknowlegment number(确认号)

该字段指的是,希望接受对端下一个数据段的序列号。

header length(头部长度)

这个字段以4个字节为单位来标示TCP

ACK(确认)

标志位,判断确认号字段是否有效,1标示有效。

SYN(同步)

也是一个标志位,用来向对方请求建立TCP连接,对端要是也同意建立回回复一个SYN+ACK=1的确认数据段。

FIN(最后)

也是一个标志位,用来请求对方释放TCP连接,标示没有数据要发送了。

实验配置

第一步配置环境

配置环境的流程和这个一模一样,华为hcia——Datacom实验指南——以太网帧和IPV4数据包格式(一),再配置完成后,我们还需要的操作是,在桌面建立一个文件夹,里面随便放一个.html网页的文件。

启动服务。

第二步对数据进行抓包

随便选择一个地方进行抓包

第三步,访问服务器

我们之前配置的服务器ip是192.168.2.10,html服务端口是80,所以我们访问的网站是

http://192.168.2.10:80

当我们配置正确,点击获取后是这样的

分析

TCP协议分为2部分,建立服务,由3次握手组成,释放服务由4次挥手。

在我们抓获的这个流量包中,可以很明显的看到3次握手和四次挥手。

我们分别进行分析

三次握手

第一次握手

客户端向服务器发送一个SYN=1的报文。

我们重点关注几个地方

第一个是sequence number,

一个是0还有一个是6659,之所以有两个,是因为,在wireshark中,为了方便用户好判断,所以默认是0,但是实际上,这个值是下面这个6659,这个数值是随机的。

第二个是acknowledgment nubmber,

因为这是第一次握手,所以不存在需要确认的地方,默认为0

第三个是flags字段

在flags字段里面我们看到只有syn=1,可以判断出这是第一次握手。

第二次握手

还是和第一次握手关注的一样

第一个是sequence number,

一个是0还有一个是42012,之所以有两个,是因为,在wireshark中,为了方便用户好判断,所以默认是0,但是实际上,这个值是下面这个42012,这个数值是随机的。

在这里,这个seq的值也是随机的,且这个值是服务器这边随机的初始值。

第二个是acknowledgment nubmber,

这是第二次握手,所以ack的值是第一握手中seq值加一。

第三个是flags字段

在flags字段里面我们看到syn=1和ack=1

可以判断出这是第二次握手。

第三次握手

第一个是sequence number,

有两个值一个是1,一个是6660,这是在第一次握手的基础上序列号加一

第二个是acknowledgment nubmber,

它的值是1,这是在上一个报文的seq值加一的出来的

第三个是flags字段

在flags字段里面我们看到ack和seq值=1

可以判断出这是第三次握手,也是最后一次握手

说完三次握手,接下来分析一下四次挥手

四次挥手

挥手和握手有一个小区别,在客户端接受完所有数据后,会向服务器发送一个ack标签的报文,告诉服务器,我已经接受完毕了。

这里的seq和ack的值和中间发送数据相关联

第一次挥手

客户端发送一个带有FIN和ack=1的标签报文给服务器,告诉服务器我想要释放TCP协议

第一个是sequence number,

有两个值一个是159,一个是6818,和上一个ack报文的值是一模一样

第二个是acknowledgment nubmber,

它的值是308和上一个ack报文的值也是一模一样

第三个是flags字段

在flags字段里面我们看到ack和FIN的值为1

第二次挥手

服务器会回复一个ack报文,告诉客户端,我同意你的释放TCP请求

第一个是sequence number,

有两个值一个是308,一个是42320,这是在上个客户端向服务器发送释放TCP协议的ack值

第二个是acknowledgment nubmber,

这是在上个客户端向服务器发送释放TCP协议的seq+1的值为160

第三个是flags字段

在flags字段里面我们看到ack和的值为1

第三次挥手

服务器发送一个带有FIN和ack=1的标签报文给客户端,告诉服务器我想要释放TCP协议

第一个是sequence number,

有两个值一个是308,一个是42210,是上一个报文的seq+1值

第二个是acknowledgment nubmber,

它的值是160和上一个ack报文的值也是一模一样

第三个是flags字段

在flags字段里面我们看到ack和FIN的值为1

第四次挥手

客户端会回复一个ack报文,告诉服务器,我同意你的释放TCP请求

第一个是sequence number,

有两个值一个是160,一个是6819,这是在上个客户端向服务器发送释放TCP协议的ack值

第二个是acknowledgment nubmber,

这是在上个客户端向服务器发送释放TCP协议的seq+1的值为309

第三个是flags字段

在flags字段里面我们看到ack和的值为1

结束

这就是完整的TCP协议的三次握手和四次挥手的所有细节。