主要讲述TCP/IP协议方面的内容。讲述了RFCS的标准协议,结合大量的实例讲述了TCP/IP协议,TCP/IP的知识:路由协议、寻址协议、组控制协议、简单邮件传输协议等。
第一卷适用于网络技术,而2-3卷更侧重于编程。
2、学习协议分析技术的话,我们需要知道每个协议所处的层次,这样对于我们有很大的帮助!
ICMP协议原理
一、基本概念
Internet Control Message Protocol(ICMP): 网际控制报文协议。
IP提供的尽力数据报通信服务无法连接服务,而并不能解决网络底层的数据报丢失、重复、延迟或乱序等问题,TCP在IP基础建立有连接服务解决以上问题,不能解决网络故障或其它网络原因无法传输数据包的问题。
所以,ICMP设计的本意就是希望对IP包无法传输时提供差错报告,这些差错报告帮助了发送方了解为什么无法传递,网络发生了什么问题,确定应用程序后续操作。
二、协议特征
1、ICMP就像一个更高层的协议那样使用IP(即,ICMP消息被封装在IP数据报中)。然而,ICMP是IP的一个组成部分,并且所有IP模块都必须实现它。
2、ICMP用来报告错误,是一个差错报告机制,它为遇到差错的路由器提供了向最初源站报告差错的办法,源站必须把差错交给一个应用程序或采取其它措施来纠正问题。
3、ICMP不能用来报告ICMP消息的错误,这样就避免了无限循环。当ICMP查询消息时通过发送ICMP来响应。
4、对于被分段的数据报,ICMP消息只发送关于第一个分段中的错误。也就是说,ICMP消息永远不会引用一个具有非0片偏移量字段的IP数据报。
5、响应具有一个广播或组播目的地址的数据报时,永远不会发送ICMP消息。
6、响应一个没有源主机IP地址的数据报时永远不会发送ICMP消息。也就是说,源地址不能为0,一个回送地址,一个广播地址或者一个组播地址。
7、通过ICMP可以知道故障的具体原因和位置。
8、由于IP不是为可靠传输服务设计的,ICMP的目的主要是用于TCP/IP网络中发送出错和控制消息。
9、ICMP的错误报告只能通知出错数据包的源主机,而无法通知从源主机到出错路由器途中的所有路由器(环路时)。
10、ICMP报文的种类有三大类种,即ICMP差错报告报文、控制报文、请求/应答报文。
三、协议封装
每个ICMP报文放在IP数据报的数据部分中通过互联网传递,而IP数据报本身放在二层帧的数据部分中通过物理网络传递。
四、协议报文格式
ICMP定义了五种常用差错报文和六种询问报文类型,以及用代码表达某类型下面不同情况的细分。
五、协议主要差错报文
六、协议常见的主要报错
1、目的站不可达Desfination Unreachable
当路由器检测到数据报无法传递到目的地时,向创建数据报的源主机发出目的不可达报文。这报文区分:网络不通(如路有故障),目的主机连不通,协议不可达、端口不可达等共15种不同的情况,用不同代码表示。
2、 源站抑制Source Quench
当路由器收到太多的数据报以致内存不够时,在丢弃所收数据报的同时,向创建数据报的源主机发送源抑制报文。源主机收到源抑制报文后,需要降低发送数据报的速率。
3、超时Time Exceeded
有两种情况需要发送超时报文。一种是路由器把数据报的生存时间减至零时,路由器丢弃数据报,并向源主机发送超时报文;另一种是一个数据报的所有段到达前,重组计时到点,接收主机也会向源主机发送超时报文。
TTL值控制数据报的跳数,TTL值每跳一次就(减一)。
TTL值最大数是255。
参数问题Parameter Problem
数据报头部的标志出现差错,或缺少必须的选项。
七、ICMP协议常见应用
如:ping、Traceroute
Ping:使用ICMP回送和应答消息来确定一台主机是否可达。ping是应用层直接使用网络层ICMP的一个例子。
Traceroute:该程序用来确定通过网络的路由IP数据报。
Traceroute基于ICMP和UDP。它把一个TTL为1的IP数据报发送给目的主机。第一个路由器把TTL减小到0,丢弃该数据报并把ICMP超时消息返回给源主机。这样,路径上的第一个路由器就被标识了。随后用不断增大的TTL值重复这个过程,标识出通往目的主机的路径上确切的路由器系列.
继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL为1的IP数据报,也不会丢弃该数据并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。
Traceroute实现有两种方法:
一种:发送一个ICMP回应请求报文;目的主机将会产生一个ICMP回应答复报文。Microsoft实现(tracert)中采用该方法。当回应请求到达目的主机时,ICMP就产生一个答复报文,它的源地址等于收到的请求报文一个ICMP目的IP地址。
另一种:发生一个数据报给一个不存在的应用进程;目的主机将会产生一个ICMP目的不可达报文。大多数UNIX版本的traceroute程序采用该方法。Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序 福都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
希望我的笔记可以帮助大家,谢谢!
我是MRX