网络协议复习笔记(五)从物理层到MAC层

物理层(第一层)

电脑连电脑,首先网线两个头,一头插一台电脑的网卡上,另一头插另一台,1-3、2-6 交叉接法。 水晶头的第 1、2 和第 3、6 脚,它们分别起着收、发信号的作用。将一端的 1 号和 3 号线、2 号和 6 号线互换一下位置,就能够在物理层实现一端发送的信号,另一端能收到。除了网线要交叉,还需要配置这两台电脑的IP 地址子网掩码默认网关。这三项必须配置成为一个网络,可以一个是 192.168.0.1/24,另一个是 192.168.0.2/24,否则是不通的。到此为止,两台电脑已经构成了一个最小的局域网,也即LAN

使用集线器也就是Hub,连接两台以上的电脑。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。

数据链路层(第二层)

Hub采取广播的模式,每台电脑发出的包可能产生无法辨识受体的问题,需要解决的问题是:

  1. 这个包是发给谁的?谁应该接收?
  2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
  3. 如果发送的时候出现了错误,怎么办?

这些都是第二层,数据链路层,也即 MAC 层要解决的问题。MAC 的全称是 Medium Access Control,即媒体访问控制。

解决第一个问题

牵涉到网络包格式,对于以太网,第二层最开始就是目标点MAC地址源MAC地址
在这里插入图片描述
接下来是类型,大部分的类型是IP 数据包,然后 IP 里面包含 TCPUDP,以及 HTTP 等,这都是里层封装的事情。有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。
于是将请求提交给 nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。

解决第二个问题

而控制谁先发,谁后发的,也就是第二个问题,通过多路访问进行解决。还有其他算法来解决这个问题,分多个车道,叫做信道划分;单双号限行较轮流协议;遇见堵车便折返,叫随机接入协议,以太网就是使用这个方式。

解决第三个问题

通过第二层最后的CRC,也就是循环冗余检测,通过异或来计算整个包是否在发送中出现了错误。

ARP协议

如果不知道目标地址,怎么将目标地址放入包里。通过ARP协议,可以已知IP地址,求MAC地址。
在这里插入图片描述
通过拿着“大喇叭”呼叫,找到MAC。
在这里插入图片描述
通过发送一个广播包,具体如下
在这里插入图片描述
为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以 ARP 的 MAC 地址缓存过一段时间就会过期。

局域网

对于宿舍这样机器量少的情况下,这样组网没有问题。然而一旦机器数目增多,问题就出现了。因为Hub是广播的,不管某个接口是否需要,所有bit都会被发送出去,产生冲突的概率变高。
谁能知道目标 MAC 地址是否就是连接某个口的电脑的 MAC 地址呢?这就需要一个能把 MAC 头拿下来,检查一下目标 MAC 地址,然后根据策略转发的设备,这个设备显然是个二层设备,称为交换机
通过交换机会学习,一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪个口,会发送给其他所有口,但这个时候交换机会记住MAC1是明确的口以及它的MAC地址,以后就会方便很多。
然后通过不断转发,就会形成网络结构,以及转发表,然而这个需要在一段时间后进行更新。

拓扑结构

相比宿舍,在更大范围内出现更多的机器,此时一台交换机也不够用,需要多台交换机,换机之间连接起来,就形成一个稍微复杂的拓扑结构
比如两台交换机连接三个局域网,如果机器 1 只知道机器 4 的 IP 地址,当它想要访问机器 4,把包发出去的时候,它必须要知道机器 4 的 MAC 地址。
在这里插入图片描述
机器1发起广播,机器2和交换机A会收到广播,交换机A会收到广播后,转发给其他网口,于是机器3和交换机B收到。交换机B执行广播策略,于是机器 4 和机器 5 都收到了广播信息。机器 4 主动响应说,这是找我的,这是我的 MAC 地址。一个ARP完成。
这次会让交换机A学习到机器1在左边的网口。当机器 3 要访问机器 1 的时候,也需要发起一个广播的 ARP 请求。这个时候交换机 A 和交换机 B 都能够收到这个广播请求。交换机 A 当然知道主机 A 是在左边这个网口的,所以会把广播消息转发到局域网一。同时,交换机 B 收到这个广播消息之后,由于它知道机器 1 是不在右边这个网口的,所以不会将消息广播到局域网三。

环路问题

类似如下搭建的拓扑结构就是典型的环路问题
在这里插入图片描述
由于初始没有任何信息,交换机A会传到交换机B,B再传回,无休无止,这也导致交换机永远无法学到拓扑结构。当广播包越来越多的时候,也就是路会越来越堵,最后谁也别想走。

如何解决环路问题

