网络层-network layer(下):网络互连、子网掩码计算方法、Ipv4报头解析
第五章 网络层-Network Layer(下)
上一章讲了网络层的任务、提供的两种服务、五个重要的路由算法、以及网络层的拥塞控制和服务质量问题。这一部分主要讲一讲网络互连问题和Internet的网络层。(包括IP协议、ip地址、ip报头格式等等问题)
5.5 网络互连
在这一部分,我们将主要讨论多个相同或者不同的网络,是怎么相互连接,形成简单的互联网(internet)的。
5.5.1 连接方式

如上图。处于最左边的源机器,如果想要与最右边的目标机器通信,需要经过如下几个步骤。
首先,源机器的传输层将数据与目标的IP地址(后面会讲到),一起封装进源机器的MAC层网络内(这是一个802.11无线局域网)。之后,802.11的MAC层会根据之前学过的种种协议,将这个数据帧发送至该网络下的路由器处。这个网络的路由器收到数据帧后,去掉帧头帧尾,解析其需要发送到的目标IP地址,再通过网络层协议(这些协议使用了我们之前学到的种种路由算法),寻找一条合适的路径到达目标机器所在的路由器处。最后,这个路由器再根据目标机器处网络的相关协议(例如这里是802.3以太网)将数据包送至目标机器。并在解析后到达目标机器的传输层。
总的来讲,虽然源机器和目标机器处于不同类型的MAC层网络下,但是通过网络层的路由器和路由算法,两台机器的相互通信成为了可能。
5.5.2 隧道

隧道技术的存在允许连接两种不同类型的网络(而不仅仅是MAC层)。例如上图中,巴黎和伦敦所在的网络都是IPv6协议的,但是两个之间的路由器却全部使用了IPv4协议。使用隧道技术可以解决数据包在这两个网络上传输的问题。如图中所绘制的,在IPv4网络内传送时,数据包又被包裹进一个IPv4的数据包内。

这一过程就好比汽车被装进火车里运送一样。如果读者还有疑虑的地方,有关IPv4和IPv6的内容将在下一节详细讲到。
5.5.3 数据包分段
在网络层传送数据包的过程中,还会遇到各种各样的具体问题。以下是数据包分段技术的描述、使用原因应用。
a. 使用原因: 由于硬件条件、政治因素等考虑,有些网络的尺寸太小,无法传输过大的数据包(就好比火车轨道标准不同的问题)。
b. 分类(2):
- 透明分段:

这幅图片很形象地解释了透明分段的特点。在透过某个小容量网络前,数据包会背分割成小段,而一旦度过了这部分“狭小地区”,数据包又会被重新组合。这样一来,后续的router其实并不知道发生过分段。
缺点:出口router'必须知道是否接收了全部分段
- 非透明分段:

非透明分段与之相反,即:数据包在分段之后不再被组装回去,一直到他们到达了目标机器才会进行组装。
缺点:1、增加了开销,因为每次分段后需要添加额外的报头;2、增加了丢包的风险
c. 应用:路径MTU发现(path MTU discovery)
路径MTU发现技术被用来解决数据包分段过程中产生的一些缺点。
- 采用策略使得在网络层中避免分段
- 每个数据包在内容中专门标注出是否允许拆分
- 如果router接收到的仍然太大且不能拆分,那么会选择:1、丢弃这个包/2、生成一个报错数据发回。

如图,一个数据包在不同的网络需求下重试了多次。
5.6 Internet的网络层
恭喜!你终于读到了整个网络层的最后一节。在之前的内容里,我们讲解了网络层是如何把不同的底层网络连接起来,并使用路由算法寻找到一条合适的数据发送路线的。同时我们也研究了网络层怎样应对拥塞、提升服务质量等实际问题。下面会简单介绍一下现实生活中的一个实际例子,因特网的网络层。(就像介绍802.11和以太网的MAC层一样)
在设计之初,因特网的网络层即有以下几个原则:

5.6.1 IPv4协议
IPv4的全称叫做Internet Protocol version 4。介绍这一部分之前,我们先从介绍IP数据报本身的格式开始

