IP(网际协议)简介
IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。 IP协议提供不可靠、无连接的数据报传送服务,即它对数据进行“尽力传输”,只负责将分组发送到目的主机, 不管传输正确与否,不作验证、不发确认、也不保证IP数据报到达顺序,将纠错重传问题交由传输层来解决。IP报文格式
IP数据报格式如下图所示,它是由IP首部加数据组成的。普通的IP首部长为20个字节(IP首部固定长度20),除非含有选项字段, 但其最大长度不会超过60字节。
4位版本
版本:这个字段定义了IP的版本。目前的主流版本是4(IPv4),但它正逐渐地被版本6(IPv6)所替代。
4位首部长度
头部长度。由于选项字段的存在,所以IP首部长度是可变的。该字段用4位来定义首部长度。将该值乘4可得到用字节表示的长度,所以IP首部长度为20~60个字节。
8位服务类型
服务类型。该字段是由3bit优先域、4bit服务类型域和1bit未用位(该位必须置为0)组成。
当几个数据包同时从单个输出接口排列等待传输时,路由器根据优先顺序确定应该发送的数据包,时至今日该域已被忽略;4bit服务类型分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。在一个IP数据报文中4bit只能有一位被置为1。
16位总长度(字节数)
总长度,首部+数据。该字段以字节为单位定义IP数据报的总长度(首部加上数据)。要得到IP上层数据的长度,只需从总长度减去头部的长度即可。
16位标识
标识。每一个IP数据包在发送时被给定特有的ID值。如果数据包必须被分割成碎片以适应支持小型数据包的网络,那么每一个碎片中都设置相同的ID号码。
3位标志
标志。标志由3位组成,
第1位保留;
第2位为不分片标志,表示此数据包不可以被分片;
第3位为更多分片标志,表示在分片包之后还有分片,即此包不是最后分片。
13位片偏移
分片偏移量。如果数据包是一个分片包,该域指明了当前分片包在与其它分片包被重新组装成一个单独数据包时,应该位于数据包的什么位置上。该域的值单位为8字节。
8位生存时间
生存时间。该字段表明数据包保存的生存时间,单位为秒,但是在通过路由器时实际上是按照跳执行的。通常TTL的起始值是32、64、128。
TTL 是什么?
TTL是 Time To Live的缩写,TTL是生存时间的意思。表示该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。
TTL是IP协议包中的一个值(报文在网络中能够存活的限制),TTL由IP数据包的发送者设置。它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。
以前这个限制方式是设定一个时间,当报文在网络中转发时,时间超过这个限制,最后一个收到报文的路由点就会把它扔掉,而不继续转发。
后来把时间限制改为了跳数限制,就是当报文在网络中转发时,每经过一个路由点,就把预先设定的这个TTL数值减1,直到最后TTL=0时报文就被扔掉,不向下转发。路由器将会丢弃收到的TTL=0的IP包,并向IP包的发送者发送 ICMP time exceeded消息,以防止数据包不断在IP互联网络上永不终止地循环。
TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。
8位协议类型
协议。该字段定义了使用IP层服务的较高层协议。一个IP数据报能封装来自诸如TCP、UDP、ICMP和IGMP等较高层协议的数据。
16位首部检验和
检验和(对头部内容进行特定运算,求出一个值)。IP头部检验和只对头部内容进行错误检测,并不包括数据包的其它内容,当然也不包括计算的校验和域本身。检验和采用16位反码求和的算法。
32位源IP地址
源IP地址。该字段定义了源主机的IP地址。通常情况下,在IP数据报从源主机传送到目的主机期间,该字段保持不变。
32位目的IP地址
目的IP地址。该字段定义了目的主机的IP地址。在IP数据报从源主机传送到目的主机期间该字段必须保持不变。
选项(如果有)
可选项。顾名思义,可选项并不是每个数据报所必需的。它们通常用于网络测试和调试。虽然可选项不是IP头部所必需的部分,但要求IP软件能够处理它们。目前,这些选项定义如下:
安全和处理限制(用于军事领域)
记录路径(让每个路由器记下它的IP地址)
时间戳(让每个路由器都记下它的IP地址和时间)
宽松的源站选路(为数据报指定一系列必须经过的IP地址)
严格的源站选路(与宽松的源选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)
IP地址类型及其结构
IP地址是网际协议地址(Internet Protocol address)的简称。用于Internet上主机的唯一标识。 通信时要利用IP地址来指定目的主机地址。有两种形式来表示计算机在Internet上的地址:一种是数字表示的地址,通常称为IP地址。 另一种是用字母表示的地址,称为域名地址。IP地址的组成
通常我们所说的IP协议使用32比特的地址,也可称为Ipv4。它的地址由类别、网络地址和主机地址共3个部分组成。类别区分地址的使用方式, 网络地址用于区分不同的网络,主机地址用于在一个网络中区分主机。 IP地址分成5类:A类,B类,C类,D类和E类。其中A、B和C类址是基本的Internet地址,是用户使用的地址, D类地址是用于多目标广播的广播地址(也称多播或组播地址),E类地址为保留地址。IP地址的详细结构如下:
A类地址通常分配组有许多机器连网的大型网络,它用第一位“0”作为标志。使用24位的主机地址来标识连网计算机,网内主机数目 可以达1600万个,而网络地址使用7位来限制可被识别的网络数目;B类地址用“10”作为标志,使用16位的主机地址和14位的网络地址, 网内主机最多65534个;C类地址用“110”作为标志,主机地址占8位,网内主机数目有254个,网络地址21位, C类地址主要用于连网主机数目少而网络数目多的网络;D类地址的标志是“1110”,用于多目标广播。
IP地址的表示法
首先将32位的IP地址分成4组,每组为8位,并用句点(.)隔开。然后将这4个组用4个十进制数表示,每个数都小于256。 例如,有一32位IP地址10000001 00001110 00000110 00011111, 可以表示为129.14.6.31,由于它以“10”开头,所以是一个B类地址,其网络地址是129.34,主机地址是6.31。 这种表示法被称为点分十进制计数法。
如果用w,x,y,z分别表示这4个字节,则5类IP地址的范围就是:
A类:1.x.y.z~126.x.y.z(其中,127.0.0.1不作IP地址,用于网络内部使用)
B类:128.x.y.z~191.x.y.z
C类:192.x.y.z~223.x.y.z
D类:224.0.0.0~239.255.255.255(其中224.0.0.0不用,224.0.0.1分配给永久性IP主机组,包括网关)
特殊的IP地址
网络地址:主机地址为全“0”的IP地址不分配给任何主机,而是作为网络本身的标识。
例:主机202.198.151.136所在网络地址为202.198.151.0
直接广播地址:主机地址为全“1”的IP地址不分配给任何主机,用作广播地址,对应分组传递给该网络中的所有结点 (能否执行广播,则依赖于支撑的物理网络是否具有广播功能)。
例:202.198.151.136所在网络的广播地址为202.198.151.255
有限广播地址:32位为全“1”的IP地址(255.255.255.255)称为有限广播地址,通常由无盘工作站启动时使用,希望从网络IP地址 服务器处获得一个IP地址。
主机本身地址:32位全“0”的IP地址(0.0.0.0)称为主机本身地址。
回送地址:127.0.0.1称为回送地址(回环地址),常用于本机上软件测试和本机上网络应用程序之间的通信地址。
专用IP地址
TCP/IP协议需要IP地址支持,随着Internet的普及,IP地址资源已经开始出现告急的趋势,一个解决方案是利用专用网的地址分配 方案。原理是定义两类IP地址:
全局IP地址:用于Internet上的公共主机
专用IP地址:仅用于专用网内部的本地主机
公共主机和本地主机可以共存于同一网络和进行互访,而大多数路由器不转发携带本地IP地址的分组。本地主机必须经网络地址转换服务器(NAT或代理服务器)才能访问Internet。RFC1918定义的专用IP地址为:
10.0.0.0-10.255.255.255 1个A类网络
172.16.0.0-172.31.255.255 16个连续的B类网络
192.168.0.0-192.168.255.255 256个连续的C类网络
企业内部网主机的IP地址可以设置成专用IP地址,进行企业内部的网络应用;并可通过代理服务器访问Internet。这样 只需要申请少量的IP地址,既解决了IP不足的问题,又解决了网络安全问题。
子网的划分
将网络进一步划分成独立的组成部分,每个部分称为这个网络(或者更高一级子网)的子网。子网的设计是为了便于网络的管理、 提高系统的可靠性、防止整个网络通信的瘫痪、改进系统性能、克服简单局域网的技术条件限制、通过设置不同访问权限来增强系统的安全保障。
现在所有的主机都要求支持子网编址。不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。 例如,把一个B类网络地址的16位主机号分成8位子网号和8位主机号如下图:
这样就允许有254个子网,每个子网可以有254台主机。对A类和B类网络,许多管理员采用自然的划分方法, 即以8 bit为单位划分子网地址和主机号。 这样用点分十进制方法表示的IP地址就可以比较容易确定子网号。但是,并不要求A类或B类地址的子网划分都要以字节为划分界限。 子网对外部路由器来说隐藏了内部网络组织的细节。
任何主机除了IP地址以外,还需要知道IP中有多少比特用于子网号多少比特用于主机号。这是通过使用一个称为“子网掩码”的32bit 值来完成的。其中值为1的比特留给网络号和子网号,为0的比特留给主机号。下图是一个B类地址的两种不同的子网掩码:
给定IP地址和子网掩码以后,主机就可以确定IP数据报的目的是:
(1) 本子网上的主机;
(2) 本网络中其他子网中的主机;
(3) 其他网络上的主机。 如果知道本机的IP地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知), 也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。 子网掩码除了可以如IP地址一样用“点分十进制”方式表示外,还可以在IP地址后用一个斜线(/)后面写明子网掩码的位数的方法来表示。 如:192.168.1.25/24表示IP地址192.168.1.25的掩码为255.255.255.0。
实验说明
实验目的
1. 掌握IP数据报的报文格式
2. 掌握IP校验和计算方法
3. 掌握子网掩码和路由转发
4. 理解特殊IP地址的含义
5. 理解IP分片过程
实验原理
一、 IP报文格式
IP数据报是由IP首部加数据组成的。IP首部的最大长度不超过60字节。 IP数据报文格式如下图所示:

