本文旨在帮助大家了解目前常用的传输层协议:UDP协议,TCP协议;并简单对比两者的特点;欢迎看官老爷留言。

UDP协议

UDP协议,全称是 User Datagram Protocol,用户数据报协议。

我们首先了解一下该协议的格式,如下图所示:

image.png

  • Source Port : 源端口,16位

  • Destination Port : 目标端口,16位

  • Length:消息体长度,16位

  • Checksum:检验为,16位

  • Data octets:一个字节一个字节的数据。Octet是8位

首先不要感到惊讶,这就是大名鼎鼎的UDP协议,它的格式就是这么简单清晰。

它的特点是:

  • 协议简洁

  • 快,传输过程不需要握手

  • 非面向连接

  • 不保证可靠传输

  • 无序

  • 适合广播

你可能直观的可以感觉到格式是挺简洁的,但是你说的 可靠性差,无序,适合广播又是哪里体现出来的呢?

别着急,我们在对比看看TCP协议的格式,对比一下你就会有深入的理解了。

TCP协议

TCP 协议,全称是 Transmission Control Protocol 传输控制协议。

同样的我们先了解一下报文格式:

image.png

  • Source Port : 源端口,16位

  • Destination Port : 目标端口,16位

  • Sequence Number: 序列码,32位

  • Acknowledgment Number:应答码,32位

  • Data Offset:偏移量,4位;指头的大小

  • Reserver: 保留位,6位

  • 标志位,6位;URG,ACK,PSH,RST,SYN,FIN

  • Window: 窗口,16位

  • Checksum : 校验位,16位

  • Urgent Pointer: 紧急指针,16位

  • Options:选项,长度不定,但必须是整字节,所以会有Padding补齐

  • Data:数据域

看过这么复杂的结构,瞬间感觉UDP“真香呀”,不过TCP协议的强大能力也得益于其精巧的报文设计。

它具备如下这些特点:

  • 面向连接,TCP建立连接的时候需要三次握手,具体了解该过程,可以移步笔者的聊聊TCP协议的三次握手和四次挥手

  • 传输有序性,我们可以看到报文结构中有一对收发的序列号,TCP正式通过它来保证顺序性的。

  • 流量控制,TCP协议的发送方通过接收方反馈的窗口大小可以达到流量控制的目的

  • 不适广播场景,同样的因为TCP在建立连接的过程中需要三次握手,如果用于广播场景会消耗相对较多的流量,所以不适合用于广播场景

  • 拥塞控制

经过这样的一对比,才发现还真是“高级呀”。

对比

image.png