底层网络知识详解:从二层到三层
这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师的趣谈网络协议专栏,讲的特别好,像看小说一样学习到了平时很枯燥的知识点,计算机网络的书籍太枯燥,感兴趣的同学可以去付费购买,绝对物超所值,本文就是对自己学习专栏的总结,评论区可以留下你的问题,咱们一起讨论!
我在CSDN写博客的目的真的不是为了写而写,写博客的意义一来是方便自己复习,二来是也是想分享知识。我并不会说侵犯 刘超 老师的版权,我也不是照抄,作者的文章内容很精彩,我是记录自己想学的点,当作一个笔记方便自己复习。大家可能看到这篇文 也会去购买专栏学习,或者看到觉得有一点点用就可以啦!
概述
上一篇文章中对通信网络协议做了一个综述,这一篇开始底层网络知识详解:从二层到三层 分为以下五小节去介绍:
- 从物理层到MAC层;
- 交换机与VLAN;
- ICMP和ping;
- 网关;
- 路由协议;
一、从物理层到MAC层
1.1 第一层(物理层)
电脑连接电脑,除了网线交叉,还需要配置这两台电脑的IP地址、子网掩码和默认网关
IP层封装了MAC层才能放入物理层,两台电脑可以通过网线构成一个局域网,LAN
多台电脑可以通过Hub集线器进行连接。
1.2 第二层(数据链路层)
Hub采取的是广播的模式,无法确定接收者,数据发送混乱没有先后顺序、发送出错怎么办?
MAC层就是要解决这些问题,MAC全称是Medium Access Control(媒体访问控制),其实就是控制数据在媒体上的发送;
多路访问解决数据发送混乱:
- 信道划分,例如分为多车道,每个车一个道;
- 轮流协议,单双号出行;
- 随机接入协议,错峰出行;
为了解决了媒体接入控制的问题,就要考虑:发给谁,谁接收?这里用到一个物理地址,叫作链路层地址。但是常用于解决流媒体接入控制问题,所以常被称为MAC地址。
第二层的网络包的格式如下图所示,首先是包含目标MAC地址和源MAC地址,类型是IP数据包,IP里面封装了TCP、UDP,以及HTTP;数据包在链路上广播,MAC网卡通过目标MAC地址接收数据包,打开IP包,发现IP地址也是自己的,再打开TCP包,发现端口是自己,也就是80,而nginx就是监听80端口;
于是将请求提交给nginx,nginx返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到MAC层。因为来的时候有源MAC地址,返回的时候,源MAC就变成了目标MAC,再返给请求的机器。
第二层的后面是CRC,就是循环冗余检测,通过XOR异或的算法,来计算整个包在传输过程中是否发生了错误。
在一个局域网中如果已知IP地址,求MAC地址,可以采用ARP协议;广播一个IP包,谁是这个IP谁来回答,回答的报文如下,机器会在本地进行ARP缓存来避免每次都用ARP协议,随着机器的上下线,缓存也会失效。
交换机是一个二层设备,假设一个数据包要从MAC1发送到MAC2,但是交换机不知道在MAC2电脑的哪个口,这个时候会将包发送给所有的口,找到MAC2电脑的接口之后,通过转发表来记录下对应的MAC地址,保证下次准确转发。
当机器的IP地址、端口发生改变,转发表中的信息也会发生改变。
总结:
第一,MAC地址是用来解决多路访问的堵车问题;
第二,ARP是通过吼的方式来寻找目标MAC地址,吼完以后,记住一段时间,叫作缓存;
第三,交换机是由MAC地址学习能力的,学完了就知道谁在哪儿了,不用广播了
二、交换机与VLAN
上文中讲了交换机,假如公司越来越大,交换机数目肯定越来越多。交换机之间连接起来,就形成复杂的拓扑结构。这么多网线,绕过来绕过去,不可避免地会出现一些意料不到的情况,其中常见的问题就是环路问题,如下图所示:
这就需要采用使用STP协议,解决环路问题:
在数据结构中,有一个方法叫作最小生成树。有环的我们常称为图。将图中的环破了,就生成了树。在计算机网络中,生成树的算法叫作STP,全称**Spanning Tree Protocol。**有环路的图变成没有环路的树,从而解决环路问题。这里我就不细细描述了,感兴趣的同学可以去学习一下!
2.1 如何解决广播问题和安全问题?
交换机数目多,会面临广播问题和安全问题;一大波机器和交换机,就是想一个公司中相关的部门、不相关的部门,大家都在一个会议室开会吵吵闹闹的,乱的很,这种广播问题就会导致性能下降;
有的部门会议内容需要保密,如果都在一个广播域里面,碰到了一个会抓包的程序员,就能抓到这些包,如果没有加密,就能看到这些敏感信息了。就像是大家都在会议室里七嘴八舌,讨论的问题也能被别人听见喽,就会导致安全问题。所以,那就要分部门、分会议室。
方法一:物理隔离
在网络方面,每个部门都有单独的交换机,配置着单独的子网,这样部门间的沟通就需要路由器;但是部门中的人数不固定,就会导致交换机中的接口空闲较多或者不够用;
方法二:虚拟隔离
常说的VLAN,或者说是虚拟局域网,使用VLAN,一个交换机上就会连着属于多个局域网的机器。交换机会根据二层头上的Tag中的VLAN ID,只有相同VLAN的包,才会互相转发,不同VLAN的包,是看不到的。
对于支持VLAN的交换机,有一种口叫作Trunk口。它可以转发属于任何VLAN的口。交换机之间可以通过这种口相互连接。
三、ICMP和ping
当网络不通,你连不上另一台机器的时候,一般都会ping一下,ping是基于ICMP协议工作的;
3.1 ICMP协议的格式
ICMP全称Internet Control Message Protocol,就是互联网控制报文协议。
ICMP是封装在IP包中的,在传输指令的时候,需要源地址和目标地址,其格式如下:
ICMP报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为8,主动请求的应答为0。
3.2 ICMP报文类型
查询报文类型
ping就是查询报文,是一种主动请求,并且获得主动应答的ICMP协议;ping发的包符合ICMP协议,只不过在后面增加了自己的格式。
对ping的主动请求,进行网络抓包,称为ICMP ECHO REQUEST,同理主动请求的回复,称为**ICMP ECHO REPLY.**比起原先的ICMP,多了两个字段,一个是标识符,就像侦察兵,一类是侦察战况,一类是查找水源,需要采用标识对其进行区分。另一个是序号,ping会存放发送请求的时间值,来计算往返时间,说明路程的长短。
差错报文类型
ICMP差错报文的例子:终点不可达为3,源抑制为4,超时为11,重定向为5
- 终点不可达:网络不可达、主机不可达、协议不可达、端口不可达、需要进行分片但设置了不分片位;
- 源站抑制:源站放慢发送速度;
- 时间超时:超过网络包的生存时间还没送达;
- 路由重新定向:下一次发给另一个路由器;
3.3 ping:查询报文类型的使用
一起来看一下ping的发送和接收过程:
假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,它们都在同一个子网,当你在主机A上运行“ping 192.168.1.2”后,源主机首先会构建一个ICMP请求数据包,数据包中包含类型字段和顺序号;
然后,由ICMP协议将这个数据包连同地址192.168.1.2一起交给IP层,IP层将以192.168.1.2作为目的地址,本机IP地址作为源地址,加上一些其他控制信息,构建一个IP数据包。
接下来,需要加入MAC头,可以通过ARP查询MAC地址,之后传送出去;主机B收到这个数据帧后,先检查它的目的MAC地址,并和本机的MAC地址对比,如符合,则接收,否则就丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层。同样,IP层检查后,将有用的信息提取后交给ICMP协议。
主机B会构建一个 ICMP 应答包,应答数据包的类型字段为 0,顺序号为接收到的请求数据包中的顺序号,然后再发送出去给主机A。在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;反之,即不可达。
如果跨网段的话,还会涉及网关的转发、路由器的转发等等。
3.4 Traceroute:差错报文类型的使用
Traceroute的第一个作用:故意设置特殊的TTL,来追踪去往目的地时沿途经过的路由器
Traceroute的参数指向某个目的地的IP地址,它会发送一个UDP数据包,将TTL设置为1,也就是说一旦遇到一个路由器或者一个关卡,表示其牺牲了,如此反复到达目的地址,就获取到了所有路由器的IP;
Traceroute的第二个作用:故意设置不分片,从而确定路径的MTU;
发送分组,并设置“不分片”标志。每次收到ICMP"不能分片"差错时就会减少分组的长度,直到到达目标主机。
总结:
- ICMP相当于网络世界的侦察兵,分为主动探查的查询报文,一种异常报告的差错报文;
- ping使用查询报文,Traceroute 使用差错报文;
四、网关
在进行网卡配置的时候,除了IP地址,还需要配置一个Gateway的东西,这个就是网关。
一旦配置了IP地址和网关,往往就能够指定目标地址进行访问了。由于在跨网关访问的时候,牵扯到MAC地址和IP地址的变化,这里有必要详细描述一下MAC头和IP头的细节,如下图示:
MAC头里面,先是目标IP地址,然后是源MAC地址,然后有一个协议类型,说明里面是IP协议,里面的版本号主流还是IPv4,TOS代表着数据包的优先级,8位标识协议,指的是到了下一层的协议,是TCP还是UDP,最重要的是源IP和目标IP;
如果是在同一网段,就没网关啥事,直接将源地址和目标地址放入IP头中,然后通过ARP获得MAC地址,将源MAC和目的MAC放入MAC头中,发出去就可以了。
如果不在同一网段,需要访问校园网里面的BBS,这就需要发送给默认的网关Gateway,Gateway的地址一定是和源IP地址是一个网段的。例如:192.168.1.0/24这个网段,Gateway往往会192.168.1.1/24或者192.168.1.2/24.
网关往往是一个路由器,是一个三层转发的设备;三层设备的含义,就是把MAC头、IP头都取下来,根据里面的内容,看看接下来把包发送到哪的设备。
网关和路由器的关系:这个比喻就是路由器是一台设备,它有五个网口或者网卡,相当于有五只手,分别连着五个局域网,每只手的IP地址都和局域网有相同的网段,每只手都是它握住的哪个局域网的网关。
静态路由
静态路由,其实就是在路由器上配置一条一条规则。
每当要选择从哪只手抛出去的时候,就一条一条的匹配规则,找到符合的规则,就按规则中设置的那样,从某个口抛出去,找下一跳IPX。
IP头和MAC头哪些变、哪些不变?
将变与不变的问题分为两种类型,一个是“欧洲十国游”和“玄奘西行”
MAC只在一个局域网内有效,只要过网关,必须要改变,因为已经换了局域网,两者主要的区别在于IP地址是否改变。不改变IP地址的网关,称为转发网关;改变IP地址的网关,称为NAT网关;
“欧洲十国游”
每到一个新的局域网,MAC都是要变的,但是IP地址都不变。在ip头里面,不会保存任何网关的IP地址。所谓的下一跳是,某个IP要将这个IP地址转换为MAC放入MAC头;
整个过程中,IP头里面的地址都是不变的。IP地址在三个局域网都可见,在三个局域网之间的网段都不会冲突。在三个网段之间传输包,IP头不改变。这就像在欧洲各国之间旅游,一个签证就能搞定。
“玄奘西行”
局域网之间各定各的网段,导致IP段冲突,如果单从IP地址上看,简直是自己访问自己,其实是大唐的192.168.1.101要访问印度的192.168.1.101;
但其实就像咱们出国一样,不用国内的身份证,改用护照;
首先,目标服务器B在国际上要有一个国际的身份,我们给它一个192.168.56.2。在网关B上,我们记下来,国际身份192.168.56.2对应国内身份192.168.1.101。凡是要访问192.168.56.2,都转成192.168.1.101。于是,源服务器A要访问目标服务器B,要指定的目标地址为192.168.56.2。
当网络包发送到中间的局域网的时候,服务器A也需要有一个国际身份,因此在国际上,源ip地址不能用192.168.1.101,需要改成192.168.56.1;
而中间的路由器用来做NAT(Network Address Translation),用来转换对应的国际与国内的ip地址,并且配置了对应的静态路由规则;
现在大家每家都有家用路由器,家里的网段都是192.168.1.x,所以你肯定访问不了你邻居家的这个私网的IP地址的。所以,当我们家里的包发出去的时候,都被家用路由器NAT成为了运营商的地址了。
很多办公室访问外网的时候,也是被NAT过的,因为不可能办公室里面的IP也是公网可见的,公网地址实在是太贵了,所以一般就是整个办公室共用一个到两个出口IP地址。你可以通过 查看出口ip 查看自己的出口IP地址。
总结
- 如果离开局域网,就需要经过网关,网关是路由器的一个网口;
- 路由器是一个三层设备,里面有如何找下一跳的规则;
- 经过路由器后MAC头要变,如果IP不变,相当于不换护照的欧洲旅游,如果IP变,相当于换护照的玄奘西行。
五、路由协议
路由器就是一台网络设备,它有多张网卡。当一个入口的网络包送到路由器时,它会根据一个本地的转发信息库,来决定如何正确地转发流量。这个转发信息库通常被称为路由表。
路由器会根据路由表去正确的转发信息,路由表中有多条路由规则,需要根据目的IP地址来配置路由:
- 目的网络:数据包想去哪?
- 出口设备:将包从哪个口扔出?
- 下一跳网关:下一个路由器的地址;
5.1 如何配置策略路由?
真实复杂的网络环境中,除了根据目的ip地址配置路由之外,还可以根据多个参数来配置路由,就是策略路由,可以配置多个路由表,根据源ip地址、入口设备、TOS等选择路由表;
ip rule add from 192.168.1.0/24 table 10
ip rule add from 192.168.2.0/24 table 20
表示从192.168.1.10/24这个网段来的,使用table 10中的路由表,
而从192.168.2.0/24网段来的,使用table20的路由表
在一条路由规则中,也可以走多条路径,在下面的路由规则中:
ip route add default scope global nexthop via 100.100.100.1 weight 1 nexthop via 200.200.200.1 weight 2
家里的网是私有网段,出去的包需要NAT成公网的IP地址,因而路由器是一个NAT路由器;
例如,运营商1给路由器分配的地址是183.134.189.34/32,而运营商网络里面的网关是183.134.188.1/32。有的是/30的,也就是分了一个特别小的网段。运营商2给路由器分配的地址是60.190.27.190/30,运营商网络里面的网关是60.190.27.189/30。
5.2 动态路由算法
网络环境简单的时候,自己可控,可以采用静态路由,一旦网络结构发生变化,就需要动态路由算法;
使用动态路由器,可以根据路由协议算法生成动态路由表,类似于唐僧西天取经一样,转化为如何在途中找最短路径的问题;
1、距离矢量路由算法
算法:每个路由器都会保存一个路由表,包含多行,每行对应一个路由器,每一行包含两部分信息,一个是要到目标路由器,另一个是到目标路由器的距离;
每个路由器都是知道全局信息的,每个路由器都知道自己和邻居之间的距离;每个路由器都会根据自己新收集的信息,计算和其他路由器之间的距离。
第一个问题就是好消息传的快,坏消息传的慢:坏消息是指,一旦某个路由器挂了不会主动发消息,需要访问全部路径才能知道这个路由器挂了;
第二个问题就是每次发送的时候,要发送整个全局路由表:网络规模大了,这谁顶的住啊;
所以上面的两个问题,限制了距离矢量路由的网络规模;
2、链路状态路由算法
链路状态路由(link state routing) 基于Dijkstra算法;
算法:当一个路由器启动时,首先是发现邻居,向他们say hello,然后计算和邻居之间的距离,发送一个echo,马上返回/2,就是距离;然后将自己和邻居之间的链路状态包广播出去,发送到整个网络的每个路由器,这样每个路由器都能收到它和邻居之间的关系的信息,每个路由器都可以在本地构建完整的图,采用Dijkstra算法找到两点之间的最短路径;
5.3 动态路由协议:
1、基于链路状态路由算法的OSPF
OSPF(Open Shortest Path First,开放式最短路径优先),广泛应用于数据中心的协议,主要用于数据中心内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,简称IGP)
内部网关协议的重点是找到最短的路径,OSPF可以发现多个最短的路径,在这多个路径中进行负载均衡,常常被称为等价路由。
2、基于距离矢量路由算法的BGP
外网路由协议(Broder Gateway Protocol,简称BGP)
在网络世界中,可以让一个国家成为自治系统AS(Autonomous System),自治系统分为:
- Stub AS:对外只有一个连接。这类AS不会传输其他AS的包。例如,个人或者小公司的网络
- Multihomed AS:可能有多个连接到其他的AS,但是大多拒绝帮其他的AS传输包,例如一些大公司的网络;
- Transit AS:有多个连接到其他的AS,并且可以帮其他的AS传输包,例如:主干网。
BGP又分为两类,eBGP和iBGP。自治系统中,边界路由器之间使用eBGP广播路由,内部网络也需要访问其他的自治系统。边界路由器通过运行iBGP,使得内部的路由器能够找到到达外网目的地最好的边界路由器。
总结
- 路由分静态路由和动态路由,静态路由可以配置复杂的策略路由,控制转发策略;
- 动态路由分为两种主流算法:距离矢量算法和链路状态算法,基于两种算法产生两种协议,BGP协议和OSPF协议;
转载:https://blog.csdn.net/ghw15221836342/article/details/100510332