TCP协议

TCP协议的特点
TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复的问题。
TCP是TCP/IP体系中非常复杂的一个协议,主要特点如下:

  1. TCP是面向连接的传输层协议
  2. 每条TCP连接只能有两个端点,每条TCP连接只能是点对点的
  3. TCP提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序
  4. TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据。在TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据
  5. TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流

TCP报文段
TCP传送的数据单元称为报文段。TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。
一个TCP报文段分为首部和数据部分,整个TCP报文段作为IP数据报的数据部分封装在IP数据报中。
TCP报文段格式如下:
TCP协议_第1张图片

  1. 源端口和目的端口:各占2B。端口是运输层与应用层的服务接口,运输车的服用和分用功能都要通过端口实现
  2. 序号:占4B。TCP是面向字节流的,所以TCP连接传送的字节流中的每个字节都按顺序编号
  3. 确认号:占4B字节。是期望收到对方下一个报文段的第一个数据字节的序号
  4. 数据偏移:即首部长度。指出TCP报文段的数据起始处距离TCP报文段的起始处有多远
  5. 保留:占6位
  6. 紧急位URG:URG=1时,表明紧急指针字段有效
  7. 确认位ACK:ACK=1时确认号字段才有效,ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  8. 推送位PSH:接收方TCP收到PSH=1的报文段,就尽快地交付给接收应用进程
  9. 复位位RST:RST=1时,表明TCP连接出现严重差错,必须释放连接,再重新建立运输连接
  10. 同步位SYN:同步位SYN=1表示这是一个连接请求或连接接受报文。当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1
  11. 终止位FIN:用来释放一个连接。当FIN=1时,表明此发送方的数据已发送完毕,并要求释放传输连接
  12. 窗口:占2B.窗口值作为接收方让发送方设置其发送窗口的依据
  13. 校验和:占2B
  14. 紧急指针:占2B
  15. 选项:长度可变
  16. 填充:为了使整个首部长度是4B的整数倍

TCP连接管理
TCP是面向连接的协议,每个TCP连接都有三个阶段:连接建立、数据传送和连接释放。
TCP连接的建立采用客户/服务器方式。主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器。

  • TCP连接的建立
    连接的建立经历3个步骤,通常称为三次握手。
    如下图所示:
    TCP协议_第2张图片
    第一步:客户机的TCP首先向服务器的TCP发送连接请求报文段
    第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量
    第三步:当客户机收到确认报文后,,还要向服务器给出确认,并为该TCP连接分配缓存和变量。
    成功进行以上三步后,就建立了TCP连接,接下来就可以传送应用层数据。
  • TCP连接的释放
    TCP连接的释放称为四次握手
    如下图所示:
    TCP协议_第3张图片
    第一步:客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接
    第二步:服务器收到连接释放报文段后即发出确认。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭
    第三步:若服务器已没有要向客户机发送的数据,就通知TCP释放连接,主动关闭TCP连接
    第四步:客户机收到连接释放报文段后,必须发出确认。客户端回送一个确认报文段,此时TCP连接还未释放,必须经过时间等待计时器设置的时间2MSL后,客户机才进入连接关闭状态

TCP可靠传输
TCP的任务是在IP层不可靠、尽力而为服务的基础上建立一种可靠数据传输服务。TCP提供的可靠数据传输服务保证接收方进程从缓冲区读出的字节流与发送方发出的字节流完全一样。实现可靠传输TCP采用了校验、序号、确认和重传等机制。
TCP的校验机制采用的是增加伪首部的方法,与UDP校验一样。

  • 序号:TCP连接传送的数据流中的每个字节都编上一个序号。序号字段的值是指本报文段所发送的数据的第一个字节的序号。
  • 确认:TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。
  • 重传:有两种事件会导致TCP对报文段进行重传:超时和冗余ACK
    (1) 超时:TCP每发送一个报文段,就对这个报文段设置一个计时器。计时器设置的重传时间到期还未收到确认时,就要重传这一报文段。
    (2)冗余ACK:TCP规定每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一次期待字节的序号。当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟这个被确认报文段之后的报文段已经丢失,需要执行重传。

TCP流量控制
TCP提供流量控制服务来消除发送方使接收方缓存区溢出的可能性。

TCP提供一种基于滑动窗口协议的流量控制机制。在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送发地发送窗口的大小,这称为接收窗口rwnd。同时,发送发根据其对当前网络拥塞情况的估计而确定的窗口值,这称为拥塞窗口cwnd。
rwnd即接收方允许连续接收的最大能力,单位是字节。发送方总是根据最新收到的rwnd值来限制自己发送窗口的大小,从而将未确认的数据量控制在rwnd大小之内,保证不会使接收方缓存溢出。cwnd反应了当前网络的容量。发送窗口的实际大小取rwnd与cwnd中的最小值。

利用滑动窗口实现流量控制示例如下,设初始rwnd=400,一个报文段100:
TCP协议_第4张图片
TCP拥塞控制
拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。因特网建议标准定义了进行拥塞控制的四种算法:慢开始、拥塞避免、快重传和快恢复。

  • 拥塞控制与流量控制的不同点:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络性能有关的所有因素。流量控制指点对点的通信量的控制,所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。
  • 拥塞控制与流量控制的相同点:都通过抑制发送方发送数据的速率来达到控制效果
  1. 慢开始和拥塞避免
    (1) 慢开始算法:在TCP刚刚连接好并开始发送TCP报文段时,先令拥塞窗口cwnd=1,每收到一个对新报文段的确认后,将cwnd加1,每经过一个传输轮次后,cwnd就会翻倍。直到把cwnd增大到一个规定的慢开始门限ssthresh(阙值),然后改用拥塞避免算法。
    慢开始的“慢”并不是拥塞窗口cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使发送方在开始时只发送一个报文段,然后逐渐增大cwnd,这对防止网络拥塞时一个非常有力的措施。
    (2)拥塞避免算法:每经过一个往返时延RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,使拥塞窗口cwnd按线性规律增长。
    (3)网络拥塞的处理:当发送方判断网络出现拥塞时,就要把慢开始门限ssthresh设置为出现拥塞时发送发的cwnd值的一半,然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。

慢开始和拥塞避免算法实现过程如下所示:
TCP协议_第5张图片
2. 快重传和快恢复
(1)快重传:快重传技术使用了冗余ACK来检测丢包的发生,当发送发连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
(2)快恢复:当发生方连续收到三个冗余ACK时,把门限ssthresh设置为此时发送方cwnd的一半。与慢开始不同之处是它把cwnd值设置为慢开始门限ssthresh改变后的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。
快恢复算法实现过程如下所示:
TCP协议_第6张图片

你可能感兴趣的:(计算机网络,tcp/ip,网络)