[计算机网络] TCP协议

[计算机网络] TCP协议

TCP(Transmission Control Protocol)协议属于传输层通信协议,要求数据准确无误地传递给对方。
基于TCP的应用层协议有HTTPSMTPFTPTelnetPOP3

  • 万维网:HTTP协议
  • 文件传输:FTP协议
  • 电子邮件:SMTP协议、POP3协议
  • 远程终端接入:TELNET协议

1. 特点

在这里插入图片描述

优缺点:数据传输可靠,但是效率慢(需要建立连接,发送确认包)。

2. 报文段格式

  1. TCP虽面向字节流,但传送的数据单元 = 报文段
  2. 报文段 = 首部 + 数据 2部分
  3. TCP的全部功能体现在它首部中各字段的作用:
    ① 首部前20个字符固定、后面有4n个字节是根据需而增加的选项 ② TCP首部最小长度 = 20字节
    在这里插入图片描述
    在这里插入图片描述

3. 建立连接——三次握手

在这里插入图片描述
在这里插入图片描述

注意:① 因 TCP提供的是全双工通信,故通信双方的应用进程在任何时候都能发送数据
② 三次握手期间,任何1次未收到对面的回复,则都会重发

为什么TCP建立连接需要三次握手

结论:防止服务器端因接收了早已失效的连接请求报文,从而一直等待客户端请求,最终导致形成死锁、浪费资源

在这里插入图片描述

SYN洪泛攻击:

  • 从上可看出:服务端的TCP资源分配时刻 = 完成第二次握手时;而客户端的TCP资源分配时刻 = 完成第三次握手时
  • 这就使得服务器易于受到SYN洪泛攻击,即同时多个客户端发起连接请求,从而需进行多个请求的TCP连接资源分配

4. 释放连接——四次挥手

在这里插入图片描述
在这里插入图片描述

为什么TCP释放连接需要四次挥手

结论: 为了保证通信双方都能通知对方需释放 & 断开连接,即释放连接后,都无法接收 / 发送消息给对方。

在这里插入图片描述

