网络协议IP
网络协议IP
IP概述
IP 设计思路
- 向上提供最基本的、简单的、灵活的数据报传输服务
- 无连接
- 网络发送分组时不需要先在源和目的结点间建立连接
- 每一个分组(IP 数据报) 独立发送,不进行编号,与其前后的分组无关
- 尽最大努力交付 (best-effort delivery)
- 网络层不提供服务质量的承诺
- 传送的分组可能出错、丢失、重复和乱序,也不保证分组传送的时限
- 如果主机 (即端系统) 中的进程之间的通信需要可靠传输,由主机中的传输层负责 (包括差错处理、流量控制等),与网络结点(路由器)无关
- 优点
- 中间转发设备功能简单,成本低
- 协议设计简单,适应性强,扩展性强
- 无连接
- 可能的实现方法
- IP 数据报服务 : H1 发送给 H2 的分组可能沿着不同路径传送
- 虚电路(Virtual Circuit) : H1 发送给 H2
的所有分组都沿着同一条虚电路传送
- 可能的网络层技术,曾与IP竞争
- 面向连接的通信方式,源于电信网络的电路交换思想
- 建立虚电路(Virtual Circuit),以保证双方通信所需的一切网络资源
- 网络保障可靠传输
互联网络
- 互联网络 (internetwork or internet)
- 提供各种主机--主机之间分组传输服务的、互连的网络的集合
- Internet--因特网,互联网
- 专用名词,互联网络实例
- 网络
- 前边讨论过的直连网络或交换网络
- 如以太网、WiFi、4G/5G网络等
- 子网
- 所讨论网络中的一部分网络
互联节点
- 路由器/网关 (Router/Gateway)
- IP的关键
- 建立可扩展的异构互连机制
- 在所有结点(主机和路由器)上运行
网络层功能
- 通过逐跳的分组转发实现源、目的结点间的数据传输,基于两种重要的网络层功能实现
- 转发(动作、局部)
- 分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路
- 路由选择(决策、全局)
- 分组从源结点(发送方)流向接收方(目的结点)时,网络层必须决定这些分组所采用的路由或路径,计算这些路径的算法称为路由选择算法(routing algorithm)
- 转发(动作、局部)
IP及相关协议
- 网际协议 IP
- TCP/IP 体系中两个最主要的协议之一
- 编址规则、数据包格式、分组处理规则
- 与之配套使用的协议
- 路由选择协议
- 路径选择
- 地址解析协议 ARP (Address Resolution Protocol)
- 实现IP地址与硬件地址的映射
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网络控制与诊断
- 网际组管理协议 IGMP (Internet Group Management Protocol)
- IP多播
- 路由选择协议
分类的IP地址
IP地址及其表示方法
- IP地址 (IPv4) (位置/身份 合二为一)
- 全球唯一的,32位,结点标识符
- 32位地址空间,理论上可提供约40亿个主机地址
- 由因特网名字与号码指派公司ICANN (Internet Corporation for Assigned Names and Numbers)进行分配
- 全球唯一的,32位,结点标识符
- 表示方法
- 每8位转化成10进制数,并在相邻两个数之间点分方便阅读
IP地址的编址方法
- 分类的 IP 地址
- 最基本的编址方法,相应的标准协议于1981年制定
- 子网划分
- 对基本编址方法的改进,其标准于 1985 年制定
- 构成超网
- 无类编址方法,其标准于1993 年提出
IP地址的分类
- 层次结构:IP地址 = 网络号+主机号
- 网络号(net-id):指出结点 (主机或路由器)连在哪个网络上
- 所有连到同一网络上的结点,其IP地址的网络地址部分相同
- 网络号由ICANN分配
- 主机号(host-id):指出结点在网络内的标识
- 主机号由网络管理员分配
IP地址的详细分类
- A类、B类、C类地址为单播地址 (Unicast)
- A 类地址:网络号为1 字节,第1位“0”;主机号3字节
- B类地址:网络号为2 字节,前2位“10”;主机号2字节
- C 类地址:网络号为3 字节,前3位“110”;主机号1字节
- D类为组播地址 (Multicast)
- E类为保留地址以备特殊用途 (Reversed)
| 网络类别 | 最大网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中最大的主机数 | 在整个IP地址空间的比率 |
|---|---|---|---|---|---|
| A类 | 126 \((2^7 – 2)\) |
1. (00000001. ) |
126. (01111110. ) |
16,777,214 $(2^{24} – 2) $ |
50% $ (2{31}/2{32})$ |
| B类 | 16,383 $ (2^{14} – 1)$ |
128.1. (10000000.00000001. ) |
191.255. (10111111.11111111. ) |
65,534 $ (2^{16} – 2) $ |
25% $ (2{30}/2{32})$ |
| C类 | 2,097,151 $ (2^{21} – 1) \(| 192.0.1. <br>(110000000.00000000.00000001.) | 223.255.255. <br>(11011111.11111111.11111111.) | 254 <br>\) (2^8 – 2)$ |
12.5% $ (2{29}/2{32})$ |
- 私有地址(局域网地址)
| 网络类别 | 地址范围 | 所含网络数 |
|---|---|---|
| A类 | 10.0.0.0 ~ 10.255.255.255 (00001010.00000000.00000000.00000000 ~ 00001010.11111111. 11111111. 11111111) |
1 |
| B类 | 172.16.0.0 ~ 172.31.255.255 (10101100.00010000.00000000.00000000 ~ 10101100.00011111.11111111.11111111) |
16 \((2^4)\) |
| C类 | 192.168.0.0 ~ 192.168.255.255
(11000000.10101000.00000000.00000000 ~ 11000000.10101000.11111111.11111111) |
256 \((2^8)\) |
IP地址的重要特点
- 特点一:IP 地址为两级的层次结构
- 方便IP地址管理
- IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配
- 减小路由表存储空间
- 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少
- 方便IP地址管理
- 特点二:IP 地址实际标识的是一个结点和一条链路的接口
- 当一个结点 (主机或路由器)
同时连接到两个网络上时,必须同时具有两个相应的 IP 地址,其网络号 net-id
必须是不同的
- 这种主机称为多归属主机(multihomed host)
- 路由器至少应当有两个不同的 IP 地址
- 因为其至少应同时连接到两个网络 ,才能将 IP 数据包从一个网络转发到另一个网络
- 当一个结点 (主机或路由器)
同时连接到两个网络上时,必须同时具有两个相应的 IP 地址,其网络号 net-id
必须是不同的
- 特点三:同一个网络上的结点的IP 地址的网络号必须一样
- 用中继器或网桥连接起来的若干个局域网仍为一个网络,具有同样的网络号 net-id
- 特点四:所有分配到网络号 net-id 的网络都是平等的
- 无论范围很小的局域网,还是可能覆盖很大地理范围的广域网
IP地址与硬件地址的区别
IP分组转发
- 路由器将转发信息存储在转发表中
- Forwarding Information Base, FIB
- FIB表中存储的是网络号与下一跳地址的映射关系
- 若按目的主机号来制作路由表,则所得出的路由表就会过于庞大
- 比如:4个 B 类网络通过3个路由器连接在一起,尽管每个网络上可能有上万个主机,按主机所在的网络地址来制作路由表,每个路由器中的路由表只需包含 4 个条目
- 查找路由表,根据目的网络地址确定下一跳路由器
- IP 数据包最终可以到达目的主机所在的目的网络 (可能通过多次间接交付)
- 分组到达目的网络后,最后一个路由器才试图根据目的主机号host-id,将数据包向目的主机进行直接交付
- 特定主机路由
- 这种路由是为特定的目的主机指明一个路由
- 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由
- 默认路由(default route)
- 当某地址在路由表中找不到匹配的地址时,采用此出口
- 对仅有一个网卡的主机,其缺省路由就是与网卡相连的那个路由器
- 默认路由可减少路由表所占用的空间和搜索路由表所用的时间,在一个网络只有很少的对外连接时是很有用的
- 如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,在这种情况下使用默认路由是非常合适
分组转发规则
- 从数据包的首部提取目的主机的 IP 地址 D, 得到目的网络地址为 N
- 若N是与此路由器直接相连的某个网络地址 (N与自己某接口的网络地址相同),则把数据包直接交付目的主机 D;否则是间接交付,执行 3
- 若FIB表中有目的地址为 D 的特定主机路由,则把数据包传送给路由表中所指明的下一跳路由器;否则,执行 4
- 若FIB表中有到达网络 N 的路由,则把数据包传送给路由表指明的下一跳路由器;否则,执行 5
- 若FIB表中有一个默认路由,则把数据包送给路由表中所指明的默认路由器;否则,执行 6
- 报告转发分组出错(ICMP,目的不可达)
IP地址与硬件地址映射 -- 地址解析协议ARP
主机或路由器的物理接口硬件在转发数据时,只能理解特定网络的编址方案(硬件地址,如 MAC地址 )
- 地址解析:IP地址硬件地址
- IP数据报在逐跳转发过程中,每一个结点需要根据本次传输的目的结点IP找到对应的目的结点的硬件地址(仅仅是本跳传输的直接接收结点)
- 随后,网络适配器把IP数据包封装在目的地址为该硬件地址的帧中,发往本次传输的目的结点(可能是最终目的地,也可能是到达最终目的地的中间路由器 )
可能方法
- 直接对应:将结点的硬件地址编码到IP地址的主机部分
- 例如:硬件地址为00100001 01010001,对应IP地址为 128.96.33.81
- 限制:重复问题;主机号浪费;空间不匹配
- C类网络中不超过8比特,以太网的硬件地址 48 比特
- 每个结点保留一张对照表:IP地址 \(\to\) 硬件地址
- 地址解析协议 (Address Resolution Protocol, ARP)
地址解析协议 (Address Resolution Protocol, ARP)
ARP:根据目标主机的IP地址,查询其硬件地址
- 每个三层结点中都有一个ARP高速缓存(ARP Cache)
- 存储结点所在局域网内各结点的 IP 地址到其硬件地址的映射表
- 结点A向局域网内另一结点B发送IP报文
- 在其 ARP Cache 中查看有无B的 IP 地址,有则查出其对应的硬件地址,将此硬件地址写入 MAC 帧,通过局域网将该 MAC 帧发往此硬件地址
- 否则,A向局域网内广播ARP请求,询问B的IP地址对应的硬件地址
- B收到该请求后,单播回复自己的硬件地址
- A和B都会将对方地址的映射关系写入ARP Cache
需要注意的问题
- ARP 实现同一局域网内结点IP 地址和硬件地址的映射
- 若目的结点和源结点不在同一局域网内
- 通过 ARP 找到本局域网内某路由器的硬件地址,把分组发送给该路由器,该路由器把分组转发给下一个网络
- IP地址到硬件地址的解析自动进行
- 主机用户感知不到地址解析过程
- APR缓存中的条目有生命期
- 超时会被删除,一般每15分钟一次
- ARP 分组不是IP 协议的一部分,不包括IP头
- ARP分组直接放在以太网帧的数据部分
- 以太网中将ARP请求和响应分组定义为0x0806 以太类型
IP报文格式
- 一个 IP 数据包由首部(header)和数据(data)两部分组成
- header的前面部分固定长度,20 字节;后面是可选字段,长度可变
- 分组格式几乎都设计成32 bits对齐,以简化软件对它们的处理
Version:版本,4bits,例如目前的IP协议版本号为4
HLen:首部长度,4bits,可表示的最大数值是 15 个单位(1个单位为 4 字节)
- 即首部最长60字节,最小为5,即20个字节(仅包含首部的固定部分)
TOS:区分服务,8 位,用来获得更好的服务
- 在旧标准中叫做服务类型,但实际上一直未被使用过,1998 年这个字段改名为区分服务
- 只有在使用区分服务(DiffServ)时,这个字段才起作用,一般情况下不使用
Length:总长度,16 位,指首部和数据之和的长度,单位为字节
- 数据包的最大长度为 65535 字节
- 总长度必须不超过最大传送单元 MTU
Identification标识、Flag标志、Offset片偏移:三个字段共32 位,用于IP数据包分片
TTL:生存时间(Time To Live),8 位,数据报在网络中可通过的路由器跳数
- 引入原因:数据分组单独寻径,从源到目的的延迟是随机变化的,可能路由器出错导致分组在网上无休止传输
- 理论最大值255,实际值一般不超过64;发送结点设置该值,分组每经过一个路由器时,将其值减1,TTL=0 时丢弃该包
Protocol:协议,8 位,指出此数据报携带的数据是上层哪一个协议发来的
ICMP IGMP IP TCP EGP IGP UDP IPv6 OSPF 1 2 4 6 7 9 17 41 89
Checksum:首部校验和,16 位
只检验数据包的首部不检验数据部分
源、目的地址:各32位,传输中始终保持不变
Options:可变长,从 1 个字节到 40 个字节不等
- 每种选项的第一字节为标识符,标识该选项的类型;若该选项的值是变长的,则还有一个字节表示长度,之后是该选项的值
- 主要用于测试和控制,为了增加 IP 数据包的功能,但同时也使得 IP 数据包的首部长度可变,增加了每一个路由器处理数据包的开销
IP 分片-- 连接异构网络
不同 (异构) 网络拥有各自不同的最大传输单元长度(MTU)
| 协议 | MTU(字节) |
|---|---|
| 超级通道(Hyperchannel) | 65536 |
| 令牌环(16Mbps) | 17194 |
| 令牌环(4Mbps) | 4464 |
| FDDI | 4352 |
| 以太网 | 1500 |
| X.25 | 576 |
| PPP | 532 |
IP 分片(Fragmentation)
- 分片
- 当分组经历网络的MTU比分组长度小,路由器把该分组分成小的数据块(称为分片,fragment)后放进物理帧
- 每片的长度必须为8的倍数,最后一个可任意小
- 每个分段都含一个IP数据报头
- 除报头中的长度(Length) 、标志(Flag) 、片偏移(Offset)、校验和(Checksum)字段,其它字段与原始IP 数据报头相同
- 重组
- 分片的反过程,所有分片数据包到达目的主机后,目的主机负责还原原始IP报文
IP头部有关分片的三个字段
- 标识(Identification)
- 一个计数器,用来产生IP数据报的标识号
- IP协议每发送一个数据报则该项加1,作为下一数据报的标识符
- 形成的数据报分片具有与原始数据报相同的源、目的地址和标识号
- 16 位,保证重复使用一个分组标识符时,具有该标识符的上一分组的所有分段已从网上消失
- 标志 (Flag)
- 3 位,目前仅低2bit有用(未用 | DF | MF)
- MF (More Fragment):
- 置1表示后面“还有分片”;
- 置0表示最后一个分片(没有分片也置0)
- DF (Don‘t Fragment):
- 置0才允许分片
- 片偏移(Offset)
- 13
位,指明分片在分组中的位置,采用8字节为偏移单位,分片必须是8字节的倍数
- 因为Length是16bit,而offset是13bit
- 13
位,指明分片在分组中的位置,采用8字节为偏移单位,分片必须是8字节的倍数
IP分片的缺点
- 不能充分利用网络资源
- 网络转发代价与包数目相关,与大小无关
- 端到端性能很差
- 当一个分片丢失时,接收端会丢弃同一报文的其他分片
- 可被利用来生成DoS攻击
- 攻击者向目标主机发送小片的流,没有一个片的Offset是0,重组数据时崩溃
- 解决方案
- 一般避免分段,使用路径MTU发现机制,IPv6废止了分片
- 在数据传输过程中探测沿途网络的最小MTU,然后发方发送足够小的分组,使其能够在沿途不必分段
- 一般避免分段,使用路径MTU发现机制,IPv6废止了分片