二、 IP分片
链路层具有最大传输单元(MTU Maximum Transmission Unit)这个特性,它限制了数据帧的最大长度。不同的网络类型都有一个上限值。以太网通常是1500字节。 如果IP层有数据包要传输,而数据包的长度超过了MTU,那么IP层就要对数据包进行分片操作。使每一片长度都小于MTU。 IP首部中“16位标识”、“3位标志”和“13位片偏移”包含了分片和重组所需的信息。另外,当数据被分片后,每个片的“16位总长度” 值要改为该片的长度值。
三、 IP路由表
大部分网络层设备都存储着一张记录路由信息的表格,称为路由表。它由许多条项目组成。网络层设备收到数据报后,根据其目的IP地址查找路由表确定数据报传输的最佳路径(下一跳)。然后利用网络层的协议重新封装数据报,利用下层提供的服务把数据报转发出去。
路由表的项目一般含有五个基本字段:目的地址、网络掩码、下一跳地址、接口、度量。
路由表按如下顺序匹配: 直接交付->特定主机交付->特定网络交付->默认交付 。
直接交付->
路由表项的“目的地址”字段是交付主机的本网络地址。
特定主机交付->
路由表项的“目的地址”字段是某台特定主机的IP地址。
特定网络交付->
路由表项的“目的地址”字段是另一个网络的地址。
默认交付 >
路由表项的“目的地址”字段是一个默认路由器(默认网关)。
实验原理
四、 路由选择过程
路由选择模块从IP处理模块接收到IP分组后,使用该分组的目的IP地址同路由表中的每一个项目按特定的顺序(按照前面介绍的“路由表匹配顺序”)查找匹配项,当找到第一个匹配项后就不再继续寻找了,这样就完成了路由选择过程。
匹配路由表项的方法是:将IP地址与路由表中的一个项目的“子网掩码”进行按位“与”操作,然后判断运算结果是否等于该项目的“目的地址”,如果等于,则匹配成功,否则,匹配失败。
路由选择模块的工作过程如图
网络结构
实验环境配置
实验:IP数据报分片
1. 在主机B上使用“MTU工具” 设置以太网端口的MTU为800字节(两个端口都设置)。
2. 主机A、B、E启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ICMP协议)。
3. 在主机A上,执行命令ping -l 1000 172.16.0.2。
4. 主机A、E停止捕获数据。
将ICMP的报文分片信息填入下表:
字段名称 | 分片序号1 | 分片序号2 | 分片序号3 |
Identification字段值 | |||
More fragments字段值 | |||
Fragment offset字段值 | |||
传输的数据量 |
分析表格内容,理解分片的过程。
5. 主机E恢复默认过滤器。主机A、E重新开始捕获数据。
6. 在主机A上,执行命令ping -l 2000 172.16.0.2。
7. 主机A、E停止捕获数据。察看主机A、E捕获到的数据,比较两者的差异,体会两次分片过程。
Wireshark抓的包
将ICMP的报文分片信息填入下表:
以request为例
将ICMP的报文分片信息填入下表:
字段名称 | 分片序号1 | 分片序号2 | 分片序号3 |
Identification字段值 | 60384 | 60385 | 60386 |
More fragments字段值 | 0 | 0 | 0 |
Fragment offset字段值 | 0 | 97 | 194 |
传输的数据量 | 776 | 776 | 456 |
分析表格内容,理解分片的过程。
ping命令底层,跳过运输层,直接使用网络层的ICMP,ICMP又被封装在IP数据报中。因为ICMP数据包不能独立在网络中转发,所以ICMP又被封装在IP数据报中。
因为发送2000字节的数据,因为发送端,我这里MTU设置为800,另一个机器默认实时1500。
我这里MTU设置为800,所以一次只能发送800个字节。
IP数据报首部长度为20个字节。
ICMP数据报首部长度为8个字节。
IP数据报的数据部分必须是8的倍数。
每一次传输需要减去IP的首部长度为20个字节,相当于减去司机的位置,其他的才是乘客能坐的。也就是IP数据报,数据部分每次还能携带 780个字节。
800-20=780
780/8=97……4
97*8=776
所以每个IP分片载满数据 776个字节。
第一个分片总长度796(776+20),携带数776个字节。
第二个分片总长度796(776+20),携带数776个字节。
第三个分片总长度2008-776*2 + 20 = 476,携带数456个字节。
练习二
假设有一个IP数据报,头部长度为20B,数据部分长度为2000B,现该分组从源主机到目的主机需要经过两个网络,这两个网络所允许的最大传输单元MTU为1500B和576B。请问该数据报如何让进行分组?
IP固定头部长为20B,数据部分长度为2000B的IP数据报在经过MTU为1500B的第一个网络时进行分片,分为2个分片,分片1携带1480B的数据,大小为1500B;分片2携带520B的数据,大小为520+20=540B;在经过MTU为576B的第二个网络时,分片1 仍然需要进一步分片。分为3个分片,分片3和分片4都携带556B的数据,分片5携带368B的数据。
由于分片2大小为540B,小于该网络的最大MTU值,因此无需分片。
这样目的主机将收到4个分片,即分片2、3、4、5。