TCP协议

TCP协议的特点

  1. TCP协议时面向连接(虚连接)的传输层协议。

  2. 每一条TCP连接只能有两个端点,每一条TCP连接是点对点的。

  3. TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重

  4. TCP提供全双工通信。

    a. 发送缓存:准备发送的数据&已经发送但是尚未收到确认的数据。

    b. 接收缓存:按序到达,但是还未被应用程序接收的数据&未按序到达的数据。

  5. TCP面向字节流。 应用程序将数据看成一连串的,无结构的字节流。

TCP报文段首部格式

image-20210209233149297

  1. 源端口:发送端端口号,0~65535。

  2. 目的端口:接收端端口号,0~65535.

  3. 序号:在一个TCP连接中传输的字节流中的每一个字节都按照顺序编号,本字段表示本报文段所发送数据的第一个字节的序号

  4. 确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确接受。

  5. 数据偏移:因为TCP除了固定的20B首部之外,还有选项与填充字段,因此需要数据偏移位指定TCP数据报首部至数据部分的长度。因为TCP数据报为4B的整数倍,不足部分填充0,因此偏移1位代表4B。15 * 4B = 60B,首部最长为60B。

  6. 保留:保留位。

  7. 六个控制位

    1)紧急位URG:URG=1时,表明此数据报有紧急数据,是高优先级数据,应尽快发送,不用在发送端缓存队列排队,配合紧急指针使用。

    2)确认位ACK:ACK=1时确认号有效,在连接建立后,所有传送的数据报都需要把ACK置为1.

    3)推送位PSH:PSH=1时,表明此数据报应该尽快交付给接收端的应用程序,不用等缓存填满之后再向上交付。

    4)复位RST:RST=1时,表明TCP连接出现了严重错误,需要断开连接之后,再重新连接。

    5)同步位SYN:SYN=1时,表明这是一个连接请求/连接接受报文。

    6)终止位FIN:FIN=1时,表明报文的发送方已经发送完数据,要求释放连接。

image-20210210003635533

  1. 窗口:指的发送本报文段的一方的接收窗口,即允许对方发送的数据量。
  2. 校验和:伪首部+首部+数据部分。第四个字段为6.
  3. 紧急指针:URG=1才有效,紧急数据的末尾,紧急数据为数据报头至紧急指针的中间部分。
  4. 选项:最大报文长度MSS、窗口扩大、时间戳、选择确认。。。。

TCP连接管理

TCP连接的三个阶段,连接建立->数据传输->连接释放。

客户服务器方式

三次握手

image-20210210010058531

  1. 客户端主动发起请求,请求建立连接,SYN=1,因为此数据报是第一条数据,因此没有确认位。无应用层数据

    SYN=1 seq=x(随机)

  2. 服务器接受到客户端发送的请求,为该连接分配缓存与变量,并向客户端返回确认报文段,允许连接。无应用层数据

    SYN=1 seq=y(随机) ACK=1 ack=x+1(因为客户端发送时没有数据,因此期望收到下一个序号为x+1)

  3. 客户端收到服务器发送的连接确认,客户端为该连接分配缓存与变量,开始向服务器返回确认的确认。可携带数据

    SYN=0 ACK=1 seq=x+1 ack =y+1

四次挥手

image-20210210011350509

  1. 客户端发送完毕数据,请求释放连接。

    FIN=1,seq=u

  2. 服务器接收到连接终止信号,需要确认其收到连接释放信号,因为释放连接不带数据,因此ack为seq+1。半关闭状态

    ACK=1,ack=u+1,seq=v

  3. 服务器将剩余数据发送完毕之后,请求释放连接,主动关闭TCP连接。

    FIN=1,ACK=1, ack=u+1,seq=w

  4. 客户端回复一个确认释放连接报文,等待计时器到设置的2MSL(最长报文寿命),连接彻底关闭。

可靠传输

可靠:保证接收方从缓存区读出的字节流与发送方发出的字节流完全一样。

  1. 校验:伪首部
  2. 序号:字节编号
  3. 确认:确认序号,保证之前序号的字节都已收到,累计确认
  4. 重传:确认重传不分家,超时重传;TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
  5. 冗余ACK,当收到超过3个冗余ACK时,即进行重传。

TCP流量控制

流量控制:让发送方慢点,要让接收方来得及接收。

TCP利用滑动窗口机制,实现流量控制。

在通信过程中,接收方根据自己接收缓存的大小,动态调整发送方的发送窗口大小,即接收窗口rwnd(接收方通过设置确认报文的窗口字段,来将rwnd通知发送方),发送方的发送窗口取接收窗口与拥塞窗口的最小值

TCP为每一个连接设置持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。

如果计时器到期了,就发送一个零窗口探测报文段

若窗口还是0,则重新计时。

TCP拥塞控制

出现拥塞的条件:

对资源的需求总和>可用资源

网络中有许多资源同时呈现供应不足->网络性能变差->网络吞吐量将随着输入负荷增大而下降

拥塞控制:

防止过多的数据注入到网络中。全局性

拥塞控制四种算法

假定:

  1. 数据单方向传送,而另一个方向只发送确认。

  2. 接收方总是有足够大的缓存空间,因而发送窗口仅仅取决于拥塞窗口。

    发送窗口=min

接收窗口:接收方根据接受缓存设置的值,并告知发送方,反映接收方容量。

拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。

慢开始 拥塞避免

image-20210210224321676

纵坐标:1代表一个最大报文长度MSS

横坐标:1代表一个传输轮次,一个往返时延RTT。

  1. 从1开始,即慢开始,指数增大,当达到门限值,线性增大。
  2. 超时重传,达到拥塞最大值,降为1,重新指数增大开始,门限值降为一半。

快重传 快恢复

image-20210210225253079

  1. 快重传:当收到重复的3个冗余ACK,快速重传而不等超时计时器超时。
  2. 快恢复:拥塞发生时,不再降低到1个拥塞窗口,而是把窗口降低为阈值的一半,线性增大。
posted @ 2021-02-10 23:09  桌儿剑仙  阅读(189)  评论(1编辑  收藏  举报