`
java_mzd
  • 浏览: 583205 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

TCP/IP网络层谜云之ICMP

阅读更多

本文上接《TCP/IP网络层谜云》 http://java-mzd.iteye.com/blog/1019088

十四。为什么需要ICMP?

因为IP协议不提供可靠性且不能保证信息传递,因此发生问题时,通知发送人是很重要的(IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP)


十五。什么是ICMP? 

ICMP: Internet Control Message Protocol 即Internet消息控制协议。

ICMP定义了一套差错报文控制报文,用于用户主机与路由之间交换不可到达地址、网络拥塞、重定向到更好的路径、报文生命周期超时等信息

ICMP协议是一种提供(有关阻止数据包传递的)网络故障问题反馈信息的机制。(针对阻止数据包传递或者网络故障。)它让TCP等上层协议能够意识到数据包没有送达目的地。

关于ICMP与TCP的差错控制对比?

比如主机A到主机B的通信,中间Router  r1 到Router  r2 的网络连接断了。

通过ICMP,则可以快速诊断出出错原因,并且报告主机。(差错诊断)

TCP的差错控制,主要是体现在,网络断了,收不到确认回复,TCP会一直再次发送数据包,直到收到确认回复。(差错处理)

 

ICMP提供一组易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者发送设备随后可根据ICMP报文确定发生错误的类型,确定如何才能更好地重发失败的数据报但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

 

十六。ICMP协议有哪些数据包?

一个ICMP数据包实际上就是一个(数据部分为ICMP协议数据的)IP数据包。 

IP

ICMP

Type

Code

Checksum

ICMP数据


如前所述,ICMP主要分为差错报文控制报文

差错报文包括:目标不可到达(网络、协议、主机、端口不可到达;禁止分割、目标网络不认识、目标主机不认识等等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等

控制报文包括:请求回显(ping请求)、回显应答(ping应答)、地址掩码请求、地址掩码应答等等

如上,我们可以发现,同一类型的错误(不可到达)可能有不同种类(网络不可到达、主机不可到达),因此,我们使用type来code两个标志来确定一个具体的错误。

因为需要指出具体是哪个主机上的哪个程序发出的信息没有到达。

因此,每一个ICMP的错误消息,应该包含:

1.具体的错误类型(Type/code 决定)

2.引发ICMP错误消息的数据包的完全IP包头哪个主机的数据)

3.数据报的前8个字节----UDP报头或者TCP中的port部分(主机上的哪个程序)

因此,ICMP错误消息的格式应该为如下

Type(8)

Code(8)

Checksum(16)

Unused(32)

Internet Header +64 Bits of Original Data Datagram

 
控制报文因为控制的消息各不相同,所以有所差异。下面分析下请求回显(ping)和回显应答,其他的消息,大家可以触类旁通。

Type

Code

Checksum

Identifier

Sequence Number

Data

当主机A需要知道和主机B通信的状况(信息传递延时、丢包率)时,我们该怎么办呢?

我们可以参考声纳和雷达的原理:主机A发送一个ICMP回显请求(type=8,code=0)报文,数据域中存放当前时间T1,目的IP为主机B。主机B收到该ICMP回显请求报文后,将目的IP和源IP调换位置,其他信息都不变(IndentifierSequence Number,回复一个ICMP回显应答(type=0,code=0)。主机A收到改ICMP回显应答的时间为T2。则,到主机B的通信时间为:T2-T1

又因为,要考虑丢包,所以我们向主机B发送多个回显请求,用Sequence Number来区分各个请求,根据Sequence Number,即可知道应答对应的请求数据包。

 

Ping命令就是这样的一个实现其实我们在命令行下输入ping ip命令时,就是调用Ping程序。Ping程序根据输入的IP(域名)封装ICMP请求应答,发送出去,并且接受ICMP回显应答,进行解析,输出。

 

关于超时IP报头中的生存期(TTL)属性,用来控制报文段在网络中的生存期。

 

试想一下,当网络中的某些路由出现问题,Router AIP a 的下一跳路由为Router B。同时在Router B中,又将IP a 的下一跳路由为 Router A。那么显然,两个路由器之将会间形成回路,通往网段a的数据包,将会一直在两个路由之间发送,导致网络流量爆炸,同时,数据包也无法正确的到达网络a

 

因此,当IP数据包每经过一个路由器时,路由器将IP数据包中的TTL值减一。当TTL值为0时,路由器判断数据包超时,发送ICMP超时信息给源主机。

 

当我们想知道:从主机A发送到主机B的数据包在网络中都经过了哪些路由器的时候,我们有什么办法呢?

我们知道,当IP数据包在路由中出错时,路由器会向发送源发送一个ICMP错误报文,发送端从该ICMP错误报文中,可以得到该路由的IP

我们可以利用此原理。要得到从主机A到目标主机B之间的所有路由的IP,那么我们必须让IP数据包在每个路由器中都出错一次。

又因此,TTL值在经过的每个路由器中都会减1。因此,我们可以利用TTL的超时信息,在每个路由中都发生一次。即可得到从从主机A到主机B之间的所有路由的IP

 

PS.怎么判断数据包正确到达了目标主机B

IP数据包到达了目标主机,将不会再发送TTL超时错误。而且在目标主机B中,没有运行相对应的应用层程序,因此,将没有程序会回应我们发送的IP数据包。那么,我们将如何知道IP数据包已经到达了目标主机呢?

我们可以为数据包分配一个目标主机几乎不可能监听的端口,从而,当IP数据包到达目标主机后,目标主机会回复相应的不可到达、端口不可到达ICMP错误信息,从而,我们可以确认IP数据包已经到达了目标主机。

 

综上,我们可以:源主机A发送IP数据包,IP为目标主机Bport几乎不可能监听的portTTL从一开始一直往上增加,直道收到来自主机BICMP 不可到达(端口不可到达)信息。

Tracerouter 命令就是实现这样功能的一个程序。我们可以通过tracerouter ip来调用此功能。

 

PS.因为每次路由时的路由路径可能不一样,那么在tracerouter过程中,我们又如何解决这个问题?

而且,如果目标主机正好监听了这一我们认为不可能监听的端口呢?

针对这些问题,欢迎各位读者回答。

 


PS。这是第四次更改了。。希望JE别抽风了。。让他们正常显示吧。。

这年头,每个用心写总结的人。。你们都伤不起啊。。。

好不容易写了一周啊。。

从2000写到8000啊。。又从8000改到4000啊。。又从4000改到6600啊

写了改

改了啊。。

伤不起啊。。

好不容易写好了。。

JE还不给力。。显示不正常啊。。

又重新写了后面两个大问题好几遍啊。。好几遍啊


伤不起啊。。。


3
4
分享到:
评论
3 楼 龙三少454 2014-02-05  
挺不错的,学习了!!!
2 楼 leelege 2011-05-04  
感谢楼主分享 期待更多内容~~
1 楼 cosina 2011-04-28  
   学倒不少! 继续写哈哈

相关推荐

    TCP/IP详解论文

    TCP/IP协议由网络层的IP协议和传输层的TCP协议组成。TCP/IP协议在网络中的应用非常广泛,它是供已连接因特网的计算机进行通信的通信协议。下面是TCP/IP协议的详细解释: 1. TCP/IP协议的定义 TCP/IP协议是供已连接...

    TCP/IP详解

    《TCP/IP详解》是网络通信领域的一部经典之作,由W. Richard Stevens撰写,全面而深入地探讨了TCP/IP协议族的各个方面。本压缩包包含了该系列的三卷完整版,分别为《卷一:协议》、《卷二:实现》和《卷三:应用》。...

    网络协议TCP/IP实验五 ICMP 协议分析实验

    - **ICMP**(Internet Control Message Protocol,互联网控制报文协议)是一种辅助TCP/IP协议,主要用于传输错误信息和控制信息,帮助网络设备诊断网络问题。 #### 2. 实验环境 - **操作系统**: Windows 7 - **网络...

    TCP/IP进行网际互联 卷1 原理、协议与结构和TCP-IP详解卷一:协议

    TCP/IP协议族是互联网的核心,它定义了网络通信的基本规则。这套协议分为多个层次,包括应用层、传输层、网络层、数据链路层以及物理层,每层都有其特定的功能,共同协作使得数据能够在不同的网络设备之间传输。 ...

    TCP/IP常见面试知识点

    网络层是 TCP/IP 协议的核心,所有的 TCP、UDP、ICMP、IGMP 的数据都以 IP 数据格式传输。IP 协议的主要功能包括: * IP 地址:在数据链路层中,我们一般通过 MAC 地址来识别不同的节点,而在 IP 层我们也要有一个...

    《TCP/IP网络实验程序篇》源码

    《TCP/IP网络实验程序篇》源码是一套深入理解TCP/IP协议栈的实践教程,它包含了一系列用于解析、创建和模拟IP、TCP、UDP、ICMP以及IPv6协议头的程序。这些源代码旨在帮助开发者和网络专业人士更直观地了解这些网络...

    microchip TCP/IP协议栈应用笔记V3.6

    TCP/IP协议栈是互联网通信的核心,它由多个层次的协议组成,包括链路层、网络层、传输层和应用层。在Microchip的实现中,这些层次包含了如ARP(地址解析协议)、IP(网际协议)、TCP(传输控制协议)、UDP(用户数据...

    TCP/IP 学习心得

    首先,TCP/IP模型分为四个主要层次:应用层、传输层、网络层和数据链路层。每一层都有其特定的任务和协议,共同构成了网络通信的基础。 1. **应用层**:这是最顶层,包含了各种应用程序如HTTP(超文本传输协议)、...

    Linux TCP/IP 架构、设计与实现[TCP/IP Architecture, Design and Implementation in Linux] 1/5

    TCP/IP Architecture, Design and Implementation in Linux 1/5 For All: [Part 1/5] http://download.csdn.net/source/1345609 [Part 2/5] http://download.csdn.net/source/1345649 [Part 3/5] ...

    tcp/ip网络协议

    TCP/IP协议族由多个层次组成,包括应用层、传输层、网络层和数据链路层,每一层都有其特定的功能和协议。 1. **应用层**: 应用层是TCP/IP协议族的最高层,它为用户提供各种网络应用,如HTTP(超文本传输协议)、...

    C# TCP/IP通信小例子

    C#是一种广泛用于构建桌面和Web应用程序的编程语言,它提供了强大的网络编程能力,其中包括TCP/IP协议的支持。本示例"**C# TCP/IP通信小例子**"是一个基础教程,旨在帮助新手理解如何在C#中实现TCP/IP通信。 TCP...

    tcp/ip协议实验

    Internet控制报文协议(ICMP)是tcp/ip协议中的一种错误报告协议,负责报告网络错误和异常情况。在这个实验中,学生将学习ICMP协议的工作原理,并了解其在tcp/ip协议中的作用。 实验五 Internet 组管理协议 IGMP ...

    tcp/ip教程 tcp/ip教程

    TCP/IP模型由四层组成:应用层、传输层、网络层和数据链路层,每个层都有其特定的功能和协议。 1. **应用层**:这是TCP/IP模型的最高层,它包含了各种应用协议,如HTTP(超文本传输协议)、FTP(文件传输协议)、...

    TCP/IP源码 完整的TCP/IP代码程序

    TCP/IP协议族由多个层次组成,包括应用层、传输层、网络层和数据链路层。每一层都有其特定的功能和协议,如应用层的HTTP、FTP,传输层的TCP和UDP,网络层的IP,以及数据链路层的Ethernet等。理解这些协议的交互过程...

    基于LABVIEW的TCP/IP网络通信程序

    在本文中,我们将深入探讨如何使用LabVIEW进行TCP/IP网络通信。LabVIEW,全称Laboratory Virtual Instrument Engineering Workbench,是一种图形化编程环境,广泛应用于科学、工程和工业领域。利用其强大的数据处理...

    tcp/ip详解第一卷

    《TCP/IP详解》第一卷是关于网络通信协议TCP/IP的经典入门教材,由W. Richard Stevens撰写。该书深入浅出地讲解了TCP/IP协议族,是网络工程师和相关技术人员必备的参考资料之一。TCP/IP协议族是现代互联网通信的基础...

    TCP/IP超全资料

    TCP/IP模型分为四层(在OSI七层模型的基础上简化而来):应用层、传输层、网络层和数据链路层。每一层都有其特定的功能和协议。 1. **应用层**:这是TCP/IP模型的最高层,包括HTTP(超文本传输协议)、FTP(文件...

    TCP/IP 卷一 TCP/IP 详解

    1. 链路层:这是TCP/IP模型的最底层,负责在物理网络上传输数据帧。常见的链路层协议有Ethernet(以太网)和PPP(点对点协议)等,它们定义了数据如何在物理介质上进行传输。 2. 网络层:主要负责数据包在网络中的...

Global site tag (gtag.js) - Google Analytics