上图是一个IPv4协议的头。一个典型的IPv4报头共有32Bit*(5+n)大小,当然这个长度不是一定的,后面还有一个字段可以增加(这里请读者们注意,不要把报头的大小和地址长度搞混了。地址长度是32位)。下面分别来介绍一下其中重点字段的含义。
首先是版本字段。该字段记录了数据报属于哪个版本。不同版本的数据包拥有不同的分配方式、长度,因此标注版本是很重要的。这里顺便提以下,除了IPv4,还有一个经典的版本就是IPv6。两者有很大一点不同在于IPv6的地址长度不同,因此可以提供更多的地址空间。在IPv4刚刚诞生的时间里,地址还很充裕。但是随着互联网规模的不断扩大,可用的地址会越来越小,最终耗尽(读者可以联想以下北京的房价升高的原因)。因此,更换成空间更加充裕的IPv6协议是一个很棒的发展方向,尽管也有其它技术能够利用短缺的地址空间(之后会一一看到)
之后需要特别提及的一个字段是标识字段(identification):这个部分的作用是表示新到达的分段属于哪个数据报。因此同一个数据报所含的分段具有同样的标识值。如果有同学已经想不起来数据报是什么,需要重新回到本章第一节再读一读。
DF的含义是“不分段(Dont Fragment)”:这是针对路由器的一条命令。这个字段被用在路径MTU发现的过程之中。如果一个数据报的DF位表示它不能被分段,且不符合路由器的流量限制,那么路由器会返回一个报错信息。
MF“更多的段”(More Fragments)同样只有一位,且也与分段有关。在一个数据报被拆分出的诸多小段中,除了最后一段之外都需要设置这一位以提示接收方什么时候全部分段都已经全部到达。
最后一个需要特别提及的字段是分段偏移量(Fragment Offset):这一字段指明了当前段在所有分段中的位置,以帮助接收方重组。由于这个字段的长度只有13位,所以一个数据报最多拥有8192个分段。同时,除了最后一个段以外,其它所有段的长度必须是8字节的倍数,并小于最大长度。
MF、Fragment Offset、identification三个字段共同合作,实现了在上一章中所讲的分段技术。
5.6.2 IP地址(重点)
IP地址长度
IPv4一个非常明显的特征在于其地址长度。IPv4具有32位的地址长度,而IPv6的地址长度是128位。这一点请各位当作常识记住。
网络接口与IP地址
每一个IP地址并不指向一台真正的主机,而是指向一个网络接口。只不过,大部分情况下,我们的电脑只存在于一个网络之下,所以只有一个IP地址(如果主机同时接入了两个网络,那么就会有两个地址)。同时,因为一个路由器具有多个接口,所以具有多个ip地址。
IP地址的书写方式
在IPv4中,一个地址具有32位长度。这代表着一个地址是由32个二进制比特位组成的。但是在寻址的时候,尤其对于人类来讲,我们使用的更多是点分十进制表示法:一个地址32bit---》4byte--》四个十进制数使用小数点作为间隔,分开表示。
例如一个32位的地址(由于实在是太长了,这里用16进制表示:80D00297),我们按照字节进行划分,得到80.D0.02.97,再把每一部分换成十进制表示,得到了点分十进制表示法为:128.208.2.151。
子网:前缀、子网掩码与子网划分
介绍子网之前,首先介绍一下前缀(prefix):前面讲到,ip地址具有天然的层次性。因此当我们想要分配一片连续的地址时,可以获得相同的高位,同时在低位连续(想象一下电话号码:6315-4210到4220可能属于同一个公司或机构)。这时,这快连续的地址空间就被称作前缀。

上图中的prefix部分标注出了前缀的长度:L位。因此一共有32-L位可以供主机使用。当机器(比如路由器)想要获知这一信息的时候,往往采用的是子网掩码(subnet mask)技术。子网掩码是一串与ip地址长度等长的比特。其网络位全部为1,主机位全部为0。在路由器收到这一串比特流后,会将其与IP地址进行AND操作,这样就可以很快的提取出ip地址的网络部分。
现在问题将变得更加复杂。
为了避免冲突,网络地址管理由一个称为ICANN的机构统一负责。现在的问题是,当对网络地址空的需求时动态问题时,该怎样分配处合理的空间(比如同一机构,在申请完成自己地址空间的之后几年又需要新的地址,且最好可以连续)。问题的解决方案是子网划分:在内部将一个网络块划分成几个部分供多个内部网络使用,但对外部世界仍然像单个网络一样。


上图很好的描述了这种情况:一个学校的电子工程、计科、艺术系三个学院都需要各自的ip地址空间。使用子网划分的方式,我们可以把校园网分成三个网络。图片1最右边连接至Internet的位置(一号路由器处)表示,整个学校分到了16位的网络位和16位的主机位(写在ip地址最后的/16表示16位 网络位 )。在此基础上,EE分得了14位主机位;计科分得了15位主机位;而艺术系只有13位主机位。将一个大型网络分割,得到的结果就称为子网。
现在我们将之前学到的关于子网掩码的知识应用于此,把它扩充完整。由于引入了真正的子网概念(而不仅仅是前缀)这时的情况会更加复杂一点。我们还是用原来的图片进行说明。