数据结构中,将有环的称为,若环破了,就生成了。在计算机网络中,生成树的算法叫做Spanning Tree Protocol,简称STP
在这里插入图片描述

  1. Root Bridge,也就是根交换机。最资深的交换机。
  2. Designated Bridges,有的翻译为指定交换机
  3. Bridge Protocol Data Units (BPDU)网桥协议数据单元。可以比喻为“相互比较实力”的协议。只有掌门能发,已经隶属于某个掌门的交换机只能传达掌门的指示。
  4. Priority Vector,优先级向量。可以比喻为实力 (值越小越牛)。实力就是一组 ID 数目,[Root Bridge ID, Root Path Cost, Bridge ID, and Port ID]。先看 Root Bridge ID。拿出老大的 ID 看看,发现掌门一样,那就是师兄弟;再比 Root Path Cost,也即我距离我的老大的距离,也就是拿和掌门关系比,看同一个门派内谁和老大关系铁;最后比 Bridge ID,比我自己的 ID,拿自己的本事比。
STP工作流程

在这里插入图片描述
一般网管会为越好的交换机分配越高的优先级,一开始大家都是掌门,但各个交换机并不知道互相的实力,需要发送BPDU来进行比武,赢了当掌门,输了就是小弟。只有掌门可以继续发BPDU,小弟在收到BPDU时进行转发。比如5-6会形成一个以5为掌门的小门派,各个小门派继续进行合并。

  1. 掌门遇到掌门:假设5遇到1,于是5带领所有小弟归顺。
  2. 同门相遇:假如 1 和 6 相遇。6 原来就拜在 1 的门下,只不过 6 的上司是 5,5 的上司是 1。1 发现,6 距离我才只有 2,比从 5 这里过来的 5(=4+1)近多了,那 6 就直接汇报给我吧。于是,5 和 6 分别汇报给 1。6相当于升职了。
  3. 掌门遇到其他帮派小弟:小弟拿本帮掌门和这个掌门比较,赢了,这个掌门拜入门来。输了,会拜入新掌门,并且逐渐拉拢和自己连接的兄弟,一起弃暗投明。例如,2 和 7 相遇,虽然 7 是小弟,2 是掌门。就个人武功而言,2 比 7 强,但是 7 的掌门是 1,比 2 牛,所以没办法,2 要拜入 7 的门派,并且连同自己的小弟都一起拜入。
  4. 不同帮派小弟相遇:各自拿掌门比较,输了的拜入赢的门派,并且逐渐将与自己连接的兄弟弃暗投明。
如何解决广播问题和安全问题

就算交换机比 Hub 智能一些,但是还是难免有广播的问题。
有两种分的方法:

1、物理隔离

每个部门设一个单独的会议室,对应到网络方面,就是每个部门有单独的交换机,配置单独的子网,这样部门之间的沟通就需要路由器了。路由器在第三层。
问题在于,有的部门人多,有的部门人少。人少的部门慢慢人会变多,人多的部门也可能人越变越少。如果每个部门有单独的交换机,口多了浪费,少了又不够用。

2、虚拟隔离

也就是VLAN虚拟局域网。使用 VLAN,一个交换机上会连属于多个局域网的机器,那交换机怎么区分哪个机器属于哪个局域网呢?
在这里插入图片描述
只需要在原来的二层的头上加一个 TAG,里面有一个 VLAN ID,一共 12 位,12 位可以划分 4096 个 VLAN。
当这个交换机把二层的头取下来的时候,就能够识别这个 VLAN ID。只有相同 VLAN 的包,才会互相转发,不同 VLAN 的包,是看不到的。
对于交换机来讲,每个 VLAN 的口都是可以重新设置的。一个财务走了,把他所在座位的口从 VLAN 30 移除掉,来了一个程序员,坐在财务的位置上,就把这个口设置为 VLAN 10,十分灵活。
将两个交换机连接起来的口应该设置成什么 VLAN 呢?对于支持 VLAN 的交换机,有一种口叫作 Trunk 口。
解决这么多交换机连接在一起的问题,办公室的问题似乎搞定了。然而这只是一般复杂的场景,

网络不通

总是存在看着好好的,但网络就是连接不上的问题。一般情况下,会想着去ping一下,那ping是如何工作的呢。

ICMP协议

ping基于ICMP协议。全称Internet Control Message Protocol互联网控制报文协议
网络包在传输时总会遇到各种各样的问题,于是需要出现一个协议类似侦察兵或者哨探的身份来取获情报。
ICMP 报文是封装在IP 包里面的。
在这里插入图片描述
ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0。
例如,常用的 ping 就是查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。ping 发的包也是符合 ICMP 协议格式的,只不过它在后面增加了自己的格式。

查询报文

ping主动请求进行网络抓包,称为 ICMP ECHO REQUEST。同理主动请求的回复,称为ICMP ECHO REPLY。比起原生的 ICMP,这里面多了两个字段,一个是标识符。比如两个侦察兵,一个是侦查战况,一个是寻找水源,需要标识符进行区分。另一个是序号,派出去的侦查兵,都要编个号。如果派出去 10 个,回来 10 个,就说明前方战况不错;如果派出去 10 个,回来 2 个,说明情况可能不妙。ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

