传输控制协议TCP

目录

TCP报文格式

TCP的特点

TCP原理:

1.确认应答机制

2.超时重传机制

3.连接管理机制

建立连接

​编辑关闭连接

4.滑动窗口机制

​5.流量控制

6.拥塞控制

7.延迟应答

8.捎带应答


TCP报文格式

传输控制协议TCP_第1张图片

1.源端口号:发送端的哪一个端口发出的

2.目的端口号:接收端的哪一个端口所接收

3.序号:每一个字节数据都进行了编号

传输控制协议TCP_第2张图片 4.确认序号:通知发送端已接收的TCP信息

5.首部长度:TCP报头的长度总和

6.保留:空着,方便日后对TCP进行调整或升级

7.标志位(一个一位):

  • URG:紧急指针是否有效
  • ACK:确认字符表明信息接收无误
  • PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
  • RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段
  • SYN:请求建立连接;我们把携带SYN标识的称为同步报文段
  • FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段

8.窗口大小:窗口大小的信息(后面解释)

9.校验和:确认TCP信息传输是否正确

10.紧急指针:标识TCP信息中哪一部分数据是紧急数据

11.选项:可有可无,有就是对TCP报文进行一定的拓展.因为选项的存在,TCP的报头长度是不固定的.

TCP的特点

  1. 面向字节流:随意的读取数据,不像数据报一样规定发出的大小与读取的大小需要一致
  2. 拥有缓冲区:创建Socket时同时会在内核中分别创建一个发送缓冲区与接收缓冲区
  3. 全双工:既可以发送也可以接收
  4. 保活定时器:不定时的向对方发送一个包,检查连接是否还存在.如果不存在了,会自动释放掉连接

TCP原理:

1.确认应答机制

 A给B发送信息后,只有收到B相应的应答信息,才会继续发送下一条信息.

传输控制协议TCP_第3张图片

2.超时重传机制

情况一:

A发送信息后,可能会丢包.在一定时间没有收到B的应答信息后,A会重传上一条发送的信息. 

传输控制协议TCP_第4张图片情况二:

A发送信息后,B的应答信息丢失了.在一定的时间后,A重传上一条信息.

此时B就会收到两条相同的信息.可以在B端的接收缓冲区中根据序列号对信息进行去重操作

传输控制协议TCP_第5张图片

3.连接管理机制

建立连接

根据前面的确认应答机制,A向B发起连接时需要分四步:

  1. A向B发送SYN请求建立连接
  2. B向A发送ACK表示确认收到信息
  3. B向A发送SYN请求建立连接
  4. A向B发送ACK表示确认收到信息

为了节省资源,可以发现第2步与第3步分别的发出对象与接受对象都是一致的且时间连续.

所以,第2步与第3步可以合并一齐发送.

就有了TCP建立连接中的三次握手.

TCP的三次握手操作,既可以确认连接双方的身份,也可以反映出连接双方的接受功能与发送功能是否正常,并在一定程度上对TCP传输的可靠性起到了辅助作用.

传输控制协议TCP_第6张图片关闭连接

同样的,A向B关闭连接也是一共分为四步:

  1. A向B发送FIN表示即将关闭连接
  2. B向A发送ACK表示确认应答
  3. B向A发送FIN也表示即将关闭连接
  4. A再向B发送ACK表示确认应答

在A最后一次向B发送ACK后,才会分别真正的关闭连接,释放资源

以上就是TCP的四次挥手.

传输控制协议TCP_第7张图片

此处中的B不会把ACK与FIN合并成一条TCP发送给A.

因为两条语句之间可能会有一定的时间间隔.

这个if语句中的hasNext是接收到A端的FIN信息后判断的.

在break之后B会立即发送ACK.

至于什么时候发送FIN取决于编写的代码是如何运行的.

传输控制协议TCP_第8张图片

(代码来源于:[JAVAee]网络编程-套接字Socket_HY_PIGIE的博客-CSDN博客的TCP示例一中的服务器截取) 

