从第二层到第三层

第二层(数据链路层)

 数据链路层,也叫MAC层,MAC的全称是 Medium Access Control,即媒体访问控制。可以解决第一层遗留下来的几个问题:

控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这个可以解决第二个问题,有以下的这些方法:

对于第一个问题:发给谁?谁接收? 这里用到一个物理地址,叫作链路层地址。常被称为MAC 地址。

第二层网络包的格式:对于以太网,从第二层开始,就是目标的MAC地址和源MAC地址。数据包在链路上广播,MAC 的网卡才能发现,这个包是给它 的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。 于是将请求提交给 nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层 层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了 目标 MAC,再返给请求的机器。

接下来是类型,大部分的类型是 IP 数据包,然后 IP 里面包含 TCP、UDP,以及 HTTP 等,这都是里层封装的事情。

是CRC,也就是循环冗余检测。通过 XOR 异或的算法,来计 算整个包是否在发送的过程中出现了错误,主要解决第三个问题。

 ARP协议

ARP协议就是已知IP地址,求MAC地址。

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

局域网 

因为hub是无脑的广播所有数据不管接口需不需要,然后让主机来判断到底需不需要,这样就会造成没必要的浪费跟冲突,这里就使用到了交换机:能把 MAC 头拿下来,检查一下目标 MAC 地址,然后根据策略转发的设备。交换机通过交换学习知道每个口设备的MAC地址。

一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开 始交换机也不知道 MAC2 的电脑在哪个口,所以没办法,它只能将包转发给除了来的那个 口之外的其他所有的口。但是,这个时候,交换机会干一件非常聪明的事情,就是交换机会 记住,MAC1 是来自一个明确的口。以后有包的目的地址是 MAC1 的,直接发送到这个口 就可以了。过了一段时间之后,就有了整个网络的一个结构了,这个时 候,基本上不用广播了,全部可以准确转发。当然,每个机器的 IP 地址会变,所在的口也 会变,因而交换机上的学习的结果,我们称为转发表,是有一个过期时间的。

交换机与VLAN

在图中的这个例子中,假设交换机A一开始不知道任何的拓扑信息,假设机器1要访问机器4而只知道4的IP地址,所以需要先知道4的MAC地址:机器 1 发起广播,机器 2 收到这个广播,但是这不是找它的,所以没它什么事。交换 机 A 一开始是不知道任何拓扑信息的,在它收到这个广播后,采取的策略是,除了广播包 来的方向外,它还要转发给其他所有的网口。于是机器 3 也收到广播信息了,但是这和它 也没什么关系。交换机 B 也是能够收到广播信息的,但是这时候它也是不知道任何拓扑信息的,因 而也是进行广播的策略,将包转发到局域网三。这个时候,机器 4 和机器 5 都收到了广播 信息。机器 4 主动响应说,这是找我的,这是我的 MAC 地址。于是一个 ARP 请求就成功 完成了。在上面的过程中,交换机 A 和交换机 B 都是能够学习到这样的信息:机器 1 是在左边这个 网口的。当了解到这些拓扑信息之后,情况就好转起来。当机器 2 要访问机器 1 的时候, 机器 2 并不知道机器 1 的 MAC 地址,所以机器 2 会发起一个 ARP 请求。这个广播消息 会到达机器 1,也同时会到达交换机 A。这个时候交换机 A 已经知道机器 1 是不可能在右 边的网口的,所以这个广播信息就不会广播到局域网二和局域网三。

 如何解决环路问题

 想象一下机器 1 访问机器 2 的过程。一开始,机器 1 并不知道机器 2 的 MAC 地 址,所以它需要发起一个 ARP 的广播。广播到达机器 2,机器 2 会把 MAC 地址返回来,但是问题来了,这两个交换机还是都能够收到广播包的。交换机 A 一开始是不知道机器 2 在哪个局域网的,所以它会把广播消息放到局域网二,在局域网二广播的时候,交换机 B 右边这个网口也是能够收到广播消息的。交换机 B 会将这个广播息信息发送到局域网一。 局域网一的这个广播消息,又会到达交换机 A 左边的这个接口。交换机 A 这个时候还是不 知道机器 2 在哪个局域网,于是将广播包又转发到局域网二。左转左转左转,好像是个圈 哦。

STP协议

在计算机网络中,生成树的算法叫作STP,全称Spanning Tree Protocol。 

Root Bridge,也就是根交换机。这个比较容易理解,可以比喻为“掌门”交换机,是某棵树的老大,是掌门,最大的大哥。