差错报文

突发异常情况,报告发生不好的事情,对应ICMP的差错报文类型
几个 ICMP 差错报文的例子:终点不可达为 3,源站抑制为 4,超时为 11,重定向为 5

  1. 终点不可达,小兵:报告主公,您让把粮草送到张将军那里,结果没有送到。具体的原因在代码中表示就是,网络不可达代码0主机不可达代码为 1协议不可达代码为 2端口不可达代码为3,需要进行分片但设置了不分片位代码为 4
    具体的场景就像这样:
    网络不可达:主公,找不到地方呀?
    主机不可达:主公,找到地方没这个人呀?
    协议不可达:主公,找到地方,找到人,口号没对上,人家天王盖地虎,我说 12345!
    端口不可达:主公,找到地方,找到人,对了口号,事儿没对上,我去送粮草,人家说他们在等救兵。
    需要进行分片但设置了不分片位:主公,走到一半,山路狭窄,想换小车,但是您的将令,严禁换小车,就没办法送到了。
  2. 源站抑制,也就是让源站放慢发送速度。小兵:报告主公,您粮草送的太多了吃不完。
  3. 时间超时,也就是超过网络包的生存时间还是没到。
  4. 路由重定向,也就是让下次发给另一个路由器。
    差错报文的结构相对复杂一些。除了前面还是 IP,ICMP 的前 8 字节不变,后面则跟上出错的那个 IP 包的 IP 头和 IP 正文的前 8 个字节。
Ping:查询报文类型的使用

假定主机 A 的 IP 地址是 192.168.1.1,主机 B 的 IP 地址是 192.168.1.2,它们都在同一个子网。那当在主机 A 上运行“ping 192.168.1.2”后,会发生如下变化,顺序同数字大小
在这里插入图片描述
正如前文所述,ping 命令执行的时候,源主机首先会构建一个 ICMP 请求数据包,ICMP 数据包内包含多个字段。最重要的是两个,第一个是类型字段,对于请求数据包而言该字段为8;另外一个是顺序号,主要用于区分连续 ping 的时候发出的多个数据包。每发出一个请求数据包,顺序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。

然后ICMP协议将该数据包交给IP层,加上一些其他控制信息,构建一个 IP 数据包。

接下来,需要加入 MAC 头。如果在本节 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用;如果没有,则需要发送ARP 协议查询 MAC 地址。

主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。将 IP 数据包从帧中提取出来,交给本机的 IP 层。IP 层检查后,将有用的信息提取后交给 ICMP 协议。

主机 B 会构建一个 ICMP 应答包,应答数据包的类型字段为 0。在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 应答包,则说明目标主机可达。

当然上述只是最简单的,同一个局域网里面的情况。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。但是对于 ICMP 的头来讲,是没什么影响的。会影响的是根据目标 IP 地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换 MAC 头里面的 MAC 地址。

Traceroute:差错报文类型的使用

Traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器
Traceroute 的参数指向某个目的 IP 地址,它会发送一个UDP 的数据包。将TTL设置成 1,也就是说一旦遇到一个路由器或者一个关卡,就表示它“牺牲”了。
如果中间的路由器不止一个,当然碰到第一个就“牺牲”。于是,返回一个 ICMP 包,也就是网络差错包,类型是时间超时。接下来,将 TTL 设置为 2。第一关过了,第二关就“牺牲”了,那我就知道第二关有多远。
如此反复,直到到达目的主机。这样,Traceroute 就拿到了所有的路由器 IP。当然,有的路由器压根不会回这个 ICMP。这也是 Traceroute 一个公网的地址,看不到中间路由的原因。

Traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。首先是发送分组,并设置“不分片”标志。发送的第一个分组的长度正好与出口 MTU 相等。如果中间遇到窄的关口会被卡住,会发送 ICMP 网络差错包,类型为需要进行分片但设置了不分片位。每次收到 ICMP“不能分片”差错时就减小分组的长度,直到到达目标主机。

小结

  • MAC 层是用来解决多路访问的堵车问题的
  • ARP 是通过吼的方式来寻找目标 MAC 地址的,吼完之后记住一段时间,这个叫作缓存
  • 交换机是有 MAC 地址学习和记忆能力
  • 其实还有一个RAPR协议,能够通过MAC求IP
  • 当交换机的数目越来越多的时候,会遭遇环路问题,让网络包迷路,这就需要使用 STP 协议,通过华山论剑比武的方式,将有环路的图变成没有环路的树,从而解决环路问题。
  • 交换机数目多会面临隔离问题,可以通过 VLAN 形成虚拟局域网,从而解决广播问题和安全问题。
  • ICMP相当于网络世界的侦察兵。我讲了两种类型的 ICMP 报文,一种是主动探查的查询报文,一种异常报告的差错报文
  • ping使用查询报文,Traceroute 使用差错报文
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值