UDP

传输层最重要的协议为TCP协议和UDP协议。这两者使用"网络"的方式走了两个极端。两个协议的对比非常有趣。TCP协议复杂,但传输可靠UDP协议简单,但传输不可靠。其他的各个传输层协议在某种程度上都是这两个协议的折中。(PS: 记得曾经听说过一个协议叫做UDT~)

UDP协议

UDPUser Datagram Protocol)传输与IP传输很像,甚至可以将UDP协议看作IP协议呈现在传输层的一个接口,UDP协议同样以数据包(datagram)的方式传输,它的传输方式也是"我尽力"式的,所以UDP协议也像IP协议一样,是不可靠的。

其实我在看IP协议那块时候,大神文章里提到IP是不可靠传输的协议时,我当时联想到了UDP,都是不可靠的那么还要UDP干嘛的,直接用IP协议不就行了嘛,当看后这篇的时候总算明白了

UDP的意义

那么,我们为什么不直接使用IP协议而要额外增加一个UDP协议呢? 一个重要的原因是IP协议中并没有端口port)的概念,IP协议进行的是IP地址到IP地址的传输,这意味者两台计算机之间的对话。但每台计算机中需要有多个通信通道。多个通信通道分配给不同的进程(服务)使用。为了满足这一需求,传输层的网络协议实现了端口。一个端口就代表了一个通信通道,UDP协议实现了端口,从而让数据包可以在送到IP地址的基础上,进一步送到指定端口,从而将数据正确传输到指定的进程(服务)。

哈哈,看到这里瞬间就明白了~

UDP协议的产生晚于更加复杂的TCP协议。早期的网络开发者开发出IP协议和TCP协议分别位于网络层传输层,所有的通信都要先经过TCP封装,再经过IP封装,也就是应用层→TCP→IP的过程。开发者将TCP/IP视为相互合作的套装。但很快,网络开发者发现,IP协议的功能和TCP协议的功能是相互独立的。对于一些简单的通信,我们只需要"我尽力"式的IP传输就可以了,而不需要TCP协议复杂的建立连接的方式。特别是在早期网络环境中,如果过多建立TCP连接,会造成很大的网络负担,而UDP协议可以相对快速的处理这些简单通信。UDP协议随之被开发出来,作为IP协议在传输层的"傀儡"。这样,网络通信可以通过应用层→UDP→IP的封装方式,用简单的UDP协议绕过TCP协议。

UDP Header

UDP的数据包同样分为头部header)和数据payload)两部分。UDP是传输层协议,高于网络层。因此,UDP的数据包最终会经过IP协议的封装,然后通过IP协议传输到目的电脑。随后IP包中包含的UDP包在目的电脑拆封,并将数据部分送到相应端口。下图是UDP协议的头部:

UDP头部总共分为四部分:

  • Source Port:源端口
  • Destination Port: 目标端口
  • Length: 整个UDP包的长度
  • Checksum: Checksum的算法与IP协议的头部校验算法相类似。然而,UDP的校验码所校验的序列包括了整个UDP数据包,以及封装的IP头部的一些信息,主要是出发地IP和目的地IP。这样,校验码就能确保IP地址和端口两者的正确性了。在IPv4中,UDP的校验码可以为0,意味着不使用校验。IPv6要求必须进行校验码的校验。

results matching ""

    No results matching ""