可以通过序列号(seq)来实现,序列号是按照顺序给发送数据的每一个字节都标上号码的编号 。接收端通过查询 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去 。通过序列号和确认应答号,TCP 能够识别是否已经接收数据,又能够判断是否需要接收,从而实现可靠传输 。
如上图所示,请求按照顺序发送的话是 seq = 1 ,这个请求会把第 1 字节到第 n 字节的数据一起发送过去,等待目标主机一次确认每个字节后,再发送 seq = n + 1 的请求,确认完成后再发送 seq = m + 1 的请求,这样能够保证序列号不会重复 。
UDP 没有所谓的序列号和确认号,所以不会对数据进行确认,数据丢失后也不会进行重传,所以 UDP 是一种不可靠的协议 。
如果使用 TCP 和 UDP 来比喻开发人员:TCP 就是那种凡事都要设计好,没设计不会进行开发的工程师,需要把一切因素考虑在内后再开干!所以非常靠谱;而 UDP 就是那种上来直接干干干,接到项目需求马上就开干,也不管设计,也不管技术选型,就是干,这种开发人员非常不靠谱,但是适合快速迭代开发,因为可以马上上手!
有序性差异我们上面说到,TCP 会对请求分开发送,每次请求所携带的数据都会被目标主机进行确认,目标主机依次确认每个请求后,就会对请求中的数据进行重组,由于请求是由 seq 的,所以 TCP 在重组这些数据时,也会按照顺序进行重组,而 UDP 没有有序性的这种保证 。
报文段的差异TCP 和 UDP 同属于传输层协议,传输层协议传输的数据统称为报文段,TCP 和 UDP 的报文段的主要差异如下 。
UDP 报文段结构
- 源端口号(Source Port) :这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口 。接收端的应用程序利用这个字段的值作为发送响应的目的地址 。这个字段是可选项,有时不会设置源端口号 。没有源端口号就默认为 0 ,通常用于不需要返回消息的通信中 。
- 目标端口号(Destination Port): 表示接收端端口,字段长为 16 位 。
- 长度(Length): 该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度 。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8,最大长度为 2 ^ 16 = 65535 字节 。
- 校验和(Checksum):UDP 使用校验和来保证数据安全性,UDP 的校验和也提供了差错检测功能,差错检测用于校验报文段从源到目标主机的过程中,数据的完整性是否发生了改变 。
TCP 报文段结构相比 UDP 报文结构多了很多内容 。但是前两个 32 比特的字段是一样的 。它们是 源端口号 和 目标端口号 。另外,和 UDP 一样,TCP 也包含校验和(checksum field) ,除此之外,TCP 报文段首部还有下面这些
- 32 比特的序号字段(sequence number field) 和 32 比特的确认号字段(acknowledgment number field)。这些字段被 TCP 发送方和接收方用来实现可靠的数据传输 。
- 4 比特的首部字段长度字段(header length field),这个字段指示了以 32 比特的字为单位的 TCP 首部长度 。TCP 首部的长度是可变的,但是通常情况下,选项字段为空,所以 TCP 首部字段的长度是 20 字节 。
- 16 比特的 接受窗口字段(receive window field) ,这个字段用于流量控制 。它用于指示接收方能够/愿意接受的字节数量
推荐阅读
- 通过手机端修改WiFi名称和密码的步骤 改无线网密码用手机怎么改
- 诺基亚E63和E72:传奇之作的黄金时代
- 用手机做电脑的摄像头和麦克风方法 手机怎么当电脑摄像头使用
- iPhone 12/12 Pro真机评测 12和12pro大小一样吗
- 华为手机同时打开wifi和热点方法 华为热点怎么打开热点
- OPPO手机实现屏幕共享和远程协助方法 怎么屏幕共享给另一个手机
- 如何识别天然酵母和人工酵母
- 2023年高性价比手机推荐 红米和荣耀哪个性价比高
- Win11和Win10安装建议 windows11和win10哪个好用
- 路由器查看宽带密码方法 怎么查询宽带账号和密码