网络层
与网际协议IP配套的协议有:
地址解析协议 ARP(Address Resolution Protocol)
网际控制报文协议 ICMP(Internet Control Message Protocol)
网际组管理协议 IGMP(Internet Group Management Protocol)
IP数据报的格式
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度共20字节,是所有IP数据报所必须具有的,在首部的固定部分的后面的一些可选字段长度是可变的。
版本:占4位,指IP协议的版本
首部长度:占4位,因此最大值为15。值为1表示的是1个32位字的长度,也就是4字节。因为首部固定长度为20字节,因此该值最小为5。如果可选字段的长度不是4字节的整数倍,就用尾部的填充部分来填充。
区分服务:占8位,用来获得更好的服务,一般情况下不使用。
总长度:包括首部长度和数据部分长度
标识:在数据报长度过长而需要分片时,相同数据报的不同分片具有相同的标识符。
标志:占3位。标志字段中的最低位记为MF,MF=1表示后面还有分片,当MF=0时表示当前数据报已经是最后一个;标志字段中间的一位记为DF,只有当DF=0时才允许分片。
片偏移:占13位。指出较长的分组在分片后,某片在原分组中的相对位置
生存时间:占8位,定义数据报在网络中的寿命,防止无法交付的数据报无限制的在互联网中兜圈子。
协议:指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等
首部检验和:占16位。只检验数据报的首部,但不包括数据部分。不检验数据部分可减少计算的工作量。
源地址:占32位
目的地址:占32位
IP地址的编址方法:分类的IP地址、子网的划分、构成超网
分类的IP地址:由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。IP地址 ::= {< 网络号 >, < 主机号 >}
子网的划分:通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。子网掩码的作用是找出数据报所要转发的子网地址,将子网掩码与数据报的目的地址逐位相与,便可得出子网的网络地址。注意外网是看不到子网存在的。
构造超网(无分类编址CIDR)
无分类编址CIDR消除了传统A类、B类和C类地址以及划分子网的概念,使用网络前缀和主机号来对IP地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块。CIDR的地址掩码也称为子网掩码,斜线记法中,斜线后面的数字就是地址掩码中1的个数
一个CIDR地址块中有很多地址,一个CIDR表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网 。
地址解析协议 ARP
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。ARP实现由IP地址得到MAC地址。
每个主机都有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到MAC地址的映射表。如果主机A知道主机B的IP地址,但是ARP高速缓存中没有该IP地址到MAC 地址的映射,此时主机A通过广播的方式发送ARP请求分组,主机B收到该请求后会发送 ARP 响应分组给主机A告知其MAC地址,随后主机A向其高速缓存中写入主机B的IP地址到 MAC 地址的映射。ARP解决的是同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
网际控制报文协议 ICMP
ICMP是为了更有效地转发IP数据报和提高交付成功的机会。它封装在IP数据报中,但是不属于高层协议。
ICMP 报文分为差错报告报文和询问报文。
网际组管理协议IGMP
IGMP协议让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组,并配合多播路由选择协议完成多播任务。IGMP的工作主要分为两个阶段:
第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组关系转发给互联网上的其他多播路由器。
第二阶段:组成员关系是动态的。本地多播路由器要周期性的探寻本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。
虚拟专用网 VPN
由于IP地址的紧缺,一个机构能申请到的IP地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的IP地址(专用地址)。VPN使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指好像是,而实际上并不是,它有经过公用的互联网。
下图中,场所A和B的通信经过互联网,如果场所A的主机X要和另一个场所B的主机Y通信,IP数据报的源地址是10.1.0.1,目的地址是10.2.0.3。数据报先发送到与互联网相连的路由器R1,R1对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器R1的全球地址125.1.2.3,目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为10.2.0.3,就交付给Y。
网络地址转换 NAT
专用网内部的主机使用本地IP地址又想和互联网上的主机通信时,可以使用NAT来将本地 IP转换为全球IP。在以前,NAT将本地IP和全球IP 一一对应,这种方式下拥有n个全球IP地址的专用网内最多只可以同时有n台主机接入互联网。为了更有效地利用全球IP地址,现在常用的NAT转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球IP地址。使用端口号的NAT也叫做网络地址与端口转换NAPT。
路由器的结构
路由器从功能上可以划分为:路由选择和分组转发。分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
路由器分组转发的流程
从数据报的首部提取目的主机的IP地址D,得到目的网络地址N。若N就是与此路由器直接相连的某个网络地址,则进行直接交付;若路由表中有目的地址为D的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;报告转发分组出错。
路由选择协议
路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。互联网可以划分为许多较小的自治系统AS,一个AS可以使用一种和别的AS不同的路由选择协议。可以把路由选择协议划分为两大类:
自治系统内部使用的路由选择协议:RIP和OSPF
自治系统外部使用的路由选组协议:BGP
内部网关协议RIP:RIP是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为1。跳数最多为15,超过15表示不可达。RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。
距离向量算法
①对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加1。每一个项目都包括目的网络N,距离d,以及下一跳的路由器X;
②对修改后的 RIP 报文中的每一个项目,进行以下步骤:
1)若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
2)否则(即在路由表中有目的网络N,这时就再查看下一跳的路由器地址):若下一跳路由器地址是 X,则把收到的项目替换原路由表中的项目;
3)否则(即这个项目是:到目的网络N,但下一跳路由器不是X):若收到的项目中的距离d小于路由表中的距离,则进行更新,否则什么也不做。
③若3分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为16。
缺点:RIP协议实现简单,开销小。但是RIP能使用的最大距离为15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。
内部网关协议OSPF
开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。开放表示OSPF不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。
OSPF具有以下特点:
1)采用洪泛法向本自治系统中的所有路由器发送信息。
2)发送的信息就是本路由器与所有相邻路由器的链路状态,链路状态包括与哪些路由器相邻以及链路的度量,该度量表示费用、距离、时延、带宽等信息。
3)只有当链路状态发生变化时,路由器才会发送信息。
外部网关协议BGP
AS之间的路由选择困难的原因在于:
第一,互联网的规模太大,使得自治系统AS之间路由选择非常困难
第二,各个AS内部使用不同的路由选择协议,无法准确定义路径的度量;
第三,各个AS之间的路由必须考虑有关的策略,比如有些AS不愿意让其他AS经过
BGP 只能寻找一条比较好的路由,而不是最佳路由。每个AS都必须配置BGP发言人,通过在两个相邻BGP发言人之间建立TCP连接来交换路由信息。