4.滑动窗口机制

我们通过确认应答机制其实可以发现,其效率并不是非常高效.

发送信息后要等待对方发送确认应答后才能发送下一条,不然就要等待超时重传了.

于是,便有了滑动窗口机制.

滑动窗口机制是:

根据一定的大小,可以等待返回的AC发送后面的TCP信息

如下图:

在A发送1~1000后没有收到ACK也可以紧接着发送后两条TCP信息. 

传输控制协议TCP_第9张图片

在A收到了发送1~1000的ACK后,窗口会相应的向后移动一条TCP信息.

传输控制协议TCP_第10张图片

当然其中也会发送丢包的情况

情况一:

B端返回的ACK丢包.

像上图中,如果接收了1~1000,下一条为1001的ACK丢包了,但下一条1001~2000的ACK没有丢包.

A就可以通过1001~2000的ACK来确实1~1000已经被B接收到了.

(ACK的含义能够涵盖上面所有的ACK,所以之前的ACK丢包了也没有太大的影响)

情况二:

A发送的信息丢包.

A发送的1~1000丢包,并继续发送后面的TCP信息.

B端照常接收,但会申请1~1000的信息,当连续三次申请后.

A会重传1~1000的信息 

传输控制协议TCP_第11张图片5.流量控制

接收端处理数据的速度是有限的。

如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。

因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制

(如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一
个窗口探测数据段,使接收端把窗口大小告诉发送端。)

传输控制协议TCP_第12张图片

6.拥塞控制

在网络上,计算机可能会进入拥塞状态.如果在拥塞状态下,TCP还使用滑动窗口增大效率的进行传输信息.会导致许多信息丢失,加重拥塞状态.

对此,TCP引入了慢启动.

开始先发少量的数据,对网络状态进行试探,并使用窗口对信息的发送进行了一定的限制.

初始,窗口大小为1,在发送M1并收到确认应答后.窗口的大小成倍的增加,发送方继续根据扩大后的窗口发送信息.

(图片来自《计算机网络》[第七版]谢希仁编著) 

虽然叫"慢启动",但他增加的速度是以指数形式增加的.到了后面速度会非常快.

这就不符合为了应对计算机拥塞状态的初心了.

于是,便有了一个阈值.在窗口大小达到这个阈值后,会以线性的方式递增.

传输控制协议TCP_第13张图片拥塞控制主要作用是,在避免给网络造成太大压力的同时尽快传输信息的方案.

7.延迟应答

在接收端中的接收缓存区,加设内存空间为10.

一次收到了5大小的信息并返回ACK.

返回ACK后,接收端就会将缓存区的信息进行刷新.那缓存区还有额外5的空间就会一直没有被使用到,浪费了许多性能.

对此,TCO引入了一个延迟应答.

接收端接收一次信息,往缓存区中写入了5.且并没有立刻返回ACK.

而是,间隔一段时间后再返回ACK.在这段间隔的时间中,就可以接收第二次发送的信息,这时接收缓存区又写入了5.

再返回ACK的时候就可以一次性将10大小的缓存区全部刷掉

但也并不是每一条信息都会延迟应答.

  • 数量限制:每隔N个包就应答一次;(N一般为2)
  • 时间限制:超过最大延迟时间就应答一次
     

传输控制协议TCP_第14张图片

8.捎带应答

在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是 "一发一收" 的.

在A发送了1~24后并向B申请1~5的信息.

B可以将确认1~24的ACK与发送1~5的信息合并成一个包发送.

传输控制协议TCP_第15张图片

总的来说,TCP这么多原理与属性.实现了其可靠性和帮助提升性能的为: 

可靠性:

  • 校验和
  • 序列号(按序到达)
  • 确认应答
  • 超时重发
  • 连接管理
  • 流量控制
  • 拥塞控制

提高性能:

  • 滑动窗口
  • 快速重传
  • 延迟应答
  • 捎带应答

你可能感兴趣的:(tcp/ip,网络,服务器)