协议森林07 傀儡 (UDP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

 

我们已经讲解了物理层、连接层和网络层。最开始的连接层协议种类繁多(Ethernet、Wifi、ARP等等)。到了网络层,我们只剩下一个IP协议(IPv4和IPv6是替代关系)。进入到传输层(transport layer),协议的种类又开始繁多起来(比如TCP、UDP、SCTP等)。这就好像下面的大树,根部(连接层)分叉很多,然后统一到一个树干(网络层),到了树冠(传输层)部分又开始开始分叉,而每个树枝上长出更多的树叶(应用层)。我们在网络层已经看到,通过树干的统一,我们实现了一个覆盖全球的互联网络(Internet)。然而,我们可能出于不同的目的利用这张“网”,随之使用的方式也有所区分。不同的传输层协议(以及更多的应用层协议)正是我们使用“网”的不同方式的体现。

 

网络分层的“艺术”观点

 

传输层最重要的协议为TCP协议和UDP协议。这两者使用“网”的方式走了两个极端。两个协议的对比非常有趣。TCP协议复杂,但传输可靠。UDP协议简单,但传输不可靠。其他的各个传输层协议在某种程度上都是这两个协议的折中。我们先来看传输层协议中比较简单的UDP协议。我们将参考许多之前文章的内容(协议森林01, 03, 05)。

 

 

UDP协议简介

UDP(User Datagram Protocol)传输与IP传输非常类似。你可以将UDP协议看作IP协议暴露在传输层的一个接口。UDP协议同样以数据包(datagram)的方式传输,它的传输方式也是"Best Effort"的,所以UDP协议也是不可靠的(unreliable)。那么,我们为什么不直接使用IP协议而要额外增加一个UDP协议呢? 一个重要的原因是IP协议中并没有端口(port)的概念。IP协议进行的是IP地址到IP地址的传输,这意味者两台计算机之间的对话。但每台计算机中需要有多个通信通道,并将多个通信通道分配给不同的进程使用(关于进程,可以参考Linux进程基础)。一个端口就代表了这样的一个通信通道。正如我们在邮局和邮差中提到的收信人的概念一样。UDP协议实现了端口,从而让数据包可以在送到IP地址的基础上,进一步可以送到某个端口。

 

UDP:依然不是那么“可靠”

 

尽管UDP协议非常简单,但它的产生晚于更加复杂的TCP协议。早期的网络开发者开发出IP协议和TCP协议分别位于网络层和传输层,所有的通信都要先经过TCP封装,再经过IP封装(应用层->TCP->IP)。开发者将TCP/IP视为相互合作的套装。但很快,网络开发者发现,IP协议的功能和TCP协议的功能是相互独立的。对于一些简单的通信,我们只需要“Best Effort”式的IP传输就可以了,而不需要TCP协议复杂的建立连接的方式(特别是在早期网络环境中,如果过多的建立TCP连接,会造成很大的网络负担,而UDP协议可以相对快速的处理这些简单通信)。UDP协议随之被开发出来,作为IP协议在传输层的"傀儡"。这样,网络通信可以通过应用层->UDP->IP的封装方式,绕过TCP协议。由于UDP协议本身异常简单,实际上只为IP传输起到了桥梁的作用。我们将在TCP协议的讲解中看到更多TCP协议和UDP协议的对比。

 

IP和他的傀儡UDP

 

UDP的数据包同样分为头部(header)和数据(payload)两部分。UDP是传输层(transport layer)协议,这意味着UDP的数据包需要经过IP协议的封装(encapsulation),然后通过IP协议传输到目的电脑。随后UDP包在目的电脑拆封,并将信息送到相应端口的缓存中。

 

UDP协议的头部

来自wikipedia

上面的source port和destination port分别为UDP包的出发端口和目的地端口。Length为整个UDP包的长度。

checksum的算法与IP协议的header checksum算法相类似。然而,UDP的checksum所校验的序列包括了整个UDP数据包,以及封装的IP头部的一些信息(主要为出发地IP和目的地IP)。这样,checksum就可以校验IP:端口的正确性了。在IPv4中,checksum可以为0,意味着不使用checksum。IPv6要求必须进行checksum校验。

 

端口与socket

端口(port)是伴随着传输层诞生的概念。它可以将网络层的IP通信分送到各个通信通道。UDP协议和TCP协议尽管在工作方式上有很大的不同,但它们都建立了从一个端口到另一个端口的通信。

IP:端口

 

随着我们进入传输层,我们也可以调用操作系统中的API,来构建socket。Socket是操作系统提供的一个编程接口,它用来代表某个网络通信。应用程序通过socket来调用系统内核中处理网络协议的模块,而这些内核模块会负责具体的网络协议的实施。这样,我们可以让内核来接收网络协议的细节,而我们只需要提供所要传输的内容就可以了,内核会帮我们控制格式,并进一步向底层封装。因此,在实际应用中,我们并不需要知道具体怎么构成一个UDP包,而只需要提供相关信息(比如IP地址,比如端口号,比如所要传输的信息),操作系统内核会在传输之前会根据我们提供的相关信息构成一个合格的UDP包(以及下层的包和帧)。socket是一个比较大的课题,在协议森林系列中不会过多深入。

(在原始Python服务器我们讨论了如何使用socket建立一个TCP连接,可以作为一个参考)

 

总结

端口是传输层带来的最重要的概念。我们进一步了解了UDP协议。如果已经掌握了IP协议,那么UDP协议就没有任何困难可言,它只是IP协议暴露在传输层上的接口。

 

欢迎继续阅读“协议森林”系列

 

时间: 2024-10-24 07:14:58

协议森林07 傀儡 (UDP协议)的相关文章

协议森林13 9527 (DNS协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   在周星驰的电影<唐伯虎点秋香>中,周星驰饰演的主角一进入华府,就被强制增加了一个代号9527.从此,华府的人开始称呼主角为9527,而不是他的姓名. 域名(domain name)是IP地址的代号.域名通常是由字符构成的.对于人类来说,字符构成的域名,比如www.yahoo.com,要比纯粹数字构成的IP地址(106.10.170.118)容易记忆.域名解析系统(DNS, domain n

协议森林06 瑞士军刀 (ICMP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   到现在为止,我们讲解了网络层中最重要的IP协议(参考协议森林).IP协议的一个重要补充是是ICMP协议.   ICMP协议 ICMP(Internet Control Message Protocol)是介于网络层和传输层的协议.它的主要功能是传输网络诊断信息.       ICMP传输的信息可以分为两类,一类是错误(error)信息,这一类信息可用来诊断网络故障.我们已经知道,IP协议的工

协议森林

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   互联网是为了通信,通信又依赖于协议.我们交谈时,要符合语法和用语规范.机器之间的通话也要符合协议.否则,鸡同鸭讲,无法相互理解."协议森林"是我的一系列关于网络协议的文章,总结了多个网络协议. 网络协议属于技术,但深受政策与历史的影响.Ethernet, IP, UDP, TCP, HTTP, DNS... 这些协议形成茂密的树林,盘根错节.协议之间有时合作,有时竞

协议森林16 小美的桌号(DHCP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地址等.一台电脑只要接上网,就可以通过DHCP协议获得相关配置,从而顺利的畅游网络.   网络配置 电脑刚刚接上网络时,像一个走入一家新餐厅的食客,不免会有很多疑惑: "我该坐在哪里?" "我怎么点菜?" "我该如何结账?"   初入大饭店   如

实例-UDP协议为何是11教材说17

问题描述 UDP协议为何是11教材说17 根据前面所介绍的方法,下面给出一个具体的实例进行分析:7E21 45 00 001D 47F3 0000 80 11 B0F6 0A4A30E0 D350336C 03E8 03F2 0009 55 1B61 A5DE 7E 7E21为PPP包头,4表示旧版本号5表示首部长度,00表示服务类型,001D表示包的All长度47F3表示16位的标识,0000表示3位的标志+13位的片偏移,80表示TTL,11表示协议(11表示UDP协议,TCP为06),B0

协议森林08 不放弃 (TCP协议与流通信)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   TCP(Transportation Control Protocol)协议与IP协议是一同产生的.事实上,两者最初是一个协议,后来才被分拆成网络层的IP和传输层的TCP.我们已经在UDP协议中介绍过,UDP协议是IP协议在传输层的"傀儡",用来实现数据包形式的通信.而TCP协议则实现了"流"形式的通信. TCP的内容非常丰富.我不能在一篇文章中将TCP讲完.这

协议森林05 我尽力 (IP协议详解)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学.   IPv4与IPv6头部的对比 我们已经在IP接力中介绍过,一个IP包分为头部(header)和数据(payload/data)两部分.头部是为了实现IP通信必须的附加信息,数据是IP通信所要传送的信息.   黄色区域 (同名区域) 我们看到,三个黄色区域跨越了IPv4和IPv6.Version(4位)用

协议森林14 逆袭 (CIDR与NAT)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   IPv4由于最初的设计原因,长度只有32位,所以只提供了大约40亿个地址.这造成了IPv4地址的耗尽危机.随后,IPv6被设计出来,并可以提供足够多的IP地址.但是IPv4与IPv6并不兼容,IPv4向IPv6的迁移并不容易.一些技术,比如说这里要说的CIDR和NAT,相继推广.这些技术可以缓解IPv4的稀缺状态,成就了IPv4一时的逆袭.   CIDR CIDR(Classless Int

协议森林01 邮差与邮局 (网络协议概观)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载.   信号的传输总要符合一定的协议(protocol).比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了"敌人入侵"这一抽象信号.这样一个"狼烟=敌人入侵"就是一个简单的协议.协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母.比如SOS(***---***,  *代表短信号,-代表长信号).这样&q