计算机网络通信原理,假设我在局域网中,通过路由上网,每一层的数据包都含有我的计算机mac地址吗

假如我是宽带上网,并且在局域网,局域网中有几台电脑,我在上百度时候,计算机跟百度服务器的通信原理,我知道我的计算机通信是会以百度ip和应用端口为目的,通过路由层层转发,数据是要层层封装和解封装的,但是返回信息时,每一层的数据包都含有我的mac地址吗,不然返回的数据包以我的路由ip为目的,到达路由后却不知道是哪台计算机要的?就像信封是必须写明地址,也必须写明收件人。

不用没一层都含有的
原理是这样:
首先你想要发一个包,你肯定知道目的IP,就是你想发的主机的IP(上网浏览网页,一般就是dns域名解析和各种链接获得目的IP)
接着查看是否在同一个网段,如果是,那么查找该主机的Mac地址封装(没有就ARP请求,此时一般会丢前一两个包),直接发过去,其中携带自己的源Mac和目的Mac
如果不是同一网段,那么查看自己的默认网关的Mac(这是当你是主机的情况,如果不是主机是路由器,那么直接查找路由下一跳地址和出接口),如果没有,发ARP请求,获得网关的Mac,于是发包向网关,所以目的IP是对端主机,但是目的Mac却是网关的。
事实上,有了IP就知道是要发给谁了,无需Mac的,报文的目的Mac都是下一跳的Mac地址,不是目的主机的Mac地址,下一跳收到了以自己Mac为目的的报文时才会上送到三层,也就是IP层,查找路由表转发到目的IP或直接发往默认网关(没有路由表的主机都是发默认网关的)

这是简单的例子,你说的不属于这种情况。如果你们局域网是使用了路由器的话,那应当用的是一种NAT(地址转换)的技术,在局域网内使用私网地址,在外网所有的主机使用同一个公网IP地址,使用不同的应用层端口来区分不同的用户是常用的方法,当然还有其他许多的方法,如携带option82地理位置信息等等,这样其实节省了公网的地址,但是同时造成无法溯源等诸多问题。
基本就是这样,希望对你有帮助!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-21
很简单,OSI的七层模型知道吧?在到达你这个计算机最近的路由器之前,都是使用IP地址进行存储转发,其内部内容对于路由器是完全透明的。在路由器动作中,先拆包,然后看目的IP地址,发现无法直接投递,就把数据链路层的MAC更改为根据路由选择所决定的下一位路由器,然后这样一个一个的发送~~最终到达离你最近的那个,然后这个依然会比照目的IP,发现直接相连,那就可以投递了,这个投递是根据MAC来的 你可以这么想象,各个主机就如同街道两边的商铺,在街上走用的是MAC寻址来找这一条街道的商铺,而到达路口需要选择下一条街道时就要用IP地址~~当找到目的计算机,就逐层拆包,然后把数据交给相应端口的应用程序