橙色的区域就属于子网的部分。只不过,对于每一个路由器来讲,他们并不需要知道其中属于公司的网络前缀是多少,属于子网的部分又有多大,因此子网掩码只标识出了当前网络下的主机位。下面介绍一下子网掩码具体是怎么工作的。
我们还是使用之前的例子。假如1号路由器收到一个入境数据包,上面的目标地址表示这个包需要发送到128.208.2.151处,1号路由器该如何决定到底是发向2号、3号还是4号路由器呢?(这里我们可以先预先判断一下,既然第三个字节是2,那么该包应该是属于EE的)
这时我们将使用子网掩码进行运算。当数据包到达时,路由器会查看他的目标地址,并检查属于哪个子网。为了查看他是否属于计算机科学系,需要首先将目标地址与计科的掩码做and运算:
| ip地址(点分十进制) | ip地址(后16位)(二进制) | |
|---|---|---|
| 入境数据包 | 128.208.2.151 | 0000 0010 1001 0111 |
| CS子网掩码 | 255.255.128.0 | 1000 0000 0000 0000 |
| 入境数据包与CS掩码AND操作 | 128.208.0.0 | 0000 0000 0000 0000 |
进行完AND操作后,路由器会把结果与该地区的前缀进行比较(例如对于计科,前缀就是128.208后面一个1),如果结果不匹配,那么说明这个数据包不属于这个网络。总结一下,步骤就是:掩码+目标AND操作,之后再同前缀比较。其中,前缀与掩码为1的部分同长。子网掩码储存在路由器、交换机等设备的路由表中。
读者可以自己用EE的掩码和前缀试一试。
分类&特殊地址
我么把32位的地址长度分成了以下几类地址。(A类、B类、C类...等等)这种方法被称为:分类寻址。

除此之外,还有一部分IP地址有着特殊的含义和功能。如0.0.0.0只在主机启动的时候使用;127.xx.xx.xx保留给回环测试使用(即:发送到该ip地址的数据包没有被真正的放在网络上,但会像入境数据包一样在本地处理)。如果各位有过调试本地服务器的经历,这一点应该并不陌生。

NAT网络地址转换(可以解决地址匮乏问题!!!!)
当数据包离开时,NAT盒子把内部ip转化成真实的ip地址,并使用端口号来标识不同的本地机器。(端口号在传输层的载荷上有对应标记)。
具体做法是:把源地址用真实ip地址代替,而原端口用一个索引值代替。在NAT盒子内部存在一个映射表,标记了索引值指向的内部的IP地址以及原来的发送接口。

5.6.3 IPv6协议(可以解决地址匮乏问题!!!!)
对于IPv6,读者需要掌握,其地址有128位(16byte)。

5.6.4 Internet控制协议(3)
这一部分将介绍一些Internet网络层的辅助控制协议。
- ICMP:Internet控制消息协议。用于返回错误消息
- ARP:地址解析协议。用于通过ip地址查找对应的mac地址
当网络上一台机需要请求一个ip地址的时候,他会广播这个地址到链路上的所有机器。网络上的所有机器在收到之后都检查自己的地址。如果一样,那么就以自己的以太网地址作为回答。

