udp_udp协议 - CSDN
udp 订阅
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 [1]  描述了 UDP。Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。 [2] 展开全文
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 [1]  描述了 UDP。Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。 [2]
信息
外文名
User Datagram Protocol
特    点
无连接、不可靠、快速传输
类    别
传输层协议
用    途
发送IP数据包
中文名
用户数据报协议
基    础
IP数据包服务上增加一点功能
UDP协议简介
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 [1]  是UDP的正式规范。UDP在IP报文的协议号是17。UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。许多应用只支持UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择。 [3]  UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成 [4]  ,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。常用的UDP端口号有:53(DNS)、69(TFTP)、161(SNMP),使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP。UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据包的发送和接收,设计用户数据报协议UDP。  UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提供报文到达确认、排序、及流量控制等功能。UDP Helper可以实现对指定UDP端口广播报文的中继转发,即将指定UDP端口的广播报文转换为单播报文发送给指定的服务器,起到中继的作用。
收起全文
精华内容
参与话题
  • UDP协议的详细解析

    万次阅读 多人点赞 2018-12-27 18:10:49
    UDP数据报 一、UDP的概述 二、UDP的首部格式 UDP校验

    UDP数据报

    一、UDP的概述User Datagram Protocol,用户数据报协议
    UDP是传输层的协议,功能即为在IP的数据报服务之上增加了最基本的服务:复用分用以及差错检测

    UDP提供不可靠服务,具有TCP所没有的优势

    • UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销。此连接装入包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。
      举个例子:

      DNS如果运行在TCP之上而不是UDP,那么DNS的速度将会慢很多。
      HTTP使用TCP而不是UDP,是因为对于基于文本数据的Web网页来说,可靠性很重要。
      同一种专用应用服务器在支持UDP时,一定能支持更多的活动客户机。

    • 分组首部开销小**,TCP首部20字节,UDP首部8字节。

    • UDP没有拥塞控制,应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容 忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)

    • UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息

    • UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。
      正是因为这样,UDP显得不够灵活,不能控制读写数据的次数和数量。比如我们要发送100个字节的报文,我们调用一次sendto函数就会发送100字节,对端也需要用recvfrom函数一次性接收100字节,不能使用循环每次获取10个字节,获取十次这样的做法。

    • UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除带来不小的开销。UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

    二、UDP的首部格式

    UDP数据报分为首部用户数据部分,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中,UDP数据报文结构如图所示:
    在这里插入图片描述
    UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,
    1.源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
    2.目的端口:目的端口号,在终点交付报文的时候需要用到。
    3.长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
    4.校验和:检测UDP数据报在传输中是否有错,有错则丢弃。
    该字段是可选的,当源主机不想计算校验和,则直接令该字段全为0.
    当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交给应用进程。
    如果接收方UDP发现收到的报文中的目的端口号不正确(不存在对应端口号的应用进程0,),就丢弃该报文,并由ICMP发送“端口不可达”差错报文给对方。

    UDP校验

    在计算校验和的时候,需要在UDP数据报之前增加12字节的伪首部,伪首部并不是UDP真正的首部。只是在计算校验和,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就是按照这个临时的UDP数据报计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。这样的校验和,既检查了UDP数据报,又对IP数据报的源IP地址和目的IP地址进行了检验。
    在这里插入图片描述
    UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,都使用二进制反码运算求和再取反,但不同的是:IP数据报的校验和之检验IP数据报和首部,但UDP的校验和是把首部和数据部分一起校验。

    发送方,首先是把全零放入校验和字段并且添加伪首部,然后把UDP数据报看成是由许多16位的子串连接起来,若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(此字节不发送),接下来就按照二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段。在接收方,把收到得UDP数据报加上伪首部(如果不为偶数个字节,还需要补上全零字节)后,按二进制反码计算出这些16位字的和。当无差错时其结果全为1,。否则就表明有差错出现,接收方应该丢弃这个UDP数据报。
    在这里插入图片描述

    注意:
    1.校验时,若UDP数据报部分的长度不是偶数个字节,则需要填入一个全0字节,但是次字节和伪首部一样,是不发送的。
    2.如果UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付上层,但是要附上错误报告,告诉上层这是错误的数据报。
    3.通过伪首部,不仅可以检查源端口号,目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。
    这种差错检验的检错能力不强,但是简单,速度快

    展开全文
  • UDP协议

    万次阅读 多人点赞 2020-05-08 15:22:16
    UDP协议UDP协议简介UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768...

    UDP协议

    UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。

    UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。
    UDP在IP报文中的位置如下图所示:
    这里写图片描述
    可以看到,UDP其实就是在IP报文中添加了端口信息,使数据到达主机后送达至相应端口的应用程序。下面是通过wireshark抓的一个UDP数据包:
    在这里插入图片描述


    UDP使用

    在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的QQ就是使用的UDP协议。

    既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。


    UDP报头

    UDP报头由4个域组成,其中每个域各占用2个字节,如下图所示:
    这里写图片描述

    • UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据包通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。*因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。*一般来说,大于49151的端口号都代表动态端口。

    • 数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。(对于一次发送多少字节比较好,后面会讲到)

    • UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验值。

    • 许多链路层协议都提供错误检查,包括流行的以太网协议,也许你想知道为什么UDP也要提供检查和校验。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供错误检测。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。


    UDP特性

    UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

    由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

    UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

    吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

    UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

    UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。


    对UDP一次发送多少bytes好?问题的思考

    在进行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协议:低开销通信

    UDP是一种简单协议,提供了基本的传输层功能。与TCP相比,UDP的开销极低,因为UDP是无连接的,并且不提供复杂的重新传输、排序和流量控制机制。

    UDP数据报重组

    与TCP的通信机制不同,由于UDP是无连接协议,因此通信发生之前不会建立会话。UDP是基于事务的,换言之,应用程序要发送数据时,它仅是发送数据而已。很多使用UDP的应用程序发送的数据量很小,用一个数据段就够了。但是也有一些应用程序需要发送大量数据,因此需要用多个数据段。UDP PDU(协议数据单元)的实际意义是数据报,尽管数据段和数据报可以互换使用来描述某个传输层PDU。

    	将多个数据报发送到目的主机时,它们可能使用了不同的路径,到达顺序也可能跟发送时的顺序不同。与TCP不同,UDP不跟踪序列号。UDP不会对数据报重组,因此也不会将数据恢复到传输时的顺序。
    	因此,UDP仅仅是将接收到的数据按照先来后到的顺序转发到应用程序。如果数据的顺序对应用程序很重要,那么应用程序只能自己标志数据的正确顺序,并决定如何处理这些数据。
    

    UDP服务器进程与请求

    与基于TCP的应用程序相同的是,基于UDP的服务器应用程序也被分配了公认端口或已注册的端口。当上述应用程序或进程运行时,它们就会接受与所分配端口相匹配的数据。当UDP收到用于某个端口的数据报时,它就会按照应用程序的端口号将数据发送到相应的应用程序。

    UDP客户端进程

    对于TCP而言,客户端/服务器模式的通信初始化采用由客户端应用程序向服务器进程请求数据的形式。而UDP客户端进程则是从动态可用端口中随机挑选一个端口号,用来作为会话的源端口。而目的端口通常都是分配到服务器进程的公认端口或已注册的端口。

    采用随机的源端口号的另一个优点是提高安全性。如果目的端口的选择方式容易预测,那么网络入侵者很容易就可以通过尝试最可能开放的端口号访问客户端。

    由于UDP不建立会话,因此一旦数据和端口号准备就绪,UDP就可以生成数据报并递交给网络层,并在网络上寻址和发送。

    需要谨记的是,客户端选定了源端口和目的端口后,通信事务中的所有数据报文头都采用相同的端口对。对于从服务器到达客户端的数据来说,数据报头所含的源端口和目的端口作了互换。

    展开全文
  • TCP和UDP的区别和优缺点

    万次阅读 多人点赞 2017-08-06 22:59:09
    1、TCP与UDP区别总结: 1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;...
    1、TCP与UDP区别总结:
    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

    Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

    3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

    4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

    5、TCP对系统资源要求较多,UDP对系统资源要求较少。


    2、为什么UDP有时比TCP更有优势?

    UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。

    (1)网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。

    (2)TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。

    采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

    3、UDP和TCP编程步骤也有些不同,如下:

    TCP: 
    TCP编程的服务器端一般步骤是: 
      1、创建一个socket,用函数socket();     SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
      2、设置socket属性,用函数setsockopt(); * 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind(); SOCKET_ERROR = bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))
      4、开启监听,用函数listen();                 SOCKET_ERROR == listen(SocketListen,2)
      5、接收客户端上来的连接,用函数accept();    SOCKET SocketWaiter = accept(SocketListen,

                                                      _Out_    struct sockaddr *addr

     _Inout_  int *addrlen);
      6、收发数据,用函数send()和recv(),或者read()和write(); 
      7、关闭网络连接; closesocket(SocketListen);closesocket(SocketWaiter);
      8、关闭监听; 
    SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的。
    TCP编程的客户端一般步骤是: 
      1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
      4、设置要连接的对方的IP地址和端口等属性; 
      5、连接服务器,用函数connect(); 
      6、收发数据,用函数send()和recv(),或者read()和write(); 
      7、关闭网络连接;

    int send(
      _In_  SOCKET s,         //向哪个socket发送,accept返回的socket。
      _In_  const char *buf,
      _In_  int len,
      _In_  int flags
    );                               由于
    
    send(SocketClient,(const char *)&fh,sizeof(fh),0);

    recv(SocketClient,szbuf,sizeof(szbuf),0);
    UDP:
    与之对应的UDP编程步骤要简单许多,分别如下: 
      UDP编程的服务器端一般步骤是: 
      1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind(); 
      4、循环接收数据,用函数recvfrom(); 
      5、关闭网络连接; 

    UDP编程的客户端一般步骤是: 
      1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
      4、设置对方的IP地址和端口等属性; 
      5、发送数据,用函数sendto(); 
      6、关闭网络连接;

    int recvfrom(
      _In_         SOCKET s,       //绑定的socket
      _Out_        char *buf,
      _In_         int len,
      _In_         int flags,
      _Out_        struct sockaddr *from,  //用来接收对方的
      _Inout_opt_  int *fromlen
    );
    int nres=recvfrom(pThis->m_socketListen,szBuf,sizeof(szBuf),0,(sockaddr*)&addrClient,&nSize);//0处标志位
    sendto(m_socketListen,szBuffer,nSize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))
    TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。


    4、将socket设置为广播属性
    bool optval=true;
    setsockopt(m_socketListen,SOL_SOCKET,SO_BROADCAST,(const char *)&optval,sizeof(bool));

    5、将Socket设置为非阻塞。
    //bool benable=true;
    //ioctlsocket(m_socketListen,FIONBIO,(u_long*)&benable);

    6、Tcp头,20字节

    7、UDP首部,8个字节

    展开全文
  • udp介绍与实现

    千次阅读 2019-04-05 14:12:12
    什么是 socket socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的...有两种socket模式,一种是udp,一种是tcp,tcp将在下一篇博客介绍。这一篇主要介绍UDP。 ...
    1. 什么是 socket
      socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的。例如我们每天浏览网页、QQ 聊天、收发 email 等等

    2. 创建 socket
      有两种socket模式,一种是udp,一种是tcp,tcp将在下一篇博客介绍。这一篇主要介绍UDP。

    3. udp创建流程
      创建客户端套接字
      发送/接收数据
      关闭套接字

    4. 程序实现
      发送消息

    import socket
    
    def main():
    	
    	# 创建UDP套接字
    	# 在这里 socket.AF_INET是用于Internet之间通信协议(还有socket.AF_UNIX,用于同一台机器进程间通信)
    	# SOCK_STREAM是流式套接字,主要用于 TCP 协议,将会在下一篇讲到,SOCK_DGRAM是用于数据报套接字,主要用于 UDP 协议
    	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    	# 循环发送
    	while True:
    		# 发送的内容
    		send_data = input("请输入要发送的数据:")
    
    		# 退出控制
    		if send_data == "exit":
    			break
    
    		# 使用套接字发送数据
    		# IP和端口打包成元组
    		# 需要发送的内容改写成bytes类型
    		udp_socket.sendto(send_data.encode("utf-8"),("192.168.11.22",8888))
    
    	# 关闭套接字
    	udp_socket.close()
    
    	print("发送结束")
    
    
    if __name__ == "__main__":
    	main()
    

    接受信息

    import socket
    
    def main():
    	# 创建套接字
    	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    	# 绑定本地地址和端口(必须,如果不绑定那么下次发送过来数据可能因为端口改变而无法接受到)
    	localaddr = ("",8888)  # 前面为IP地址可以省略,会自动绑定,端口一定要指定
    	udp_socket.bind(localaddr)  # 必须要绑定自己电脑的IP和端口(port),协议要求
    
    	# 接受数据
    	# 循环接受
    	while True:
    		recv_data = udp_socket.recvfrom(1024)
    
    		# 这里收到的数据是一个元组 格式为(数据,(ip,port)),其中ip和port是发送端的ip和port
    		recv_msg = recv_data[0]
    		send_addr = recv_data[1]
    
    		# 打印接收到的数据
    		# 这里需要主要,如果是win系统则需要gbk解码,linux为utf-8,这是不同操作系统编码方式不同
    		print("{}:{}".format(str(send_addr),recv_msg.decode("utf-8")))
    
    		# 关闭套接字
    	udp_socket.close()
    
    if __name__ == "__main__":
    	main()
    

    两个结合输出结果

    发送端
    tom@ubuntu:~/Desktop/socket$ python3 upd_demo1.py 
    请输入要发送的数据:df
    请输入要发送的数据:vber
    请输入要发送的数据:23333
    请输入要发送的数据:dajiahaop
    请输入要发送的数据:你是真的皮皮虾
    
    接收端
    tom@ubuntu:~/Desktop/socket$ python3 udp_recv.py 
    ('192.168.137.137', 46680):df
    ('192.168.137.137', 46680):vber
    ('192.168.137.137', 46680):23333
    ('192.168.137.137', 46680):dajiahaop
    ('192.168.137.137', 46680):你是真的皮皮虾
    
    
    

    读者在用我的程序做demo时要注意两个地方,第一,IP地址要和你的符合,第二,有时你的端口(port)会被占用。

    展开全文
  • UDP简介

    千次阅读 2018-03-20 19:10:37
    UDP介绍:用户数据报协议,属于传输层的协议,无连接,不保证传输的可靠性。对于来自应用层的数据包,直接加上UDP报头然后传送给IP。UDP头部中有一个校验和字段,可用于差错的检测,但是UDP是不提供差错纠正的。此外...
  • Internet原理与技术一、端口及套接字1、传输层编址2、套接字(socket)3、无连接服务和面向连接服务二、用户数据报协议UDPUDP协议格式【例】校验UDP报文UDP小结三、传输控制协议TCPTCP报文格式TCP 连接管理建立连接 ...
  • 运输层协议(UDP与TCP)

    千次阅读 2018-06-14 01:33:36
    运输层协议(UDP与TCP) 用户数据报协议UDP UDP的概述 特点 复用和分用 多个用户使用一个IO资源 发送消息 时,我们称之为“复用”。 多个用户使用一个IO资源 接收消息 时,我们称之为 “分用” 。 在...
  • 传输控制协议(TCP)和用户数据报协议(UDP) 概述 Transport Control Protocol(传输控制协议) User Datagram Protocol (用户数据报协议) (百度百科)Internet 协议集支持一个无连接的传输协议,该协议称为用户...
  • 一、进程之间的通信 两个主机之间的通信:是主机中的一个进程和另一个主机的一个进程在交换数据。两个主机进行通信就是:两个主机的应用进程互相通信。...面向连接的TCP和无连接的UDP 二、传输控制协议TCP ...
  • 二、用户数据报协议(UDP) 三、传输控制协议TCP 四、TCP协议滑动窗口一、传输层与传输层协议1. 传输层的基本功能 传输层的本质就是为分布在不同地理位置的计算机的进程通信提供可靠的端-端连接和数据传输服务,...
  • 网络协议 -- UDP协议(1)介绍

    万次阅读 多人点赞 2018-03-14 00:27:47
    一、什么是UDP协议? UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP的正式规范是IETF RFC...
  • UDP介绍

    千次阅读 2018-11-25 16:39:43
    目录UDP介绍UDP协议介绍UDP数据包格式IP协议介绍用户数据、 UDP、 IP、 MAC 四个报文的关系 本篇是专门介绍UDP协议的,为后面的UDP实例做准备。 UDP介绍 UDP协议介绍 UDP 是 User Datagram Protocol 的简称, 中文...
  • TCP 和 UDP 的区别

    万次阅读 多人点赞 2019-03-23 18:36:33
    UDP TCP TCP 的三次握手 TCP 四次挥手 累计确认 顺序问题和丢包问题 流量控制的问题 拥塞控制的问题 总结及面试问题 前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,比如 TCP 和 ...
  • 常用UDP端口号

    万次阅读 2018-10-08 08:21:55
    UDP 1=Sockets des Troie  UDP 9=Chargen  UDP 19=Chargen  UDP 69=Pasana  UDP 80=Penrox  UDP 371=ClearCase版本管理软件  UDP 445=公共Internet文件系统(CIFS)  UDP 500=Internet密钥交换  UDP...
  • iptables 打开UDP端口

    万次阅读 2011-11-15 09:17:10
    iptables -A INPUT -p udp --destination-port 2000 -j ACCEPT
  • wireshark分析UDP数据包

    万次阅读 2017-09-09 22:05:54
    这里利用wireshark抓捕QQ登陆时候的UDP...因为不是为了破译啥,仅仅是为了抓包看看具体的UDP协议而已。 其中上面QICQ就是其中一条UDP数据包。QICQ - IM是QQ定义的应用层协议如下: UDP协议部分: 腾讯OICQ部分
  • 常用的协议端口号

    万次阅读 2015-11-26 15:27:29
    这是在网上搜集到的一些资料,共享出来! 端口号 协议 解释 0 TCP Reserved ...0 UDP Reserved ...1 TCP tcpmux TCP Port Service Multiplexer Breach, SocketsDeTroie  ...1 UDP tcpmux TCP Port Service Mul
  • 测试udp 端口是否开放

    万次阅读 多人点赞 2013-12-27 12:06:53
    文章概述:怎样测试远程UDP端口,我们一般情况下,应用服务都使用的TCP端口,但是某些情况下,我们也需要开启UDP端口。本文简要描述怎样测试UDP端口是否正常? TCP端口大家都知道,比如80端口,可以使用 telnet ip...
  • Linux(CentOS)下,各种协议,端口号

    万次阅读 2015-05-28 13:41:29
    DNS:/etc/resolv.conf 主机名:/etc/sysconfig/network 私有主机名:/etc/hosts 网卡配置文件存放目录:/etc/sysconfig/network-scripts/ IP/NetMask/Gateway等:/etc/sysconfig/network-scripts/ifcfg-em1 ...
  • 【协议分析】常用协议端口号

    万次阅读 2013-11-12 16:37:02
    0 TCP Reserved 0 UDP Reserved 1 TCP tcpmux TCP Port Service Multiplexer Breach, SocketsDeTroie  1 UDP tcpmux TCP Port Service Multiplexer Sockets des Troie, SocketsDeTroie
1 2 3 4 5 ... 20
收藏数 401,546
精华内容 160,618
关键字:

udp