计算机网络协议包头赏析-UDP
之前我们已经针对以太网、IP、TCP协议,进行了包头赏析。本次,我们继续UDP协议包头赏析。
提到TCP,想必大家会有所了解,它早已是家喻户晓的一个网络协议了,而UDP远没有他的大哥那么的有名,所以,我们有必要先介绍下这个幕后的英雄。
【UDP是什么】
UDP,是User Datagram Protocol的缩写,中文翻译过来就是用户数据报协议,它和TCP是一对兄弟,同样位于OSI七层协议体系中的第四层“传输层”,向互联网提供面向事务的简单不可靠信息传送服务。
正如刚才介绍的那样,UDP提供的是一种不可靠信息传输,此时,你是否会心生疑惑:“科技都发展的这么厉害了,怎么还有这么不要强的协议呢?竟然自己承认自己的服务不可靠?”
【UDP存在的合理性】
并非UDP自己不要强,而是UDP的确有他存在的合理性和必然性。
众所周知,网络数据包在从上层到下层组建时,会由于上层包很大而需要拆分成较小的组再进行传输,这样的话,势必引出“哪些组先到目的地,哪些组后到目的地”的问题。TCP协议好似一个做事严谨的理科生,它对工作非常仔细,要求所有被分了组的数据,要按照原有的顺序,从前到后的发送到目的端。而UDP协议则好似一个文科生,它更讲究的是抒情和随性,只要分了组的数据被传送出去了,它就不会太在意、太上心了。
虽然,大多数人会认为TCP是一个靠谱的学生,但是,这种靠谱,是需要付出效率与性能的代价的。在一些不需要非常严谨的场景下,UDP反倒是一个更好的选择,比如语音传输、视频传输时,人们可能对正确性的关注度并非那么敏感,但是流畅度确是影响用户体验的关键指标。
【UDP的重要用户】
他们是DNS查询、视频传输、QQ、TFTP等等。
【UDP协议报头格式】
惯例,先看图,后解释:

图已经很清晰,UDP报头要比TCP的简单许多,只有区区8个字节,即源端口、目的端口、用户数据报长度、校验和。就凭这一点,就比TCP那复杂的20字节报头,要轻便了许多。
此处唯一需要解释一下的,就是“用户数据报长度”,它占了16位bit,能表示的最大长度是2^16,单位是字节。这里所指的长度,是包含UDP报头在内的总长度,而非数据部分的长度。
【UDP数据报长度一般设置为多少比较合适】
看到一位朋友对此问题解释的很是清晰,在此直接转帖过来,也对rain_fish表示感谢。(原帖地址在这里):
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层. UDP属于运输层,下面我们由下至上一步一步来看: 以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区. 并不包括链路层的首部和尾部的18个字节. 所以,事实上,这个1500字节就是网络层IP数据报的长度限制. 因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节. 而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的. 又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节. 这个1472字节就是我们可以使用的字节数。 当我们发送的UDP数据大于1472的时候会怎样呢? 这也就是说IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation). 把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组. 这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便 无法重组数据报.将导致丢弃整个UDP数据报。 因此,在普通的局域网环境下,我建议将UDP的数据控制在1472字节以下为好. 进行Internet编程时则不同,因为Internet上的路由器可能会将MTU设为不同的值. 如果我们假定MTU为1500来发送数据的,而途经的某个网络的MTU值小于1500字节,那么系统将会使用一系列的机 制来调整MTU值,使数据报能够顺利到达目的地,这样就会做许多不必要的操作. 鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时. 最好将UDP的数据长度控件在548字节(576-8-20)以内.
计算机网络协议包头赏析-UDP的更多相关文章
- 计算机网络协议包头赏析-IP
上次和大家聊了聊以太网的帧格式,本文会讲解IP数据报格式的定义. == 开门见山,先上图: 任何一个IP数据报都是由首部和数据两部分组成,而且首部基本是固定长度的,长度为20字节.这一点很重要,其他都 ...
- 计算机网络协议包头赏析-TCP
仍然先把TCP报文段的格式放在这里,然后我们看图说话: TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加. 下面, ...
- 【转帖】计算机网络协议(三)——UDP、TCP、Socket
计算机网络协议(三)——UDP.TCP.Socket 2019年09月04日 11:09:41 to_be_better_one 阅读数 28794 文章标签: 计算机网络UDPTCPSocket 更 ...
- 一些重要的计算机网络协议(IP、TCP、UDP、HTTP)
一.计算机网络的发展历程 1.计算机网络发展 与其说计算机改变了世界,倒不如说是计算机网络改变了世界.彼时彼刻,你我都因网络而有了交集,岂非一种缘分? 计算机与网络发展大致经历如下过程:
- 移动端IM系统的协议选型:UDP还是TCP?
1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...
- 计算机网络协议层次(转发:http://blog.csdn.net/gavin_john/article/details/53186570)
计算机网络学习的核心内容就是网络协议的学习.网络协议是为计算机网络中进行数据交换而建立的规则.标准或者说是约定的集合.计算机网络协议同我们的语言一样,多种多样. 为了给网络协议的设计提供一个结构,网络 ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- 计算机网络http,https,tcp,udp,get,post
一.HTTP 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文, ...
- 协议系列之UDP协议
上节说的TCP协议虽然提供了可靠的传输,但是也有一个缺点,发送速度慢.那么有没有一种协议能快速发送的呢?这节要讨论的就是UDP协议,它提供了更加快的发送速度,但也牺牲了可靠性,它是一种无连接的传输协议 ...
随机推荐
- 【intellij】异常信息汇总
Application Server was not connected before run configuration stop, reason: javax.management.Instanc ...
- Oracle job procedure
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...
- 使用PyInstaller打包Python程序
本文转载自: http://www.pycoding.com/2015/04/23/pyinstaller.html
- spring framework 各版本源码下载地址
现在spring的源码下载地址真是不好找,这次终于找到了.记录一下,以帮助需要的朋友. https://github.com/spring-projects/spring-framework/tags ...
- 从某一日期开始过day天的日期
一个SX问我的,我就写了写......从2010.1.1开始,给了一组测试数据3的话输出2010.1.4星期1,所以说2010.1.1是星期五,总星期就是 (day+5)%7==0?7:(day+5) ...
- 不改变中间层,如何玩转 .NET 的远程处理功能?
原文链接: https://msdn.microsoft.com/enus/library/aa289846(v=vs.71).aspx Visual Studio .NET 2003 该方案展示了传 ...
- POJ2225+BFS
简单的BFS 1a /* 从起点到终点 */ #include<stdio.h> #include<string.h> #include<stdlib.h> # ...
- [topcoder]TallPeople
水题.http://community.topcoder.com/stat?c=problem_statement&pm=2923&rd=5854 一开始错了是因为理解错题意.还有就是 ...
- C#博文搜集
1. abstract (抽象类) 参考1 2. interface (接口) 参考1 3. 委托 C#委托学习
- VC 透明滑动控件Slider Control
操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为滑动控件设置背景透明 经常在编写有背景的程序时,滑动控件Slider Control看起来与背景十分不合,我们可 ...