第四章 IP协议
1. IP即网际协议
-
IP相当于OSI参考模型中的第3层
数据链路层的作用是在互连同一种数据链路的节点之间进行包传递。
而一旦跨越多种数据链路就需要借助网络层。
另,
粗略地说,有IP地址的就叫”主机“
准确的说,将那些配有IP地址但是不进行路由控制的设备叫做“主机”
将有IP地址并且有路由控制能力的设备叫做”路由器“
节点就是主机和路由器的统称 -
网络层和数据链路层的关系
数据链路层负责提供直连两个设备之间的通信功能
IP负责在没有直连的两个网络之间进行通信传输
2. IP基础知识
-
IP地址属于网络层地址
IP地址用于在”连接到网络中的所有主机中识别出进行通信的目标地址“
不论主机和哪种数据链路相连,其IP地址形式都保持不变
另外,数据链路层或物理层的数据包转发设备中,不需要设置IP地址。 -
路由控制
路由控制是指将分组数据发送到最终目标地址的功能
网络中数据链路层以下分层的功能传输数据帧的一个区间就叫做”一跳“
IP包就是在网络中一个个跳之间被转发。因此IP路由叫做多跳路由。每一个区间都决定着下一跳被转发的路径
多条路由就是指路由器或主机在转发IP数据包时只制定下一个路由器或主机
所以这种方式”极其偶然(Ad Hoc)“
所有主机都维护着一张路由控制表,这个表记录了IP数据在下一步应该发给哪个路由器(比如会写,目标网络是X的话,就把数据包发给路由器C) -
数据链路的抽象化
数据链路根据种类的不同各有特点,最大的区别就是它们各自的最大传输单位(MTU)不同
IP为了抽象,进行了分片处理:将较大的IP包分解为多个较小的IP包。这样就直接忽略了不同的MTU,只需要按照源地址发送的长度来接受数据包。 -
IP属于面向无连接型
即发包之前不需要建立与对端目标地址之间的连接
所以要接受包需要进行网络监控,否则可能错过一些应该收到的包。
这样面向无连接会造成很多冗余的通信
为了保证可靠性就要靠TCP了
至于为什么不在IP中直接保证连接是因为
- 简化
- 提速
另外,分层之后每一层负责一定的功能方便维护和优化
3. IP地址的基础知识
-
IP地址的定义
IP地址在计算机内部一般以二进制的方式被处理
实际上,IP地址并非是根据主机台数来配置的,而是每一台主机上的每一块网卡(NIC)都要设置IP地址。其实一块网卡可以配置多个IP地址。另外一个路由器至少配置了两块网卡。
这是IP地址其实不够用的原因之一。 -
IP地址由网络和主机两部分标识组成
IP地址由网络地址以及主机地址两部分组成
网络地址保证每个段的地址不重复,而相同段内相连的主机有相同的网络地址,主机地址不允许在同一网段内重复出现。
IP包转发到某路由器的时候,就是利用IP地址的网络地址进行路由的,只要看到网络地址就知道是否是该网段的主机。
区分网络地址和主机地址的方式一开始是通过地址分类来的,后来(现在)基本采用了子网掩码来区分。当然,前一种方式依然存在。 -
IP地址的分类
IP地址分为4个级别,根据IP地址中从第一位到第四位的比特列对其网络标识和主机标识进行区分。
另外,主机地址不可以全部为0或全部为1,。
全部为0标识对应的网络地址或IP地址不可获知。
全部为1标识主机地址是作为广播地址的。
- 广播地址
把主机地址全部设为1 就成了广播地址
有两种广播方式:
- 本地广播
就是在本链路上进行广播。由于路由器会屏蔽有广播地址的IP包,所以不会传出去 - 直接广播
就是发出去。由于直接广播有安全问题,因此大多数情况路由器上会设置不转发
-
IP多播
由于广播无法穿透路由,要对多个设备发送且不想造成信息冗余,就会使用多播。
使用D类地址就是多播地址了。前四位是1110,后28位就可以组成多播的组编号。
-
子网掩码
分类会造成IP地址的浪费。
因为网络地址相同的计算机必须属于同一个链路。比如B类IP网络,理论上一个链路里允许使用6万5000(2^16)个计算机相互连接,但是实际上不会有那么多的计算机连接进去,所以就造成了大量的浪费。
利用子网掩码就可以减少这种网络资源的浪费。
即多网络地址和主机地址的区分方式用过子网掩码定义。
子网掩码也是32位的二进制数。它对应网络地址的部分全部是1,对应主机地址的部分全部是0.
即其可以自由地定义自己的网络地址的长度。
子网掩码有两种表示方式:
-
CIDR和VLSM
采用任意长度分割IP地址的网络地址好主机地址就加作CIDR。利用CIDR就可以把多个C类地址划分到一个较大的网络内:
后来,由于子网掩码被设定之后,域内所有子网掩码都要使用相同的。但是某些部门可能要50台计算机,有些要500台,这就需要子网掩码可以改变。于是产生了VLSM(可变长子网掩码)
这样IP地址利用率至少提升50% -
全局地址和私有地址
起初,IP地址必须唯一,否则会产生冲突。但是IP地址不足的问题日益严重。此时一些不会接入互联网的主机的IP地址就可以一样,这样可以缓解IP地址不够的问题。
于是出现了私有网络的IP地址。
后来还产生了私有IP和全局IP互换的NAT技术。
因此,私有地址可以重复,但是全局地址不行。 -
全局地址由谁决定
ISP会代理申请
不过现在普遍的方式是在LAN中设置私有地址,再通过NAT实现和互联网通信。
当然,如果公司这样的,完全内网不需要接入互联网,就只使用私有地址就可以了。
4. 路由控制
数据发送过程中需要”指明路由器或主机“信息。保存这个信息的就是路由控制表。
路由控制表有两种:静态路由控制和动态路由控制
IP协议本身没有定义制作路由控制表的协议,该表是由”路由协议“的协议制作而成。0
-
IP地址和路由控制
发送IP包时,先确定IP包首部中的目标地址,再从路由控制器中找到和该地址有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。若该路由器有多条相同网络地址的记录,就选择一个最吻合的网络地址(即相同位数最多)
- 默认路由是指路由表中任何一个地址都可以与之匹配的记录(一般标记为0. 0. 0. 0/0 或者 default)
- 主机路由是整个IP地址参与路由(192.168.153.15/32就是一种主机路由)
- 环回地址是同一台计算机上的程序之间进行网络通信时使用的一个默认地址(127.0.0.1 / localhost)
-
路由控制表的聚合
5. IP分割处理与再构成处理
- 数据链路不同,MTU则相异
由于不同数据链路的使用目的不一样,因此最大传输单元(MTU)就不一样。 - IP报文的分片和重组
经过路由器的时候,发现无法在一帧中发送出去,路由器就会将该数据划分之后再发出
最后的重装是在目标主机处 - 路径MTU发现
分片机制有很多不足。主要是使得路由器的处理负荷加重。而且分片处理的时候一个分片丢失会造成整个IP数据报作废。
因此,为了应付这些问题,产生了新的技术叫“路径MTU发现“(即在发送主机处划分为路径中存在的所有数据链路中最小的MTU):
就是先把数据发出去,当发现一帧无法装下的时候,路由器不进行分片,而是直接丢弃数据,返回ICMP告知主机MTU的大小,然后主机得知后就在主机处进行分片处理,使得每一个分片大小小于MTU。如此往复,直到最后没有ICMP告知消息就是分片大小合理了。
该MTU路径最多可以缓存10min,过了就又要探索。
6. IPV6
-
必要性
IPV4地址耗尽,所以要换。
但是替换所有IP地址会是更加艰巨的任务。 -
IPV6 的特点
很多 见书P144 -
IPV6中IP地址的标记方法
128位,表示的数字高达38位数
一般人们将128bit IP地址以每16bit为一组,每组用:隔开标记,如果碰到连续的0可以省略并用::隔开
比如:
1080:0:0:0:8:800:200C:417A
1080::8:800:200C:417A
-
IPV6结构
和IPV4一样,通过IP地址的前几位标识IP地址的种类 -
全局单播地址
全局单播地址是指世界上唯一的一个地址 -
链路本地单播地址
用于不经过路由器,在同一个链路中的通信 -
唯一的本地地址
不进行互联网通信时所使用的地址 -
IPV6分段处理
只在作为起点的发送端主机上进行,路由器不参与分片
因此必须进行”路径MTU发现“
由于IPV6中最小MTU是1280字节,因此对于那些cpu或内存受到限制的发送主机,就直接以1280字节发出。