关于IP编址和ICMP协议
IP编址和ICMP协议
IP协议和IP编址
以太网帧中的type字段值为0X0800,表示该帧的网络层协议为IP协议。
IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。
IP报文结构
- 版本号: 指IP协议的版本。通信双方使用的IP协议版本必须一致,对于IPv4来说,就是4;
- 报文长度: 4位,能表示0到60个字节;
-
服务类型(8位):
000 ROUTINE
001 PRIORITY
010 IMMEDIATE
011 Flash
100 FLASH OVERRIDE
101 CRITIC/ECP
110 INTERNET CONTROL
111 NETWORK CONTROL
由3位优先权字段(已弃用),4位TOS字段和1位保留字段(必须置为0)组成。4位TOS分别表示:最小延迟、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选一个。对于ssh/telnet 这样的应用程序,最小延迟比较重要;对于ftp这样的程序,最大吞吐量比较重要; - 16位标识符: 唯一的标识主机发送的报文。IP软件在储存器中维护一个计数器,每产生一个数据报,计数器就+1,并将此值赋值给标识字段。当数据报长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。该字段的表示范围是0到65535之间,标识在长报文分片后,该报文位于分片中的第几片信息;
- 16位总长度: IP数据报(首部+数据)整体占多少字节。该字段为16位,所以数据报最大长度为 216−1=65535字节。 ;
- 3位标志字段: 第一位保留(现在不用,但说不定以后要用到);第二位DF,当DF位被设置为1时,表示路由器不能对该报文进行分片处理,只有当DF=0时,才允许分片;第三位(最低位)MF,MF=1表示后面还有分片的数据报,MF=0表示这是若干数据报片中的最后一个;
- 13位片偏移: 本分片数据在初始数据报数据区中的偏移量,偏移量以8 Byte为单位,重组时分片顺序由片偏移提供。较长的报文在分片之后,某片在原报文中的相对位置。片偏移以8字节为单位,这就是说除了最后一个分片,每个分片的长度是8字节的整数倍;
- 生存时间(8位): 数据报到达目的地的最大报文跳数,一般是64。每经过一个路由,TTL 就会 -1,一直减到0还没有到达,那就丢弃了。这个字段主要是防止出现路由循环 ;
- 协议类型(8位): 表示上层协议的类型,6是TCP协议,17是UDP协议;
- 报头校验和(16位): 校验IP首部,保证IP头部数据的完整性(不检验数据部分),并不是使用CRC进行校验;
- 32位源IP地址和32位目的IP地址: 表示发送端和接收端的IP地址 ;
- IP选项
公有、私有、特殊IP地址
IP地址,一共分成了5类,范围分别如下:
A类IP:从0.0.0.0 – 127.255.255.255,共有16777216个IP
B类IP:从128.0.0.0 – 191.255.255.255,共有65536个IP
C类IP:从192.0.0.0 – 223.255.255.255,共有256个IP
D类IP:从224.0.0.0 – 239.255.255.255
E类IP:从2240.0.0.0 – 255.255.255.255
而其中,能在Internet或被用户使用的A、B、C三类,而D类用作组播地址,E类作为科研保留地址段
公有IP地址
组建一个企业级网络,需要去向“电信运营商ISP”申请一个接入Internet的宽带,同时ISP还会给我们分配一个或多个IP地址,这些IP地址可以供我们企业内部上网,这些ISP分配给我们的IP,就是公有IP。
公有IP地址的范围:
- A类的公有IP:
1.0.0.0~9.255.255.255
11.0.0.0~126.255.255.255 - B类的公有IP:
128.0.0.0~172.15.255.255
172.32.0.0~191.255.255.255 - C类的公有IP:
192.0.0.0~192.168.255.255
192.169.0.0~223.255.255.255
私有IP地址
企业或家庭内部组建局域网用的IP,一般都会用私有IP。私有地址属于非注册地址,专门为组织机构内部使用,它是局域网范畴内的,私有IP禁止出现在Internet中,在ISP连接用户的地方,将来自于私有IP的流量全部都会阻止并丢掉。
私有IP地址的范围:
- A类私有IP地址:
10.0.0.0~10.255.255.255 - B类私有IP地址:
172.16.0.0~172.31.255.255 - C类私有IP地址:
192.168.0.0~192.168.255.255
特殊IP地址
特殊IP地址的范围:
- 127.0.0.0 ~ 127.255.255.255
- 0.0.0.0
- 255.255.255.255
VLSM技术
- VLSM是为了有效的使用无类别域间路由和路由汇聚来控制路由表的大小,网络管理员使用先进的IP寻址技术,VLSM就是其中的常用方式,可以对子网进行层次化编址,以便最有效的利用现有的地址空间。
- VLSM规定了如何在一个进行了子网划分的网络中的不同部分使用不同的子网掩码。这对于网络内部不同网段需要不同大小子网的情形来说很有效。
VLSM的基本算法:
VLSM是将大范围的IP网络划分成多个小范围的IP网络,为某一个单位或企业的不同部门对内可显示不同的网络,对外可显示同一个IP网络。提到VLSM,不得不提到的是掩码。掩码同IP一样,具有32位的二进制,用于与某一个IP进行运算,算出该IP的网络号。即将32位的IP与32位的掩码进行“与运算“,这样就可以得出网络号。
如:IP为:21.31.233.69与掩码255.255.255.192的网络号:
故:
21.31.233.69 & 255.255.255.192 = 21.31.233.64
所以该子网网络号为 21.31.233.64。
网关
大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关就是一个网络连接到另一个网络的“关口”。也就是网络关卡。
网关又称网间连接器、协议转换器。默认网关在网络层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。
网关实质上是一个网络通向其他网络的IP地址。
在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。
而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络A向网络B转发数据包的过程。
ICMP协议
ICMP是Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
定义
- ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。
- 它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段的值=1
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
ICMP协议的功能
ICMP协议的功能主要有:
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
我们需要注意几点:
1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
3. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6。
ICMP报文类型
下面是几种常见的ICMP报文:
- 响应请求
我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。 - 目标不可到达、源抑制和超时报文
这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。 - 时间戳
时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。
ICMP的消息类型和编码类型
类型 | 编码 | 描述 |
---|---|---|
0 | 0 | Echo Reply |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
5 | 0 | 重定向 |
8 | 0 | Echo Request |
ICMP的应用
ping
ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。
注意:此处 ping 的是域名,不是url,域名可以通过DNS解析成IP地址
trancert
trancert也是基于ICMP协议实现的。
功能:
用来跟踪一个分组从源点到终点的路径。
每一行有三个时间出现,是因为对应于每一个TTL值,源主机要发送三次同样的IP数据报。
谢谢阅读啦~