在机器运行了ARP之后,会把结果缓存起来,以便之后的通信使用。(这一点有点类似于DNS)
- DHCP:动态主机配置协议。用于广播一个数据包以请求ip地址(可以解决地址匮乏问题!!!!)
5.6.5 OSPF内部网关路由协议
OSPF的全称是open shortest path first,即开放最短路优先。OSPF是一个相当出色且广泛使用的域内路由算法,意味着这是一个适用于同一个运营网络或组织内部的路由协议。OSPF将整个网络抽象到一个有向图中来表示,之后,使用了链路状态方法(泛洪发送数据,并计算)来计算最短路径
5.6.6 BGP外部网关路由协议(Border Gateway Protocal)
相比于OSPF,BGP解决的是域间的路由问题
域内与域间问题的一个明显区别是:域内路由只需要考虑如何把数据包发送给接收方,而域间则需要同时考虑政治方面的因素
最后需要知道,BGP是距离矢量协议的一种形式(或者说,使用了距离矢量路由)
5.7 常见问题FAQ
internet/Internet/因特网/互联网,都有什么区别?
internet(互联网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。而 Internet(因特网)是一个专有名词,指当前全球最大的、开放的、由众多网络互连而成的特定计算机网络(采用tcp/ip)协议族。 因特网是最大的互联网。
到此为止,网络层的所有知识点就告一段落了。我们已经学习完毕了计算机网络中内容最多的一章。
在下一章将学习传输层的内容。这一部分描述了两个相当著名的协议:UDP与TCP协议,同时我们还会继续讨论拥塞控制等话题。传输层
主贴连接:>点击这里<
网络层-network layer(下):网络互连、子网掩码计算方法、Ipv4报头解析的更多相关文章
- 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解
第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...
- Tips3:通过Layer下拉菜单来锁定游戏物体和控制物体的可视化
通过把不同的游戏物体放在不同的Layer里面能对不同类的游戏物体进行很方便的控制,如果某些游戏物体创建后你不想再改动,如地面 装饰 什么的, 你可以通过点击Layer下拉菜单把它们锁定了 也可以通过控 ...
- Transport layer and Network layer
http://stackoverflow.com/questions/13333794/networking-difference-between-transport-layer-and-networ ...
- Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- 计算机网络自顶向下方法第4章 网络层:数据平面 (Network layer)
4.1 网络层概述 网络层主要功能为转发(将数据从路由器输入接口转移到合适的输出接口)和路由选择(端到端的路径选择),每台路由器都有一张转发表,用最长前缀匹配规则来转发. 4.1.1 转发和路由选择 ...
- [Linux]Linux下开启snmp支持IPV4和IPV6
SNMP简介 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol).数据库模型(database schema)和一组资源 ...
- MAC 下使用ipv6、ipv4观看电视、网络电视
换了mac book,ipv6电视却看不了了,为了看电视,只要自己动手了. 关于ipv6是啥和哪里有ipv6这里就不说了,找度娘吧. 我们观看IPv6视频直播信号有两种,一种是mms协议,另外一种 ...
- ubuntu下修改子网掩码
1.修改网络配置 修改 /etc/netplan/01-network-manager-all.yaml 文件 vi /etc/netplan/01-network-manager-all.yaml ...
- 虚拟机下 windows 自动配置 IPv4 地址 169.254.X.X(首选)
问题: windows server上,自己手动配置的ip不生效,自动获取地址虽然ok,但是服务器必须指定ip. 诊段: ipconfig/all里查看 自动配置 IPv4 地址 169.254.X ...
随机推荐
- (1)ElasticSearch搭配Kibana在linux环境的部署
1.简介 这个章节主要介绍ElasticSearch+Kibana两个组件在linux环境的部署步骤,以及在部署过程中遇到问题解决,暂就不涉及集群部署知识点,后面章节再详细讲解这块.下面让我们来简单了 ...
- drop_cache-sar
查线上问题: 1.cpu idle 为0 ,I/O高, pidstat 发现进程io 不高,那就是cache mem引起系统io高了 没有vmstat,只能使用sar工具了,使用sar -r 查看 ...
- 调度器简介,以及Linux的调度策略(转)
进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...
- vmlinux, Image ,zImage,uImage
kernel 源码编译生成 vmlinx,vmlinux 是 elf 文件,对 vmlinux 使用 objcopy 得到 Image,Image 是纯粹的二进制文件,vmlinux 只能在OS环境下 ...
- UNP——第四章,TCP套接字编程
1.socket 函数 首先被调用的函数,用于选择通信协议. socket调用成功后,得到的套接字为主动套接字CLOSED状态. PF 和 AF 的关系 PF的是协议族,AF是地址族,理论上一个PF包 ...
- 如何统计Ceph的RBD真实使用容量
前言 ceph的rbd一直有个问题就是无法清楚的知道这个分配的空间里面到底使用了多少,这个在Jewel里面提供了一个新的接口去查询,对于老版本来说可能同样有这个需求,本篇将详细介绍如何解决这个问题 查 ...
- 修改centos6启动动画(plymouth方式)
centos6默认的启动动画是一个白蓝色的进度条,背景全黑色,现在需要对centos的启动动画进行定制 在查询了一些资料以后,发现有一个软件是可以对启动动画进行定制的,名字叫plymouth 这个在c ...
- WPF控件库总结
前言 在使用WPF项目的时候, 一般首要的就是对UI部分的选型, 而WPF相关的UI控件和样式库在Githu也是非常多. 关于UI的部分,可以分为二种: 对控件本身没有很大的需求, 只需要在原有的基础 ...
- DocView 现在支持自定义 Markdown 模版了!
前言 有小伙伴反馈说希望可以自定义 Markdown 模版,这样就可以导出自己想要的样式了!这个功能可以有,毕竟大家不可能都生成一模一样的文档.现在来一起看看如何实现自定义模版吧! 设置模版 Sett ...
- FL studio系列教程(十八):FL Studio输出监视面板讲解
在FL Studio编曲制作软件中输出监视器面板主要的功能是监视输出电平和波形以及频谱.下面大家就跟小编一起来认识下什么是FL Studio监视面板以及它的一些特征吧! 1.首先,我们来看一下输出监视 ...