Designated Bridges,有的翻译为指定交换机。这个比较难理解,可以想像成一个“小 弟”,对于树来说,就是一棵树的树枝。所谓“指定”的意思是,我拜谁做大哥,其他交 、换机通过这个交换机到达根交换机,也就相当于拜他做了大哥。这里注意是树枝,不是叶子,因为叶子往往是主机。

Bridge Protocol Data Units (BPDU) ,网桥协议数据单元。可以比喻为“相互比较实力”的协议。行走江湖,比的就是武功,拼的就是实力。当两个交换机碰见的时候,也就是相连的时候,就需要互相比一比内力了。BPDU 只有掌门能发,已经隶属于某个掌门的交换机只能传达掌门的指示。

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工作流程:每个网桥会被分配一个ID,这个ID是有优先级的是管理员根据交换机的性能等因素分配的,接着就互相发送BPDU“比功夫”,输了的就带着自己的小弟一起投靠。

 

 

 

 最后会生成一棵树,武林统一。

解决广播问题和安全问题。

 机器多了交换机多了,由于业务的不相关等问题,会导致性能、安全等各方面的问题,可以采用虚拟隔离,也就是VLAN。

 我们只需要在原来的二层的头上加一个 TAG,里面有一个 VLAN ID,一共 12 位。12 位可以划分 4096 个 VLAN。如果交换机是支持 VLAN 的,当这个交换机把二层的头取下来的时候,就能够识 别这个 VLAN ID。这样只有相同 VLAN 的包,才会互相转发,不同 VLAN 的包,是看不到 的。并且对于每个VLAN口来说都是可以重新设置的,比如一开始是VLAN30,这台主机不用来了新的主机之后,可以设置为VLAN10。对于支持 VLAN 的交换机,有一种口叫作Trunk 口。它可以转发属于任何 VLAN 的口。交 换机之间可以通过这种口相互连接。

ICMP与ping

ICMP协议

 ping 是基于 ICMP 协议工作的。ICMP全称Internet Control Message Protocol,就是互联网控制报文协议。ICMP报文是封装在IP包里面的

 ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动 请求的应答为 0。

查询报文类型

 常用的ping 就是 查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。所以,ping 发的包也是符 合 ICMP 协议格式的,只不过它在后面增加了自己的格式。

差错报文类型

 ICMP 差错报文的例子:终点不可达为 3,源抑制为 4,超时为 11,重定向为 5 

第一种是终点不可达。具体的原因在代码中表示就是,网络不可达代码 为 0,主机不可达代码为 1,协议不可达代码为 2,端口不可达代码为 3,需要进行分片但 设置了不分片位代码为 4。 

第二种是源站抑制,也就是让源站放慢发送速度。小兵:报告主公,您粮草送的太多了吃不 完。

第三种是时间超时,也就是超过网络包的生存时间还是没到。小兵:报告主公,送粮草的 人,自己把粮草吃完了,还没找到地方,已经饿死啦。

第四种是路由重定向,也就是让下次发给另一个路由器。小兵:报告主公,上次送粮草的人 本来只要走一站地铁,非得从五环绕,下次别这样了啊。

第四种是路由重定向,也就是让下次发给另一个路由器。小兵:报告主公,上次送粮草的人 本来只要走一站地铁,非得从五环绕,下次别这样了啊。

ping:查询报文类型的使用

在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果 接收到了 ICMP 应答包,则说明目标主机可达。此时,源主机会检查,用当前时刻减去该 数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。 

Traceroute:差错报文类型的使用

 Traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过 的路由器。Traceroute 的参数指向某个目的 IP 地址,它会发送一个 UDP 的数据包。将 TTL 设置成 1,也就是说一旦遇到一个路由器或者一个关卡,就表示它“牺牲”了。如果中间的路由器不止一个,当然碰到第一个就“牺牲”。于是,返回一个 ICMP 包,也 就是网络差错包,类型是时间超时。那大军前行就带一顿饭,试一试走多远会被饿死,然后 找个哨探回来报告,那我就知道大军只带一顿饭能走多远了。接下来设置TTL为2、3,如此反复直到到达主机,这样traceroute就拿到了所有路由器IP。

Traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。要做的工作首先是 发送分组,并设置“不分片”标志。发送的第一个分组的长度正好与出口 MTU 相等。

网关

MAC头和IP头的细节:

 MAC头里面有目标MAC地址、源MAC地址,协议类型说明里面是IP协议、IP版本号(主流还是IPV4),另外还有8位的协议标识下一层的协议类型(TCP还是UDP),最重要的是源IP地址和目标IP地址。

