没搞清运输层的UDP协议? -哎呀, 咋来这看就好了啊
UDP协议详解
最近在看计算机网络自顶向下,中间会陆陆续续发出来一些笔记,每一章完整的笔记以及思维导图会在以后在学习笔记计算机网络专栏发出来,第一次学,如果出现错误,还请各位大佬指正。/抱拳
写在前面:这里是小王成长日志,一名普通在校大学生,想成学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人,平时博客内容主要是一些系统的学习笔记,项目实战笔记,一些技术的探究和自己的一些思考。欢迎大家关注,你们的每一个评论点赞关注我都会仔仔细细去看的。有任何问题欢迎交流,我会尽我所能帮助大家的,共创****美好环境。
1.UDP协议简介
- UDP协议是一种简单的运输层协议,和它经常放在一起的还有TCP协议,两者都是运输层协议,但UDP是不可靠,无连接的,相较而言,TCP则可靠,面向连接。
- 不懂什么叫做运输层,点这进入百度百科。
- 我们需要知道UDP 协议只做了运输协议能够做的最少工作 。 除了复用/分解能及少量的差错检测外,它基本上没有对 IP 增加别的东西 。
2.UDP传输报文的过程:
-
UDP 先从应用进程得到数据,附加上用于多路复用/分解服务的源和目的端口号字段,以及两个其他的小字段,然后将形成的报文段交给网络层 。
-
网络层将该运输层报文段封装到一个IP数据报中,然后尽力而为地尝试将此报文段交付给接收主机 。
-
如果该报文段到达接收主机, UDP 使用目的端口号将报文段中的数据交付给正确的应用进程 。
-
值得注意的是,使用 UDP 时,在发送报文段之前,发送方和接收方的运输层实体之间没有握手 。 正因为如此, UDP 被称为是无连接的。
3.UDP的特点
1).关于何时、发送什么数据的应用层控制更为精细
- 采用 UDP 时,只要应用进程将数据传递给 UDP , UDP 就会将此数据打包进 UDP 报文段井立即将其传递给网络层 。
- 此外UDP可以避免TCP的拥塞控制机制,UDP协议不会理会网络是否拥塞,只会竭尽所能一窝蜂地立马交付数据,因此其数据交付延迟低但也可能造成网络的堵塞。
2).无需连接建立
- TCP 在开始数据传输之前要经过三次握手 。UDP 却不需要任何准备即可进行数据传输 (这也是DNS采用UDP的重要原因)。
- HTTP 使用 TCP 而不是 UDP ,因为对于具有文本数据的 Web网页来说,可靠性是至关重要的 。
3).无连接状态
- TCP 需要在端系统中维护连接状态 ,并追踪一些用于维护连接的参数
- UDP 不维护连接状态,也不跟踪这些参数 。
4).分组首部开销小
- 每个 TCP 报文段都有 20 字节的首部开销,而 UDP 仅有 8 字节的开销 。
4.UDP的报文段结构
下面我们一起来看看UDP的报文段结构下图是一个UDP报文段的结构示意图
- UDP 首部只有 4 个字段,每个字段由两个字节(16位)组成 。
- 通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程(即执行多路分解功能) 。
- 长度字段指示了在 UDP 报文段中的字节数(首部加数据) 。 因为数据字段的长度在一个 UDP 段中不同于在另一个段巾,故需要一个明确的长度。
- 接收方使用检验和来检查在该报文段中是杏出现了差错 。 检验和计算方式在后面会讲到,这里知道用处是检验传输中是否出现差错即可。
- 数据就是要传输的应用层数据,这是报文段存在的最重要的原因。
5.UDP检验和的计算
- 我们之前提到UDP提供了少量的差错检测功能,而检验和就是UDP提供的少量的差错检测功能,即检验和用于确定UDP字段从源到目的地移动时,其中比特是否发生改变
检验和的计算方式
-
总的方式就是将所有字段相加,若有超出则回卷(将超出部分相加到未超出部分),将最后的结果取反即是检验和
-
下面举个栗子来看看:
-
我们给定三个16比特字段,其值如下并将其相加
给定下列三个字 字段1 0110 0110 0110 0000 字段2 0101 0101 0101 0101 前两个字段之和 1011 1011 1011 0101 字段3 1000 1111 0000 1100 1 0100 1010 1100 0001 -
将最后一个和的超出部分进行回卷
回卷操作 0100 1010 1100 0001 + 1 0100 1010 1100 0010 -
最后将回卷完的和进行取反结果即为
1011 0101 0011 1101
-
所以这三个字段的检验和就是最后的取反结果
1011 0101 0011 1101
-
再来看一遍总的流程
流程 值 字段1 0110 0110 0110 0000 字段2 0101 0101 0101 0101 字段3 1000 1111 0000 1100 三个字段之和 1 0100 1010 1100 0001 超出部分回卷 0100 1010 1100 0010 对最后的结果取反 1011 0101 0011 1101
-
检验和出现的原因:
是由于不能保证源和目的之间的所有链路都提供差错检测;
这就是说,也许这些链路中的一条可能使用没有差错检测的协议。
此外,即使报文段经链路正确地传输,当报文段存储在某台路由器的内存中时,也可能引入比特差错 。
在既无法确保连链路的可靠性,又无法确保内存巾的差错检测的情况下,如果端到端数据传输服务要提供差错检测,所以UDP 就必须在端到端基础上在运输层提供差错检测 。
6.参考
- <计算机网络-自顶向下>
- UDP-百度百科
7.同类文章推荐
都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。