网络-网络层之IP协议篇

Posted by Young Ken on 2018-08-14

网络层之IP协议篇

TCP/IP协议族对现在计算机网络的发展影响非常大,现在工作中大部分时间我们用的都是TCP/IP协议族中的协议,我打算针对IP协议再讲一下网络层。

IP协议相当于OSI的第三层的网络层。

主机的概念

主机是指配有IP,但是不能进行路由控制的设备。

路由器是指配有IP又有路由控制的设备。

IP地址

在数据链路层MAC地址是识别端到端的标识,但是在整个互联网络环境中,怎么识别主机和主机呢,这时候也需要一个地址,这个地址就是IP地址。

IP地址的定义

IP地址(不强调就是IPv4)是一个32位地址每8位是一个组,每个组直接有“.”隔开,也就是分成了4个组。

这样IP地址一共呢代表43亿台计算机。

IP地址是又网络标识(网络地址)和主机标识(主机地址)两部分组成。现在网络地址是根据子网掩码进行区分的。

路由控制

路由控制是指将分组数据最终发送到目标地址的功能。

在网络层有个很重要的概念,叫做

我们经常听说,一个包经过几跳才到达目标,这个跳指的是利用数据链路层之上的部分从一个主机传送到另一个主机。

多跳路由是指路由器或者主机转发IP数据包的时候,只指定下一个路由的或者主机。有人想,只是指定了下一个,怎么到达目的地。

我们举一个例子,现在你想乘在北京站乘车到中关村车站,你没有地图,不知道怎么走。你会去问乘务员(现在有个强假设,就是每个乘务员不知道去全部地铁线路,只知道他附近的车站),去中关村怎么走啊?因为他不知道全部路线,他只能建议你到崇文门站。同样到崇文门站了,你同样问乘务员去中关村怎么走啊?乘务员远的建议是去前门,这样一站一站的问,最后到达了中关村车站。

乘务员脑中的附近车站,在路由器中就是路由表,这表维护了他附近路由的地址(也就是车站名)。

下面会详细讲解。

对于路由表有两种方式,一个是静态的,另一个是动态的。静态的是管理员去维护路由表,动态的是自动从附近的路由获取路由地址。

路由算法

路由的算法有很多,主要有两种,一个是距离向量,一个是链路状态。

距离向量

是根据距离和方向决定走那个路由,在路由表中距离信息作为一个互相交换的信息,包可以通过距离进行路由选择。

链路状态算法

是根据当前的网络状态生成的一个路由表,并且这个路由表能表达出网络的拓扑关系。

RIP

RIP是距离向量的路由算法,被广泛用于LAN中。

这个算法就是每隔30秒就法一次广播,确定这个路由和其他路由的距离。在这个算法中,一跳就是距离是1。

现在你可能会问,如果其中的一个路由坏掉了,怎么办?路由表又是怎么交换的。

RIP的基本行为包括两个。

第一个是把自己的路由信息不断的广播出去。

第二个是一旦一个路由断网了,其他的路由也知道这个事情。

IP分割处理

因为每个数据链路层的最大传输单元并不相同,这样导致传输的时候如果包过大,就不能通过这个数据链路层,就要把包分开处理。

可以举着的例子,现在你想做飞机去土耳其,但中间你要转机,在伊斯坦尔换成其他的飞机,你还有个比较大的行李,行李的大小是2M的正方形,在北京到伊斯坦尔的飞机要求最大是1M的正方形,这个时候你不得不把这个2M拆分成成4个M的行李。在伊斯坦尔登机的时候发现这个飞机只让带0.5M的行李,你有的把这个行李进行拆分。

我看经常会有64k问题,在网络传输中会有64k限制,这是为什么,因为IP最大的传输单元(MTU)是65535byte,也就是64k,如果这个包大于64k,那么这个包一定会被分片,会影响效率。

现在分片大概有两种方式,一个是路由器直接进行分片,一个是在请求头上告诉理由我这个包你不能给我分片,我自己分,路由会这个告诉发生主机,这个包大了,你自己分完从新给我发。