超详解IP协议


前言

主机、路由器网络层主要功能:


提示:以下是本篇文章正文内容

💟IP数据报(分组)格式

一个IP分组由首部和数据两部分组成

首部前一部分的长度固定,共20B,是所有IP分组必须具有的,在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制

(1) 版本号字段占4位: IP协议的版本号,E.g. 4→IPv4, 6 → IPv6

(2)首部长度字段占4位: IP分组首部长度,以4字节为单位,E.g. 5→IP首部长度为20(5× 4)字节

(3)服务类型(TOS)字段占8位:指示期望获得哪种类型的服务 也称为区分服务,只有在网络提供区分服务(DiffServ)时使用,一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H

(4)总长度字段占16位: IP分组的总字节数(首部+数据) 最大IP分组的总长度: 65535(2**16-1)B,最小的IP分组首部: 20B IP分组可以封装的最大数据: 65535-20=65515B

(6)协议字段占8位: 指示IP分组封装的是哪个协议的数据包, 实现复用/分解 E.g. 6为TCP,表示封装的为TCP段; 17为UDP, 表示封装的是UDP数据报

(8)源IP地址、目的IP地址字段各占32位:分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址

(9)选项字段占长度可变,范围在1~40B之间:携带安全、源选路径、时间戳和路由记录等内容

(10)填充字段占长度可变,范围在0~3B之间:目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数

数据报中的标识和标志位,片偏移用于IP切片在IP切片时再介绍

💝IP分片

最大传输单元(MTU):网络链路存在MTU (最大传输单元), 链路层数据帧可封装数据的上限,不同链路的MTU不同

以太网的MTU为1500B,而许多广域网的MTU不超过576B

当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在两个或多个较小的IP数据报中,这些较小的数据报称为片

IP首部的相关字段用于标识分片以及确定分片的相对顺序:总长度、标识、标志位和片偏移

(1)标识字段占16位:标识一个IP分组,IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识

(2)标志位字段占3位:DF (Don’t Fragment),MF (More Fragment)

DF =1:禁止分片 DF =0:允许分片 MF =1:非最后一片 MF =0:最后一片(或未分片)

(3)片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量,片偏移字段以8字节为单位,注这里不是整个分组的相对偏移量

一个最大分片可封装的数据应该是8的倍数, 因此, 一个最大分片可封装的数据d和需要的总片数n为:(减去20B是减去首部数据大小)

每片的片偏移字段取值为:(除以8因为片偏移字段以8字节为单位) 每片的总长度字段为: 每片的MF标志位为: 例题 这里相对偏移量是用分组数据大小(减去首部大小)/8,不是用整个分组的大小 切片后,每个分组的首部都会有的

注意:

1.总长度的单位是1B 2.首部长度单位是4B 3.偏位移单位是8B

💖IP编址

接口(interface): 主机/路由器与物理链路的连接,实现网络层功能

路由器通常有多个接口,主机通常只有一个或两个接口 (e.g.,有线的以太网 接口,无线的802.11接口)

IP地址: 32比特(IPv4)编号标识主机、路由器的接口,IP地址与每个接口关联,最后用十进制表示叫做点分十进制

IP地址: 网络号(NetID) – 高位比特,主机号(HostID) – 低位比特

无论哪类IP地址,都由网络号和主机号两部分组成,即IP地址 ::= {<网络号>, <主机号>}

网络号标志主机(或路由器)所连接到的网络,网络号在整个因特网范围内必须是唯一的

主机号标志该主机(或路由器), 一台主机号在它前面的网络号所指明的网络范围内必须是唯一的

IP子网:IP地址具有相同网络号的设备接口,不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口 图中有三个IP子网

💗有类IP地址

连接到因特网上的每台主机(或路由器)都分配一个32比特的全球唯一标识符,即IP地址。传统的IP地址是分类的地址,分为A、B、C、D、E五类

A类地址可用的网络数为2^7-2,减2的原因是:第一,网络号字段全为0的IP地址是保留地址,意思是“本网络”,第二,网络号为127的IP地址是环回测试地址

B类地址的可用网络数为2^14-1,减1的原因是128.0这个网络号是不可指派的

C类地址的可用网络数为2^21-1,减1的原因是网络号为192.0.0 的网络是不可指派的

A类,B类,C类地址的网络号字段分别为1B,2B,3B,而在网络号字段的最前面有1-3位类别位,其数值分别规定为0,10,110

特殊IP地址: 在各类IP地址中,有些IP地址具有特殊用途,不用做主机的IP地址

1.主机号全为 0表示网络本身,如202.98.174. 2.主机号全为1表示本网络的广播地址,又称直接广播地址,如202.98.174.255 3.32位全为0,即0.0.0.0表示本网络上的本主机 4.32位全位1,即255.255.255.255表示整个TCP/IP网络的广播地址,又称受限广播 5.127.0.0.0保留为环路自检(Loopback Test),此地址表示任意主机本身,目的地址为环回地址的IP数据报永远不会出现在任何网络上

IP地址特点:

(1)每个IP地址都由网络号和主机号两部分组成,因此IP地址是一种分等级的地址结构

