文档章节

7.网际控制报文协议

alon龙武
 alon龙武
发布于 2014/11/20 14:25
字数 2348
阅读 220
收藏 10

1. 协议简介

IP协议缺少主机和管理查询所需要的机制。主机有时需要判断某个路由器或是对方主机是否活跃。网际控制报文协议ICMP是设计弥补上述两个缺点的,它是IP协议的伴侣。ICMP本身是一个网络层协议,但是它的报文并不是直接传递给数据链路层。实际上,ICMP报文首先要封装成IP数据报,然后才被传递到下一层。一个IP数据报,如果协议字段值为1,表示IP数据是ICMP报文

 

2. 报文

ICMP报文可划分为两大类:差错报告报文和查询报文。差错报告报文报告了路由器或主机在处理IP数据报时可能遇到的问题。查询报文总是成双成对出现,帮助主机或网络管理员从某个路由器或对方主机获取特定的信息

 

2.1 报文格式

ICMP报文由一个8字节的首部和可变长度的数据部分组成。类型字段定义了报文类型。代码字段指明了发送特定报文类型的原因。检验和字段用于确认数据的正确性。首部的其余部分对于每一种类型的报文都是特有的。差错报文中,数据部分携带的是用于找出引起差错的原始分组的信息。查询报文中,数据部分携带的是基于查询类型的额外信息

 

2.2 差错报告报文

ICMP不能纠正差错,只是简单地报告差错。差错纠正留给高层协议处理。差错报文总是发送给最初的数据源,因为数据报中关于路由唯一可用的信息就是源IP地址和目的IP地址。ICMP利用源IP地址把差错报文发送给数据报的源点。请注意:所有的差错报文的数据部分,包括原始数据报的IP首部和数据报数据的前8个字节。原始数据报首部是为了向接收差错报文的原始信息源给出关于数据报本身的信息。数据报数据的前8个字节是为了提供关于端口号和序号的信息。一共有5种类型的差错需要处理:终点不可达、源点抑制、超时、参数问题以及改变路由

关于ICMP差错报文的一些要点:对于携带ICMP差错报文的数据报,不再产生ICMP差错报文;对于分片的数据报,如果不是第一个分片,不产生ICMP差错报文;对于具有多播地址的数据报,不产生ICMP差错报文;对于具有特殊地址的数据报,不产生ICMP差错报文

终点不可达:路由器无法数据报找出路由,或者主机无法交付数据报时,数据报被丢弃,然后由路由器或主机向发出数据报的源主机返回一个终点不可达报文。注意:第一点,代码23的终点不可达报文只能由目的主机常见,其余的只能由路由器常见。第二点,即使路由器没有发送终点不可达报文,也不一定表示数据报已经被交付。路由器无法检测出导致分组没有交付的所有问题。

源点抑制:IP协议是无连接协议。ICMP的源点抑制报文是为了给IP协议增加某种程度的流量控制和拥塞控制而设计的。当路由器或主机因拥塞而丢弃数据报时,向数据报的发送方发送一个源点抑制报文。存在两个作用:第一,通知源点数据报已经被丢弃。第二,警告源点某处出现拥塞,必须放慢发送过程,直到拥塞得到缓解为止。存在几点值得注意:首先,遭遇拥塞的路由器或目的主机必须为丢失的每一个数据报向源主机发送一个源点抑制报文。其次,没有一种机制可以告诉源点,拥塞得到缓解,可以按原有速率发送数据报。源点只是不断地降低发送速率,直到不再收到更多的源点抑制报文位置。最后,一对一的通信或多对一的通信都可能产生拥塞。多对一通信情况,多个源点产生的数据报都必须由一个路由器或目的主机处理,源点抑制报文不一定有用。因为路由器或目的主机不知道哪个源点应该对拥塞负责

超时:一旦路由器将数据报的生存时间字段值递减后变成零,就丢弃数据报,并向源点发送超时报文。当最后的终点在规定的时间内没有收到所有的分片,就丢弃已收到的分片,并向源点发送超时报文。超时报文中,代码0仅供路由器使用,说明数据报的生存时间字段值为零。代码1仅供目的主机使用,说明不是所有的分片都按时到达

参数问题:当数据报经过因特网传输时,首部出现的任何二义性都可能产生严重的问题。如果路由器或目的主机发现二义性,或者数据报的某个字段缺少某个值,就会丢弃数据报,并向源点返回一个参数问题报文。代码0表示首部的某个字段有差错或二义性,指针字段值指向有问题的字节。代码1表示缺少所需的选项部分,不使用指针

