TCP 协议详解

TCP(Transmission Control Protocol) 传输控制协议。服务器

是面向链接的,可靠的,基于字节流的传输层协议。网络

一.链接创建 spa

TCP是传输层协议,使用三次握手协议创建链接操作系统

TCP三次握手的过程以下:
  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,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协议想尽量快的把数据传输给对方, 可是又要避免给网络形成太大压力的折中方案.

相关文章
相关标签/搜索