计算机网络协议(二)——从二层到三层

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ghw15221836342/article/details/100510332

这个专栏的计算机网络协议,我是在极客时间上学习 已经有三万多人购买的刘超老师趣谈网络协议专栏,讲的特别好,像看小说一样学习到了平时很枯燥的知识点,计算机网络的书籍太枯燥,感兴趣的同学可以去付费购买,绝对物超所值,本文就是对自己学习专栏的总结,评论区可以留下你的问题,咱们一起讨论!

我在CSDN写博客的目的真的不是为了写而写,写博客的意义一来是方便自己复习,二来是也是想分享知识。我并不会说侵犯 刘超 老师的版权,我也不是照抄,作者的文章内容很精彩,我是记录自己想学的点,当作一个笔记方便自己复习。大家可能看到这篇文 也会去购买专栏学习,或者看到觉得有一点点用就可以啦!


概述

上一篇文章中对通信网络协议做了一个综述,这一篇开始底层网络知识详解:从二层到三层 分为以下五小节去介绍:

  1. 从物理层到MAC层;
  2. 交换机与VLAN;
  3. ICMP和ping;
  4. 网关;
  5. 路由协议;

一、从物理层到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异或的算法,来计算整个包在传输过程中是否发生了错误。
MAC数据
在一个局域网中如果已知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
ICMP报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为8,主动请求的应答为0。

3.2 ICMP报文类型

查询报文类型

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

对ping的主动请求,进行网络抓包,称为ICMP ECHO REQUEST,同理主动请求的回复,称为**ICMP ECHO REPLY.**比起原先的ICMP,多了两个字段,一个是标识符,就像侦察兵,一类是侦察战况,一类是查找水源,需要采用标识对其进行区分。另一个是序号,ping会存放发送请求的时间值,来计算往返时间,说明路程的长短。

差错报文类型

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

  1. 终点不可达:网络不可达、主机不可达、协议不可达、端口不可达、需要进行分片但设置了不分片位;
  2. 源站抑制:源站放慢发送速度;
  3. 时间超时:超过网络包的生存时间还没送达;
  4. 路由重新定向:下一次发给另一个路由器;

3.3 ping:查询报文类型的使用

一起来看一下ping的发送和接收过程:
ICMP过程
假定主机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地址,然后是源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可以发现多个最短的路径,在这多个路径中进行负载均衡,常常被称为等价路由。
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协议
展开阅读全文

没有更多推荐了,返回首页