为什么说TCP协议是可靠的

问题背景

  • 日常面试时,几乎所有学过计算机的都知道,TCP协议是可靠的,UDP协议不可靠的。为什么TCP协议是可靠的?它用什么机制保证可靠呢?

提出问题

  1. 由于IP 数据包的 MTU 有长度限制, TCP报文段过大时,需要切割。切割之后发送出去,由于网络链路的不确定性,接收端接收到包的次序和发送次序很大概率是不一致的。接收端如何把接收到的“同一批”TCP报文段数据拼接成预期的二进制数据?
  2. 发送方发送了一个TCP报文,怎么样确认接收方接收到了这个报文?
  3. 发送方发送了一个TCP报文,接收端如何保证接收到的报文段的数据没有在途中被“其他人”篡改?

TCP协议的初级解决方案

  1. 采用序列号标识一个TCP报文

    • TCP报文段头部的,有一个字段是序列号(Sequence)
    • 接收端可以使用sequence对不同的TCP报文进行排序和拼接
  2. 初级解决方案: ACK机制+确认号
    • 接收方接收到序号为seq的TCP报文之后,期望接收到序列号为seq+1的TCP报文,确认号会填充seq+1
    • ACK位会置为1,表示确认接收到TCP报文
    • 超时未接收到ACK的情况下,发送端默认认为TCP报文段丢失,再次重发
  3. TCP报文头部字段检验和,检验报文段数据的checksum是否和接收到实际的报文段数据的checksum一致。不一致则丢弃

初级解决方案的问题

对于问题2的初级解决方案:存在两个问题
1.效率低的问题。
发送方保持发送 -> 等待ACK -> 发送 -> 等待ACK…的单线工作方式,这样的工作方式叫做 stop-and-wait。stop-and-wait 虽然实现了 TCP 通信的可靠性,但同时牺牲了网络通信的效率。同时,在等待ACK的时间段内,网络都处于闲置(idle)状态

2.有点小缺陷
如果当前的TCP报文段一直没有被确认,会导致后续的片段无法发送出去。

TCP协议的优化方案

  • 滑动窗口机制

    • 不展开,可查看参考链接中的图片序列,非常详细
    • TCP报文段首部带有一个窗口
    • 接收端减少了 ACK 回复所消耗的流量,因为采用的是累计 ACK 回复
    • 发送端在大多数情况下不会因为单个TCP报文段没有接收到ACK而被阻塞继续发送
    • seq和确认号的一个细节
      • 接收到接收到序列号为seq的TCP报文之后,发送的ACK报文的确认号不一定是seq+1,可能是seq+n(n-1是接收到序列号为seq的TCP报文段之前已经接收到的TCP报文段的个数)

总结

  • TCP协议可靠使用以下机制来保证

    • TCP报文段首部sequence字段唯一标识TCP报文段,也作为顺序的标识
    • TCP通信采用ACK+确认号的确认机制
    • TCP报文首部的checksum字段记录报文段数据的checksum
  • TCP协议的优化
    • 采用滑动窗口机制,提升通信效率

参考资料

原文地址:https://www.cnblogs.com/HelloGreen/p/11747269.html

时间: 2024-08-29 10:59:50

为什么说TCP协议是可靠的的相关文章

TCP协议的可靠传输

一.TCP协议的可靠传输 TCP的可靠传输基于ARQ协议: TCP的滑动窗口以字节为单位: 考虑一种情况:窗口中的数据全部都发送出去了,但是全都没有收到确认号,可用窗口为0,窗口是不能向前推进的. 一种特殊情况:窗口中所有数据都已经发送出去了,但确认号不是按顺序收到的 so:可靠传输的效率不是很高. 选择重传:选择重传需要指定需要重传的字节:每一个字节都有一个唯一的32位序号,选择重传需要指定的就是这个序号:这个指定的字节序号是存储在TCP选项里面的. 选择重传更多时候是对一段字节进行重传的.重

可靠的传输层协议——TCP协议

TCP协议 TCP协议工作在传输层,虽然它与UDP的下一层都是IP但是它却和UDP的效果完全不同,它是一种可靠的传输层协议 一.TCP协议封装 TCP数据段头部共有20个字节,包括16位的源端口号,16位的目的端口号,端口号与前面各层中的协议类型相似,都指的是上层将要交给谁,这个端口号就是主机上一个进程所绑定的一个入口,所以通过端口号和IP就能找到唯一主机的唯一进程. 32位序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节.如果将字节流看作在两个应用

TCP协议的三次握手+四次断开

TCP协议的三次握手 1.TCP/IP协议概述 TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础.TCP/IP是网络中使用的基本的通信协议.虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录.文件传输和电子邮件等,而TCP协议和IP协议是保证数

TCP协议三次握手和四次挥手

http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

TCP协议三次握手

TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge nu

简析TCP的三次握手与四次分手(TCP协议头部的格式,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端)good

2014-10-30 分类:理论基础 / 网络开发 阅读(4127) 评论(29) TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续.它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功.首先来看看OSI的七层模型: 我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层:在第二

通信协议之HTTP,UDP,TCP协议

1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层有TCP,UDP协议 而在应用层有HTTP,FTP,DNS等协议 因此HTTP本身就是一个协议,是从WEB服务器端传输超文本,到本地浏览器的一个传输协议 2.Socked协议 是为实现以上各个协议而建立的一个通信管道,实际上就是代表了客户端与服务器端的一个通信进程,双方都是通过指定的s

TCP协议三次握手过程分析(改)

TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous---同步的---建立联机) ACK(acknowledgement---确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) seq(Sequence number---随机序号) ack(Acknowl

TCP协议三次握手过程分析(转载)

TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 第一次