`
evasiu
  • 浏览: 168896 次
  • 性别: Icon_minigender_2
  • 来自: 广州
博客专栏
Fa47b089-e026-399c-b770-017349f619d5
TCP/IP详解卷一>阅读...
浏览量:12520
社区版块
存档分类
最新评论

<tcp/ip详解卷一>阅读笔记(2)——IP层的分用(ICMP)

 
阅读更多

这一次将从ip首部中的“协议”字段的分用说开来。前面的图中我们可以看到,所有的TCP、UDP、ICMP及IGMP数据都以ip数据报格式传输。TCP段、UDP数据报文将交付到上一层即应用层,而ICMP及IGMP报文则由tcp/ip协议模块处理,不会支付到用户应用层。

1. ICMP:Internet控制报文协议

ICMP报文是在ip数据报内部被传输的,除去ip首部,其基本格式如下:



有些icmp报文用于查询,有些icmp报文用于差错报告,各种类型的icmp报文如下图所示:

对ICMP差错报文和ICMP查询报文的处理不同,在对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文。当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节,这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或者UDP首部中的TCP或UDP端口号来判断)。

下面各种情况都不会导致产生ICMP差错报文:

(1)ICMP差错报文(但是ICMP查询报文可能会产生ICMP差错报文)

(2)目的地址是广播地址或多地址或多播地址的IP数据报

(3)作为链路层广播的数据报

(4)不是IP分片的第一片

(5)源地址不是单个主机的数据报

 

2. ICMP查询报文

列表中提到的查询报文,包括回显应答/请求、路由器通告/请求、时间戳请求/应答和地址掩码请求/应答,《tcp/ip...》这本书基本都作了介绍。

首先是子网掩码请求/应答报文,它用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文,其格式如下:

ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回,这样发送端就可以把应答与请求进行匹配。

ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC),它提供了毫秒级的分辨率,其报文格式如下:

请求端填写发起时间戳,应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。其中各项在时间线上的位置如下:

回显请求/应答即我们平时使用的ping程序使用的报文。ping的目的是为了测试另一台主机是否可达,该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。大多数的TCP/IP实现都在内核中直接支持ping服务器(因此也可以设置为关闭该服务器),ICMP回显请求/应答报文的格式如下:

前面我们提到过IP选项中有一个记录路由选项,ping程序通过加-r指令可以在ip数据报的首部加入记录路由选项,这样,每个处理该数据报的路由器都把它的ip地址放入选项字段中,当数据报到达目的端时,ip地址清单应该复制到ICMP回显应答中,这样返回途中所经过的路由器地址也被加入清单中。但是,ip报文的首部只有40个字节的空间来存放RR选项,RR选项的一般格式如下:

code是一个字节,指明ip选项的类型。对于RR选项来说,它的值为7,len是RR选项总字节长度,在这种情况下为39,ptr称作指针字段,它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个ip地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12最大到36.当记录下9个IP地址后,ptr的值为40,表示清单已满。

除了可以在ping发送的ICMP回显报文的IP首部中加入RR选项外,也可以加入IP时间戳选项,格式与上面差不多,只不过多了一个用于描述溢出字段和标志字段。

 

还有最后一种ICMP查询报文,即路由器通告/回显报文,它用于IP选路。选路是IP最重要的功能之一。前面我们有提到过IP路由选择时搜索路由表的几个步骤(这是选路机制):

(1)搜索匹配的主机地址

(2)搜索匹配的网络地址

(3)搜索默认表项。

下图描述了IP层处理过程的简单流程:

系统通过三种途径改变路由表的表项,一个是route命令,由管理员手动配置路由,一个是ICMP重定向报文,这是一种只能由路由器生成的ICMP差错报文,最后一个则是路由守护程序,路由守护程序是一个应用程序,它通过发送ICMP路由器请求报文,接收ICMP路由器通告报文来获知相邻的网络情况。ICMP路由器请求报文、路由器通告报文的格式如下:

路由器通告报文中,地址数字段说明该报文中共包含多少个路由器地址,地址项长度是指每个路由器地址32bit字的数目,在ipv4中始终为2,生存时间字段指的是通告地址有效时间(以秒为单位)。

开始的时候我一直在想,路由器请求/通告报文跟RIP到底是什么关系呢?后来仔细看了几遍书中关于它的介绍,猜测觉着,路由器请求/通告报文是同一子网中主机与路由器之间的通信(而RIP是路由器与路由器之间的通信),这个通信过程由应用层的路由守护进程完成,“它只增加或删除默认表项。守护程序必须把它配置成一台路由器或主机来使用”,因为路由器跟主机的操作是不一样的,路由器启动后负责发送路由器通告并监听来自主机的路由器请求;而主机启动后则发送路由器请求,并监听来自路由器的路由器通告。

 

3. 动态选路协议

当相邻的路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的协议有很多种,如RIP、OSPF,路由守护进程运行选路协议,并与其相邻的一些路由器进行通信。路由守护程序将选路策略加入到系统中,选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿存在多条路由,那么它将(以某种方法)选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开,它可以删除受影响的路由或加入另一条路由以绕过该问题。

在像Internet这样的系统中,目前采用了许多不同的选路协议。Internet是以一组自治系统的方式组织的,每个自治系统通常由单个实体管理。常常将一个公司或大学校园定义为一个自治系统。每个自治系统可以选择该自治系统中各个路由器之间的选路协议,这种协议称之为内部网关协议(IGP),常用的IGP有RIP和OSPF。不同自治系统的路由器之间进行通信协议称为外部网关协议(BGP)。

《tcp/ip》这本书对相应的算法并没有详细的描述,我打算之后重新看回本科的《计算机网络》再做一下总结。

 

4. ICMP差错报文

ICMP报文列表中列出了多种ICMP差错报文,这本书只介绍了其中的一些。

首先是ICMP不可达报文,其格式如下:

对于ICMP端口不可达差错(代码为3),接收该差错报文的系统通过读取ICMP报文内容中的差错IP报文首部,从而知道如何解释报文首部后面的8个字节(是TCP还是UDP?),通过解释后面的8个字节(目的端口号和源端口号),将知道该差错是由哪个应用进程(源端口号)引起的,是哪个目的端口不可达。

前面我们看到,每个路由器或主机中都会有一张路由表,路由表里面一般都有一个默认选项,在找不到主机或网络号匹配的下一站路由器时,路由机制都会选择其默认网关。顶层选路域维护大多数Internet网站的信息,而不使用默认路由,当路由器收到一份IP数据报但又不能转发时(没有默认路由),就要发送一份“ICMP主机不可达”差错报文(代码为1)给发送该IP报文的主机。

ICMP “超时”报文的格式与ICMP不可达报文的格式基本一致,除了类型值与代码值不同外。当路由器收到一份IP数据报,如果其TTL值字段是0或1,则路由器不转发该数据报(接收到这种数据报的目的主机可以将它交给应用程序,因为主机不需要转发该数据报,但是通常情况下,系统不应该接收TTL值为0的数据报)。路由器将该数据报丢弃,并给信源机发送一份ICMP超时报文。

ICMP超时+ICMP端口不可达+TTL是traceroute程序的工作原理。traceroute程序发送一份TTL字段为1的IP数据报文给目的主机,处理这份数据报的第一个路由器将其TTL值减1,丢弃该数据报,并发回一份ICMP超时报文,通过报文中的信源地址我们将得到该路由器的地址;接着,traceroute发送一份TTL值为2的IP数据报文给目的主机,这样,第二个路由器将发回一份ICMP超时报文,....,直到最后该报文到达目的主机并被接收,那么如何判断报文已经到达目的主机了呢?traceroute将选择一个不可能的值作为目的端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,这样,目的主机收到该报文时,将产生一份“ICMP端口不可达”报文给,这样,当traceroute收到的ICMP报文是“目的端口不可达”时,可以判断已经完成了整个traceroute的过程。记得IP首部中的“选项”部分还可以设置“严格的源站选路”和“宽松的源站选路”选项,可以在traceroute发送的IP数据报首部中加入该选项,来规划traceroute的路径。

书中还介绍了ICMP重定向差错报文。当IP数据报应该被发送到另一个路由器上时,收到数据报的路由器(发现出接口等于入接口)就要发送ICMP重定向差错报文给IP数据报的发送端,我们在之前的IP层处理过程,还有另一个可以修改路由表的源,就是ICMP重定向差错报文,其格式如下:

 

ICMP重定向接收者必须查看三个IP地址:(1)导致重定向的IP地址(即ICMP重定向报文的数据中产生差错的数据报IP首部);(2)发送重定向报文的路由器(包含重定向信息的IP数据报的源地址);(3)应该采用的路由器IP地址(在ICMP数据报文中)。

关于ICMP重定向报文有很多规则。首先,重定向报文只能由路由器生成;另外,重定向报文是为主机而不是为路由器使用的。

 

这一次总结了IP数据报的分用中的一个协议,即ICMP协议,包括查询报文和差错报文,并介绍了利用这些报文的一些程序,包括ping和traceroute的原理。对于动态选路,我觉得相关算法可以等以后再做详细总结。

  • 大小: 12.6 KB
  • 大小: 63 KB
  • 大小: 12.7 KB
  • 大小: 18.2 KB
  • 大小: 8.2 KB
  • 大小: 13.4 KB
  • 大小: 11.7 KB
  • 大小: 60.1 KB
  • 大小: 40.9 KB
  • 大小: 21.8 KB
分享到:
评论

相关推荐

    TCP-IP详解卷一:协议

    《TCP/IP详解卷一:协议》是一本深入探讨TCP/IP协议族的专业书籍,它为读者提供了全面而细致的网络通信理论和技术知识。TCP/IP协议是互联网的基础,它定义了网络设备如何交换数据以及数据如何被封装、传输和解封装的...

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

    《microchip TCP/IP协议栈应用笔记V3.6》是一份深入探讨Microchip公司TCP/IP协议栈实现与应用的重要文档,特别适合嵌入式系统开发者和网络通信工程师参考。Microchip TCP/IP协议栈是该公司为微控制器提供的完整网络...

    TCP/IP详解卷1-3

    通过阅读《TCP/IP详解卷1-3》,读者可以全面理解TCP/IP协议的工作原理,掌握网络编程的基本技能,并有能力解决网络通信中的各种问题。无论是网络管理员、软件开发人员还是网络安全专家,都能从中受益匪浅。这套书籍...

    TCP-IP卷1、2读书笔记

    《TCP/IP卷1、2读书笔记》是对网络通信领域经典之作——"TCP/IP详解"的深入学习和理解的结晶。TCP/IP(Transmission Control Protocol/Internet Protocol)是互联网的基础,是计算机网络之间进行通信的标准协议集。...

    tcp/ip详解前3章学习笔记

    TCP/IP详解前3章的学习笔记主要涵盖了网络通信的基础知识,特别是TCP/IP协议栈的四个主要层次,即应用层、传输层、网络层和数据链路层。这些层次定义了网络通信的不同方面,确保数据能够在不同主机之间可靠地传输。 ...

    TCP-IP详解学习笔记

    "TCP/IP 详解学习笔记" TCP/IP 协议是计算机网络中最重要的协议族之一,它为计算机之间的通信提供了标准的语言。TCP/IP 协议族包括了 IP 协议、IMCP 协议、TCP 协议,以及我们更加熟悉的 HTTP、FTP、POP3 协议等等...

    TCP/IP 协议笔记

    ### TCP/IP协议详解 #### 一、引言与历史背景 TCP/IP协议族,作为现代互联网的基石,其影响力远超出了最初的预期。这一协议族起源于20世纪60年代末,当时由美国政府资助的一项分组交换网络研究项目孕育了TCP/IP的...

    TCP-IP学习总结笔记.pdf

    在TCP/IP数据封装过程中,应用层的数据会被加上应用层头部,然后依次添加传输层(TCP或UDP)、网络层(IP)和网络访问层(以太网)的头部,形成数据段、数据报和数据帧,最终通过物理介质传输。 理解TCP/IP协议栈的...

    TCPIP详解学习笔记

    TCP/IP详解学习笔记主要涵盖了网络通信的基础概念和TCP/IP协议族的核心内容。TCP/IP协议是为了克服计算机之间因操作系统和表达信息方式的差异而导致的沟通难题而诞生的,它是一个协议族,包含了众多协议,如IP、ICMP...

    TCP/IP培训笔记

    ### TCP/IP培训笔记知识点详解 #### 一、TCP/IP协议栈结构 TCP/IP协议栈是一个四层模型,每一层都有其特定的功能。 1. **应用层**:此层提供了多种面向用户的应用程序和服务,比如HTTP(超文本传输协议)、FTP...

    TCP-IP详解1-3卷

    《TCP/IP详解1-3卷》是计算机网络领域的一部权威著作,由Stephen A. Stevens撰写,被广大读者和专业人士誉为理解TCP/IP协议簇的基石。这套书籍深入浅出地介绍了TCP/IP协议的各个方面,从理论基础到实际应用,为读者...

    TCP-IP详解卷二:实现

    《TCP/IP详解卷二:实现》是一本深入探讨TCP/IP协议族实现细节的专业书籍,它在TCP/IP协议的三卷系列中占据着重要的位置。这本卷主要关注协议的实际操作和工作原理,对于网络通信、系统管理员、软件开发人员以及对...

    网络技术学习笔记三__小秘加联络员的联系方式TCP+IP.docx

    【网络技术学习笔记三——TCP/IP详解】 网络通信的核心在于数据的传输,而TCP/IP协议族则是实现这一目标的关键。TCP/IP模型分为四层:应用层、传输层、网络层和链路层,分别对应于OSI模型的上三层。在本笔记中,...

    TCPIP详解学习笔记.doc

    "TCPIP详解学习笔记" TCP/IP 协议族是一个协议族的统称,包括了 IP 协议、ICMP 协议、TCP 协议、UDP 协议、DNS 协议等等。TCP/IP 协议族按照层次由上到下,层层包装。最上面的就是应用层了,这里面有 http、ftp ...

    TCP-IP-Illustrated-vol1:《 TCPIP详解卷1:协议》笔记

    《TCP/IP详解卷1:协议》是一本深入探讨TCP/IP协议族的经典著作,由W. Richard Stevens撰写。这本书详尽地介绍了TCP/IP协议的基本概念、工作原理和实现细节,是IT从业者和网络工程师的重要参考资料。笔记内容可能...

    TCPIP详解》学习笔记

    TCP/IP详解的学习笔记涵盖了IP协议的关键概念和技术细节。IP,即网际协议,是互联网通信的基础,具有不可靠和无连接的特点。不可靠意味着IP不保证数据报能成功到达目的地,错误时会丢弃数据包并发送ICMP消息。可靠性...

    W5500 网络模块 W5500 全硬件TCP IP协议栈

    这款模块集成了包括TCP、UDP、IP、ARP、ICMP和PPP在内的多种网络协议,大大简化了开发者在网络编程中的复杂性。 一、W5500模块特性 1. 全硬件TCP/IP协议栈:W5500内部集成了一个专门处理网络协议的专用芯片,无需...

Global site tag (gtag.js) - Google Analytics