快捷搜索:

udp是什么意思(查看远程连接端口号)

什么是UDP?

UDP是User Datagram Protocol(用户数据报协议)的缩写,它是一个简单的协议,简单到UDP标准RFC0768只要区区3页。

UDP是工做在IP层之上的传输层协议,UDP对IP次要有两个扩展:

扩展出端标语使得IP数据报能够多路分发到用户历程。

扩展出校验和供给收集传输过程中数据差错的查验。

IP供给了一种尽力而为、无毗连的数据报交付办事。IP基于IP地址实现路由和分组转发,能够将一个IP数据报从收集的一台主机传送到另一台主机,IP地址决定IP数据报将被送往哪个主机。所以,IP供给主机到主机的数据报传输办事。

IP数据报抵达目标主机后,内核层实现的IP模块,会负责领受网卡上的IP数据报,但主机上凡是会同时运行多个历程,IP数据报应该交给哪个历程去向理呢?IP搞不定。

端标语(位于UDP首部)决定命据报交给主机上的哪个历程处置。所以,UDP为端主机上运行的应用法式供给了端到端办事。

UDP的特征

UDP是无毗连的,通信之前无须建连即可间接发送数据报,而TCP是面向毗连的。

UDP不供给差错纠正,但UDP供给差错检测(端到端校验和)。

UDP不做反复消弭。

UDP不做流量控造。

UDP不做拥塞控造,没有协议机造避免高速UDP流量对其他收集用户的消极影响。

UDP不包管挨次,数据报递交应用的挨次。

UDP不成靠,UDP只负责把应用法式传给IP层的数据发送进来,其实不能包管数据报抵达目标地,可靠传递需要应用法式去实现。

UDP撑持组播交付。

UDP是一种保留动静鸿沟的传输层协议。

动静鸿沟

应用法式每恳求一次UDP输出将产生一个UDP数据报,从而发送一个IP数据报,而领受端每恳求一次UDP领受都将领受一个完好的UDP报(若是有),那跟面向数据流的TCP纷歧样。

假设主机A给主机B发送2次数据,第一次4字节“abcd”,第二次3字节“xyz”,而主机B领受2次,别离返回“abcd”、“xyz”两个动静,也能够返回“xyz”,“abcd”两个动静(挨次不重要),那么那就是保留动静鸿沟。

UDP是保留动静鸿沟的传输层协议,操纵UDP通信的应用法式每次发送操做会产生一个IP数据报(不考虑分片),那就约束每次发送的数据量不克不及大于MTU(更大传输单位),领受端每次领受城市返回一个个UDP数据报的完好负载,不会呈现返回半个数据报负载的情况。

而TCP是不保留动静鸿沟的流协议,发送端挪用发送的次数和每次发送的数据量,跟领受端挪用领受的次数和每次领受的数据量,没有任何对应关系,所以利用TCP的应用法式需要去向理动静鸿沟。

UDP数据报封拆格局

IPv4协议(Protocol)字段用值17来标识UDP,UDP数据报头部凡是是8字节,IPv4头部之后紧接着是UDP头部,然后是UDP数据Payload(若有)。

深切的理解UDP编程

IPv4封拆包对应的UDP头部由源端标语、目标端标语、长度、校验和构成,每个字段都是2字节。

1、端标语,纯笼统的标识,它不跟任何物理实体相关

端标语用于帮忙协议分辩发送和领受历程。领受端的内核层从网卡领受到IP数据报之后,识别出UDP数据报(IP数据报头部协议字段值=17)之后,会按照UDP头部的目标端标语,映射到对应历程,把UDP数据报交给对应的历程去向理,那个映射关系由系统内核办理维护。

深切的理解UDP编程

目标端标语是必需的,但源端标语是可选的,若是数据报发送者不需要对方回复的话,则源端标语可被设置为0。

因为IP层按照IP头部的协议类型字段,将进入的IP数据报,分发到特定的传输协议(TCP或UDP等),到了传输协议层,再按照端标语将协议数据分发到差别历程。所以,端标语是协议独立的,差别协议的不异端标语其实不会引起分发紊乱。

好比,一台机器上的两个收集办事历程利用不异的IP地址和端标语,但一个利用TCP协议,另一个利用UDP协议,如许是没有问题。

2、长度字段,是以字节为单元的UDP头部和UDP数据的总长度,因为UDP头部长度为8,且空数据的UDP数据报是允许的,那意味着该长度字段值最小为8。UDP长度值是冗余的,因为能够通过IP数据报的总长度减去IP首部的长度推导出来。

3、校验和,笼盖了UDP首部、UDP数据和一个伪首部,由初始发送方计算,由最末目标方校验,用于判断数据报在收集传输过程中能否出错,好比某一位从1酿成了0。

利用UDP的应用法式若何实现可靠传输

寡所周知,UDP不成靠、不包管挨次。

1、什么叫不成靠?A给B发送一个UDP数据报,该UDP数据报纷歧定被准确交付给领受端B,但因为收集量量等各类原因,可能丢包,IP数据报是尽力而为的交付,一切随缘。

有没有法子包管,发送的UDP必然抵达目标端?Sorry,包管不了,做不到。

那TCP供给的可靠传输是什么意思?TCP供给的可靠传输并非指不丢包,因为TCP也依赖IP(IP不成靠)实现数据报交付,TCP的可靠性是指丢掉的包会被重传,曲到被准确送达,才会继续传输下一个数据报。

那TCP是怎么做到可靠传输的呢?很简单,收报确认(ack)+丢包重传。所以UDP若是要供给可靠传输,也能够参考TCP的实现机造,只是TCP是实如今内核层,而基于UDP的应用法式,能够把可靠传输做到应用层。要做收报确认+丢包重传,需要一些额外的信息,好比包序列号之类,能够放到Payload,约定好那些额外信息在Payload中的构造规划即可。

2、什么叫不包管挨次?A给B发送两个UDP数据报,两个UDP数据报会被封拆为两个IP数据报,通过IP协议传输,因为两个IP数据报独立路由,所以哪个先到?纷歧定,看表情。

有没有法子包管,UDP数据报根据发送端发送的时间挨次抵达目标端?也Sorry,办不到。

所以,TCP供给的挨次性,其实只是在领受端对IP数据报按照发送挨次从头排序,很显然,UDP要撑持重排序,也需要一些额外信息,也只能通过payload照顾,而不克不及像TCP一样(TCP首部的一些字段用于领受端重排序)。

综上,UDP只供给最简单端主机上应用法式的端到端办事,其他的特征,若是要供给,那请参考TCP的思绪去实现吧。

那是有益处的:因为简单,所以开销很小。而某些应用场景,能够容忍丢包、乱序,UDP就是很合适的。保时捷是很好,但拉砖仍是用拖沓机吧。

UDP Socket收集编程的API不多,socket()用于创建套接字,close()用于封闭套接字,sendto()用于发送数据,recvfrom()用于领受数据。

bind()望文生义是绑定,TCP能够绑定,UDP也能够,bind用于UDP等于告诉内核:那个套接字跟收集远端的一个

而没有bind之前,只能通过sendto()接口(通过参数指定目标地)。UDP套接字recv()返回的是UDP数据报的数据部门(Payload),不包罗UDP数据报首部,那是因为UDP首部的字段用于分发或者校验,不需要透传给应用法式。

利用UDP套接字开发的收集应用Server/Client,收集IO相关操做和流程如下图所示:

深切的理解UDP编程

您可以还会对下面的文章感兴趣:

暂无相关文章

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。