
网络层提供的两种服务
- 电信网:面向连接,可靠传输,虚电路
 - 因特网:网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务

 
网际协议IP
- 是TCP/IP体系中最重要的协议之一
 - 配套使用另外三个协议:
- 地址解析协议ARP
 - 网际控制报文协议ICMP
 - 网际组管理协议IGMP
 
 - IP使用ARP,ICMP和IGMP使用IP
 
虚拟互联网络
- 中间设备
- 物理层:转发器
 - 数据链路层:网桥或桥接器
 - 网络层:路由器
 - 网络层以上:网关
 
 - 利用IP协议使性能各异的网络在网络层上看起来好像是一个统一的网络
 
分类的IP地址
IP地址及其表示方法
- 编址方法的三个阶段
- 分类的IP地址
 - 子网的划分
 - 构成超网
 
 
分类IP地址
- 由两个固定长度的字段组成:网络号和主机号
 - 一个IP地址在整个因特网范围内是唯一的
 - 由ICANN进行分配,32位标识符
 - A,B,C类地址分别是1,2,3字节长,网络号字段的最前面有1~3位的类别位,数值分别是0,10,110
 - 一共4个字节长
 - D类地址用于多播,前四位是1110;E类地址保留为今后所用,前四位是1111
 - 现在已经用无分类IP地址,不使用这种方法了
 - IP地址不仅仅指明一个主机,还指明主机所连接到的网络
 - 点分十进制记法:每八位插入一个点,把二进制换为十进制
 - IP地址指派范围

 - 特殊IP地址

 - IP地址特点
- IP地址管理机构只分配网络号
 - 路由器仅根据网络号转发分组,减少路由表的空间和查表时间
 - 主机连接到两个网络以上时,就具有两个相应的IP地址
 - 用转发器或网桥连接起来的若干个局域网仍为一个网络
 - 路由器有两个或两个以上的IP地址
 
 
IP地址与硬件地址
- IP地址放在IP数据报的首部,硬件地址放在MAC帧的首部
 - 数据链路层看不见数据报的IP地址
 - 路由器只根据目的站的IP地址的网络号进行路由选择
 - IP数据报的源地址和目的地址一直不改变
 - MAC帧在不同网络传送时,首部中的源地址和目的地址要发生变化,但IP层却不知道
 
地址解析协议ARP
- 知道一个机器的IP地址来找出硬件地址
 - 解决方法是:在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,这个映射表经常动态更新
 - 每个主机都有ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表
 - 具体过程:
- 主机A向本局域网的B发送数据报时,在ARP cache中看有没有B的IP地址,有的话查出硬件地址,改写MAC帧的源地址和目的地址,发送这个MAC帧
 - 如果没有(B刚入网,A刚加电,高速缓存是空的),运行ARP,找出硬件地址
 
 - ARP运行
- ARP进程在本局域网广播发送ARP请求分组,包含的信息:主机的IP地址和硬件地址,需要知道某个IP地址的硬件地址
 - 局域网内所有主机都接受到,如果其他主机的IP地址和请求分组请求的IP地址不一样,就不理睬
 - 如果IP地址和请求的IP地址一致,接受这个请求分组,并向源主机发送相应分组,包含信息:IP地址和硬件地址。这是一个单播
 - 源主机接收到响应分组后,向高速缓存中写入映射
 - 目的主机也会把源主机中的请求分组中的映射写入高速缓存
 
 - 每一个映射项目都有生存时间,10~20分钟
 - ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题
 - 不在同一个局域网上的是通过路由器的转发表,找出下一跳的路由器,然后才用ARP找出下一跳的路由器的硬件地址
 - 为何需要IP地址和ARP来找出硬件地址?直接硬件地址转发不好吗?
- 世界上有各种网络,使用不同的硬件地址
 - 由于1,主机和用户需要非常复杂的硬件地址转换工作,不可能
 
 
IP数据报的格式
- 以4个字节为单位进行描述
 - 由首部和数据两部分组成。首部前一部分是固定长度,20字节;后面是可选字段,长度可变
 
IP数据报首部的固定本分中的各字段
- 版本:4位,IP协议的版本(IPv4或IPv6)
 - 首部长度:4位,单位是32位字(4字节),所以最小值是5(IP首部长度为20字节),最多15,60字节。最常用就是5,(0101)
 - 区分服务:8位,使用区分服务才用
 - 总长度:16位,首部和数据之和的长度
- 由于数据链路层的最大传送单元MTU的限制,如果传送的数据报长度超过MTU,那么必须分片
 - IP数据报越短,路由器转发越快
 - IP数据报越长,传输效率越高
 - 分片后总长度代表分片后每一个分片的首部长度与该分片的数据长度的总和
 
 - 标识(identification):16位,使分片后的各数据报片能正确地重装,存放着IP软件在存储器中的计数器的值,计数器每产生一个数据报就加1
 - 标志(flag):3位,两位有意义
- 最低位是MF(More Fragment)。MF=1代表还有分片,MF=0代表这是数据包片中的最后一个
 - 中间一位是DF(Dont’t Fragment)。不能分片,DF=0时才允许分片
 
 - 片偏移:13位,较长的分组在分片后,某片原分组中的相对位置。以8个字节为单位
