我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 帧封装 >

电脑中链路层在封装帧时是如何获取目的主机的mac的(我认为二层交

归档日期:08-14       文本归类:帧封装      文章编辑:爱尚语录

  电脑中链路层在封装帧时是如何获取目的主机的mac的(我认为二层交换机和HUB没有自己的ip,就不需要arp协议)

  电脑中链路层在封装帧时是如何获取目的主机的mac的(我认为二层交换机和HUB没有自己的ip,就不需要arp协议)

  首先,请那些只会复制粘贴的高手高抬贵手,请明白的达人用自己的理解帮助我吧.arp协议是属于网络层的,比如二层交换机就不能得到ip地址和mac地址的映射关系帧中的目的mac地址是不是这样获...

  首先,请那些只会复制粘贴的高手高抬贵手,请明白的达人用自己的理解帮助我吧.

  arp协议是属于网络层的,比如二层交换机就不能得到ip地址和mac地址的映射关系

  帧中的目的mac地址是不是这样获取的:提取ip包首部获取目的主机ip地址,然后查找arp缓存表,如果有此ip的mac地址映射,那么就把此mac地址添加到帧中存放目的地址的字节处,如果arp缓存表中没有目的ip地址的映射,那么就调用arp进程,发出arp请求包以获取目的ip的mac地址映射并加到帧中.我的主要疑问就是ip包传到链路层后链路层是不是通过ip包头来获取目的ip地址,并找到此ip的mac映射.我想,目的mac地址在封装帧时不会从天而降吧.展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部ip地址和mac的对应表是在电脑端缓存的,交换机存储的是mac和端口的映射表。电脑发送数据到B电脑时,首先查看本地缓存的ip地址和mac的映射表,如果存在,则在数据链路层打包时,用目的mac,如果不存在,则启用ARP协议,用ffffffff作为目的mac发起ARP询问,目的ip的mac地址是什么,交换机收到后检测到目的mac是fffffff,则在所有端口进行广播,交换机下其他电脑收到检测问的ip是不是自己,B电脑检测到是自己,然后回复A自己的mac,交换机收到B发来的消息,记录下B的Mac和端口对应关系到映射表,转发给A电脑,此时A电脑知道了B电脑的Mac,就可以发起二层通信了,ARP协议不是二层协议,因此交换机并不能解析,只是透明转发。ARP协议实际是三层的补充协议,只有路由器和电脑才能解析。

  展开全部arp是数据链路层的协议,只用二层交换机。二层交换机就是接入交换机,接二层交换机的终端通过mac地址通信,arp协议就是终端必须将广播过来的相邻主机的mac地址ip写入自己的arp表,二层交换机和所接的主机都有一张arp表。

  传输层及以下是用来传输数据的,网络层的包到到数据链路层组合成帧再组合成字节,到物理层组合成比特流,比特发送给交换机,交换机看掩码是不是该网段的主机,如果是则搜寻arp表,里面是否有该主机,如果有,则发送给该主机,如果没有,则发送一个广播,如果交换机发现掩码不是该网段的,则交换机再向上发送数据给三层交换机。

  所以说,接在二层交换机上的主机互相通信是用mac的,用arp广播就是获取mac和ip的,如果该主机的包发送到其他网络中,那么就要经过路由器了,更多追问追答追问乱七八糟的,而且是答非所问追答从网络层到数据链路层的,再通过物理层将数据发送出去,发送到二层交换机的时候,二层交换机是二层设备,所以他会取出该帧的ip头,查询掩码是否是这个网段的,如果是,那么他再从arp表中读取是否有改目标地址,如果没有,他会发送一个广播给所有主机,目标主机获得了该广播,就会必须发送一个相应。

  这个主要是二层设备里面的过程。不清楚再追问追问纠正一下,二层设备只能识别硬件地址,并以此为传输和接收的依据.网络层交给它的ip包对是链路层透明的,链路层根部不知道ip包里是什么,而arp协议是网络层的,是为ip协议服务的,ip协议进程把一个ip地址交给arp进程,arp把这个ip地址通过arp算法转换为mac地址的一种映射并把这个mac传递给链路层(不包括ip地址),我的疑问在于这个目的mac地址是何时,何地,以哪种方式加到mac帧中的.追答Lan通过mac地址通讯,wan通过ip通讯的,所以说,如果是跨网通讯,那么是不需要mac地址的,mac地址只是内网唯一标识,也是全球主机标识。如果是lan内部通讯,那么是二层交换机的arp表和本主机的arp和目标主机的arp表之间的事。

  真正的高手会到百度里面的,只不过没几个,真的好心才来帮,我看到一个回答约5年高手,那人是CCIE讲师

  2 当B收到数据口看到数据内容中的IP是自己的 就把自己的MAC填空 并发还给A了 ,并且在缓存中同时也记下了A的映射.更多追问追答追问你的意思链路层可以识别ip地址?追答链路层不可以识别IP ARP信息是放在数据帧的数据部分 不是头部 懂?追问请你仔细看几遍我的提问,你说ARP 是通过二层数据帧来实现 IP和MAC的对应的,照你的理解,还可以这样说,arp是通过传输媒体来实现ip和mac的对应的(因为arp信息是放在bit流中的),

  你仔细看看我的提问就会发现,我的问题是是谁发出arp请求的,是不是二层发出的?我现在想想,链路层既然不能识别ip,那链路层就没有条件发出arp请求.追答你的问题我已经很明白 是你自己不理解什么是ARP 什么是二层数据帧

  ARP 是一个程序 这个程序是实现IP-MAC 对应 . 这个程序的功能不是通过二层数据帧包头来实现的 功能部分放在帧的数据部分 再不理解 我觉得你不适合这个行业呵呵,我来告诉你,ip协议进程在向链路层传递分组前,会把目的ip地址交给arp进程,arp进程会根据自己的算法取得目的ip地址和mac地址的映射,并把此mac地址写入一个约定好的内存空间,然后arp进程会告诉ip协议进程已经完成任务,ip协议进程马上把分组传递给链路层,链路层收到分组后会被动的从约定好的内存空间取得目的mac地址和源mac地址作为帧头的一部分,对于链路层来说,arp根本就不存在.这段话没错 对于链路层来说,arp根本就不存在. 就是我所说的ARP只是用二层来传输 二层帧更本就不关心ARP要它传什么算了,不说了,连我的提问的中心是啥都看不出来,我提问的中心根本不是arp协议,(我的提问的中心是:目的MAC地址是何时,何地,以什么方式封装在帧中的),你说的那些我都知道,不过也谢谢你的热心,唉,看来在百度里很难得到答案.那采纳的网友是百度的人吧,不过我看不出哪个地方值得推荐,虽然回答人很热心,我也感谢他,但不代表答案值得推荐.

  说实话不太明白你在纠结的东西是啥。我觉得其他人的解释其实很清楚的,补充一些吧。

  你考虑正常的网络编程,打开一个socket然后往里头写数据,这时候一层层协议驱动就开始工作,数据外面就开始封装一层层的协议头包括DLC头,最后保存在socketbuffer中,接着内核在把包交给网卡之前,它会先去调用网卡设备上的dev-rebuild_header()的方法,这是Linux网卡驱动强制要求实现的,调用参数是 socketbuffer的指针。目标IP本身就保存在socketbuffer的结构中,程序中自然可以拿到(h-h_dest)。rebuild_header方法就负责IP到MAC的查询工作,可以是查本地表、可以是广播进行ARP查询,也可以是其他方法(比如非以太网),无论如何,这个方法需要取回MAC,并更新socketbuffer的链路层包头,完事了就可以调用网卡的 Tx方法,发送出去了。大概如此吧。

  arp_find 来自 arp 协议驱动,它的职责主要是在 arp 协议驱动维护的缓存表中先查表,如果找不到,就调用 arp_send 执行网络查询,而 arp_send 则更简单粗暴,直接再申请一个 socket buffer , 构造出一个 arp 数据包调用网卡的 Tx 方法发送到线路上。。

本文链接:http://cheffroque.com/zhengfengzhuang/397.html