改变路由:路由器参与路由选择的更新过程,并且更新是经常进行的,影响效率。为了提高效率,主机不参与路由选择更新过程,因为因特网上的主机数量比路由器多很多。动态地更新主机的路由表产生无法容纳的通信量主机通常使用静态路由选择。开始阶段,主机的路由表项数目有限,通常只知道默认路由器的IP地址。因此,主机可能把发往另一个网络的数据报发给一个错误的路由器。收到数据报的路由器会把它转发给正确的路由器。但是,为了更新主机的路由表,路由器要向主机发送一个改变路由报文。代码0对特定网络路由的改变。代码1对特定主机路由的改变。代码2基于指定服务类型的对特定网络路由的改变。代码3基于指定服务类型的对特定主机路由的改变

 

2.3 查询

回送请求与回答:回送请求与回送回答报文为了诊断而设计的,两者组合起来确定两个系统之间能否彼此通信。一个主机或路由器可以向另一个主机或路由器发送回送请求报文。收到回送请求报文的主机或路由器产生回送回答报文,并返回给源发送方。回送请求和回送回答报文可被用来检测IP协议的工作情况,检查另一个主机是否可达

时间戳请求与回答

两个主机或路由器可以使用时间戳请求和时间戳回答报文来确定IP数据报在两个机器之间来回所需的往返时间。也可用于同步两个机器的时钟。源点生成时间戳请求报文,源点把通用时间填入原始时间戳字段,其它两个时间戳字段填入零。终点生成时间戳回答报文,终点把请求报文的原始时间戳复制到回答报文的相同字段。然后,在接收时间戳字段填入收到请求报文时的通用时间。最后,终点在回答报文离开前将通用时间填入发送时间戳。发送时间=接收时间戳-原始时间戳。接收时间=分组返回时间-发送时间戳。往返时间=发送时间+接收时间。只有当源点和终点机器的时钟是同步的,发送时间和接收时间的计算才是准确的。但是,即使两个时钟没有同步,往返时间的计算还是准确的,因为每一个时钟在往返时间的计算出现两次,它们在同步上的差别被抵消。时间差=接收时间戳-原始时间戳-单向经历时间

2.4 检验和

发送方计算检验和的步骤:检验和字段置为零;计算首部和数据的所有16位字之和;得到的和求反码,得到检验和;结果存储在检验和字段

© 著作权归作者所有

共有 人打赏支持
alon龙武
粉丝 2
博文 14
码字总数 20481
作品 0
深圳
程序员
计算机会碰见的英语单词SUPER

一、计算机网络(computer network) (一)transpotr protocol:运输层协议 1.UDP(User Datagram protocol):用户数据报协议 2.TCP (Transmission Control Protocol):传输控制协议 (二...

cyleft
2017/10/30
0
0
Linux网络编程(二)

目录 前言 实体()表示任何可发送或接受信息的硬件或软件进程。 协议是控制两个对等实体进行通信的规则的集合。在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本...

simonforfuture
02/11
0
0
爱创课堂每日一题七十八天-说说网络分层里七层模型是哪七层?

应用层:应用层、表示层、会话层(从上往下)(HTTP、FTP、SMTP、DNS)传输层(TCP和UDP)网络层(IP)物理和数据链路层(以太网)每一层的作用如下:物理层:通过媒介传输比特,确定机械及电...

全栈web笔记
2017/12/20
0
0
面试带你飞:这是一份全面的 计算机网络基础 总结攻略

前言 计算机网络基础 该是程序猿需掌握的知识,也是面试过程中常常考察的内容,但往往会被忽略 今天,我将献上一份详细 & 清晰的计算机网络基础 学习指南,涵盖 协议、协议、等,希望你们会喜...

Carson_Ho
04/19
0
0
网络基础之(ISO七层模型与TCP/IP四层模型)

ISO/OSI七层模型 ISO ISO:国际标准化组织 OSI:开放系统互联模型 IOS:苹果操作系统 七层模型 七层模型 上三层:为用户提供服务 下四层:提供数据传输服务 传输单位: 比特:一个比特是一个...

analanxingde
2017/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day63-20180821-流利阅读笔记-待学习

性别歧视在日本:“我是女生,所以社会不让我学医” 毛西 2018-08-21 1.今日导读 大家在看病的时候,有留意过女医生的比例吗?在性别歧视现象十分严重的日本,男医生和女医生的比例达到了惊人...

aibinxiao
51分钟前
2
0
Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
4
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
2
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部