计算机网络之我见-通俗理解计算机网络(三)

本篇主要讲解网络中的设备节点:路由器

上篇讲到,用交换机组网从根本上就无法阻止广播通信,要想隔绝广播域,必然要有一种新机制:在交换机组成的链路层之上实现广播域(就是可以发送广播的单个小网络)划分----主机网卡将要发送的指定目的地址的数据包交给所属网关机器, 网关机器必须知道自己所管理的一个或多个广播域信息,然后网关机器根据数据包目的地址所属的广播域号进行转发,如果目的地址属于网关机器所在的某个广播域内,则交给自己所在的交换机进行链路层转发,否者就转发到下个网关机器。。。这相当于一个递归的过程,经过零个或多个网关机器的转发,直到送达给目的主机 或者 根本找不到目的主机并返回给发送主机一个“源主机主机不可达”的错误通知、、、这种机制的实现其实就是IP网络层和路由器的基本工作模式(先辈们当初的设想也许就是我上面设想的那样吧,所以导致了IP、路由器的诞生)

下面详细讲解下如何

1 给主机网卡划分网络号(广播隔离的最小单位)

如何给主机网卡划分网络号?一种方案是用网卡的MAC地址,但是网卡MAC一般是网卡生产好后就固定的,一般是只读的,即使能修改也不靠谱,另外网卡坏了更换网卡的时候难道所属的网络也得变么?所以必须有一种新的机制来划分主机网卡和其所属的网络,那就是 IP 地址 啦,IP就是为了划分网络用的,其组成结构是 “网络号+主机号”了,四个字节大小,一般转换成十进制用点分隔的方式进行表达,如192.168.0.123,还有所谓A B C类IP地址的说法其实就是IP地址中网络号占的字节数的多少了,说白了就是在IP地址的高位开头几位做个标记,比如以1开头、10开头、110开头的IP分别规定网络号占几位、网络号位数少则所拥有的机器数就多,网络号位数多则所拥有机器数就少,按网络所拥有的机器数量多少分成成大、中、小三种网络,大网包含的机器多、小网包含的少,这样更加有利于IP地址管理机构对IP地址的统一分配。后面还有了子网掩码的概念,其实就是在网络的基础上再细分网络,把IP地址的主机号部分再拿出来几位归到网络号里面去,这样做就更能充分利用IP地址了(一个A类地址可以再划分块分给不同机构了)。

2 用路由器的组成结构

一般的家用路由器,其实相当于一个有数据包路由功能的主机加上一个集成在内部的交换机构成,下面我们假设“路由器“只是指具有数据包路由功能的主机,而把它集成的交换机当做外接的交换机来理解,这样假设会更容易理解网络结构!还要说明一点,一般的路由器都至少有两种、两个以上的接口,拿家用路由器来说,一种是wan口,一种是lan口,其实两种口的区别就是他们连接了两个广播互相隔离的网络,wan口的链路层广播只能在wan口所属的网络内广播,lan口的链路层广播只能在lan所属的网络内广播;虽然两个口之间链路层广播不能互通,但是却可以通过IP转发的形式进行互通(就是下面我要讲的路由转发的基本工作原理);更高级的路由器可能会有三个以上的接口,分别连接三个以上的网络;

3 路由器组网结构

一般都是树形结构,最顶层的路由器连接交换机,交换机连接下一层的路由器或主机,下一层的路由器继续连接交换机、交换机又连接更下一层的路由器或主机、、、叶子节点上一般都是主机~

4 IP地址如何分配

路由器的一个接口和其连接的交换机所连接的所有主机是一个网络,通常给顶层路由器用来连接下层机器的那个接口手动设置IP地址和子网掩码,IP地址和子网掩码确定了这个接口及其连接的下层主机或下层路由接口所属的网络号,通常上层路由器开启DHCP服务,用来自动的给下层主机或路由接口分配IP和子网掩码,当然也可以手动设置下层主机或路由接口的IP和子网掩码,但是要确保和上层路由器所在接口是一个子网,否则数据包路由器转发不了;下层如果连接的是下层路由器的一个接口的话,下层路由器的另一个接口则可以和上层路由那样,用相同的策略分配更下层主机或者路由的IP,这还是一个递归的过程、、、 这样多层的路由结构,要确保分配的所有外网IP地址都没有冲突(私网地址除外,私网也就是局域网、内网的概念 有机会再讲吧)。

5 数据包路由的过程

也许大家认为这是路由器的重点内容,但我这里不想多讲了,只讲个大概过程吧,因为详细的过程我也讲不了,水平不够 ~ 汗 ~

首先 路由表的概念:其实就是一张表,里面记录了我路由器本身连接了哪几个网、到哪些网哈能经过我转发到达等等,一般的路由表的一项都是由 网络号或主机号、子网掩码、下一跳IP地址(下个网关)和数据包由路由器的哪个硬件接口发出等信息组成的。

其次 路由表如何形成的: 首先给路由器接口手动配置或自动分配IP和子网掩码的时候就确定了和路由器本身所直连的网络信息的路由表项; 其次,每个路由器都运行监听在指定端口的UDP服务,用来接收相邻路由器UDP广播形式发来的其他路由的路由表数据,同时自己也会定期的在每个接口上像其所属的网络发送UDP广播来通告自己的路由表信息。这样经过一定时间,每个路由器就有了整个网络的网络信息(其实非顶层路由器没有整个网络的网络信息也没关系,只要不是顶层的路由器,数据包都默认转发到上层的路由器就可以,最顶层的路由器肯定没有默认路由来转发了,树形结构的顶端决定了它会有最全面的路由信息)

最后 数据包的路由过程: 主机发送一个数据包时,由应用层填写目的IP地址,主机先进行判断目的IP是不是和自己在一个子网内,在的话直接经过交换机发送到对应的子网主机即可,不需要经过路由器转发,;如果目的地址是非本子网的主机,那么主机就把数据包交给配置的网关,也就是子网内的路由器来转发,路由器收到数据包后,先找路由表,看看目的地址所在的网络是不是已经在路由表里了,在的话就交给路由表中指示的网关(上一层路由器来转发),不在的话一般也会交给上层路由器来转发(因为一般路由表都有默认路由表项指向上层路由器),就这样一个过程,层层向上,直到找到目的网络所在的路由器,由目的路由器下的交换机进行链路层转发,转发到指定主机,或者,路由器一直找到最顶层的路由器,最顶层的路由器都没有相关网络的信息,说明目的IP是无效,由路由器会送一个ICMP协议的“主机或者网络不可达”错误给发送数据包的源主机,过程结束。

实在太累了 路由过程没好好写 有机会再修改    2018-08-02 晚 9.38  晴  -- 孔令宽

猜你喜欢

转载自blog.csdn.net/w1857518575/article/details/81355480
今日推荐