分等级的好处是: ①IP地址管理机构在分配IP地址时只分配网络号(第一级), 而主机号(第二级)则由得到该网络的单位自行分配,方便了IP 地址的管理

(2)IP 地址是标志一台主机(或路由器)和一条链路的接口,当一台主机同时连接到两个网络时,该主机就必须同时具有两个相应的IP地址,每个IP地址的网络号必须与所在网络的网络号相同,且这两个IP地址的网络号是不同的。

因此IP网络上的每个路由器必然至少应具有两个IP地址(路由器每个端口必须至少分配一个IP地址)

(4)在IP地址中,所有分配到网络号的网络(无论是LAN还是WAN)都是平等的

(5)在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的。路由器总是具有两个或两个以上的IP地址,路由器的每个端口都有一个不同网络号的IP地址

💜子网掩码

两级IP地址的缺点:IP地址空间的利用率有时很低,给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏,两级的IP地址不够灵活

子网划分:在IP地址中又增加了一个子网号字段,使两级IP地址变成了三级IP地址

从主机号借用若干比特作为子网号,同时主机号也就相应减少了相同的比特 三级IP地址的结构如下: IP地址={<网络号>,<子网号>, <主机号>}

凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号,先找到连接到本单位网络上的路由器,然后该路由器在收到IP数据报后,按目的网络号和子网号找到目的子网,最后把IP数据报直接交付给目的主机

注:子网划分纯属一个单位内部的事情,单位对外仍然表现为没有划分子网的网络

如何确定是否划分了子网?利用多少位划分子网?子网掩码

子网掩码的引入,为了告诉主机或路由器对一个A类、B类、C类网络进行了子网划分,使用子网掩码来表达对原网络中主机号的借位, 为了使外部可以连接子网内的网络

子网地址+子网掩码→准确确定子网大小

子网掩码是一个与IP地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成

形如IP地址: 32位,也采用点分十进制形式 取值: NetID、 SubID位全取1,HostID位全取0, 即1对应于IP地址中的网络号及子网号,而0对应于主机号

A网的默认子网掩码为: 255.0.0.0 B网的默认子网掩码为: 255.255.0.0 C网的默认子网掩码为: 255.255.255.0 借用3比特划分子网的B网的子网掩码为: 255.255.224.0

所有的网络都必须使用子网掩码,如果一个网络未划分子网,那么就采用默认子网掩码

将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址

目的IP地址: 172.32.1.112,子网掩码: 255.255.254.0,求子网地址

子网地址:

由于子网掩码是一个网络或一个子网的重要属性,所以路由器在相互之间交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉对方,路由表中的每个条目,除要给出目的网络地址和下一跳地址外,还要同时给出该目的网络的子网掩码

常用十进制<---->二进制

1000 0000           128
1100 0000           192
1110 0000			224
1111 0000			240
1111 1000			248
1111 1100			252
1111 1110			254
1111 1111           255
已知IP地址141.14.72.24,子网掩码是255.255.192.0,求子网号长度
若子网掩码是255.255.254.0,求子网号长度
(1)192 : 1100 0000 并且IP地址属于B类,网络号为16位,网络号+子网号 =18
所有子网号2位,主机号6+8

(2)254:1111 1110 ,子网号=7,主机号 =9
解题:1对应于IP地址中的网络号及子网号,而0对应于主机号

2.同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码

3.路由器的路由表中,所包含信息的主要内容必须有目的网络地址、子网掩码、下一 跳地址

💙CIDR协议与路由聚合

无类域间路由(CIDR: Classless InterDomain Routing):消除传统的 A 类、 B 类和 C 类地址界限(NetID+SubID→Network Prefix (Prefix)可以任意长度),融合子网地址与子网掩码,方便子网划分

无类地址格式: a.b.c.d/x,其中x为前缀长度(x表示网络号)

子网201.2.3.64, 255.255.255.192→201.2.3.64/26

作用: (1)提高IPv4 地址空间分配效率

(2)提高路由效率,将多个子网聚合为一个较大的子网,构造超网(supernetting) CIDR把网络前缀都相同的连续的IP地址组成一个’‘CIDR地址块’’,将前缀缩短即可

128.14.35.7/20 是某个CIDR地址块
二进制:1000 0000    0000 1110    0010 0011  0000 0111
最小地址:1000 0000    0000 1110    0010(前面网络号不变) 0000  0000 0000
最大地址:1000 0000    0000 1110    0010(前面网络号不变)1111 1111 1111

路由聚合(route aggregation) 将多个子网聚合成一个较大的子网,叫做构成超网,或者路由聚合 方法:将前缀缩短 使用CIDR时,查找路由表可能得到的几个匹配的结果,应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。

某IP地址192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络中最大子网个数,每个子网内的最大可分配地址个数分别是?
从子网掩码看网络号29,IP地址网络号划分24位
248:1111 1000 
子网数:2^5, 主机数2^3-2(全为0--本网络,全为1--广播)

💚动态主机配置协议(DHCP)

问题引入:一个主机如何获得IP地址?

