TCP 协议概述
1. TCP 协议简介
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP 协议提供可靠的通信服务,通过校验和、序列号、确认应答、重传等机制保证数据传输的完整性。
TCP 协议是一种端到端的协议,通信双方必须建立连接,然后才能通信。通信过程中,TCP 协议采用三次握手建立连接,四次挥手断开连接。
2. TCP 协议特点
- 面向连接:TCP 协议是面向连接的协议,通信双方必须先建立连接,然后才能通信。
- 可靠性:TCP 协议提供可靠的通信服务,通过校验和、序列号、确认应答、重传等机制保证数据传输的完整性。
- 字节流:TCP 协议是基于字节流的协议,通信双方发送的数据可以是任意字节,不必事先知道对方发送的数据长度。
- 超时重传:TCP 协议实现超时重传机制,保证数据传输的可靠性。
- 流量控制:TCP 协议实现流量控制机制,可以对通信双方发送数据的速度进行限制。
- 拥塞控制:TCP 协议实现拥塞控制机制,可以防止网络拥塞,减少网络拥塞对通信的影响。
tcp 数据包格式
三次握手概述
三次握手(Three-way Handshake) 其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包.
进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常,指定自己的初始化序列号为后续的
可靠性传输做准备,实际上就是服务器指定连接端口,建立TCP连接,并同步连接双方的序列号和确认号,
交换TCP窗口大小信息.
四次挥手概述
TCP 数据建⽴连接的时候,需要使⽤ 3 次握⼿,但是断开连接的时候,只需要挥⼿四次。所谓四
次挥⼿(Four-Way Wavehand)即终⽌ TCP 连接,就是指断开⼀个 TCP 连接时,需要客户端和服
务端总共发送 4 个包以确认连接的断开。在 socket 编程中,这⼀过程由客户端或服务端任⼀⽅执⾏
close 来触发,整个流程如下图所示
ESTABLISHED : 代表当前 TCP 已经连接成功
MSL(Maximum Segment Lifetime), 指⼀个⽚段在⽹络中最⼤的存活时间。2MSL 就
是⼀个发送和⼀个回复所需的最⼤时间。
FIN_WAIT_1 : 等待对⽅的 FIN 报⽂。
FIN_WAIT_2 : 等待对⽅的 FIN 报⽂。
TIME_WAIT : 表示收到了对⽅的 FIN** 报⽂ **,并发送出了 ACK 报⽂,就等
2MSL 后即可回到 CLOSED 可⽤状态了
CLOSE_WAIT : 这种状态的含义其实是表示在等待关闭
LAST_ACK : 这个状态还是⽐较容易好理解的,它是被动关闭⼀⽅在发送 FIN 报⽂
后,最后等待对⽅的 ACK 报⽂。当收到 ACK 报⽂后,也即可以进⼊到 CLOSED 可
⽤状态了。
为什么 TCP 协议在建⽴连接的时候是握⼿三次,⽽断开链接的时候却要挥⼿四次?
TCP协议在建立连接时进行三次握手是为了确保双方都能够同步序列号和确认双方的通信能力。
第一次握手客户端发送连接请求,第二次握手服务器响应并确认连接请求,第三次握手客户端再次确认连接。
这样双方就可以确认彼此已准备就绪,可以安全地开始数据传输。
而在断开连接时,因为数据传输是双向的,需要进行四次挥手才能完成断开连接的过程。
第一次挥手一方发送关闭连接请求,第二次挥手另一方接收到请求,并且确认收到请求,但仍可以发送数据。
第三次挥手另一方发送自己的关闭请求,第四次挥手则是对方确认收到关闭请求,完成关闭连接的过程。
这样可以保证双方都能完成关闭连接的操作,确保数据传输的可靠性。