前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【图解计算机网络】物理层和MAC层的亲密关系

【图解计算机网络】物理层和MAC层的亲密关系

作者头像
JavaEdge
发布2021-12-07 10:36:10
6880
发布2021-12-07 10:36:10
举报
文章被收录于专栏:JavaEdgeJavaEdge

机器有了IP,就能在网络和其他机器通信。

物理层

电脑连电脑时,需要配置这俩电脑的IP地址、子网掩码和默认网关。要想两台电脑能够通信,这三项必须配置成为一个网络,可以一个是192.168.0.1/24,另一个是192.168.0.2/24,否则不通。

两台电脑间的网络包,包含MAC层。IP层要封装了MAC层才能将包放入物理层。

至此两台电脑构成最小的局域网 - LAN。

怎么把三台电脑连在一起? 以前有Hub - 集线器。这种设备有多个口,可以连接多台电脑。不同于交换机,集线器没有大脑,完全工作在物理层。它会将自己收到的每一个字节,都复制到其他端口。这是物理层联通的方案。

数据链路层

Hub采取广播模式,若每一台电脑发出的包,局域网内每个电脑都能收到,那就麻烦了。必须解决如下问题(MAC层要解决的):

包发给谁?谁接收?

这里用到一个物理地址 - 链路层地址。但因该层主要解决媒体接入控制,所以常被称为MAC地址

解决这个问题牵扯该层的网络包格式。 比如以太网,该层的最开始,就是目标MAC地址、源MAC地址。

大部分的类型是IP数据包,然后IP里面包含TCP、UDP,以及HTTP等。

有了目标MAC地址,数据包在链路上广播,MAC的网卡才能发现,这个包是给它的。MAC的网卡接收这个包,然后打开IP包,发现IP地址也是自己的,再打开TCP包,发现端口是自己,也就是80,而nginx就是监听80。

于是将请求提交给nginx,nginx返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到MAC层。因为来时有源MAC地址,返回时,源MAC就变成目标MAC,返给请求的机器。

有无发送顺序?

MAC,Medium Access Control,媒体访问控制。就是控制在往媒体上发数据时,谁先发、谁后发。这个规则称为多路访问。比如如下方案:

  • 多车道 每个车一个车道,你走你的,我走我的。这叫信道划分
  • 今天单号出行,明天双号出行 这叫轮流协议
  • 不管啥事,有事儿先出门,发现特堵,就回去。错过高峰再出 这叫随机接入协议,以太网就是这种。

这就解决了媒体接入控制的问题。MAC层就是用来解决多路访问的堵车问题的。

发送时出错,咋办?

对于以太网,该层的最后是CRC,计算整个包是否在发送过程出错。

当源机器知道目标机器,可将目标地址放入包,若不知道呢? 一个广播的网络里面接入了N台机器,如何知道每个MAC地址是谁?即已知IP地址,求MAC地址的协议。

即:在一个局域网里,当知道了IP地址,不知道MAC咋办。

发送一个广播包,谁是这个IP谁来回答。具体询问和回答的报文就像下面这样:

为避免每次都用ARP请求,机器本地也会进行ARP缓存。机器会不断上线下线,IP也可能会变,所以ARP的MAC地址缓存过一段时间会过期。

交换机

Hub是广播的,不管某个接口是否需要,所有Bit都会被发出去,然后让主机自行判断是否需要。 这种方式,当路上车少时没问题,但车一多,产生冲突概率就高了。把不需要的包转发过去,也属于浪费。看来Hub这种一股脑转发的设备是不行的,需要更智能的。因为每个口都只连接一台电脑,这台电脑又不怎么变更IP和MAC地址,只需记住这台电脑的MAC地址,若目标MAC地址不是这台电脑,这口就不用转发了。

所以需要知道目标MAC地址是否就是连接某个口的电脑的MAC地址。这就要一个能把MAC头拿下来,检查目标MAC地址,然后根据策略转发的设备 - 交换机。

交换机怎么知道每个口的电脑的MAC地址?

交换机会学习。

MAC1电脑将一个包发送给MAC2电脑,当这个包到达交换机,一开始交换机也不知道MAC2电脑在哪个口,它只能将包转发给除了来的那个口之外的其他所有的口。 但这时,交换机会记住,MAC1是来自一个明确的口。以后有包的目的地址是MAC1的,直接发送到这个口。

当交换机作为一个关卡一样,过了一段时间之后,就有了整个网络结构。这时,基本不用广播了,全部可准确转发。 每个机器的IP地址会变,所在口也会变,所以交换机的学习结果,称为转发表,有过期时间。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 物理层
  • 数据链路层
    • 包发给谁?谁接收?
      • 有无发送顺序?
        • 发送时出错,咋办?
        • 交换机
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档