前言
说到TCP协议,我会想到的是当浏览器输入url时客户端与服务端建立链接的3次握手/4次挥手。那么,TCP到底是个啥?
什么是TCP
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
![](https://img.haomeiwen.com/i1627906/a89b3342156c382a.png)
TCP 是以太网协议和 IP 协议的上层协议
以太网协议:用于局域网(点对点)通信
IP协议:局域网之间的通信
ps:路由器就是基于IP协议,局域网之间依靠路由器连接
TCP 协议的作用
保证数据通信的完整性和可靠性,防止丢包
慢启动和 ACK
慢启动
服务器发送数据包,当然越快越好,最好一次性全发出去。但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。
那么如何知道对方线路理想速率是多少呢?答案是:慢慢试!!!
TCP协议为了让效率与可靠起飞🛫️,设计了慢启动机制(slow start)。开始的时候发送较慢,然后根据丢包情况调整加速或减速发送。。
TCP所有确认都是基于序号而不是报文段。
以字节为单位虚拟传输(不是物理传输,这不废话嘛~)。
慢启动,快重传,快恢复
ACK
”确认”的英语是 acknowledgement,所以这个确认消息就简称 ACK。
ACK 携带两个信息
期待要收到下一个数据包的编号
接收方的接收窗口的剩余容量
发送方有了这两个信息,再加上自己已经发出的数据包的最新编号,就会推测出接收方大概的接收速度,从而降低或增加发送速率。这被称为”发送窗口”,这个窗口的大小是可变的。
每个 ACK 都带有下一个数据包的编号,以及接收窗口的剩余容量。双方都会发送 ACK
TCP 的运输连接管理
运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。 连接建立过程中要解决以下三个问题:
- 要使每一方能够确知对方的存在。
- 要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
- 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
用三次握手建立 TCP 连接
![](https://img.haomeiwen.com/i1627906/70e900cea060077d.png)
1、A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。
2、B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
B 在确认报文段中应使 SYN = 1,使 ACK = 1, 其确认号ack = x + 1,自己选择的序号 seq = y。
3、A 收到此报文段后向 B 给出确认,其 ACK = 1,确认号 ack = y + 1。 A 的 TCP 通知上层应用进程,连接已经建立。
4、B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程:TCP 连接已经建立。
ack的值是上一个的seq(序列号)+1!!!!
网友评论