写在前面:最近的事情有些多,学习的进度又慢下来了= =,而且自己也有点懒了,还是不能松懈啊。IP的学习主要是对于许多结构与定义的记忆,而IPv4与IPv6的首部主要是根据结构图来记忆理解,要注意
第四章 IP协议
4.1 IP即网际协议
-
4.1.1 IP相当于OSI参考模型的第三层(网络层)
- (1)定义:网络层的主要作用是“实现终端节点之间的通信”,这种终端节点之间的通信也叫“点对点通信”。
- (2)互通:数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递,跨数据链路传递是网络层的功能
- (3)主机与路由器与节点:
主机:配置有IP地址,但是不进行路由控制(中转分组数据包)的设备;
路由器:既配有IP地址又具有路由控制能力的设备;
节点:主机和路由器这种有IP地址的设备的统称
-
4.1.2 网络层与数据链路层的关系
- 数据链路层提供直连两个设备之间的通信功能,网络层则负责在没有直连的两个网络之间进行通信传输。换句话说,网络层是主机AB之间连接过程的行程表,数据链路层主机AB之间连接过程中,各个通信过程设备之间的连接
4.2 IP基础知识
-
IP分为三大作用模块:IP寻址、路由以及IP分包与组包
-
4.2.1 IP地址属于网络层地址
- IP地址只应用于网络层,与数据链路层和物理层(两者只转发网络层传来的数据而不是解析)无关,其用于在“连接到网络中所有主机中识别出进行通信的目标地址”,从而在TCP/IP通信中所有主机或路由器必须设定自己的IP地址
-
4.2.2 路由控制
- (1)定义:将分组数据发送到最终目标地址的功能
- (2)一跳(Hop):网络中的一个区间,IP包正是在网络中的一个个跳间被转发。而跳的定义为“主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间”。
- (3)多条路由:路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将最终目标地址为止的所有通路全部指定出来(其中的过程都是在极其偶然的情况进行传输,即在各跳间无计划传输,直到成功)
- (4)路由控制表:记录IP数据在下一步应该发给哪个路由器,其一般采用动态路由的方式来维护该表。当接收到的目标IP为表中没有的IP地址时,不会像地址转发表中的广播信息反馈学习一样,而是选择丢弃掉该包,并返回“信息不可达”之类的报文
-
4.2.3 数据链路的抽象化
- (1)抽象化:IP是实现多个数据链路之间通信的协议,其将不同数据链路的相异特性进行了抽象化
- (2)数据链路的最大传输单位MTU:这是不同数据链路最大的区别,可以理解为运输过程中所用包裹类型能装下的最大容量,其中以太网的MTU为1500字节,FDDI的为4352字节,ATM的为9180字节。为了在数据链路中稳定传输,网络层会根据IP包的大小,对其进行分片处理发给数据链路层
-
4.2.4 IP属于面向无连接型
- (1)TCP与IP分工明确:IP只负责“尽最大努力地”将数据发给主机,TCP负责保证对端主机确实接收到数据(验证收到情况、进行重发等等)
- (2)明确的意义:定义每层协议的作用和责任后,针对每层具体的协议进行编程会更加有利于该协议的实现
4.3 IP地址的基础知识
-
4.3.1 IP地址的定义
- IP地址由32位二进制数表示,常规为将32位的IP地址以每8位一组,分成4组,每组以“.”隔开,再将各个8位的二进制数转换为十进制数
- IP地址由32位二进制数表示,常规为将32位的IP地址以每8位一组,分成4组,每组以“.”隔开,再将各个8位的二进制数转换为十进制数
-
4.3.2 IP地址由网络和主机标识两部分组成
- 相互连接的每个网段的地址不相重复,而相同网段内相连的主机必须有相同的网络地址,而IP地址的主机标识不能在同一个网段内重复出现
-
4.3.3 IP地址的分类
- 任何种类的网络地址的最大值与最小值为保留地址;
任何种类的主机地址全为0和全为1时属于保留地址 - (1)A类地址:0.0.0.0 ~ 127.0.0.0,网络地址个数(27-2),主机地址个数(224-2)
- (2)B类地址:128.0.0.0 ~ 191.255.0.0,网络地址个数(214-2),主机地址个数(216-2)
- (3)C类地址:192.0.0.0 ~ 223.255.255.0,网络地址个数(221-2),主机地址个数(28-2)
- (4)D类地址:224.0.0.0 ~ 239.255.255.255,网络地址个数(228-2),主机地址个数为0,常用于多播
- 任何种类的网络地址的最大值与最小值为保留地址;
-
4.3.4 广播地址
- (1)定义:主机地址全设为1,即为广播地址;主机地址全设为0,表示对应的网络地址或IP地址不可获知
- (2)本地广播:在广播源所在的本地网段上对所有主机进行广播
- (3)直接广播:在不同网络之间的广播
-
4.3.5 IP多播
- (1)定义:用于将包发送给特定组内的主机
- (2)IP多播和地址:多播使用D类地址,并且所有主机应该处于224.0.0.1的组内,所有路由器应该处于224.0.0.2的组内,这代表着多播的地址分配已经被限定了
-
4.3.6 子网掩码
- (1)定义:将原IP地址中表示主机地址的部分用作子网地址,其对应IP地址网络标识部分的位全部为1,对应IP地址主机标识的部分则全部为0,从而IP地址不再受限制于自己的类别,而是可以自由地定位自己的网络标识长度
- (2)表示形式:IP地址与子网掩码两行表示,或者在每个IP地址后面追加网络地址的位数用“/”隔开
- (1)定义:将原IP地址中表示主机地址的部分用作子网地址,其对应IP地址网络标识部分的位全部为1,对应IP地址主机标识的部分则全部为0,从而IP地址不再受限制于自己的类别,而是可以自由地定位自己的网络标识长度
-
4.3.7 CIDR与VLSM
- (1)CIDR:采用任意长度分割IP地址的网络标识和主机标识
- (2)VLSM:随机修改组织内各个部门的子网掩码长度的机制
-
4.3.8 全局地址与私有地址
- (1)私有地址与全局地址定义:不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址,其地址范围如上图。除此之外的其他IP均为全局地址
- (2)运用:许多家庭、公司和学校采用在每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP地址的方法。而如果配有私有地址的主机联网时,则通过NAT(网络地址转换)进行通信
- (1)私有地址与全局地址定义:不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址,其地址范围如上图。除此之外的其他IP均为全局地址
-
4.3.9 全局地址由谁而定
- 专门机构申请管理,而如今的主要方法为在LAN中设置私有地址,通过少数设置全局IP地址的代理服务器结合NAT的设置进行互联网通信
4.4 路由控制
-
路由控制表是路由控制的核心,其设置方式分为静态和动态路由控制,协议控制位”路由协议“;
对于IP协议来说始终认为路由表是正确的,凡是路由表中没有对应的数据全部丢弃 -
4.4.1 IP地址与路由控制
- (1)路由控制表匹配原则:最长匹配,即优先匹配相同位数最多的网段
- (2)默认路由:指路由表中任何一个地址都能与之匹配的记录,表示为0.0.0.0或default(其没有IP地址)
- (3)主机路由:IP地址/32(其没有主机地址),表示整个IP地址的所有位都将参与路由,多被用于不希望通过网络地址路由的情况
- (4)环回地址:在同一台计算机上的程序之间进行网络通讯时所使用的一个默认地址,常为127.0.0.1(localhost),使用IP或主机名时,数据包不会流向网络
-
4.4.2 路由控制表的聚合
- 利用网络地址的比特分布(通过位数不同时的相似性进行聚合)有效地进行分层配置
4.5 IP分割处理与再构成处理
-
4.5.1 数据链路不同,MTU则相异
- 每种数据链路的最大传输单元MTU不同,而IP抽象化了底层的数据链路,对IP来说,最小为68字节,最大为65535字节
-
4.5.2 IP报文的分片与重组
- IP将数据根据MTU进行分片处理,而分片的重组只能由目标主机进行
-
4.5.3 路径MTU发现
- (1)路径MTU:从发送端主机到接收端主机之间不需要分片时最大MTU的大小,即路径中存在的所有数据链路中最小的MTU
- (2)路径MTU发现过程:发送时IP首部的分片设置为不分片,而反馈的ICMP将在被MTU较小的数据链路丢包后通知应分片的MTU,然后根据TCP/UDP各自的特性(TCP在传输层即完成数据分割,UDP在网络层通过IP分片完成数据分割)再发送数据,直至得到最终能到达目标主机的MTU
4.6 IPv6
-
4.6.1 IPv6的必要性
- 为根本解决IPv4地址耗尽的问题而提出的新协议
-
4.6.2 IPv6的特点
- 扩大与路由控制表的聚合,包首部长度固定40字节,路径MTU发现只由发送主机处理(IPv4为当前发送节点处理),即插即用(无DHCP也可自动分配IP地址)等
-
4.6.3 IPv6中IP地址的标记方法
- 共128位二进制数,每16bit为一组分为8组,每组用冒号:隔开,连续的0用只能用一次的双冒号::隔开
- 共128位二进制数,每16bit为一组分为8组,每组用冒号:隔开,连续的0用只能用一次的双冒号::隔开
-
4.6.4 IPv6地址的结构
- 其基本结构类似IPv4,均有网络标识和主机标识
- 其基本结构类似IPv4,均有网络标识和主机标识
-
4.6.5 全局单播地址
- (1)定义:世界上唯一的一个地址,可以保证每个设备都有一个独一无二的地址
- (2)结构:n = 48,m = 16 以及 128 - n - m = 64,即前64bit为网络标识,后64bit为主机标识;而接口ID通常保存64bit版MAC地址,但某些情况也只能用临时地址
-
4.6.6 链路本地单播地址
- 链路本地单播地址是指在同一个数据链路内唯一的地址,其用于不经过路由器,在同一个链路中的通信。接口ID通常保存64bit版MAC地址
- 链路本地单播地址是指在同一个数据链路内唯一的地址,其用于不经过路由器,在同一个链路中的通信。接口ID通常保存64bit版MAC地址
-
4.6.7 唯一本地地址
- 不进行互联网通信时所使用的地址,用于私密度较高的内网中
- 不进行互联网通信时所使用的地址,用于私密度较高的内网中
-
4.6.8 IPv6分段处理
- IPv6的分片处理只在作为起点的发送端主机进行,路由器不参与分片(MTU发现为其核心),而IPv6的最小MTU为1280字节(对于某些性能较差的机器,可以直接以其开始)
4.7 IPv4首部
-
IPv4的首部结构信息
-
(1)版本(Version):4bit组成,有IP,ST,IPv6等
-
(2)首部长度(IHL:Internet Header Length):4bit组成,每bit单位表示4字节长度。默认为5,即默认IP长度为20字节
-
(3)区分服务(TOS:Type Of Service):8bit组成,表明服务质量,但使用度很低,可被划分为DSCP段和ECN段
-
(4)DSCP段和ECN段:
- ① DSCP(Difference Services Codepoint,差分代码服务点):5bit组成,进行质量控制。当35位的值为0,02位则被称作类别选择代码点,值越大优先度越高;第5位为1时,表示实验或者本地使用
- ② ECN(Explicit Congestion Notification,显示拥塞通告):2bit组成,用来报告网络拥堵情况,均分为ECT和CE,ECT为1时表示通告上层TCP协议处理ECN,CE为1时表示遇上了网络拥堵
-
(5)总长度(Total Length):16bit组成,IP首部与数据部分合起来的总字节数(最大为65536,即2^16字节),直接按二进制存数
-
(6)标识(ID:Identification):16bit组成,用于分片重组,同一个分片的标识相同
-
(7)标志(Flags):3bit组成,第0位必须为0(未使用),第1位指示是否分片(0可以分片,1不可分片,第2位表示是否为最后一个包(0为最后的包,1为分片中段的包)
-
(8)片偏移(FO:Fragment Offset):13bit组成,标识被分片的每一个分段相对于原始数据的位置。初始值为0
-
(9)生存时间(TTL:Time To Live):8bit组成,实际指可以中转多少个路由器,每中转1次减1,为0时丢包
-
(10)协议(Protocol):8bit组成,表示IP包传输层的上层协议编号
-
(11)首部检验和(Header Checksum):16bit组成,其只校验数据包的首部,不校验数据部分;
校验方式:① 发送时:将首部检验和首先设置为0,以16bit为单位划分IP首部,迭代相加直至结果为16bit(两个十六进制数),对其取反;
② 接收时:以16bit为单位划分IP首部,迭代相加直至结果为16bit(两个十六进制数),确认得到的结果是否为FFFF(即全为1) -
(12)源地址和目标地址(Source/Destination Address):各为32bit组成,发送端和接收端的IP地址
-
(13)可变项(Options):长度可变,通常用于实验或诊断时(如安全级别,源路径,路径记录)
-
(14)填充(Padding):向该字段填充0使IP首部长度为32bit的整数倍
4.8 IPv6首部格式
- IPv6的首部信息结构
- (1)版本(Version):4bit组成,同IPv4
- (2)通信量类(Traffic Class):8bit组成,同IPv4的TOS
- (3)流标号(Flow Label):20bit组成,准备用于服务质量控制(目前引用在研究)
- (4)有效载荷长度(Payload Length):16bit组成,只表示数据部分的长度(当有可选项时也包含可选项长度)
- (5)下一个首部(Next Header):8bit组成,表示上一层/下一个扩展首部的协议
- (6)跳数限制(Hop Limit):8bit组成,同IPv4的TTL,均表示通过路由器的个数上限(过做路由功能的主机也算)
- (7)源地址和目标地址(Source/Destination Address):各为128bit组成,发送端和接收端的IP地址
- (8)IPv6扩展首部:IPv6首部固定为40字节,其使用扩展首部来扩展功能(分片,逐跳选项,载荷加密等)。扩展首部介于IPv6首部与TCP/UDP首部之间,可以是任意长度,并且可以多个扩展首部连接使用