TCP和UDP的不同之处 tcp和udp概念和区别( 三 )


可以通过序列号(seq)来实现,序列号是按照顺序给发送数据的每一个字节都标上号码的编号 。接收端通过查询 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去 。通过序列号和确认应答号,TCP 能够识别是否已经接收数据,又能够判断是否需要接收,从而实现可靠传输 。

TCP和UDP的不同之处 tcp和udp概念和区别


如上图所示,请求按照顺序发送的话是 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 报文段结构
TCP和UDP的不同之处 tcp和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 报文段结构
TCP和UDP的不同之处 tcp和udp概念和区别


TCP 报文段结构相比 UDP 报文结构多了很多内容 。但是前两个 32 比特的字段是一样的 。它们是 源端口号 和 目标端口号 。另外,和 UDP 一样,TCP 也包含校验和(checksum field) ,除此之外,TCP 报文段首部还有下面这些