介绍下 TCP三次握手
客户端发送 SYN 同步数据包 + 随机序生成的数据列号 seq=x, 以及 WIN 窗口值
服务端返回 SYN同步标识 + ACK确认标识 , seq=y, ACK=x+1, 以及 WIN 窗口值
客户端将 seq=x+1, ACK=y+1, 然后发送 ACK 应答, 以及 WIN 窗口值
SEQ 序列号用于告知对方, 即将发送的的数据中的编号, 要和这个序列号对的上
ACK 包含的重要信息:
-
期望接收到的下一字节的序号n, 举个例子,假如接收端收到1-1024字节,它会发送一个确认号为1025的ACK,但是接下来收到的是2049-3072,它是不会发送确认号为3072的ACK,而依旧发送1025的ACK。
-
另一个是二是当前的窗口大小 m, 如此发送方在接收到ACK包含的这两个数据后就可以计算出还可以发送多少字节的数据给对方,假定当前发送方已发送到第x字节,则可以发送的字节数就是y=m-(x-n).这就是滑动窗口控制流量的基本原理
介绍下 TCP 窗口机制
TCP滑动窗口分为接受窗口,发送窗口 滑动窗口协议是传输层进行流控的一种措施
TCP 连接的每一端都会告知它自己的接收窗口(rwnd) ,它告知可用缓冲区空间的大小,以容纳传入的数据。 在第一次建立连接时,双方使用其系统默认设置初始化各自的 一个保守的 rwnd 值, 然后
素材
为啥每个环节一定要 ACK 确认, 因为 TCP 有个超时重试机制, 除非超时 重置连接
一句话概括,TCP连接握手,握的是啥? 通信双方数据原点的序列号!
为了保证 TCP 传输的准确性,引入了 流量控制、拥塞控制和拥塞避免。
缓慢启动、拥塞避免、快速重传和快速恢复