在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。
组播通信是一种基于UDP协议的网络通信方式,它允许发送方将消息同时传递给多个接收方。在组播通信中,发送方和接收方都会加入一个共同的组播组,这个组播组对应一个特定的IP地址,所有加入该组播组的主机都能够接收到发送方发送的消息。组播通信可以有效地减少网络流量和网络负载,因为在传统的点对点通信方式下,每个消息都需要单独传输到每个接收方,而在组播通信中,每个消息只需要传输一次,就可以同时传递给多个接收方。
点对点连接可以处理很多通信需求,不过随着直接连接数的增加,在多对通信方之间传递相同的消息会变得越来越困难。
组播模式相比单播模式可以提高网络的效率和带宽利用率,因为组播数据包只需要发送一次,就可以被多个接收者接收,而不需要每个接收者都单独发送一份数据包。这在需要同时向多个接收者发送相同数据的场景下特别有用,如视频会议、在线教育、流媒体等。组播模式可以减少网络拥塞,降低网络延迟,并且可以减少网络中的冗余数据。
有了单播和组播,广播也跑不了。广播,BroadCast,与单播的区别就是地址不同。广播用的地址是255.255.255.255;而且广播数据不会被路由器转发,限定于局域网内,否则就是网络风暴了
组播是在局域网中向一个子网内加入了某个组播组的客户端发送批量发送数据,它类似于广播但并非广播,组播的地址有固定的几种,本案例中使用了239.0.0.2这个组播地址,具体实现代码分客户端和服务端,请参考:
当同一个网段内有多个IGMP路由器时,IGMP通过查询器选举机制从中选举出唯一的查询器。查询器周期性地发送普遍组查询消息进行成员关系查询,主机通过发送报告消息来响应查询。而作为组成员的路由器,其行为也与普通主机一样,响应其它路由器的查询。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
1·多播(组播)地址:224.0.0.0~139.255.255.255 2·发送多播数据报无需任何特殊处理,发送应用程序不必为此加入多播组 3·多播相对于广播的优势在于不会对多播分组不感兴趣的主机增加额外负担 #include "../Gnet.h" int main(int argc, const char* argv[]) { int sendfd, recvfd; const int on = 1; //const int off = 0; struct socka
本文主要通过对海康摄像头进行抓包,模拟发送了udp包,并抓取摄像头返回的数据包,解析并提取相关信息。
本文介绍了UDP协议和TCP协议的区别以及它们在网络编程中的使用场景。TCP协议是面向连接的、可靠的、基于字节流的传输层通信协议,而UDP协议是面向无连接的、不可靠的、基于数据报的传输层协议。TCP协议适用于对可靠性要求高的场景,而UDP协议适用于对实时性要求高、可靠性要求不高的场景。在具体应用中,TCP协议常用于Web服务器和客户端、文件传输、网络电话等,而UDP协议常用于实时音视频传输、在线游戏等。
本文从 Fing 的功能入手,学习和介绍了目前常用的局域网服务发现协议,并根据这些协议,尝试编写 Python 扫描脚本。
ssdp协议近似于http协议,事实上,和http协议相似得地方就是他得协议内容,当然,我们要去除他得端口和d类地址。
int ret; srtuct sockaddr_in from; ret=revcfrom(sock,recvbuf,BUFSIZErecvfrom函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。 本函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。 对于SOCK_STREAM类型的套接口,最多可接收缓冲区大小个数据。
recvfrom -> [syscall -> wait -> copy ->] return OK!
之前在服务器进程终止中讨论的情形,TCP客户端同时要处理两个输入,一是标准输入,二是TCP套接口。而此时若是服务器进程被杀死,服务器尽管正确地给客户发送了FIN分节,但是由于此时客户正阻塞于标准输入fgets(),直到读完一行用户输入(也许此时TCP服务器已经死透了),才能看到那个文件结束符。
本文整理了阻塞I/O模型、非阻塞式I/O、I/O复用(select和poll)、信号驱动式I/O(SIGIO)、异步I/O原理知识点。
A使用UDP socket,调用sendto()函数向B发送数据,但是B没有接收数据发送端口不可达的ICMP报文,之后A调用recvfrom()试图接收目标地址B的数据,recvfrom会返回-1,WSAGetLastError()返回WSAECONNRESET (10054) 连接被对方重置。
当有个功能要发送通知邮件时 , 大家都会去用PHPMailer来调用第三方的smtp发信 , 经常遇到莫名其妙的错误 ,不知道是什么原因 .
但我要定义个消息结构体msg_t,它封装了sockaddr_in和sin_size;
阻塞 IO, 非阻塞 IO, 同步 IO, 异步 IO 这些术语相信有不少朋友都也不同程度的困惑吧? 我原来也是, 什么同步非阻塞 IO, 异步非阻塞 IO 的, 搞的头都大了.。后来仔细读了一遍。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
sendto和recvfrom一般用于UDP协议中,但是如果在TCP中connect函数调用后也可以用.
一.osi七层协议 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 协议具体内容 各层的功能简述: 【1】物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类
继前篇介绍完sendto 数据发送函数 后,这里介绍数据接收函数 recvfrom。
一个套接字的输入操作,第一步是等待数据到达网络,当分组到达时,它被拷贝到内核中的某个缓冲区,第二步是将数据从内核缓冲区拷贝到应用缓冲区
所有版本的IGMP 都支持ASM(Any-Source Multicast,任意信源组播)模型;IGMPv3 可以直接应用于SSM(Source-Specific Multicast,指定信源组播)模型,而IGMPv1 和IGMPv2 则需要在IGMP SSM Mapping 技术的支持下才能应用于SSM 模型。
前文使用TCP面向流的套接字,今天讲解的UDP的工作方式与TCP/IP不同。UDP是用户数据报协议,是一个面向消息的协议。
① 单播 : 发送数据到 单个目的主机 , 每个 单播报文 都有一个 单播 IP 地址 作为目的地址 ;
IGMP是Internet Group Management Ptotocol的简称,被称为互联网组管理协议,是TCP/IP协议族中负责IPV4组播成员管理的协议。
作为IP传输三种方式之一,组播指的是报文从一个源发出,被转发到一组特定的接收者,相同的报文在每条链路上最多有一份。
组播服务模型的分类是针对接收者主机的,对组播源没有区别。组播源发出的组播数据中总是以组播源自己的IP地址为报文的源IP地址,组播组地址为目的地址。而接收者主机接收数据时可以对源进行选择,因此产生了ASM(Any-Source Multicast)和SSM(Source-SpecificMulticast)两种服务模型。这两种服务模型使用不同的组播组地址范围。
一讲到网络编程的I/O模型,总会涉及到这几个概念。问了很多人,没几个能清晰地讲出他们之间的区别联系,甚至在网络上也有很多不同的观点,也不知是中国文字释义的博大精深,还是本来这几个概念就是绕人不倦。今天我也来给大家讲解一下我对这几个概念的理解。
本文先介绍我查看了的2篇文章,然后介绍linux 和windows 下的非阻塞设置。最后是非阻塞情况下接收情况的判断。
一、下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器 #include <sys/types.h> #include <sys/socket.h
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Simba888888/article/details/9077455
组播相对单播和广播有如下优势: 相比单播,由于被传递的信息在距信息源尽可能远的网络节点才开始被复制和分发,所以用户的增加不会导致信息源负载的加重以及网络资源消耗的显著增加。相比广播,由于被传递的信息只会发送给需要该信息的接收者,所以不会造成网络资源的浪费,并能提高信息传输的安全性。 组播(Multicast)可以很好的解决点到多点的数据传输。IP 组播技术在 ISP 提供的互联网信息服务中已经得到了应用。例如:在线直播、网络电视、远程教育、远程医疗、网络电台和实时视/音频会议等。
上一篇文章介绍了IP组播的原理,文章链接如下:https://blog.csdn.net/Adsjddjjej/article/details/126305279
前言:一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作。这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识。组播占了计算机网络的一大部分,特别是组播路由这一块,知识点、名词非常多,要完全掌握并不是一件容易的事情。下面海翎光电的小编跟大家分享一下我的学习经验,如有错误请提出,谢谢。还有,此文全部组播均为IPv4环境下的组播,IPv6的组播跟IPv4完全不同,请注意区分。
常用的UDP实现的程序:DNS域名系统,NFS网络文件系统,SNMP简单网络管理协议 ssize_t recvfrom(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * from,socklen_t *addrlen); ssize_t sendto(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * to,socklen_t addrlen); sock
作为IP传输三种方式之一,组播指的是报文从一个源发出,被转发到一组特定的接收者,相同的报文在每条链路上最多有一份。相较于传统的单播和广播,组播可以有效地节约网络带宽、降低网络负载,所以被广泛应用于IPTV、实时数据传送和多媒体会议等网络业务中。
1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) 5 ss.close() # 关闭服务器套接字 udp客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/c
当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有到达,这个时候kernel就要等待足够的数据到来,而在用户进程这边,整个进程会被阻塞。
使用UDP编写的一些常用应用程序有:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)
利用组播技术可以方便的提供一些新的增值业务,包括在线直播、网络电视、远程教育、远程医疗、网络电台、实时视频会议等对带宽和数据交互的实时性要求较高的信息服务。
首先运行server端,再运行client_1 和 client_2,一次实现一个多人聊天的简单的小功能,基于 udp 协议
-------------------------------------------------------------------------------------------------------------------------------------
作为 IPv4协议的替代,IPv6协议使用 128位的地址结构解决了 IP地址不足的问题,同时对一些特 性进行了优化处理。出现于 IPv4时代的组播技术,由于其有效解决了单点发送、多点接收的问题, 实现了网络中点到多点的高效数据传送,能够大量节约网络带宽、降低网络负载,因此在 IPv6 中 的应用得到了进一步的丰富和加强。
领取专属 10元无门槛券
手把手带您无忧上云