在任何一台机器如果要访问另外一台机器IP地址,都会先判断这个IP是否跟自己在同一个网段(根据CIDR和子网掩码):如果是在同一网段,那就没网关什么事了,直接把目标地址放入IP头中,根据ARP获取MAC地址,将目标MAC地址放入MAC头中;如果不是在同一网段,就需要发完默认网关gateway,gateway的地址一定是和源IP地址是一个网段的,发送给默认网关的过程跟发完同一网段的其他机器是一样的。

而网关往往是一个路由器,是一个三层转发设备(就是把MAC、IP头都取下来,根据里面的内容看看把包转发到哪些设备),如果网关是一台服务器,就会有多个网卡,其中一个网卡和源IP地址是同网段的。

路由器 是一台设备,它有五个网口或者网卡,相当于有五只手,分别连着五个局域网。每只手的 IP 地址都和局域网的 IP 地址相同的网段,每只手都是它握住的那个局域网的网关。任何一个想发往其他局域网的包,都会到达其中一只手,被拿进来,拿下 MAC 头和 IP 头,看看,根据自己的路由算法,选择另一只手,加上 IP 头和 MAC 头,然后扔出去。

静态路由

静态路由,其实就是在路由器上,配置一条一条规则。这些规则包括:想访问 BBS 站(它 肯定有个网段),从 2 号口出去,下一跳是 IP2;想访问教学视频站(它也有个自己的网 段),从 3 号口出去,下一跳是 IP3,然后保存在路由器里。 每当要选择从哪只手抛出去的时候,就一条一条的匹配规则,找到符合的规则,就按规则中 设置的那样,从某个口抛出去,找下一跳 IPX。

IP头和MAC头哪些变哪些不变?

MAC只要过网关,就一定会发生变化(如源MAC变成路由器的MAC,目标MAC变成机器2的MAC),而不改变IP地址的叫转发网关,改变IP的叫NAT网关。

路由协议

路由器有一个本地信息库来决定如何正确的转发流量,这个信息库被称为路由表。

 动态路由算法

 1. 距离矢量路由算法

第一大类的算法称为距离矢量路由(distance vector routing)。它是基于 BellmanFord 算法的。 这种算法的基本思路是,每个路由器都保存一个路由表,包含多行,每行对应网络中的一个 路由器,每一行包含两部分信息,一个是要到目标路由器,从那条线出去,另一个是到目标 路由器的距离。 

每个路由器都知 道自己和邻居之间的距离,每过几秒,每个路由器都将自己所知的到达所有的路由器的距离 告知邻居,每个路由器也能从邻居那里得到相似的信息。每个路由器根据新收集的信息,计算和其他路由器的距离,比如自己的一个邻居距离目标路 由器的距离是 M,而自己距离邻居是 x,则自己距离目标路由器是 x+M。

存在的问题是:1、好消息传得快,坏消息传得慢:当每个路由器发现原来的道路到不了这个路由器的时 候,感觉不到它已经挂了,而是试图通过其他的路径访问,直到试过了所有的路径,才发现这个路由器是真的挂了。2、每次发送的时候,要发送整个全局路由表。

2. 链路状态路由算法

第二大类算法是链路状态路由(link state routing),基于 Dijkstra 算法。

这种算法的基本思路是:当一个路由器启动的时候,首先是发现邻居,向邻居 say hello, 邻居都回复。然后计算和邻居的距离,发送一个 echo,要求马上返回,除以二就是距离。 然后将自己和邻居之间的链路状态包广播出去,发送到整个网络的每个路由器。这样每个路 由器都能够收到它和邻居之间的关系的信息。因而,每个路由器都能在自己本地构建一个完 整的图,然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。

链路状态路由协议只广播更新的 或改变的网络拓扑,这使得更新信息更小,节省了带宽和 CPU 利用率。而且一旦一个路由 器挂了,它的邻居都会广播这个消息,可以使得坏消息迅速收敛。

OSPF(Open Shortest Path First,开放式最短路径优先)就是这样一个基于链路状态路 由协议,广泛应用在数据中心中的协议。由于主要用在数据中心内部,用于路由决策,因而 称为内部网关协议(Interior Gateway Protocol,简称IGP)。

等价路由:到一个地方去可以有相同的两个路线,可以分摊流量,还 可以当一条路不通的时候,走另外一条路。

但是外网的路由协议,也即国家之间的,又有所不同。我们称为外网路由协议(Border Gateway Protocol,简称BGP)。每个数据中心都设置自己的 Policy。例如,哪些外部的 IP 可以让内部知 晓,哪些内部的 IP 可以让外部知晓,哪些可以通过,哪些不能通过。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值