目录
一、理论
1.TCP报文段完整格式
TCP通过数据段的交互来建立连接、传输数据、发出确认、进行差错控制、流量控制及关闭连接。整个TCP数据段也分为“数据段头”和“数据”两部分,“数据段头”是TCP为了实现端到端可靠传输而加上的TCP控制信息,而“数据”部分则是由高层(即TCP/IP体系结构中的应用层)来的用户数据。但由于TCP只有一种TPDU格式,所有类型的数据段格式都统一在TCP数据段格式中,不同类型数据段是通过其中的多个控制位来实现的。
TCP 报文是 TCP 层传输的数据单元,也称为报文段。TCP报文段包括TCP首部(20字节)、TCP数据。
表1 TCP报文段完整格式
首 部 | 固定 部分 | 源端口号 (16位) | 目标端口号 (16位) | |||||||
序号 (32位) | ||||||||||
确认号 (32位) | ||||||||||
首部长度(4位) | 保留 (6位) | U R G | A C K | P S H | R S T | S Y N | F I N | 窗口大小 (16位) | ||
校验和 (16位) | 紧急指针 (16位) | |||||||||
可变 部分 | 选项 | |||||||||
数据部分 |
2.TCP报文首部各字段
TCP报文首部各字段功能。
表2 TCP报文首部各字段
字段名 | 占用位数 | 功能 |
源端口号 | 16 | 写入源端口,表示来源的进程 |
目标端口号 | 16 | 写入目标端口,表示目标的进程 |
序号 | 32 | 本报文段所发送数据的第一个字节的编号 |
确认号 | 32 | 接收方期望收到发送方下一个报文段的第一个字节数据的编号 |
首部长度 | 4 | TCP报文段的首部长度 |
保留 | 6 | 保留今后使用 |
控制位 | 6 | URG(紧急位) ACK(确认位) PSH(急切位) RST(重置位) SYN(同步位) FIN(断开位) |
窗口大小 | 16 | 现在允许对方发送的数据量 |
校验和 | 16 | 校验首部和数据这两部分 |
紧急指针 | 16 | 本报文段中紧急数据的字节数 |
选项 | 长度可变 | 可选报头设置 |
3.三次握手与四次挥手
(1)概念
TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。
三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。
四次挥手:即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
(2)三次握手
TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。
三次握手原理:
第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。
(3)四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
四次挥手原理:
第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。
其中:FIN标志位数置1,表示断开TCP连接。
(4)状态名词解释
状态 | 功能 |
LISTEN | 等待从任何远端TCP 和端口的连接请求。 |
SYN_SENT | 发送完一个连接请求后等待一个匹配的连接请求。 |
SYN_RECEIVED | 发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。 |
ESTABLISHED | 表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。 |
FIN_WAIT_1 | 等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。 |
FIN_WAIT_2 | 等待远端TCP 的连接终止请求。 |
CLOSE_WAIT | 等待本地用户的连接终止请求。 |
CLOSING | 等待远端TCP 的连接终止请求确认。 |
LAST_ACK | 等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认) |
TIME_WAIT | 等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。 两个存在的理由:可靠的实现tcp全双工连接的终止; 允许老的重复分节在网络中消逝。 |
二、实验
1.华为系统测试2台主机连通
(1)拓扑图
(2)主机IPv4配置
① PC1配置
② PC2配置
(3)命令
① G0/0/1 接口配置
② G0/0/2 接口配置
(4)测试连通