- 计算:先确定首部长度(一般是20字节),然后划分数据长度
 - 片偏移 = 数据开始的字节号 / 8
 - 要修改有关字段的值:总长度,MF,DF,片偏移
 - 如果某个报片经过某个网络还需要分片,片偏移计算公式仍然不变
 
 - 生存时间:8位,TTL,数据报在网络中的寿命。防止无法交付的数据报无限制地在因特网中兜圈子。以前是以秒作为单位,TTL为0时丢弃;如今是跳数限制,表明可以经过多少个路由器,最多255。设置为1代表只能在局域网中传送。为0时被路由器丢弃。
 - 协议:8位,指出此数据报携带的数据是何种协议。IP是4,TCP是6,UDP是17,IPv6是41
 - 首部检验和:16位,只检验数据报首部,不包括数据部分;不使用CRC,另外一种算法:
- 首部分为16位字的序列,检验和字段置为0
 - 反码运算把16位字相加后,得到的和的反码写入检验和字段
 - 接收方做同样的事,(但这时检验和不是0),如果16位字相加后的反码是0说明没有差错,否则丢弃
 
 - 源地址:32位
 - 目的地址:32位
 
IP层转发分组的流程
- 分组在互联网上转发分组时,是从一个路由器转发到下一个路由器
 - IP数据报最终一定可以找到目的主机所在目的网络上的转发器
 - 只有到达最后一个路由器时,才向目的主机进行直接交付
 - 分组转发算法
- 从数据报首部提取目的主机IP地址D,得出网络地址N
 - 如果N就在与路由器相连的某个网络地址,直接交付(ARP转换为硬件地址,封装MAC帧,发送帧),否则简介交付
 - 如果有目的地址为D的特定主机路由,就传送数据报给路由指明的下一跳路由器
 - 如果有到N的路由,就传送数据报给路由指明的下一跳路由器
 - 如果有默认路由,就传送数据报给路由指明的默认路由器
 - 报告转发出错
 
 
划分子网和构造超网
划分子网
为何划分
- IP地址空间利用率有时候很低
 - 给每一个物理网络分配一个网络号会使路由表变得太大使网络性能变坏
 - 两级IP地址不够灵活
 
划分子网思路
- 单位可以将物理网络划分为若干个子网,对外仍然表现为一个网络
 - 划分的方法是从网络的主机号借用若干位作为子网号
IP地址 ::= { <网络号>, <子网号>, <主机号> } - 路由器仍然根据IP数据报的目的网络号找到路由器,但路由器接收到后,按照目的网络号和子网号找到目的子网,再将IP数据报交给主机
 
子网掩码
- 不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位与运算,就能得出网络地址
 - 如果一个网络不划分子网,那么子网掩码就使用默认子网掩码
 - 默认子网掩码就是分类地址中的网络号全为255,其余为0:A类:255.0.0.0,转为二进制就是
11111111|00000000|00000000|00000000。C类就是255.255.255.0 - 子网划分有多种方法,确定好子网号的位数就能求出子网掩码和子网数,每个子网的主机数:(B类地址为例,使用固定长度子网)
- 子网号位数为2,说明子网掩码是:
11111111|11111111|11000000|00000000 - 也就是255.255.192.0
 - 子网数是
11这两位取所有的取值,00011011 - 由于不能有全0和全1的情况,所以子网数为2,也就是2^n-2种子网
 - 子网的主机数:
000000|00000000这里取最大值减去2,16382 
 - 子网号位数为2,说明子网掩码是:
 - 现在全1和全0的子网号也可以使用
 - 划分子网增加了灵活性,却减少了能够连接在网络上的主机总数
 - 同样的IP地址和不同的子网掩码可以得出相同的网络地址
 
使用子网时分组的转发
- 使用子网划分后,路由表必须包含:目的网络地址,子网掩码,下一跳地址
 - 和之前的分组转发算法不同的是:分析转发表中的地址时,用各网络的子网掩码和目的IP地址逐位与操作,看是否与网络地址匹配
 
无分类编址CIDR(构成超网)
网络前缀
- 由变长子网掩码VLSM研究而来,正式名称是无分类域间路由选择CIDR
 - 消除了A,B,C类地址和子网划分的概念
 - 32位地址划分为网络前缀和主机号,还使用斜线记法,斜线后面是网络前缀所占的位数
128.14.35.7/20 = 10000000 00001110 00100011 00000111
前20位是网络前缀 - 网络前缀都相同的连续IP地址组成CIDR地址块
 - 求最大地址和最小地址:主机号都置0和置1之间的范围
 - CIDR使用32位的地址掩码,也可以称为子网掩码,斜线后面的数字就是地址掩码中1的个数
 - 路由聚合:由于一个CIDR地址块中有很多地址,所以在路由表中利用CIDR地址块查找目的网络,地址的聚合称为路由聚合,也叫构成超网
 - 能有效分配IPv4的资源,一般地址块包含多个C类地址
 
最长前缀匹配
- 路由表项目改变:由网络前缀和下一跳地址组成
 - 由于查找路由表会有多个结果,选择的时候是从匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配
 - 将目的IP地址和路由表中的项目的掩码逐位相与,查看哪个匹配最长
 
二叉线索查找路由表
- 把路由表存放在二叉线索中,自上而下按层次进行查找
 - 搜索到叶节点时将目的地址和该叶子节点的子网掩码进行按位与运算看是否匹配
 - 为了提高技术还是用了压缩技术