1.“硬编码”:静态配置 需要操作员在自己电脑上配置 (2)动态主机配置协议-DHCP( Dynamic Host ConfigurationProtocol)

常用于给主机动态地分配IP地址,它提供了即插即用联网的机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与,从服务器动态获取:IP地址,子网掩码,默认网关地址,DNS服务器名称与IP地址

一些术语介绍: (1)主机广播 “DHCP discover” (发现报文)

(2)DHCP服务器利用 “DHCP offer” (提供报文) 进行响应

(3)主机请求IP地址: “DHCP request” (请求报文)

(4)DHCP服务器分配IP地址: “DHCP ack” (确认报文)

DHCP工作原理: 1.使用客户/服务器方式

2.需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文,这时该主机就成为DHCP客户,本地网络上所有主机都能收到此广播报文,但只有DHCP服务器才回答此广播报文

3.DHCP服务器先在其数据库中查找该计算机的配置信息,若找到,则返回找到的信息;若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。DHCP服务器的回答报文称为提供报文

DHCP协议在应用层实现, DHCP是应用层协议,它是基于UDP的

请求报文封装到UDP数据报中, 发送给DHCP服务器

DHCP服务器构造ACK报文,包括分配给客户的IP地址、子网掩码、默认网关、 DNS服务器地址

🧡网络地址转换(NAT)

网络地址转换(NAT):在专用网连接到英特网的路由器上安装NAT软件,安装了NAT软件的路由器,它至少有一个有效的全球外部地址,作用:通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址

它使得整个专用网只需要一个全球IP地址就可以与因特网连通,由于专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗,同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险

私有(Private)IP地址:

私有IP如何实现访问互联网? 家庭网络里的主机所有离开本地网络去往Internet的数据报的源IP地址需替换为相同的NATIP地址: 138.76.29.7以及不同的端口号

实现: (1)替换 (利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)

注:NAT IP地址是网关地址(138.76.29.7)

(2)记录 将每对(NAT IP地址, 新端口号) 与 (源IP地址, 源端口号)的替换信息存储到NAT转换表中

(3)替换 根据NAT转换表,利用(源IP地址, 源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号),即(NAT IP地址, 新端口号)

转换过程:

NAT穿透问题 客户期望连接内网地址为10.0.0.1的服务器,客户不能直接利用地址10.0.0.1直接访问服务器,对外唯一可见的地址是NAT地址: 138.76.29.7 客户机访问服务器:

(2)利用UPnP(Universal Plug and Play)互联网网关设备协议 (IGDInternet Gateway Device )自动配置: 学习到NAT公共IP地址(138.76.29.7),在NAT转换表中,增删端口映射

(3)建立中继(如Skype) NAT内部的客户与中继服务器建立连接,外部客户也与中继服务器建立连接,中继服务器桥接两个连接的分组

💛互联网控制报文协议(ICMP)

为了提高IP数据报交付成功的机会,在网络层使用了网际控制报文协议(Internet Control Message Protocol, ICMP)来让主机或路由器差错(或异常)报告 和网络探询

ICMP 报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去,ICMP是IP层协议

ICMP报文的格式

ICMP差错报告报文数据封装

ICMP报文的种类有两种:ICMP差错报告报文和ICMP网络探询报文

(1)差错报告报文(5种)

1.目的不可达 2.源抑制(Source Quench) 3.超时/超期 4.参数问题 5.重定向 (Redirect)

(2)网络探询报文

1.回声(Echo)请求与应答报文(Reply) 2.时间戳请求与应答报文

ICMP报文

几种不发送 ICMP差错报告报文的特殊情况 1.对ICMP差错报告报文不再发送 ICMP差错报告报文

2.除第1个IP数据报分片外, 对所有后续分片均不发送ICMP差错报告报文

3.对所有多播IP数据报均不发送 ICMP差错报告报文

4.对具有特殊地址( 如127.0.0.0 或 0.0.0.0) 的IP数据报不发送ICMP 差错报告报文

几种 ICMP 报文已不再使用

1.信息请求与应答报文 2.子网掩码请求和应答报文 3.路由器询问和通告报文

ICMP的两个常见应用是分组网间探测PING(用来测试两台主机之间的连通性)和Traceroute(UNIX中的名字,在Windows中是tracert,可以用来跟踪分组经过的路由),其中PING使用了ICMP回送请求和回答报文,Traceroute (Tracert) 使用了ICMP时间超过报文,PING工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP或UDP,Traceroute/Tracert工作在网络层

Traceroute (1)源主机向目的主机发送一系列UDP数据报 第1组IP数据报TTL =1,第2组IP数据报TTL=2, etc.,目的端口号为不可能使用的 端口号

(2)当第n组数据报(TTL=n)到达第n个路由器时: 路由器丢弃数据报,向源主机发送ICMP报文(type=11, code=0),ICMP报文携带路由器名称和IP地址信息,当ICMP报文返回到源主机时,记录RTT

(3)停止准则: UDP数据报最终到达目的主机,目的主机返回“目的端口不可 达” ICMP报文 (type=3,code=3), 源主机停止


总结

提示:这里对文章进行总结:

经验分享 程序员 微信小程序 职场和发展