UDP 协议的那点事儿

最近在回顾计算机网络的知识,以前上课没有认真学,只记得几个高大上的术语,所以趁着这次回顾,把学到的知识用博客的形式记录下来,一来加深自己的印象,二来希望让你对这些基础知识有一个更深入的了解。当然,我会尽量把 UDP 协议讲清楚,讲明白,让你“不虚此行”。


UDP( User Datagram Protocol )协议,翻译过来就是用户数据报协议 ,跟 TCP 协议一样,都是位于 OSI 模型的传输层。不过比起 TCP 协议,UDP 协议就显得简单多了,因为它没有「流量控制」、「拥塞控制」等复杂的处理机制。它甚至没有重传机制,也就是说,如果你的数据包半路走丢了,那就是真找不回来了,所以说 UDP 协议是不可靠的。当然了,这个重传机制是针对传输层而言的,你完全可以在应用层写一个协议来进行丢包处理,比如说像 TCP 一样,增加 ACK 和序列号机制。

那你可能会疑惑了,为什么放着可靠的 TCP 协议不用,而选择 UDP 协议?

UDP 报文段结构

这当然要根据应用的需求来,不过在说这个话题之前,我们先来详细了解一下 UDP 协议。

说实话,UDP 的报文段结构比 TCP 报文段简洁多了(见下图),毕竟 UDP 协议就没有什么多余的机制。

言归正传,报文段里的「源端口号」和「目的端口号」是为了告诉传输层,我这个报文是从哪儿(哪个进程)来的,要到哪儿(哪个进程)去。但要注意一点:一个 UDP 套接字是由一个二元组标识的,这个二元组指的是目的 IP 地址和目的端口号,也就是说,服务器上对应的进程,不在乎你是从哪个客户端来的,我都放进一个套接字处理,处理完了再根据源端口号和源 IP 地址,把应答信息发送给客户端。相较而言,TCP 套接字需要一个四元组来标识:源 IP 地址,源端口号,目的 IP 地址和目的端口号。这一点在讲 TCP 协议的时候还会细讲,所以这里就不赘述了。

PS:你可能会问,这报文段里怎么没有 IP 地址啊?这是因为IP 地址保存在网络层的 IP 协议段里,传输层的报文段里当然就没有了。

无连接

每次提到 TCP 协议,我们最先想到的就是三次握手和四次挥手,对 UDP 协议来说,这都是没有的事儿~ 使用 UDP 协议的时候,如果客户端要发送报文段给服务端,不用握手,直接就发出去了,也正因为这样,UDP 协议被称为是无连接的。

很容易想到,不需要握手这一过程的话,就没有因为建立连接而造成的时延,一个字,快!这也是 DNS(域名系统)运行在 UDP 协议之上的很大一部分原因。

但是 UDP 协议不可靠啊,传输过程中丢包了怎么办?最简单的做法就是——忽略它!(否则就得像文章开头说的那样,在应用层实现重传机制)就拿 DNS 来说吧,如果数据包丢失,客户端重发就是了(有超时机制),而且在正常情况下,丢包的概率很低。但如果使用 TCP 协议的话,因为要建立连接,域名查询就会慢很多,除此之外,使用 UDP 协议的网络开销更小——UDP 报文段有 8 个字节的首部开销,而 TCP 协议有 20 字节的开销(看前面的关于报文段的两张图)。 网络开销小,意味着 DNS 服务器能接受更多客户端的请求。

还有一个方面,TCP 协议有拥塞控制机制,它会在网络拥塞时遏制 TCP 发送方,以至于延迟报文段的传送,所以对于一些要求传输延迟小,且能够容忍一些数据丢失的实时程序来说,UDP 协议可能是一个更好的选择。路由选择协议(RIP)、 网络管理协议(SNMP) 也都选择了 UDP 来作为底层的传输协议。

最后,这是一张客户端与服务端利用 UDP 协议通信的流程图:

UDP 协议要讲的内容不多,下次要讲的 TCP 协议,就比较烧脑了,做好准备吧!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,387评论 0 2
  • 转自原文:TCP、UDP以及TCP滑窗,它们的区别注:文中提到TCP传输过程的特点,以及“粘包”的原因和解决方案,...
    半岛夏天阅读 3,464评论 2 31
  • 本篇文章主要是从运输层协议概述、UDP、TCP、可靠传输的工作原理、TCP首部格式、TCP可靠传输的实现、TCP流...
    SeanMa阅读 3,835评论 2 13
  • 1 运输层协议概述 1.1 进程之间的通信 网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑...
    Mr希灵阅读 8,072评论 0 34