三、网络层
1、概述
网络层向上提供简单高效、无连接的、最大努力的交付的数据报服务(IP数据报),为主机之间提供逻辑通信。
IP地址作用:IP地址通过ARP协议转为MAC地址,最终按照硬件地址找到主机的,那为什么不直接使用MAC地址,主要是屏蔽下层异构网络
2、设备
路由器:连接多个逻辑分开的网络,根据IP地址区分不同的网络,实现网路的互连和隔离,把IP报文传送到正确的网络。
3、协议
3.1、网际协议IP
网际协议IP是TCP/IP体系中两个最主要的协议之一,这里所说的是IPv4。
与IP协议配套的三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Controller Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
3.1.1、虚拟互联网络
互联网存在大量的异构物理网络,通过使用相同的IP协议,使这些网络在网络层看起来好像是一个统一的网络。
举例:源主机H1要把一个IP数据报发给目的主机H2,通过存储转发,H1查看自己的路由表,看目的主机是否在本网络上。如是,直接交付;如不是,交给路由器R1。R1查找自己的路由表之后,知道应交给R2进行间接交付。
3.1.2、分类的IP地址:
A类网络的IP地址范围为1.0.0.1-126.255.255.254; 网络号为127为环回测试地址
B类网络的IP地址范围为:128.1.0.1-191.255.255.254;
C类网络的IP地址范围为:192.0.1.1-223.255.255.254。
3.1.3、ARP地址解析协议
上层的TCP报文传到网络层会加上IP地址首部,IP地址是网络层及以上使用的逻辑地址,但真正要进行数据传输的还需要用到数据链路层和物理层使用的物理地址。
地址解析协议ARP在主机ARP高速缓存中维护着IP地址到硬件地址的映射表,并且会动态更新(新增或超时删除),ARP高速缓存表初始化的时候采用广播的方式(我的IP地址,我的硬件地址)
3.1.4、网际控制报文协议ICMP
ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告,以更有效地转发IP数据报和提高交付成功的机会。
ICMP报文装在IP数据包中,作为其中的数据部分。
种类:
- ICMP差错报告报文:终点不可达、时间超时、参数问题(数据报字段数据不正确)、路由重定向
- ICMP询问报文:回送请求和回答(测试是否可达)、时间戳请求和回答(可用于时间同步和测量)
应用举例:
- PING:分组网间探测ping,用来测试两台主机的连通性。使用到了ICMP回送请求和回答。注意:PING是应用层直接使用网络层的例子,所以并没有通过TCP或UDP.
- traceroute:用来跟踪一个分组从源点到终点的路径,能得到到达路径中每个路由器的往返时间。原理:通过发送一个无法交付的UDP数据包,并不断重发,TTL从1递增,目的主机最终会发送一个ICMP终点不可达差错报告报文。
3.2、分层次的路由选择协议
- 互联网的规模非常大。让路由器知道所有的网络如何到达所需的路由表太大,处理起来太花时间,交换路由时间的带宽也过大。
- 许多单位不愿意向外界透露本部门的路由选择协议,同时又想连上互联网。
于是互联网就划分了许多较小的自治系统(autonomous system),称为AS,本质就是单一技术管理下的一组路由器。
路由选择协议分为两大类:
- 内部网关协议IGP(Interior Gateway Protocol),即一个自治系统内部使用的协议,与其它自治系统无关,常用协议有 RIP 和 OSPF 协议
- 外部网关协议EGP(External Gateway Protocol),将路由选择信息在不同自治系统进行传递,常用的外部网关有BGP-4
3.2.1、内部网关RIP
(适合小网络)
RIP即路由信息协议,基于距离向量,最短跳数16视为不可达,比如(1,3,R)表示到达网络1的跳数为3,下一个路由是R.好消息传得快,坏消息传得慢。
3.2.2、内部网关协议OSPF
(适合大网络)
开放最短路径优先协议,基于Dijkstra的最短路径算法,坏消息能够快速收敛。划分为小的区域进行洪泛,直接使用IP数据包传送。
3.2.3、外部网关协议BGP
边界网关协议,是一种域间路由协议,互联网的规模很大,自治系统之间的路由选择非常困难。另外一些数据报为了安全不能通过国外的网络。基于路径向量选择协议,每个自治系统之间保证要有一个BGP代言人。
3.3、IP协议详解
《Linux高性能服务器编程》阅读笔记 之(二)IP 协议详解
3.3.1、IPv4头部结构
3.3.2、IP分片
当IP数据报的长度超过帧的mtu时(可通过ifconfig查看),他将被分片,并只在目标主机内核中的IP模块重新组装。分片和重组可由头部字段信息来判断:数据包标识、标志和片偏移
3.3.3、IP模块工作流程
3.3.4、IP路由机制
可通过route命令来查看路由表。
理解IP路由器原理及工作机制
如何根据IP地址路由到目标网络,分为三个步骤
- 1)查找路由表中和数据报中目标IP地址完全匹配的主机IP地址,如果找到就交给路由项,否则转 2)
- 2)查找具有相同网络ID,找到就交给路由项,否则转 3)
- 3)选择默认路由项,这通常意味着下一跳是网关(默认路由项)。所有访问internet的请求都将通过网关来转发
3.3.5、IP转发
不是所有的机器都有路由转发功能,可通过命令echo 1 > /proc/sys/net/ipv4/ip_forward
开启转发功能。
数据报子模块转发数据报的流程:
- 1)检查数据报头部的TTL值。如果TTL值已经是0,则丢弃。
- 2)判断是否是本机的某个IP地址,如果不是,发送ICMP源站选路失败给发送端。
- 3)如果有必要,给源站发送ICMP重定向报文,告诉它更合理的吓一跳路由器。
- 4)将TTL值减一
- 5)如果有必要,执行分片操作
3.3.6、IP重定向
ICMP重定向报文包含一下信息:
- 应该使用的路由器的IP地址
- 引起重定向的IP数据报的源端IP地址,以此更新路由表缓冲
3.3.7、IPv6
解决IPv4地址不够用,增加多播和流的功能;自动配置,网路安全。
3.4、划分子网
从两级IP到三级Ip地址,两级IP地址的缺陷:
- IP地址空间浪费。比如ABC类的主机课链接很多,但实际用的不多,造成浪费。
- 路由表变得太大。给每个物理网络分配网络号,导致路由表的项目数过多。
- 两级IP地址不灵活。开通新的网络就得先申请新的Ip地址,这段期间无法连接到网络。
于是增加了子网号字段,是两级Ip地址变成了三级IP地址,叫做划分子网,如{<网络号>,<子网号>,<主机号>},对外仍表现为同一个网络。
子网掩码
3.5、无分类编址CIDR(构造超网)
由于路由表的项目数太多,并且B类地址即将耗尽,引进了无分类域间路由选择CIDR(Classless Inter-Domian Routing),CIDR的两个主要特点:
- 1)CIDR消除了传统的A类、B类和C类地址以及子网的概念
- 2)CIDR把网络前缀都相同的连续的的IP地址组成一个”CIDR地址块“。我们只要知道地址块的任何一块地址,就可以地址快的起始地址和最大地址。
3.6、虚拟专用网VPN
- 由于IP地址紧缺,并且互联网不安全,机构内的主机很多不需要接入互联网。
- 假设机构内的计算机通信都是TCP/IP协议,那么有本机构自行分配IP地址,仅在机构内部有效,称为本地地址。
- 为防止本地地址和互联网中的IP冲突,指明了一些专用地址(private address),只在本机构有效,路由器对目的地址是专用地址的数据报一律不进行转发。如10.0.0到10.255.255.255,172.16.0.0到172.31.255.255,192.168.0.0到192.168.255.255
- 采用这样的专用地址的互联网叫做专用互联网或本地互联网,或者叫专用网。
- 当机构的部门分布世界各地,就需要利用公网的互联网作为本机构专用网之间的通信载体,这样的专用网又称为虚拟专用网VPN(Virtual Private Network)
- 如果两个专用网通信需要经过公用互联网的时候,所有通过互联网传送的数据都必须加密。使用IP隧道技术实现虚拟专用网,显然机构内至少有一个合法的全球IP地址即可。
3.7、网络地址转换NAT
- 由于路由器不会转发专用地址,当专用地址想要与互联网主机通信的时候,需要通过NAT路由器将其本地址转换成全球IP地址才能联网(当然该路由器本身至少得有一个全球IP地址),这就是网络地址转换NAT(Network Address Translation)。通俗来说就是公用一个公网IP
- 使用端口号的NAT也叫做网络地址与端口号转换NAPT(Network Address and port Translation)。由于端口号属于传输层,这违反了层次关系,导致NAPT曾遭受了一些诟病,但NAT(NAPT)依然成为互联网的一个重要组件。
参考
分类的IP地址
理解IP路由器原理及工作机制
《Linux高性能服务器编程》阅读笔记 之(二)IP 协议详解
划分子网的方法