1. 在我们能够利用UDP方案编制框架之前,我们必须首先了解UDP协议是什么。 UDP(用户数据表协议)是普通话中的传输层。 UDP是一个不相互连接、而是直接报告我准备向对方提供的数据的非以链接为导向的协议。

      最后更新:2021-12-12 07:39:38 手机定位技术交流文章

      此篇文章将综合Linux下程序的基本知识点, 无论是开发者应该告诉他们, 还是提及一些 Udp 插座的远程知识点。 阅读一篇文章后, 你尽可能更透彻地掌握 udp 插座 。

      一. Udp套接头程序程序的基本原理

      一. UDP方案拟订基金会


      为了利用联合民主党议定书制定方案,我们必须首先界定联合民主党。这里简单概括一下。

      UDP(user datagram protocol)属于中文的用户数据协议(用户数据协议)称为传输层UDP是一个非连接型协议,不相互连接,而是直接报告我将要相互提供的数据,因此,UDP适用于数据数量有限的应用程序,用于一次转让、不可靠或高实时要求。 这正是因为UDP不需要某种握手连接,如三次握手,所以通信效率很高。

      UDP应用程序极为庞大,例如,一些众所周知的SNMP/DNS协议是以UDP为基础的,并假设SNMP使用TCP,每次查询请求需要响三次,用户认为这一次是负担不起的,因为它产生了明显的卡登。 So UDP是SNMP的一个很好的选择,如果搜索过程中缺少一个袋子,它就会被打乱。

      由于联合民主党的通信机制非常直截了当,因此也很容易建立这样一个共同的联合民主党通信框架。

      如上文方框所示,客户只需两步即可提出请求(口袋和发件人),但服务器只需三步即可接收客户发来的信息(口袋、捆绑、折叠)。

      二. 联合民主党方案设计的共同功能

      socket()

      用于建立网络通信的域名, 套接字根据此参数选择信息协议的家属 。

      Name                                     Purpose

      AF_UNIX, AF_LOCAL          Local communication

      IPv4互联网项目 AF_INET/IPV4

      IPv6 互联网项目 AF_INET6//IPV6

      AF_IPX                             IPX - Novell protocols

      AF_NETLINK                     Kernel user interface device

      AF_X25                            ITU-T X.25 / ISO-8208 protocol

      AF_AX25                          Amateur radio AX.25 protocol

      AF_ATMPVC                      Access to raw ATM PVCs

      AF_APPLETALK                 AppleTalk

      AF_PACKET                      Low level packet interface

      AF_ALG                           Interface to kernel crypto API

      使用这个参数,我们只需要记住 AF_INET 和 AF_INET 6。

      PF-XX和AF-XX为未成年人。

      当我们查看Linux网络编程代码时,我们看到PF-XX和AF-XX是混合在一起的。它们之间的区别是什么?下面是UNP的。

      AF_前缀表示地址族(Address Family),而PF_前缀表示协议族(Protocol Family)。历史上曾有这样的想法:单个协议族可以支持多个地址族,PF_的值可以用来创建套接字,而AF_值用于套接字的地址结构。但实际上,支持多个地址族的协议族从来就没实现过,而头文件<sys/socket.h>中为一给定的协议定义的PF_值总是与此协议的AF_值相同。

      因此,在制订方案时,我仍倾向于使用AF_XX。

      参数类型( 只有三个最重要的参数) :

      提供STREAM项目,包括通过场景进行双向通信。

      SOCK_DGRAM. / UDP 支持数据表(无管辖、不可靠的通信)。

      我们不会成为任何事物的中心。为了提供原始的网络访问,使用/RW类型。

      礼宾参数: 0 足够

      成功: 以返回值返回一个非负文件描述 。

      失败:-1

      sendto()

      第一个参数 sockfd: 通过套接字获取的端口的界面文件配置听器 。

      第二个参数bf:发送缓冲带,由用户经常配置,并包含要发送的数据。

      第三个论点(Len)用字节具体说明了传输缓冲区的大小。

      第四个参数的旗号: 0 足够 。

      第五个选项(dest_addr)是指用于接收数据的主机地址信息的结构,即该选项界定了哪个主机应当从哪个程序接收数据。

      第六个选项,Addrlen,指定了第五个参数中提到的材料的路径长度。

      返回值: 成功: 返回数据长度已成功发送 。

      失败: -1

      recvfrom()

      第一个参数 sockfd: 通过套接字获取的端口的界面文件配置听器 。

      第二个参数bf:用户为收到数据经常建立的接收缓冲带

      第三个选项(Len)以字节表示缓冲区的面积。

      第四参数标记:如果标签模式被屏蔽,如果被屏蔽,则禁止什么模式。 0,不阻塞填MSG_DONTWAIT

      第五个参数,src_addr, 指定了提供数据的主机地址信息的结构, 即我们可从何处获取信息

      第六个选项,Addrlen,指定了第五个参数中提到的材料的路径长度。

      成功:提供成功接收的数据长度,作为回报值。

      失败: -1

      bind()

      第一个参数 sockfd: 通过套接字获取的端口的界面文件配置听器 。

      第二个选项, 我的_ addr, 指定您想要连接的 IP 地址和端口 。

      第三个选项, Addrlen, 指定我_ addr 对象的大小 。

      返回值:成功:0

      失败:-1

      close()

      只要您填满套接字产生的 fd, 近距离方法就简单了 。

      三. 建立一个联合民主党通信框架。

      server:

      client:

      上述结构用于东道方各港口的UDP连接,具体如下:

      我们配置服务器端, 等待服务, 然后配置 clitend 请求服务 。

      server端:

      client端:

      我们对自己的主机有什么计划? 很简单: 前一个代码第49行的评论是打开的, 下一行是关闭的。 只要提供您希望在宏观定义中互动的服务。 现象如下:

      server端:

      client端:

      因此,我们建立了主机和网络连接。

      由于完成了UDP通用框架,我们现在可以与指定的主机连接。

      这些信息足以学习民进联的基本知识;如果你想学习民进联SONKET(小把戏)的一些先进知识,可能需要一些时间才能低调看一看。

      二. 编程高级乌顶插座

      一. Udp 连接特性


      是否有UDP的代码?它不只用于TCP编程吗?
      事实上,在联合民主党网络方案拟订中有一个连接功能,然而,它只是表明已经发现另一方的地址,没有额外意义。
      鉴于这些理解,我们可以将联合民主党一揽子计划与以下内容区分开来:
      (1) 一个断开的 UDP 套接字
      2) 一个UDP Socket是连接的。

      我们用发送器/发送器接收和传输断开插座的信息,这是我们通常使用的 UDP 软件包,在执行 Sendto/发送时检测到目的地主机的IP和端口。

      应关于在一个断开的 UDP 软件包中提供两个数据Sendto 函数的请求,将采取以下6项行动:
      1)连接套接字
      (2) 初始数据报告的产出
      3)断开套接字连接
      4)连接套接字
      (5) 第二次数据报告出口
      6)断开套接字连接

      要接收和传输来自连接的 UDP 软件包的信息,目标服务器必须首先通过连接进行分配,然后被调用读写。连接决定目标主机的 IP 和端口,这意味着在同步工程完成后,我们只能接收数据并将其传送给主机。

      对于写作函数中的两个数据调用,将结合UDP软件包采取以下三个步骤:
      1)连接套接字
      (2) 初始数据报告的产出
      (3) 第二次数据报告出口

      因此,很明显,当申请程序意识到一些数据报告正被传送到同一目的地地址的同一港口号时,显示合成就会更加有效。

      与连接功能的UDP通信框架如下。

      不再提供准确的框架代码,因为该代码与不包含连接的代码几乎完全相同,而且仅处理一个额外的连接功能,下文提供了处理控制台()的基本步骤。

      二. 没有 " 乌普报告 "


      与TCP相比,联合民主党因其独特性而面临一些挑战性的挑战,第一是缺乏联合民主党的报告。
      如果客户端发送的数据丢失, 服务器将等待客户端的合法数据到来。 如果服务器的答案在中间被丢弃, 客户端将一直被屏蔽, 直到服务器的数据到达 。

      避免这种持久障碍的典型方法是与客户进行联系,要求暂停,可以采取以下两种方式之一:
      1) 使用 SIGALRM 创建调试超时。 首先, 我们为 SIGALARM 设置了信号处理功能, 并在每次调用前设置了5秒钟的提醒超时。 如果调试被我们的信号处理功能阻止, 信件会随着时间的流转; 如果数据接收成功, 闹钟会关闭, 调用过程会继续 。

      2) 使用选择,设定调整的超时。
      设定了选择函数的第五点参数。

      第三 我不知道你在说什么 但我不确定你在说什么 但我不确定你在说什么


      所谓的混乱是数据传输的顺序与接收数据的顺序之间的差异;例如,数据的发送顺序是A、B和C,而数据的接收顺序是A、C和B。 问题的根源是,每份数据报告都经过一条变化路径,有些是顺畅的,有些是混杂的,导致每份数据报告到达目的地的顺序不同。

      这一问题的答案是,发送者在交付数据时列入数据序列号,以便在收到电文时,接收端首先核实数据报告的序列号,并排队,以便编制有订购的数据报告。

      四. 突发事件交通管制问题


      众所周知,TCP有一个流动管理和拥堵控制滑动窗口,但UDP由于其特点而无法这样做。当UDP收到数据时,数据立即存入缓冲区。如果用户不及时复制缓冲区的内容,接收的数据将放在缓冲区,当缓冲区满员时,随后的数据将覆盖第一个数据,造成数据丢失(因为内核使用的UDP缓冲区是一个循环缓冲区)。结果,一旦发送者在特定时间发送信息,接收者将失去信息,因为接收时间太晚,接收时间太晚。

      补救办法通常需要扩大民主联盟缓冲区,使接收方的接收量超过发送方。

      int n = 220 * 1024; //220kB

      setsocketopt(sockfd, SOL_SOCKET, SO_RCVBUF, &n, sizeof(n));

      我们如此扩大了接收方的排队,以便尽可能减少数据丢失。

      参考资料:

      • Blog-CSDN博客,用于配置非阻塞模式_weixin_34186931中的 UDP 锁链
      • UNIX 网络方案拟订第一卷
      • Linux网络编程
      • 嵌入 Linux 软件: 从初始到专家

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/14683.html

          热门文章

          文章分类