延伸: 为什么客户端关闭连接前要等待2MSL时间

  • TIME - WAIT 状态的作用是什么
  • MSL = 最长报文段寿命(Maximum Segment Lifetime)`
  1. 保证客户端发送的最后1个连接释放确认报文能到达服务器,从而使得服务器能正常释放连接。
    在这里插入图片描述

  2. 防止上文提到的早已失效的连接请求报文出现在本连接中:客户端发送了最后1个连接释放请求确认报文后,再经过2MSL时间,则可使本连接持续时间内所产生的所有报文段都从网络中消失,即在下1个新的连接中就不会出现早已失效的连接请求报文。

5. 无差错传输

含义:无差错:即传输信道不出差错
发送 & 接收效率匹配:即无论发送方以多快的速度发送数据,接收方总来得及处理收到的数据

5.1 滑动窗口协议

在这里插入图片描述

发送端的工作原理
  1. 每收到一个确认帧,发送窗口就向前滑动一个帧的距离
  2. 当发送窗口内无可发送的帧时(即窗口内的帧全部是已发送但未收到确认的帧),发送方就会停止发送,直到收到接收方发送的确认帧使窗口移动,窗口内有可以发送的帧,之后才开始继续发送
    在这里插入图片描述
接受端的工作原理

当收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,则一律丢弃。
在这里插入图片描述

滑动窗口协议的重要特性
  • 只有接收窗口向前滑动、接收方发送了确认帧时,发送窗口才有可能(只有发送方收到确认帧才是一定)向前滑动
  • 停止-等待协议、后退N帧协议 & 选择重传协议只是在发送窗口大小和接收窗口大小上有所差别:
    • 停止等待协议:发送窗口大小=1,接收窗口大小=1;即 单帧滑动窗口 等于 停止-等待协议
    • 后退N帧协议:发送窗口大小>1,接收窗口大小=1。
    • 选择重传协议:发送窗口大小>1,接收窗口大小>1。
  • 当接收窗口的大小为1时,可保证帧有序接收。
  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的(注意要与TCP的滑动窗口协议区别)

5.2 实现无差错传输的解决方案

核心思想是采用一些可靠传输协议,使得

  • 出现差错时,让发送方重传差错数据:即 出错重传
  • 当接收方来不及接收收到的数据时,可通知发送方降低发送数据的效率:即 速度匹配

针对上述2个问题,分别采用的解决方案是:自动重传协议 和 流量控制 & 拥塞控制协议

解决方案1:自动重传请求协议ARQ(针对 出错重传)

ARQ指Auto Repeat reQues

在这里插入图片描述
在这里插入图片描述

类型1:停等式ARQ(Stop-and-Wait)
  • 发送方每发送一帧,要等到接收方的应答信号后才能发送下一帧
  • 接收方每接收一帧,都要反馈一个应答信号,表示可接下一帧
  • 若接收方不反馈应答信号,则发送方必须一直等待
类型2:后退N帧协议(连续ARQ协议)
  • 发送方:采用多帧滑动窗口的原理,可连续发送多个数据帧 而不需等待对方确认
  • 接收方:采用 累计确认 & 后退N帧的原理,只允许按顺序接收帧。具体原理如下:
    在这里插入图片描述
    在这里插入图片描述
类型3:选择重传ARQ(Selective Repeat)
  • 与ARQ协议仅仅是接收窗口大小的区别。
  • 优:因连续发送数据帧而提高了信道的利用率
  • 缺:重传时又必须把原来已经传送正确的数据帧进行重传(仅因为这些数据帧前面有一个数据帧出了错),将导致传送效率降低。

若信道传输质量很差,导致误码率较大时,后退N帧协议不一定优于停止-等待协议

解决方案2:流量控制 & 拥塞控制(针对 速度匹配)

措施1:流量控制

在这里插入图片描述
在这里插入图片描述

  • 注意:死锁问题:

在这里插入图片描述

措施2:拥塞控制

定义:防止过多的数据注入到网络中,使得网络中的路由器 & 链路不致于过载

拥塞控制与流量控制的区别
在这里插入图片描述
解决方案:

  • 2个解决方案:慢开始 & 拥塞避免、快重传 & 快恢复
  • 4种算法:慢开始 & 拥塞避免、快重传 & 快恢复
解决方案1:慢开始 & 拥塞避免

(一)拥塞窗口、慢开始算法、拥塞避免算法

  • 发送方维持一个状态变量:拥塞窗口(cwndcongestion window

在这里插入图片描述

  • 慢开始算法:

    • 原理:当主机开始发送数据时,由小到大逐渐增大拥塞窗口数值(即发送窗口数值),从而由小到大逐渐增大发送报文段
    • 目的:开始传输时,试探网络的拥塞情况。
    • 具体措施:在这里插入图片描述
    • 示意图:在这里插入图片描述
    • 注意:慢开始的“慢”指:一开始发送报文段时拥塞窗口(cwnd)设置得较小(为1),使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),并不是指拥塞窗口(cwnd)的增长速率慢
  • 拥塞避免算法

    • 原理:使得拥塞窗口(cwnd)按线性规律缓慢增长:每经过一个往返时间RTT,发送方的拥塞窗口(cwnd)1
    • 注意:拥塞避免并不可避免拥塞,只是将拥塞窗口按现行规律缓慢增长,使得网络比较不容易出现拥塞。
    • 相比慢开始算法的加倍,拥塞窗口增长速率缓慢得多
    • 示意图:在这里插入图片描述

(二)解决方案(慢开始 & 拥塞避免)

在这里插入图片描述
在这里插入图片描述

解决方案2:快重传 & 快恢复

快重传 & 快恢复的解决方案 是对慢开始 & 拥塞避免算法的改进

(一)快重传算法、快恢复算法

  • 快重传算法
    • 原理:① 接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时才进行捎带确认。② 发送方只要一连收到3个重复确认就立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器到期
    • 由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%
    • 示意图
      在这里插入图片描述
  • 快恢复:当发送方连续收到3个重复确认后,就:
    • 执行乘法减小算法:把慢开始门限(ssthresh)设置为 出现拥塞时发送方窗口值的一半 = 拥塞窗口的1半
    • 将拥塞窗口(cwnd)值设置为 慢开始门限ssthresh减半后的数值 = 拥塞窗口的1半
    • 执行加法增大算法:执行拥塞避免算法,使拥塞窗口缓慢地线性增大。

注意:

  1. 由于跳过了拥塞窗口(cwnd)从1起始的慢开始过程,所以称为:快恢复
  2. 此处网络不会发生网络拥塞,因若拥塞,则不会收到多个重复确认报文

(二)解决方案描述(快重传 & 快恢复)

在这里插入图片描述
在这里插入图片描述

6. 与UDP协议的区别

在这里插入图片描述

原文链接:计算机网络:这是一份全面 & 详细 的TCP协议攻略

发布了82 篇原创文章 · 获赞 7 · 访问量 4972

猜你喜欢

转载自blog.csdn.net/magic_jiayu/article/details/104353340