精华内容
下载资源
问答
  • windows下用python加入指定源组播的时候,执行语句 s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_SOURCE_MEMBERSHIP, imr) 报错[Errno 10049],上下文错误! 运行环境为 Win10 64bit,python2.7 python3.6 32...
  • 首先,指定源组播,linux 和windows编程稍微有些不同: Linux:bind的是组播地址和组播端口 windows:bind的是接收网卡的地址(local_ip)和组播端口 对于一个网卡收流,其他网卡不用收流 现象1):组播...
    • 首先,指定源组播,linux 和windows编程稍微有些不同:

                       Linux:bind的是组播地址和组播端口

                       windows:bind的是接收网卡的地址(local_ip)和组播端口

    • 对于一个网卡收流,其他网卡不用收流

              现象1):组播收不到流。

                  原因:标红的语句填写的IP地址是any了,如果默认IP不是要收组播的网卡IP,就会收不到流。

                  解决方法:把srcMreq.imr_interface.s_addr 改成本地IP,即可收到流。

        struct ip_mreq_source srcMreq;
        srcMreq.imr_multiaddr.s_addr = inet_addr(muticast_ip.c_str());//组播地址
        srcMreq.imr_interface.s_addr = inet_addr(local_ip.c_str());//本地网卡的地址
        srcMreq.imr_sourceaddr.s_addr = inet_addr(src_ip.c_str());//组播的指定源地址
        if (0 > setsockopt(h_sock, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP, (char*)&srcMreq, sizeof(srcMreq)))
        {
            cout << "setsockopt IP_ADD_SOURCE_MEMBERSHIP failed, ";
            return false;
        }

             现象2) :可以收到组播流,但是接收一段时间,就收不到了。时间一般是路由器配置查询器的时间的2倍。

                    原因:网卡未添加组播路由,所以没有持续发IGMP包,所以路由器查询后,发现没有端口收流,就不继续往端口发流了

                     解决方法:route add -net 0.0.0.0 netmask 0.0.0.0 dev eth0

    • 其次:对于要多网卡收流

            现象描述:

                        网卡1(192.168.100.71) :可以收到组播地址的流(source 192.168.100.150);网卡2(192.168.1.171):收不到组播地址的流(source 192.168.100.150)

                       原因: 网卡2发送不了IGMP的包,原因1.171不知道里没有100.150的路由,所以不知道往哪里发送,解决方法:route add -net 192.168.100.150 netmask 255.255.255.255 dev enp1s0f2,这样网卡2可以收到组播包,但是网卡1收不到组播包了。

                       因此要想多网卡都接收组播流,配置路由就不行了。

                       我还尝试了 sysctl -w net.ipv4.conf.all.rp_filter=2,当把所有网卡的的内核参数都设置2后,网卡enp1s0f2可以收到流了,但是收一段时间后,流就停了,用tcpdump -i enp1s0f2 igmp  -l -n -vv 观察,enp1s0f2仅仅收到交换机发送的igmp查询包,却没有enp1s0f2发送的IGMP的包(只有刚开始加入组的时候有两个IGMP的包,正常情况应该是加入的时候发送两个IGMP包,然后每隔一段时间,再发送一个IGMP包)。

                        后来运行下面的命令,就可以多网卡收流:

                         sysctl -w net.ipv4.conf.all.rp_filter=0
                        cat /proc/sys/net/ipv4/conf/all/rp_filter

                        切记:有几个网卡,就要执行几次sysctl -w net.ipv4.conf.网卡名.rp_filter=0,每个网卡执行一下次

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    •     rp_filter参数详细介绍

                    rp_filter参数有三个值,0、1、2,具体含义:

                     0:不开启源地址校验。

                     1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,  则直接丢弃该数据包。

                     2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包

                 

               如上所示,数据包发到了eth1网卡,如果这时候开启了rp_filter参数,并配置为1,则系统会严格校验数据包的反向路径。从路由表中可以看出,返回响应时数据包要从eth0网卡出,即请求数据包进的网卡和响应数据包出的网卡不是同一个网卡,这时候系统会判断该反向路径不是最佳路径,而直接丢弃该请求数据包。(业务进程也收不到该请求数据包)

                    解决办法:

                    1.修改路由表,使响应数据包从eth1出,即保证请求数据包进的网卡和响应数据包出的网卡为同一个网卡。

                    2.关闭rp_filter参数。(注意all和default的参数都要改)

                                   1)修改/etc/sysctl.conf文件,然后sysctl -p刷新到内存。

                                   2)使用sysctl -w直接写入内存:sysctl -w net.ipv4.conf.all.rp_filter=0

                                  3)修改/proc文件系统: echo "0">/proc/sys/net/ipv4/conf/all/rp_filter

                     rp_filters参数介绍来自https://www.cnblogs.com/lipengxiang2009/p/7446388.html

        多网卡收同一个组播流,当rp_filter=0时,每个网卡上收到两份数据
                 

       把socket绑定网卡,让socket接收到该网卡的网络包

        struct ifreq Ifreq;
        strcpy(Ifreq.ifr_name, "eth0"); //这里指定使用那块网卡拉流 参数为网卡名称

        if (setsockopt(h_sock, SOL_SOCKET, SO_BINDTODEVICE, (char *)&Ifreq, sizeof(Ifreq)) < 0)
        {
            perror("setsockopt():SO_BINDTODEVICE");
            return false;
        }

     

    展开全文
  • 鉴于 Qt在开发基于组播通信的应用时无法绑定到指定网卡接收数据的问题,本文提出了一种在 Windows平台下实现任意源组播和指定源组播通信的方法。本文以 Windows 下的 Qt 开发环境为基础,通过分析软件接收组播数据的...
  • windows下查看加入的组播

    千次阅读 2019-11-22 22:11:32
    问题描述:在windows下一个正确的组播测试程序发送与接收不成功,猜测原因是网卡过多,与组播地址绑定的IP地址不正确,但用Linux的命令netstat -g,并不被支持。搜了一下,应该用以下命令 netsh interface ipv4 show...

    问题描述:在windows下一个正确的组播测试程序发送与接收不成功,猜测原因是网卡过多,与组播地址绑定的IP地址不正确,但用Linux的命令netstat
    -g,并不被支持。搜了一下,应该用以下命令 netsh interface ipv4 show joins

    查看ipv4加入的组播地址组
    在这里插入图片描述

    那么在Java中如何象C++那样指定IP地址?

    实际上MulticastSocket类的初始构造函数本身就支持绑定指定IP地址,见下图。在maven代码中点击SocketAddress,可以查看其数据结构,发现SocketAddress有一个子类,inetSocketAddress,其有两个成员函数,一个是主机名(IP地址),另一个是端口,定义一SocketAddress(纯虚类)的类实例,但new的是子类inetSocketAddress,然后对其赋值。再次运行即可。

    -实际上再次运行时并没有真正绑定到指定IP,还是靠把其它网卡都禁用才成功的。时间因素没有多试。

    -不过,如果绑定的IP并不存在,程序还是会报错的。说明这条语句还是认真执行的。
    在这里插入图片描述

    展开全文
  • Windows多网卡环境接收组播

    千次阅读 2020-05-07 15:08:09
    title: “Windows多网卡环境接收组播包” subtitle: “跨过千山万水,踏遍海角天涯–I got it!” date: “2018-01-14” author: “cj” tags: multicast windows multiple-interfaces c++ 说明:本文仅针对IPv4 ...

    layout: post
    title: “Windows多网卡环境接收组播包”
    subtitle: “跨过千山万水,踏遍海角天涯–I got it!”
    date: “2018-01-14”
    author: “cj”
    tags:
    multicast
    windows
    multiple-interfaces
    c++

    说明:本文仅针对IPv4

    局域网发现技术有很多,常用组播(或称为多播):一台设备发送组播包,其他设备加入组播组,接收到组播包时即可知晓发送端IP,接收端回应约定数据即可让发送端也得知这些接收端的IP。

    组播地址与端口号

    IPv4的D类地址(224.0.0.0至239.255.255.255)是IPv4多播地址。D类地址的低28位构成多播组ID(group ID),整个32位地址则成为组地址(group address)。

    224.0.0.1为all-hosts组,224.0.0.2是all-routers组。
    224.0.0.0~224.0.0.255之间的地址(224.0.0.0/24)称为链路局部(link-local)多播地址,是为低级拓扑发现和维护协议保留。

    一般应用程序使用239.0.0.0~239.255.255.255之间的地址,称作可管理地划分范围的IPv4多播空间(administratively scoped IPv4 multicast space)(RFC2365)。

    本文使用239.254.43.21:45454作为组播地址和端口号

    static const auto MULTICAST_GROUP_ADDRESS = "239.255.43.21";
    static const unsigned short MULTICAST_GROUP_PORT = 45454;
    static const auto LOCAL_IP = "192.168.1.222";
    

    WinSock2编程须知

    winsock.h与winsock2.h的一些宏定义如IP_ADD_MEMBERSHIP使用了不同的值,因此须特别注意。这破问题我是在join gruop(setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP...))始终失败,后来检查错误码为10042 (WSAENOPROTOOPT),搜索得知不可直接#include <windows.h>, 而需要

    #include <WinSock2.h>
    #include <Ws2tcpip.h>
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")
    

    具体可参考INFO: Header and Library Requirement When Set/Get Socket Options at the IPPROTO_IP Level

    发送端

    单网卡环境

    无需多提,仅需创建UDP socket,将数据报发送至D类地址的某个约定好的端口即可。

    struct sockaddr_in addr = {};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(MULTICAST_GROUP_PORT);
    addr.sin_addr.s_addr = inet_addr(MULTICAST_GROUP_ADDRESS);
    int addr_len = sizeof(addr);
    
    char host[1024] = { 0 };
    gethostname(host, 1024);
    
    int msgNo = 0;
    char msg[1024] = { 0 };
    while (true) {
        sprintf(msg, "Groupcast Message %s No.%d", host, msgNo++);
        int ret = sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr*)&addr, addr_len);
        if (ret < 0) {
            perror("sendto");
            return -1;
        } else {
            printf("Sent msg: %s\n", msg);
        }
        Sleep(1000);
    }
    

    多网卡环境

    必须绑定并设置出口网卡,否则会使用系统网卡列表的第一个,有可能不是与其他设备同一个局域网的网卡。

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (-1 == sockfd) {
        printf("socket error!!!\n");
        perror("socket:");
        return -1;
    }
    
    int reuse = 1;
    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&reuse, sizeof(reuse)) < 0) {
        perror("Setting SO_REUSEADDR error");
        closesocket(sockfd);
        return -1;
    }
    
    struct sockaddr_in addr = {};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(MULTICAST_GROUP_PORT);
    addr.sin_addr.s_addr = INADDR_ANY;
    int addr_len = sizeof(addr);
    int ret = bind(sockfd, (struct sockaddr*)&addr, sizeof(struct sockaddr));
    if (-1 == ret) {
        printf("bind localaddr error!!!\n");
        perror("bind:");
        closesocket(sockfd);
        return -1;
    }
    
    unsigned long if_addr = inet_addr(LOCAL_IP);
    ret = setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&if_addr, sizeof(if_addr));
    if (-1 == ret) {
        printf("IP_MULTICAST_IF error!!!\n");
        perror("setsockopt:");
        closesocket(sockfd);
        return -1;
    }
    
    char host[1024] = { 0 };
    gethostname(host, 1024);
    
    int msgNo = 0;
    char msg[1024] = { 0 };
    addr.sin_addr.s_addr = inet_addr(MULTICAST_GROUP_ADDRESS);
    while (true) {
        sprintf(msg, "Groupcast Message %s No.%d", host, msgNo++);
        int ret = sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr*)&addr, addr_len);
        if (ret < 0) {
            perror("sendto");
            return -1;
        } else {
            printf("Sent msg: %s\n", msg);
        }
        Sleep(1000);
    }
    

    接收端

    单网卡环境

    非常简单,网上的demo也大多针对这种情况。
    创建UDP socket,绑定INADDR_ANY、约定的端口,加入组播组,接收即可。

    int ret = 0;
    
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (-1 == sockfd) {
        printf("socket error!!!\n");
        perror("socket:");
        return -1;
    }
    
    int reuse = 1;
    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&reuse, sizeof(reuse)) < 0) {
        perror("Setting SO_REUSEADDR error");
        closesocket(sockfd);
        return -1;
    }
    
    struct sockaddr_in localaddr = { 0 };
    localaddr.sin_family = AF_INET;
    localaddr.sin_port = htons(MULTICAST_GROUP_PORT);
    localaddr.sin_addr.s_addr = /*inet_addr(LOCAL_IP)*/ htonl(INADDR_ANY);
    ret = bind(sockfd, (struct sockaddr*)&localaddr, sizeof(struct sockaddr));
    if (-1 == ret) {
        printf("bind localaddr error!!!\n");
        perror("bind:");
        closesocket(sockfd);
        return -1;
    }
    
    /*设置是否支持本地回环接收*/
    /*int loopBack = 1;
    ret = setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, (const char *)&loopBack, sizeof(loopBack));
    if (-1 == ret) {
    printf("setsockopt broadcaset error!!!\n");
    perror("setsockopt:");
    closesocket(sockfd);
    return -1;
    }*/
    
    struct ip_mreq ipmr = { 0 };
    ipmr.imr_interface.s_addr = /*inet_addr(LOCAL_IP)*/ (INADDR_ANY);
    ipmr.imr_multiaddr.s_addr = inet_addr(MULTICAST_GROUP_ADDRESS);
    int len = sizeof(ipmr);
    ret = setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&ipmr, len);
    if (-1 == ret) {
        printf("set error IP_ADD_MEMBERSHIP %d\n", WSAGetLastError());
        perror("setsockopt:");
        closesocket(sockfd);
        return -1;
    }
    
    /* now just enter a read-print loop */
    char msgbuf[MSGBUFSIZE];
    int nbytes = 0;
    localaddr.sin_addr.s_addr = inet_addr(MULTICAST_GROUP_ADDRESS);
    while (1) {
        int addrlen = sizeof(localaddr);
        if ((nbytes = recvfrom(sockfd, msgbuf, MSGBUFSIZE, 0, (struct sockaddr *) &localaddr, &addrlen)) < 0) {
            perror("recvfrom");
            return -1;
        }
        msgbuf[nbytes] = 0;
        puts(msgbuf);
    }
    
    

    多网卡环境

    有些不同,加入组播组时若依然使用INADDR_ANY,则内核默认使用网络设备列表的第一个设备,有可能并不是该局域网。因此,需要将INADDR_ANY替换为LOCAL_IP,即本设备与其他互相发现的设备所在局域网的网卡IP。

    ipmr.imr_interface.s_addr = inet_addr(LOCAL_IP);
    

    备注

    以上所有源码可在https://github.com/captainwong/mcast获取。

    Reference

    展开全文
  • 一、什么是组播: 1、组播的特点 1)什么是组播?... 组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址,有一台主机发出目的地址是以上范围组播地址的报文,在网络中,如果有其他主机对于这个
    一、什么是组播:
    1、组播的特点
    1)什么是组播?
          组播是一种数据包传输方式,当有多台主机同时成为一个数据包的接受者时,出于对带宽和CPU负担的考虑,组播成为了一种最佳选择。
    2)组播如何进行工作?
          组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址,有一台源主机发出目的地址是以上范围组播地址的报文,在网络中,如果有其他主机对于这个组的报文有兴趣的,可以申请加入这个组,并可以接受这个组,而其他不是这个组的成员是无法接受到这个组的报文的。
    3)组播和单播的区别?
          为了让网络中的多个主机可以同时接受到相同的报文,如果采用单播的方式,那么源主机必须不停的产生多个相同的报文来进行发送,对于一些对时延很敏感的数据,在源主机要产生多个相同的数据报文后,在产生第二个数据报文,这通常是无法容忍的。而且对于一台主机来说,同时不停的产生一个报文来说也是一个很大的负担。如果采用组播的方式,源主机可以只需要发送一个报文就可以到达每个需要接受的主机上,这中间还要取决于路由器对组员和组关系的维护和选择。
    4)组播和广播的区别?
          如同上个例子,当有多台主机想要接收相同的报文,广播采用的方式是把报文传送到局域网内每个主机上,不管这个主机是否对报文感兴趣。这样做就会造成了带宽的浪费和主机的资源浪费。而组播有一套对组员和组之间关系维护的机制,可以明确的知道在某个子网中,是否有主机对这类组播报文感兴趣,如果没有就不会把报文进行转发,并会通知上游路由器不要再转发这类报文到下游路由器上。
    2、组播的缺点:
         1) 与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
         2) 现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。
    二、什么是单播:
    1、单播的定义
           主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。
    2、单播的优点:
        1)服务器及时响应客户机的请求
        2)服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。
    3、单播的缺点:
        1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
        2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。
    三、 什么是广播:
    1、广播的定义
          主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
    2、广播的优点:
       1)网络设备简单,维护简单,布网成本低廉
       2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
    3、广播的缺点:
       1)无法针对每个客户的要求和时间及时提供个性化服务。
       2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
       3) 广播禁止在Internet宽带网上传输。
    四、什么是多播:
    1、多播的定义
           “多播”可以理解为一个人向多个人(但不是在场的所有人)说话,这样能够提高通话的效率。如果你要通知特定的某些人同一件事情,但是又不想让其他人知道,使用电话一个一个地通知就非常麻烦,而使用日常生活的大喇叭进行广播通知,就达不到只通知个别人的目的了,此时使用“多播”来实现就会非常方便快捷,但是现实生活中多播设备非常少。多播包括组播和广播,组播是多播的一种表现形式。
    2、多播的特点
          广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由IP地址确定)内的两进程(由端口号确定)间存在一条连接。
          考虑包含多个主机的共享信道网络如以太网。每个以太网帧包含源主机和目的主机的以太网地址(48 bit)。通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播(unicast)。在这种方式下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外)。然而,有时一个主机要向网上的所有其他主机发送帧,这就是广播。通过ARP和RARP可以看到这一过程。多播(multicast) 处于单播和广播之间:帧仅传送给属于多播组的多个主机。
    五、什么是泛洪:
    1、泛洪的定义
          在CISCO设备上有个概念叫泛洪。如果有学设备的,我这里顺便对比讲下,比如现在有个信息包进来,从我们交换机某个端口进来,他要寻址如果事先没有地址那么他就会给每个端口发信息,包括自己,来求证是否是对方。所以交换机不能屏蔽广播而路由器可以,因为他有记忆功能,可以形成路由表。而设备上的泛洪呢他的意思是给所有端口发,除了自己,大家对记下这两个概念.而我们IP地址上的广播地址的概念:IP地址是由2进制组成,当全为一时,表示广播地址。广播地址主机都为1.主机全为0的话是网段表示一个网。
    2、网络泛洪
          从定义上说,攻击者对网络资源发送过量数据时就发生了洪水攻击,这个网络资源可以是router,switch,host,application等。常见的洪水攻击包含MAC泛洪,网络泛洪,TCP SYN泛洪和应用程序泛洪。接下来简单的分别解释一下以上这些:
        1)MAC泛洪发生在OSI第二层,攻击者进入LAN内,将假冒源MAC地址和目的MAC地址将数据帧发送到以太网上导致交换机的内容可寻址存储器(CAM)满掉,然后交换机失去转发功能,导致攻击者可以像在共享式以太网上对某些帧进行嗅探,这种攻击可以通过端口安全技术方式,比如端口和MAC地址绑定。
        2)网络泛洪包括Smurf和DDos:
        smurf发生在OSI第三层,就是假冒ICMP广播ping,如果路由器没有关闭定向广播,那攻击者就可以在某个网络内对其它网络发送定向广播ping,那个网络中的主机越是多,造成的结果越是严重,因为每个主机默认都会响应这个ping,导致链路流量过大而拒绝服务,所以属于增幅泛洪攻击,当然也可以对本            网络发送广播ping。
        3)DDos发生在OSI第三、四层,攻击侵入许多因特网上的系统,将DDos控制软件安装进去,然后这些系统再去感染其它系统,通过这些代理,攻击者将攻击指令发送给DDos控制软件,然后这个系统就去控制下面的代理系统去对某个IP地址发送大量假冒的网络流量,然后受攻击者的网络将被这些假的流量所占据就无法为他们的正常用户提供服务了。
        4)TCP SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,改攻击者就不对之进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

        5)最后应用程序泛洪发生在OSI第七层,目的是消耗应用程序或系统资源,比较常见的应用程序泛洪是什么呢?没错,就是垃圾邮件,但一般无法产生严重的结果。其它类型的应用程序泛洪可能是在服务器上持续运行高CPU消耗的程序或者用持续不断的认证请求对服务器进行泛洪攻击,意思就是当TCP连接完成后,在服务器提示输入密码的时候停止响应。

    应用领域

    1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。

    2.多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。   IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。 

    3.广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。   广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。   在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

    展开全文
  • IP组播及实例

    千次阅读 2015-03-31 18:07:32
    二、组播网络的体系结构 组播网络体系结构包括:组播的基本工作原理、实现组播的条件、...组播源把数据包发送到特定组播组,而只有属于该组播 组的地址才能接收到数据包。组播可以大大的节省网络带宽,因为无论有多
  • 组播

    千次阅读 2009-09-05 21:19:00
    1992年出现支持IP组播的Mbone(组播主干网)和Mbone桌面工具;1993-1996年IP Multicast成为业界关注的焦点,然而因发展条件不成熟使得IP组播只为业界所关注;进入1999年以来,IP组播具备了发展的三个关键条件:支持...
  • 大话浅谈组播那回事一、前言二、组播那点事(一)组播是咋回事1、为什么会需要组播这个东西 一、前言 组播是计算机网络运维人员永远绕不过去的一个知识点,对于我这样的初学者,组播的概念,常常只是一知半解,掉书...
  • CCIE知识点总结——组播

    千次阅读 2018-05-14 23:28:51
    CCIE专题之组播
  • 加入一个组播

    千次阅读 2016-05-12 12:51:55
    网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据报,那么这么主机必须先加入该组播组,然后就可以从组地址接收数据包。在广域网中,还涉及到路由器支持组播路由等,但本文希望以一个...
  • 实际项目中,经常需要使用组播,本文给出了组播代码示例......
  • 使用Winsock:组播编程

    千次阅读 2018-10-17 22:04:49
    Windows套接字通过使用套接字选项或IOCTL,在IPv6和Internet管理协议版本2(IGMPv2)和3(IGMPv3)上启用多侦听器发现(MLD)版本1(MLDv1)和2(MLDv2)。 本节介绍Windows实现,解释如何使用Windows套接字...
  • Windows CE的电源管理

    千次阅读 2008-11-14 09:57:00
    Windows CE的电源管理之一 Windows CE的基本电源管理功能 在所有版本的Windows CE操作系统中,图形、视窗和事件子系统(GWES)在电源管理方面都发挥了关键作用。这是因为早期版本的电源管理功能是由用户的活动所...
  • 网络直播,如何跳出组播的坑!

    万次阅读 2016-07-23 09:10:33
    互联网上的直播,其数据传输方式都采用“单播”方式,所以大家在讨论直播技术时,少有人提及“组播”这个词。 然而,作为直播的组成部分,在广电有线电视、IPTV等应用中,“组播”依然承担着十分重要的作用。本文...
  • Windows CE设备驱动开发之电源管理

    千次阅读 2012-06-02 16:28:33
    电源状态被设定为在操作系统挂起时可使指定设备担任唤醒的功能。 4.7.1.2   电源挂起、恢复回调函数 挂起和恢复电源事件的回调函数与电源管理器无关。当 CPU 被停止,操作系统将进入挂起状态,这时回调...
  • VLC组播测试Server及Client使用简介

    千次阅读 2020-04-25 16:27:17
    1. 选择一个组播视频 添加片源。 清除网络URL。 点击串流。 进入下一步。 2. 输出选项设置 如果选择“在本地显示”,则在打组播流的同时会在本地播放显示视频。 在新目标中选择:UDP(legacy) 通过添加进....
  • “单”(Unicast)、“多”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?且听下文分解。 ——★单 ★—— 网络节点之间...
  • 局域网组播环境,也就是一个最小的组播环境涉及到的要素有三个,分别是组播源、支持组播的交换机以及接收组播数据的终端。首先介绍组播协议,组播地址,然后对组播源,交换机和终端在组播环境中的功能进行介绍,最后...
  • 6、组播技术

    千次阅读 2013-06-27 15:16:42
    在这种情况下如果使用单播和广播方式实现都不符合客观实际情况,将大大增加网络上的冗余数据流量,最好的实现方式是根据实际情况将应用的成员划分到一个群组,数据的分发将仅限于组内,这就是所谓的组播技术。...
  • UDP组播的实现

    万次阅读 2016-05-07 17:46:44
    os:花了一周时间实现了UDP协议下的组播程序,上面是网上给出的一般组播实现的架构。2~4是针对socketopt即socket属性的设置;TTL设置超时时间即每次发送数据之间的间隔,必须有,但不一定用soketopt实现,下文会细说...
  • 组播应用与编程

    千次阅读 2010-09-29 11:24:00
    1992年出现支 持IP组播的Mbone(组播主干网)和Mbone桌面工具;1993-1996年IP Multicast成为业界关注 的焦点,然而因发展条件不成熟使得IP组播只为业界所关注;进入1999年以来,IP组播具备 了发展的三...
  • 单播路由及组播路由协议及就用

    千次阅读 2014-11-12 16:30:17
    单播路由及组播路由协议及就用  分类: 系统运维 单播路由概述 单播路由概述 http://technet.microsoft.com/zh-cn/library/cc786079(WS.10).aspx 单播路由是通过路由器将到...
  • WINSOCK2实现IP组播

    千次阅读 2014-05-15 14:17:45
    IP多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术。多播作为一点对多点的通信,是节省网络带宽的有效方法之一。在网络音频/视频...
  • 1 引言 IP组播和WWW虽处于同一时期,但组播的发展远远慢于WWW,主要原因是IP组播通信模式要求路由器能提供每个群组和每个的信息状态,随着PIM-SM、PIM-DM、MBGP、MSDP等组播路由协议的出现,使组播IP包能正确而...
  •  组播(multicast):也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制。多...
  • TCP/IP 组播编程

    千次阅读 2014-08-06 16:22:46
    组播描述  组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多台接收者的高效数据传送。对其形象的比喻就是类似于广播电台和电视台节目的发送。电台或电视台向...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,706
精华内容 8,682
关键字:

windows指定源组播