程序员社区

TCP/IP-单播是如何实现的

以下讲的是报文的单播通信过程,组播和广播是没有ARP寻址MAC的

环境和信息

环境

在这里插入图片描述

信息

根据上图先做个简单的判断:

主机A:IP=192.168.1.2/24,网关=192.168.1.1/24

主机B:IP=192.168.1.3/24,网关=192.168.1.1/24

主机C:IP=192.168.2.2/24,网关=192.168.2.1/24

主机D:IP=192.168.2.3/24,网关=192.168.2.1/24

  • A和B处于同一局域网,用交换机AB连接
  • C和D处于同一局域网,用交换机CD连接
  • AB和CD处于不同局域网,用路由器连接

单播通信过程

同网段内通信:A->B

已知:B的IP地址IP_B

  • 主机A首先把自己的IP地址IP_A和子网掩码做“操作与”,得到主机A的网络地址192.168.1.0,然后把目标主机B的IP地址IP_B和目标主机的子网掩码做“操作与”,得到主机B的网络地址192.168.1.0,最后,判断A的网络地址和B的网络地址是否相同,相同,说明A和B在同一个局域网内

  • 查看主机A的ARP缓存表内,是否有目标IP地址IP_B的映射MAC地址MAC_B的表项???

  • 有:把MAC_B填入以太网帧头部,数据发送给交换机,交换机维护着一张端口号和连接在端口的主机的MAC地址对应关系的转发表,数据到达交换机后,交换机根据目标MAC地址MAC_B,通过查找转发表,知道需要转发的端口,转发给主机B的端口,即发给主机B。(交换机是实现根据MAC地址实现以太网单播的关键,如果没有交换机,只能广播)

  • 没有:就需要发ARP广播报文请求B的MAC地址MAC_B,首先查找主机A的路由表:

路由表

由于是发广播报文(为什么是发广播报文请求MAC地址?因为不知道MAC地址,无法实现单播,只能发广播给局域网内所有主机),就需要知道主机B所在的网络地址,主机B的网络地址是192.168.1,匹配到路由表的第三条,对应接口是Eth0,于是从接口Eth0发送ARP广播报文

  • 从接口Eth0发出的ARP广播报文的目标MAC地址是FF:FF:FF:FF:FF:FF,局域网内除了发送方所有主机都会收到ARP请求报文,但是只有主机B会接收,其他主机会在网络层判断目标IP地址不是自己时丢弃,B收到后会把目标IP和自己的IP地址比较,发现相同,则首先会把ARP请求报文里源MAC_A和源IP_A存入主机B的ARP缓存表内(只有ARP请求报文和ARP响应报文才会把MAC-IP存入ARP缓存表),然后给主机A回一个ARP响应报文(这里是单播?为什么?因为主机B的ARP缓存表里有主机A的MAC地址

  • 当主机A发出ARP广播报文后,是发给的交换机,交换机收到后,会先把源MAC_A和对应的端口存入自己的转发表,然后由于目标MAC是广播MAC,则把ARP广播报文复制多份,转发到除了A以外的所有端口,实现广播。当主机B发出ARP响应报文时,也是发给的交换机,交换机收到后,会先把源MAC_B和对应的端口存入自己的转发表,然后在转发表内查找目标MAC_A,能找到A对应的端口号,于是把ARP响应报文转发到A所在的端口,实现单播

  • 主机A收到ARP响应报文后把主机B的IP_B和MAC_B存入主机A的缓存表内,就可以把MAC_B填入数据帧的目标MAC地址中,单播出去

不同网段通信:A->C

  • 主机A首先把自己的IP地址IP_A和子网掩码做“操作与”,得到主机A的网络地址192.168.1.0,然后把目标主机C的IP地址IP_C和目标主机的子网掩码做“操作与”,得到主机C的网络地址192.168.2.0,最后,判断A的网络地址和C的网络地址是否相同,不相同,说明A和C不在同一个局域网内

  • 根据主机C的网络地址192.168.2.0查找路由表,只能匹配到第四条(万能路由),它是主机A的网关,也就是说数据要发给主机A的网关,那么就必须要知道网关(路由器)的MAC地址,主机A和网关IP地址同一个网段,可以ARP广播报文得到路由器的MAC地址,把数据发给网关,交给路由器处理

在这里插入图片描述

  • 这里的ARP请求和响应也都是经过交换机,交换机会相应地把A和路由器的MAC地址存入转发表中

  • 路由器收到数据后,再根据路由器的路由表匹配

路由表

目标IP网络地址匹配到第二条,到达下一跳的方式是广播,于是发送ARP广播,发现主机C的MAC地址MAC_C,把数据包的目标MAC改成MAC_C,发给主机C

  • 路由器处理IP包时,源IP和目标IP地址是永远不会改变的,改变的是源MAC和目标MAC,这是因为路由器时根据目标IP来确定下一跳的,源IP是回复信息时的目标IP,所以也是不能改变的,所以,一条消息在以太网中,源IP和目标IP是不可以改变的,源MAC和目标MAC是根据需要可以改变的

赞(0) 打赏
未经允许不得转载:IDEA激活码 » TCP/IP-单播是如何实现的

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区