网络 | 07. IP数据报与IP协议
250806 IP数据报与IP协议
-
IPv4数据报(IP数据报)首部格式
-
IP数据报是实现IP协议主要功能的基础,其结构如下
-
有两部分组成,20字节的固定部分(必须包含的部分),和最大40字节的可变部分(可选的字段用于增加额外的功能)
-
IP数据报常以32个比特(4字节)为单位进行表述,即图中的1行
-
图中每个小格子称为字段/域,每个字段或某些字段的组合用来表达IP协议的相关功能
-
版本,占4比特,表示IP协议的版本,通信双方所使用的IP协议版本必须一致,目前广泛使用的IP协议版本号为4(即IPv4)
-
首部长度字段, 占4比特,表示IP数据报收首部的长度,其取值以4字节为单位,最小十进制值为5(20字节的固定部分/4),最大十进制值为15(20+40字节/4)
-
可选字段,长度从1-40字节不等,用来支持排错、测量及安全等措施;可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,这增加了每一个路由器处理IP数据报的开销,实际上可选字段很少被使用
-
填充字段,可变字段长度不一定是4的整数不,用该字段填充0,确保首部长度为4字节的整数倍
-
区分服务字段,占8比特,用来获得更好的服务
- 该字段在就就标准中叫做服务类型,但实际上一直没有被使用过;
- 1998年,因特网工程任务组IEFT把这个字段改名为区分服务,利用该字段的不同数值,可提供不同等级的服务质量;
- 只有在使用区分服务时,该字段才起作用,一般情况下都不使用该字段
-
总长度字段占16比特,用于表示IP数据报的总长度(首部+数据载荷),以字节为单位,最大取值为65535(实际上很少传送这么长的IP数据报)
-
标识、标志、片偏移
-
生存时间TTL,占8比特,最初以秒为单位,最大生存周期为255秒
- 由路由器转发IP数据报时,将IP数据报首部中的该字段值减去IP数据报在本路由器上所耗费的事件,若不为0就转发,否则丢弃
- 现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段值减1,若不为0就转发,否则丢弃
-
协议字段,指明IPv4数据报的数据部分是何种协议数据单元,常用的一些协议和相应的协议字段值如下
-
首部检验和,占16比特,用于检测首部在传输过程中是否出现差错,其原理比CRC检验码(循环冗余检错码)简单,称为因特网检验和
- IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化
- 由于IP层本身不提供可靠传输服务,摒弃计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不在计算首部检验和,从而更快转发IP数据报
-
源IP地址和目的IP地址字段,各占32比特,用来填写IP数据报发送的源主机和目的主机的IP地址
-
练习
-
-
-
网际控制报文协议ICMP
-
为了更有效地转发IP数据报,并提高交付成功的机会,在网际层是用了网际控制报文协议ICMP(Internet Control Message Protocol)
-
主机或路由器使用ICMP协议来发送差错报告报文和询问报文,其被封装在IP数据报中发送
-
ICMP差错报告报文有以下5种
-
终点不可达
-
源点抑制
-
时间超过
-
参数问题
-
改变路由(重定向)
-
以下情况,不应发送ICMP差错报告报文
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
-
练习
-
-
询问报文有2种
-
回送请求和回答
- ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
- 这种询问报文用来测试目的站是否可达,及了解其有关状态
-
时间戳请求和回答
- ICMP事件戳请求报文是请某个主机或路由器回答当前的日期和时间
- 在ICMP时间戳回答报文中,有一个32位的字段,其中写入的整数代表从1900年1月1日起,到当前时刻一共有多少秒
- 这种询问报文用来进行时钟同步和测量时间
-
-
-
ICMP应用举例
-
分组网间探测PING(Packet InterNet Groper)
- 用来测试主机或路由器之间的连通性
- 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
- 使用的ICMP回送请求和回答报文
-
跟踪路由(trace route,tracert)
-
用来测试IP数据报从源主机达到目的主机都要经过哪些路由器
-
windows版本使用
tracert
命令,应用层也是直接使用了网际层ICMP的回送请求和回答报文,以及差错报告报文 -
在unix版本中,使用
traceroute
命令,在运输层使用UDP协议,仅使用ICMP的差错报告报文 -
实现原理
- 可以直接发送一个TTL=1的回送请求报文,其在达到第一个路由器后,会返回一个差错报告(时间超过),这样主机就知道第一个路由器是谁了
- 下一轮则发送TTL=2的请求,知道下一个节点
- 当到达最后目的主机之后,解析该数据,发现其内部是一个ICMP回送请求报文,于是向源主机返回ICMP回送请求回答报文,由此知道最后一站在哪里
-
-
-
-
虚拟专用网VPN(Virtual Private Network)
-
若需要让两个异地的网络之间相互通信
- 最简单方便的方法是租用电信公司的通信线路,但租金很高
- 也可以通过公用的因特网,作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网
-
虚拟专用网内部的各主机,如何分配IP地址
-
作用过程
-
- 两个子网络,各自至少需要一个路由器具有合法的全球IP地址,这样他俩才能利用因特网进行通信
- 当需要通信时,源主机会将数据封装为IP数据报发送给路由器R1,其填写的IP地址为内部IP地址
- 路由器R1收到该数据报后,发现其目的网络必须通过因特网才能到达,就将该IP数据报进行加密(确保安全),重新添加IP数据报的首部,封装称为在因特网上发送的外部数据报,其IP地址填写为全球地址
- 当路由器R2在收到该信息后,将其解密,恢复出内部的IP数据报,提取出目的地址,将其发送给相应的主机
- 这样做之后,虽然数据报可能通过因特网的多个路由器,但从逻辑上看,就像R1和R2之间有一条直通的点对点链路一样,在本机构的专用网上进行传输,因而该技术也被称为IP隧道技术
-
-
不同类型
- 同一机构内,不同部门的内部网络所构成的虚拟专用网VPN,又称为内联网VPN
- 有时一个机构的VPN需要有某些外部机构(通常是合作伙伴)参加进来,这样的VPN称为外联网VPN
- 在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源,这种VPN称为远程接入VPN
-
-
网络地址转换NAT(Network Address Translation)
-
虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除
-
1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题
-
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源 #Q# 没看懂这句话
-
举例
-
核心问题:内部专用网络中的主机,如何访问外部因特网上的主机?
- 这需要在连接外部因特网的路由器上,安装NAT软件,此时路由器称为NAT路由器,其至少拥有1个有效的全球IP地址
- 此时,所有使用私有地址的主机,在和外界通信时,都要在NAT路由器上将其私有地址转换成全球IP地址
-
当私有地址主机需要跟因特网主机发送IP数据报时,该主机将数据报发送给NAT路由器,此时源地址为私有地址,目的地址为全球地址
-
NAT路由器从自己的全球IP地址池中,为该主机分配一个临时的全球IP地址,并将IP数据报的源地址修改为该地址,然后将私有地址和全球地址的对应关系记录在NAT转换表中,随后转发该IP数据报
-
当外部主机给源主机发回数据报时,其填写的源地址和目的地址都是全球IP地址;NAT路由器收到后,在NAT转换表中进行查找,找到该数据报的目的地址所对应的私有地址,于是修改该IP数据报的目的地址为私有地址,并将其发送给相应的主机
-
多个内部主机在通信时,需要有多个临时全球IP地址的记录
-
=> 问题:如果NAT路由器具有n个全球IP地址,那么至多只能有n各内网主机能够同时和因特网上的主机通信
-
值得一提的是,外网主机不能够首先发起通信,因为路由器在收到外网的IP数据报后,在NAPT转换表中找不到相应的记录
-
位于网络内部(使用私有地址)的主机,也不能直接充当因特网服务器
-
对于一些点对点网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到麻烦,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题(内网穿透)
-
反过来想,由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护
-
-
-