TCP(Transmission Control Protocol) 传输控制协议。服务器
是面向链接的,可靠的,基于字节流的传输层协议。网络
一.链接创建 spa
TCP是传输层协议,使用三次握手协议创建链接操作系统
二.确认机制blog
TCP将每一个字节的数据都进行了编号, 即为序列号。io
每个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据; 下一次你要从哪里开始发. class
三.重传机制服务器端
Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次断定超时重发的超时时间都是500ms的整数倍. im
若是重发一次以后, 仍然得不到应答, 等待 2*500ms 后再进行重传. 若是仍然得不到应答, 等待 4*500ms 进行重传.
依次类推, 以指数形式递增. 累计到必定的重传次数, TCP认为网络异常或者对端主机出现异常, 强制关闭链接.数据
四.滑动窗口
窗口大小指的是无需等待确认应答就能够继续发送数据的最大值.
操做系统内核为了维护这个滑动窗口, 须要开辟发送缓冲区来记录当前还有哪些数据没有应答 。只有ACK确认应答过的数据, 才能从缓冲区删掉.
五.拥塞控制机制
发送开始的时候, 定义拥塞窗口大小为1;
每次收到一个ACK应答, 拥塞窗口加1;
每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小作比较, 取较小的值做为实际发送的窗口
当TCP开始启动的时候, 慢启动阈值等于窗口最大值
在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1
拥塞控制, 归根结底是TCP协议想尽量快的把数据传输给对方, 可是又要避免给网络形成太大压力的折中方案.