普通易懂用户数据报协议(UDP)
副问题[/!--empirenews.page--]
什么是UDP? UDP是User Datagram Protocol(用户数据报协议)的缩写,它是一个简朴的协议,简朴到UDP类型RFC0768只有戋戋3页。 UDP是事变在IP层之上的传输层协议,UDP对IP首要有两个扩展:
IP提供了一种极力而为、无毗连的数据报交付处事。IP基于IP地点实现路由和分组转发,可以将一个IP数据报从收集的一台主机传送到另一台主机,IP地点抉择IP数据报将被送往哪个主机。以是,IP提供主机到主机的数据报传输处事。 IP数据报达到目标主机后,内核层实现的IP模块,会认真吸取网卡上的IP数据报,但主机上凡是会同时运行多个历程,IP数据报应该交给哪个历程行止理赏罚呢?IP搞不定。 端标语(位于UDP首部)抉择命据报交给主机上的哪个历程处理赏罚。以是,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(若有)。 IPv4 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编程 UDP Socket收集编程的API不多,socket()用于建设套接字,close()用于封锁套接字,sendto()用于发送数据,recvfrom()用于吸取数据。 bind()顾名思义是绑定,TCP可以绑定,UDP也可以,bind用于UDP便是汇报内核:这个套接字跟收集远端的一个 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |