精华内容
下载资源
问答
  • 第一点,什么是目的地址和源地址。 源IP地址:发送请求的IP地址。 目的IP地址:被请求的主机IP地址。 第二点, 当主机号全为1时为广播地址,它代表了网络全部的主机,向广播地址发送数据时,所有同一网段的主机都会...

    第一点,什么是目的地址和源地址。
    源IP地址:发送请求的IP地址
    目的IP地址:被请求的主机IP地址。

    第二点, 当主机号全为1时为广播地址,它代表了网络全部的主机,向广播地址发送数据时,所有同一网段的主机都会收到该数据,即广播地址可以作为目的地址。

    第三点,广播地址之所以不可以作为源地址,是因为广播地址代表了该网络的全部主机,如果广播地址作为源地址(发送请求的IP地址),那么到底是哪台主机的请求呢? 这是不明确的,所以不能作为源地址。

    一家之言,请朋友们指正。

    展开全文
  • IPv6地址、单多播/组介绍

    千次阅读 2021-04-17 17:25:52
    IPv6地址、单多播/组介绍 1. IPv6地址介绍 这里主要介绍IPv6地址,什么是IP地址就不介绍了。 IPv6地址主要是为了解决IPv4地址枯竭的问题。 1.1 IPv6地址的格式 IPv6地址有128位,通常使用16进制表示,一个16...

    IPv6地址、单播、多播/组播介绍

    1. IPv6地址介绍

    这里主要介绍IPv6地址,什么是IP地址就不介绍了。

    IPv6地址主要是为了解决IPv4地址枯竭的问题。

    1.1 IPv6地址的格式

    IPv6地址有128位,通常使用16进制表示,一个16进制数可以表示4位二进制,因此128位可以使用32个16进制数表示,而把4个16进制数又分成一组,因此128位可以表示成8组。

    如下图所示,一个X表示一组(4个)16进制字符串,也就是一组包含了16个二进制。一共有8组。

    image-20210417154840638

    图片来源:《IPv6 Fundamentals A Straightforward》

    1.2 IPv6地址简写方式

    一个完整的IPv6地址有32个十六进制字符串表示,太长了,可以简写,简写规则有两种:

    1. 省略每一组开头的0
    2. 省略连续的若干个0,使用两个冒号::表示省略的0。

    1.2.1 省略开头的0

    使用第一种简写规则,省略开头的0,如下图所示:

    image-20210417155501703

    1.2.2 使用双冒号代替连续的0

    如果使用第二种规则,省略连续的0,使用两个冒号表示::,如下图:

    image-20210417155636668

    1.2.3 两种方式结合

    如果把两种规则结合起来,也是最常见的写法,如下图:

    image-20210417155832702

    1.2.4 简写时注意事项

    1. 双冒号::只能在IPv6地址中出现一次
      比如地址:ffff:0000:0000:ffff:0000:0000:0000:0001,就不能写成:ffff::ffff::0001,因为这样写根本不知道原来的地址是什么样的。
    2. 使用双冒号::代替连续0最多的
      比如地址:ffff:0000:0000:ffff:0000:0000:0000:0001,后面有连续的三组都是0,因此应该使用双冒号::代替这里,因此标准简写应该是ffff:0000:0000:ffff::00001
    3. 连续的0出现位置一样多,双冒号代替先出现的(最左边的)。
      比如地址:ffff:0000:0000:ffff:ffff:0000:0000:ffff,第一二组是连续的0,第六七组也是连续的0,标准写法应该是只能使用双冒号::代替先出现的,也就是第一二组,标准写法为:ffff::ffff:ffff:0000:0000:ffff

    1.3 IPv6地址分类

    IPv6地址分类基本可以如下图所示:

    image-20210417161712823

    IPv6地址可以分为三种类型:单播地址、多播地址、任播地址。

    2. 单播地址unicast

    如上图,单播地址可以分为6种:

    1. Global Unicast
    2. Link-Local Unicast
    3. Loopback
    4. Unspecified
    5. Unique Local
    6. Embedded IPv4

    2.1 Global Unicast Address

    全局单播地址Global Unicast Address前缀是2000::/3/3表示子网掩码,表示前面3位是固定的,跟IPv4掩码一样的。

    全局单播地址全局唯一,不会重复,全局单播地址Global Unicast Address就像我们IPv4的公网IP地址

    2.2 Link-Local Unicast

    Link-Local Unicast 前缀是fe80::/10,用于一个局域网内,不同的局域网的Link-Local地址可以重复。

    类似IPv4的私网IP,比如IPv4的192.168.0.1

    2.3 Loopback

    回环地址Loopback前缀是::1/128,使用回环地址的数据包不会经过网卡,回环地址用于本地测试。

    跟IPv4的回环地址127.0.0.1是一样的。

    2.4 Unspecified

    unspecified未指定的,这个地址固定就是全0,表示没有IPv6地址。

    2.5 Unique Local

    看名字,有个单词local,这个地址也是用于局域网,但是不同局域网的Unique Local Address不会重复。

    那么不同的局域网如何保证产生的地址不重复呢?这涉及到一个算法,这里就不介绍了,这个地址的生成就类似UUID的生成。

    2.6 Embeded IPv4

    这个地址就是把IPv4地址包含在IPv6地址中,把IPv6地址的高80位全部设置为0, 然后中间16位设置为1, 低32位设置为IPv4地址。如下图:

    image-20210417163307557

    3. 多播地址multicast

    还是这个图,怕看到这里忘了,再放一次:

    image-20210417163442624

    多播地址有很多种,重要的有三种:

    1. Well-Known
    2. Transient
    3. Solicited-Node

    3.1 多播地址格式介绍

    如下图:

    每个字段的意思图上都有解释,主要说说Scope字段,这个字段表示了多播的范围,按照字面意思可能不好理解,如下图:

    3.1 Well-Known

    Well-Known 多播地址前缀是ff00::/12,也就是最常见的多播地址。

    image-20210417164903410

    注意:

    ​ IPv6没有广播地址,Well-Known多播地址包含了广播地址,比如上图中第一条地址,多播给多有设备,就是广播。

    3.2 Transient

    这个,,先不讲了

    3.3 Solicited-Node

    这个,,有点没看懂,简单说说。。。

    Solicited-Node多播地址前缀是ff02:0:0:0:0:1:ff00::/104

    书上说Solicited-Node多播地址用于主要用于NDP(Neighbor Discovery Protocol)协议,NDP协议的功能有两个:

    1. Address resolution
    2. Duplicate Address Detection (DAD)

    NDP协议的Address resolution功能就类似IPv4的ARP协议,名字都一样,就是根据IP地址请求MAC地址。

    DAD功能是用来检测局域网中的所有设备的单播地址都是不同的。

    3.3.1 单播地址到Solicited-Node多播地址的映射

    Solicited-Node多播地址前104位是固定的,还剩下的24位则是来自单播地址,这剩下24位和单播地址是相同的。

    如下图,把单播地址的低24位拷贝过来,作为Solicited-Node多播地址的低24位。

    image-20210417171127850

    image-20210417171217041

    如上图,这个单播地址可以是全局单播地址,也可以是Link-Local单播地址。

    3.3.2 Solicited-Node多播地址到MAC地址的映射

    这个映射提现了多播地址比广播地址好的地方。。。。

    Solicited-Node多播地址要映射到MAC地址上,就是Mac地址的高12位不变,低32位改为Solicited-Node多播地址的低32位。如图所示:

    我之前以为MAC地址是固定不变了,原来可以改变。

    这里我有个疑惑,每个设备有个公网地址Global Unicast Address,也有一个私网地址Link-Local Unicast Address,那这样不是会产生两个Mac地址吗????

    这样映射有什么好处?

    ​ 多播地址只能用于目的地址,因此这样的数据包发出去后,目标设备接收时,只看Mac地址就可以知道,是不是发给自己的,就不用拆包查看IP地址了。

    4. IPv6地址查看

    查看了自己电脑的IP,如下图:

    image-20210417172219006

    可以确定的是有一个回环地址:::1/128,还有个Link-Local地址:fe80::b105:a91f:85a5:e1ef/64

    参考资料

    《IPv6 Fundamentals A Straightforward》

    展开全文
  • 基于Linux的多播编程

    2021-05-15 20:18:43
    播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的...

    基于Linux的多播编程

    一.单播,广播和多播

    1.单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。

    2.多播的概念:

    1>多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。

    2>在广域网上广播的时候,其中的交换机和路由器指向需要获取数据的主机复制并转发数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择地复制并传输数据,将数据仅仅传输给组内的主机。

    3.多播的优点和缺点

    1>优点:

    Ø  具有同种业务的主机加入同一数据流,共享同一通道,节省了带宽和服务器的优点,具有广播的优点而又没有广播所需要的带宽。

    Ø  服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。

    Ø  与单播一样,多播是允许在广域网即Internet上进行传输的,而广播仅仅在同一局域网上才能进行。

    2>组播的缺点:

    Ø  多播与单播相比没有纠错机制,当发生错误的时候难以弥补,但是可以在应用层来实现此种功能

    Ø  多播的网络支持存在缺陷,需要路由器及网络协议栈的支持。

    4.目前多播的应用主要有网上视频,网上会议等

    5.多播地址:

    1>多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0到239.255.255.255之间的IP地址,并被划分为局部连续多播地址,预留多播地址和管理权限多播地址3类:

    Ø  局部多播地址:在224.0.0.0~224.0.0.251之间,这是路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。(即此类范围的多播IP地址只能在局域网内使用)

    Ø  预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围或网络协议

    Ø  管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

    6.IPv4多播地址到以太网地址的映射方法:

    1>IPv4的D类地址(从224.0.0.0到239.255.255.255)是IPv4多播地址;D类地址的低序28位构成多播组ID(group  ID),整个32位地址则称为组地址(group address)。

    2>IPv4地址的映射,以太网地址的高24位总是01:00:5e下一位总是0,底序23位拷贝自多播组ID的底序23位。这样就组成了多播地址的以太网地址。

    二.多播编程

    uid-25909722-id-2912192.html

    1>建立一个socket;

    2>设置多播的参数,例如超时时间TTL,本地回环许可LOOP等

    3>加入多播组

    4>发送和接收数据

    5>从多播组离开

    2.多播程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的。

    3.setsockopt()的选项

    1>IP_MULTICAST_TTL:设置多播组数据的TTL值(路由跳数),每跨过一个路由器,TTL值减一.范围为0~255之间的任何值。

    int  ttl;

    setsockopt(sock_fd,IPPROTO_IP,IP_MULTICAST_TTL,&ttl,sizeof(ttl));

    2>IP_MULTICAST_LOOP:默认情况下,当本机发送组播数据到某个网络接口时,在IP层,数据会回送公道本地的回环接口,选项IP_MULTICAST_LOOP用于控制数据是否回送到本地的回环接口。

    int  loop;

    setsockopt(sock_fd,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop));

    参数loop设置为0表示禁止回送,设置为1允许回送。

    3>IP_ADD_MEMBERSHIP: 该选项通过对一个结构struct ip_mreq类型的变量进行控制而加入一个多播组。

    Ø  struct ip_mreq

    struct ip_mreq

    {

    struct in_addr imr_multiaddr;/*加入的多播组IP地址*/

    struct  in_addr imr_interface;/*加入的网络接口IP地址*/

    };

    Ø  选项IP_ADD_MEMBESHIP选项用于加入某个多播组,之后就可以向这个多播组发送数据或者从多播组接收数据。此选项的值为mreq结构,成员imr_multiaddr是需要加入的多播组IP地址,成员imr_interface是本机需要加入多播组的网络接口IP地址。

    struct ip_mreq  mreq;

    setsockopt(sock_fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));

    Ø  使用IP_ADD_MEMBERSHIP选项每次只能加入一个网络接口的IP地址到多播组,但并不是一个多播组仅允许一个主机IP地址加入,可以多次调用IP_ADD_MEMBERSHIP选项来实现多个IP地址加入同一个多播组,或者同一个IP地址加入多个多播组。当imr_interface为INADDR_ANY时,选择的本地默认网口。

    4>IP_DROP_MEMBERSHIP:该选项用于从一个多播组中退出。

    struct ip_mreq  mreq;

    setsockopt(sock_fd,IPPROTP_IP,IP_DROP_MEMBERSHIP,&merq,sizeof(sreq));

    三实例:

    情景:

    Ø  服务器端每隔2秒向目的端口号为5000和目的多播地址为224.0.0.255发送数据welcome you to multicast socket programme。

    Ø  客户端从多播地址为224.0.0.255和端口号5000处接收5次多播数据。

    1.服务器端程序uid-25909722-id-2912192.html

    1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9  10 #define  SERV_PORT 5350 11 #define  MCAST_PORT 5350 12 #define  MCAST_ADDR "224.0.0.251" 13 #define  MCAST_INTERVAL   2 14  15 int main(int argc,char **argv) 16 { 17         int sock_fd; 18         struct sockaddr_in mcast_addr,addr_serv,addr_client; 19         char send_buf[]="tigerjibo"; 20         char recv_buf[1024]; 21         int serv_len,mcast_len; 22         int send_num; 23         int recv_num; 24         int err; 25         struct ip_mreq mreq; 26         sock_fd = socket(AF_INET,SOCK_DGRAM,0);/*建立套接子*/ 27         if(sock_fd < 0){ 28                 perror("socket()"); 29                 exit(1); 30         } else { 31                 printf("socket sucefull!\n"); 32         } 33         /*服务器端地址*/ 34         memset(&addr_serv,0,sizeof(struct sockaddr_in)); 35         addr_serv.sin_family = AF_INET; 36         addr_serv.sin_addr.s_addr = inet_addr("192.168.1.11"); 37         addr_serv.sin_port = htons(SERV_PORT); 38         serv_len = sizeof(struct sockaddr_in); 39        //初始化多播地址 40         memset(&mcast_addr,0,sizeof(mcast_addr)); 41         mcast_addr.sin_family = AF_INET; 42         mcast_addr.sin_addr.s_addr = inet_addr(MCAST_ADDR); 43         mcast_addr.sin_port = htons(MCAST_PORT); 44  45         if(bind(sock_fd,(struct sockaddr*)&addr_serv,serv_len)<0){

    46                 perror("bind"); 47                 exit(1); 48         } else { 49                 printf("bind sucess\n"); 50         } 51         while(1){ 52                 printf("begin send:\n"); 53                 send_num = sendto(sock_fd,send_buf,sizeof(send_buf),0,(struct sockaddr *)&mcast_addr,sizeof(mcast_addr)); 54                 if( send_num  < 0){ 55                         perror("sendto()"); 56                         exit(1); 57                 } else{ 58                         printf("send sucessful\n"); 59                 } 60                 sleep(MCAST_INTERVAL); 61         } 62         close(sock_fd); 63         return 0; 64 }                                                                                                                    64,1         底端

    2.客户端程序uid-25909722-id-2912192.html

    1 #include2 #include3 #include4 #include5   6 #include7 #include8 #include9 #include10 #include11 #define  LOCAL_PORT      5350 12 #define  MCAST_ADDR      "224.0.0.251" 13 #define  MCAST_INTERVAL    5 14 #define  LOCAL_ADDR   "192.168.1.11" 15 16  17 18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33 int main() 34 { 35         int sock_fd; 36         struct sockaddr_in local_addr; 37         int err = -1; 38         int loop = 1; 39         sock_fd = socket(AF_INET,SOCK_DGRAM,0);/*建立套接字*/ 40         if(sock_fd < 0){ 41                 perror("socket()"); 42                 exit(1); 43         } else { 44                 printf("socket() sucessful\n");

    45         }

    46         memset(&local_addr,0,sizeof(local_addr)); 47         local_addr.sin_family = AF_INET; 48         local_addr.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr(LOCAL_ADDR);htonl(INADDR_ANY);固定为local_addr则接受不到 49         local_addr.sin_port = htons(LOCAL_PORT); 50         err = bind(sock_fd,(struct sockaddr *)&local_addr,sizeof(local_addr)); 51         if(err < 0){ 52                 perror("bind"); 53                 exit(1); 54         } else { 55                 printf("bind sucessful\n"); 56         } 57         loop = 1; 58         err = setsockopt(sock_fd,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop)); 59         if(err < 0){ 60                 perror("setsocket():IP MULTICAST_LOOP"); 61                 exit(1); 62         } else { 63                 printf("IP_MULTICAST_LOOP SUCESSFUL\n"); 64         } 65  66         struct ip_mreq mreq; 67         mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR); 68         mreq.imr_interface.s_addr = inet_addr(LOCAL_ADDR); 69         err = setsockopt(sock_fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)); 70         if(err < 0){ 71                 printf("%s setsockopt():IP ADD MEMBURSHIP\n",strerror(errno)); 72                 exit(1); 73         } else { 74                 printf("setsockopt() IP ADD MEMBURSHIP sucessful\n"); 75         } 76         int  times = 0; 77         int  addr_len = 0; 78         char buff[1000]; 79         int  recv_num  =0; 80         for(times = 0;times < 5;times++){ 81                 addr_len = sizeof(local_addr); 82                 memset(buff,0,sizeof(buff)); 83                 recv_num = recvfrom(sock_fd,buff,sizeof(buff),0,(struct sockaddr*)&local_addr,&addr_len); 84                 if(recv_num < 0){

    85                         perror("recvfrom()"); 86                         exit(1); 87                 } else { 88                         printf("Recv %dst message from server :%s\n",times,buff); 89                         sleep(MCAST_INTERVAL); 90                 } 91         } 92         err = setsockopt(sock_fd,IPPROTO_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(mreq)); 93         close(sock_fd); 94         return 0; 95 }

    展开全文
  • IP多播详解。


    4.7.1 IP多播的概念

    • 1988年,SteveDeering首次提出IP多播的概念。
    • 多播:以前曾译为组播。
    • 目的:更好地支持一对多通信。
    • 一对多通信:一个源点发送到许多个终点。

    1. 多播可大大节约网络资源

    采用单播方式,向90台主机传送同样的视频节目,需要发送90个单播:

    image-20211129213116221

    采用多播方式,只需发送一次到多播组。路由器复制分组。局域网具有硬件多播功能,不需要复制分组。

    image-20211129213148999

    当多播组的主机数很大时(如成干上万个),采用多播方式就可明显地减轻网络 中各种资源的消耗。

    2. IP多播

    • 在互联网上进行多播叫做IP多播。
    • 互联网范围的多播要靠路由器来实现。
    • 能够运行多播协议的路由器称为多播路由器。
    • 多播路由器也可以转发普通的单播IP数据报。
    • 从1992年起,在互联网上开始试验虚拟的多播主干网MBONE。

    3. 多播IP地址

    • 在IP多播数据报的目的地址需要写入多播组的标识符。

    • 多播组的标识符就是IP地址中的D类地址(多播地址)。

      image-20211129213440072

    • 每一个D类地址标志一个多播组。

      多播地址只能用于目的地址,不能用于源地址。

    4. 多播数据报

    • 多播数据报和一般的IP数据报的区别:
      • 目的地址:使用D类IP地址。
      • 协议字段=2,表明使用网际组管理协议IGMP。
    • 尽最大努力交付,不保证一定能够交付多播组内的所有成员。
    • 对多播数据报不产生ICMP差错报文。在PING命令后面键入多播地址,将永远不会收到响应。

    4.7.2 在局域网进行硬件多播

    • IANA拥有的以太网地址块的高24位为00-00-5E。

    • TCP/IP协议使用的以太网地址块的范围是

      image-20211129214423620

    • IANA只拿出01-00-5E-00-00-00到01-00-5E-7F-FF-FF(223个地址)作为以太网多播地址。或者说,在48位的多播地址中,前25位都固定不变,只有后23位可用作多播。

    D类IP地址与以太网多播地址的映射关系:

    image-20211129215321657

    收到多播数据报的主机,还要在IP层对IP地址进行过滤,把不是本主机要接收的数据报丢弃。

    4.7.3 网际组管理协议IGMP和多播路由选择协议

    1. IP多播需要两种协议

    • 网际组管理协议IGMP

      使多播路由器知道多播组成员信息(有无成员)。

    • 多播路由选择协议

      使多播路由器协同工作,把多播数据报用最小代价传送给多播组的所有成员。

    IGMP使多播路由器知道多播组成员信息:

    image-20211129220833029

    IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上。

    多播路由选择协议更为复杂:

    image-20211129221115356

    路由器R不应当向网络N3转发多播组M1的分组,因为网络N3上没有多播组M1的成员。

    • 多播转发必须动态地适应多播组成员的变化(这时网络拓扑未发生变化),因为每一台主机可以随加入或离开一个多播组。
    • 多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,还要考虑这个多播数据报从什么地方来和要到什么地方去。
    • 多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。

    2. 网际组管理协议IGMP

    • 1989年公布的RFC1112(IGM1)已成为了互联网的标准协议。
    • 1997年公布的RFC2236(IGMPv2,建议标准)对IGMPv1进行了更新。
    • 2002年10月公布了RFC3376(IGMPv3,建议标准)。

    IGMP使用IP数据报传递其报文:

    • 在IGMP报文加上IP首部构成IP数据报。
    • 但IGMP也向IP提供服务。
    • 因此,不把IGMP看成是一个单独的协议,而是整个网际协议IP的一个组成部分。

    IGMP工作可分为两个阶段:

    • 第一阶段:加入多播组。

      image-20211129222431130

      1. 当某个主机加入多播组时,该主机向多播组的多播地址发送IGMP报文, 声明自己要成为该组的成员。
      2. 本地的多播路由器收到IGMP报文后,将组成员关系转发给互联网上的其他多播路由器。
    • 第二阶段:探询组成员变化情况。

      image-20211129222702721

      1. 本地多播路由器周期性地探询本地局域网上的主机,以便知道这些主机 是否还继续是组的成员。
      2. 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。

    IGMP采用的一些具体措施,以避免增加大量开销:

    • 所有通信都使用IP多播。只要有可能,都用硬件多播来传送。

    • 对所有的组只发送一个请求信息的询问报文。默认询问速率是每125秒发送一次。

    • 当同一个网络上连接有多个多播路由器时,能迅速和有效地选择其中的一个来探询主机的成员关系。

    • 分散响应。在IGMP的询问报文中有一个数值N,它指明一个最长响应时间(默认值为10秒)。当收到询问时,主机在0到N之间随机选择发送响应所需经过的时延。若一台主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。

    • 采用抑制机制。同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就不再发送响应了。

    3. 多播路由选择

    image-20211129223359330

    • 实际上就是要找出以源主机为根节点的多播转发树
    • 不同的多播组对应于不同的多播转发树。
    • 同一个多播组,对不同的源点也会有不同的多播转发树。
    • M个源,N个多播组,需要M*N棵以源为根的多播转发树

    转发多播数据报时使用三种方法:

    1. 洪泛与剪除

      • 适合于较小的多播组,所有组成员接入的局域网也是相邻接的。
      • 开始时,路由器转发多播数据报使用洪泛的方法(这就是广播)。
      • 为避免兜圈子,采用反向路径广播RPB的策略。

      RPB的要点:检查,转发:

      image-20211129224301052

      RPB的要点:形成以源为根节点的多播转发树:

      image-20211129224837673

      RPB的要点:剪枝与嫁接:

      • 剪枝:如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点 方向)已没有该多播组的成员,就把它和下游的树枝一起剪除。
      • 嫁接:当某个树枝有新增加的组成员时,可以再接入到多播转发树上。

      image-20211129225036291

      image-20211129225145742

    2. 隧道技术

      image-20211129225211171

    3. 基于核心的发现技术

      • 对于多播组的大小在较大范围内变化时都适合。
      • 对每一个多播组G指定一个核心路由器,并给出它的IP单播地址。
      • 核心路由器按照前面讲过的2种方法创建出对应于多播组G的转发树(核心路由器为根节点)。
      • 为一个多播组构建一棵转发树,而不是为每个(源,组)组合构建一棵转发树。
      • 构建转发树开销较小,扩展性较好。
      • 如果有一个路由器R1向核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。
      • 当数据报到达参加了多播组G的路由器R2时,R2就处理这个数据报。
        • 如果R1发出的是一个多播数据报,其目的地址是G的组地址,R2就 向G的成员转发这个多播数据报。
        • 如果R1发出的数据报是一个请求加入多播组G的数据报,R2就把这 个信息加到它的路由中,用隧道技术向R1转发每一个多播数据报的副本。

    几种多播路由选择协议:

    • 距离向量多播路由选择协议DVMRP。互联网上使用的第一个多播路由选择协议。
    • 基于核心的转发树CBT。
    • 开放最短通路优先的多播扩展MOSPF。
    • 协议无关多播-稀疏方式PIM-SM。唯一成为互联网标准的一个协议
    • 协议无关多播-密集方式PIM-DM。

    参考资料:《计算机网络(第8版)》—— 谢希仁。

    展开全文
  • 文章目录6.1 链路本地单地址6.1.1 链路本地地址的配置方式有6.1.2 链路本地单地址格式6.1.3 链路本地单地址范围6.1.4 链路本地单地址其他...也就是说,路由器不会转发任何以链路本地地址为源地址或目的地址的数
  • 计算机网络 IP多播

    2021-07-29 01:37:01
    IP 多播的基本概念IP 多播 (multicast,以前曾译为组) 已成为互联网的一个热门课题。目的:更好地支持一对通信。一对通信:一个源点发送到许多个终点。例如,实时信息的交付(如新闻、股市行情等),软件更新,...
  • 在使用IPv4时为了节省带宽和IP地址使用了无类域间路由选择(CIDR)和网络地址转换,还有变长子网掩码(VLSM),都为了节约使用有限的IP资源。全球近75亿人口,对于连接因特网的使用量将会从现在的百分之十几逐步增加...
  • 多播地址总的范围为224.0.0.0~239.255.255.255,每一个地址表示一个多播组,简单的细分范围如下: 地址范围 说明 224.0.0.0~224.0.0.255 仅本地同一个子网使用,不可路由 224.0.1.0~224.0.1.255 公网...
  • :信息源将保温发送到一个特定的组IP地址,只有加入了这个组的主机才能接收 广播:信息源将信息发送给网段中的所有主机,而不管其是否需要该信息 组适用于任何"点到多点"的数据发布 网络直播 视频会议 ...
  • 组采用D 类地址段来表示Group Address D 类地址不对应某一具体设备, 而是需要接收相同数据的一组设备. D类地址段范围: 224.0.0.0 – 239.255.255.255 保留的组播地址段: 224.0.0.0 – 224.0.0.255 ...
  • IP多播7.1 IP多播的基本概念7.2 在局域网上进行硬件多播7.3 网际组管理协议 IGMP 和多播路由选择协议8. 虚拟专用网VPN和网络地址转换NAT8.1 虚拟专用网VPN8.2网络地址转换NAT 继:网络层(中) 6.IPv6 6.1 IPv6的...
  • 1. 概述 1.1 单播用于两个主机间单对单的通信 1.2广播用于一个主机对整个局域网上所有主机上的数据通信 ...1.6多播是 IPv6 数据包的 3 种基本目的地址类型之一,多播是一点对多点的通信, IPv6 没有采用 IPv
  • 先看一下分类组网,路由选择协议RIPv1没有包含子网信息的字段,只能使用长度相同的子网掩码。分类路由选择,就是所有的主机和路由器都使用相同的子网掩码。先看下图: 每个网段都使用了CIDR值是/27,子网掩码是255....
  • 7. MAC地址、IP地址以及数据链路层使用的ARP协议7.1 MAC地址7.1.1 课后练习7.2 IP地址7.2.1 课后练习7.3 ARP协议7.3.1 课后练习 7. MAC地址、IP地址以及数据链路层使用的ARP协议   数据链路层   ■ MAC地址是...
  • 多播

    2021-04-15 00:11:20
    其中3个影响目的地址多播地址的UDP数据报的发送 其中6个影响主机对多播数据报的接收 - 多播地址 1.IPV4的D类地址 IPV4的D类地址 低28位构成多播组ID 整个32位地址称为组地址 多播地址到MAC地址映射, ...
  • /多播取值范围

    2021-06-15 22:25:08
    D类地址只能用于目的地址,不能出现在 ip 报文的源 ip 地址字段。 多播数据报和一般的ip数据报的区别就是它使用D类ip地址作为目的地址,并且首部中的协议字段是2,表明使用网际组管理IGMP 对多播数据报不产生...
  • IPv6地址介绍

    2021-05-22 10:23:33
    1. 认识IPv6地址IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示;而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是128位的,用\":\"分 成8段,用16进制表示;可见,IPv6地址空间相对于IPv4...
  • 2021-01-29--总结

    2021-01-29 22:10:02
    有效载荷允许有零个或个扩展首部(extension header),再后面是数据部分 (1)版本 占4位 它指明了协议版本,对IPv6该字段是6 (2)通信量类 占8位 这是为了区分不同的IPv6数据报的类别或优先级。目前正在...
  • IPv6地址基础知识体系

    2021-05-22 19:24:33
    2.1 单(Unicast)地址 2.1.1 全球唯一地址(Global Unique Address) 2.1.2 唯一本地地址(Unique Local Unicast Address) 2.1.3 站点本地地址(Site-Local Address,已弃用) 2.1.4 链路本地地址(Link-Local...
  • 1、地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;...
  • IP地址规划设计技术

    2021-10-23 16:56:27
    标准分类的IP地址 IP地址是由网络号与主机号组成的,长度是32 bit ,用点分十进制方法表示,这样就构成了标准分类的IP地址。常用的A类、B类、C类IP地址采用包括“网络号-主机号”的两层结构层次A类、B类、C类IP地址...
  • 有谁遇到过同样问题的可以探讨下,或者已经解决问题的,能够指导下我获取组锁private InetAddress group;WifiManager wm=(WifiManager)getSystemService(Context.WIFI_SERVICE);MulticastLock mlock=wm....
  • 1. ipv6地址

    2021-03-09 15:28:55
    地址(Unicast Address):标识一个接口,目的地址为单地址的报文会被送到被标识的接口。在IPv6中,一个接口拥有个IPv6地址是非常常见的现象。 组地址(Multicast Address):标识个接口
  • IP地址、网关、子网掩码

    千次阅读 2021-04-12 21:34:02
    1.IP地址 IP地址 = 网络地址 + 主机地址,又称网络号和主机号构成。 A类:以0开头,第1字节为网络地址+后3个字节主机地址组成,地址范围0.0.0.0~127.255.255.255。可用的A类网络有126个网络,每个网络能容纳1亿...
  • 文章目录1 IPv6地址格式1.1首选格式1.2 压缩格式1.3 内嵌IPv4地址的IPv62 常见的IP地址2.1 ::/1282.2 ::1/1282.3 ::A.B.C.D2.4 ::FFFF:A.B.C.D2.5 fe80::/102.6 FEC0::/10 & FC00::/72.7 2001::/162.8 2002::/...
  • IP地址的ABC类划分

    千次阅读 2020-12-22 18:16:41
    2013-04-30 回答a类ip段0.0.0.0到127.255.255.255b类ip段128.0.0.0到191.255.255.255c类ip段192.0.0.0到223.255.255.255ip地址分类基本的ip地址是分成8位一个单元(称为8位位组)的32位二进制数。二进制与十进制大家都...
  • 基础概念

    千次阅读 2021-01-05 18:17:04
    传输作为IP数据传输的三种方式之一 ,是指接收者的数量和位置在源端主机不知道的情况下,仅由源发出一份组播报文,向目标组IP地址发送数据的过程。其特点有: 组实现点到多点的高效数据传输。(全部基于UDP...
  • 细说ABC类IP地址 特种IP地址 表示本网络上的本主机,仅在系统启动时允许使用,不是一个有效的IP地址 回环地址127.*.*.* 127.*.*.*是一个保留地址,该地址是指电脑本身,主要作用是:预留下作为测试使用,用于网络...
  • 每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control)。 全球唯一,固化在了网卡的ROM中,由IEEE802标准规定 前3个字节:OUI(Organizationally Unique Identifier),组织唯一标识符,由IEEE的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,349
精华内容 19,339
关键字:

多播地址只能用于目的地址