TCP/IP详解 卷1:协议 学习笔记 第二十五章 SNMP:简单网络管理协议

随着网络技术的发展,网络数量越来越多,网络中的设备来自不同厂家,如何管理这些设备变得十分重要。

基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager)和被管理的网络单元(也叫被管设备,包括路由器、X终端、终端服务器、打印机等运行TCP/IP协议的设备)。

被管理设备端中与管理相关的软件叫做代理程序或代理进程。管理站一般是带有彩色监视器的工作站,可以显示所有被管理设备的状态(如是否掉线、各种连接上的流量状况等)。

管理进程和代理进程间通信方式有两种:一是管理进程向代理进程发出请求,询问一个具体的参数值或要求改变代理进程的某参数值;二是代理进程主动向管理进程报告有某些重要的事件发生。

基于TCP/IP的网络管理包含三个部分:
1.一个管理信息库(MIB,Management Information Base),其中包含所有代理进程的所有可被查询和修改的参数。RFC 1213定义了第二版的MIB,叫做MIB-Ⅱ。
2.关于MIB的一套公用的结构和表示符号,称其为管理信息结构(SMI,Structure of Management Information)。如SMI定义计数器是一个非负整数,范围是0~4294967295,当达到最大值时,又从0开始计数。
3.管理进程和代理进程之间的通信协议,叫做简单网络管理协议(SNMP,Simple Network Management Protocol)。尽管运输层可以使用很多协议,但用得最多的还是UDP,所以可能发生数据报丢失的情况,需要超时和重传机制。

SNMP定义了5种报文:
1.get-request操作:从代理进程处提取一个或多个参数值。
2.get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
3.set-request操作:设置代理进程的一个或多个参数值。
4.get-response操作:返回一个或多个参数值,由代理进程发出,是前三个操作的响应操作。
5.trap操作:代理进程主动发出,通知管理进程某些事件的发生。
在这里插入图片描述
代理进程和管理进程的熟知端口号不同,因此一个系统可以同时为管理进程和代理进程。
在这里插入图片描述
上图中只标注了UDP和IP首部长度,这是由于SNMP报文编码采用了ASN.1和BER,使得SNMP的长度取决于变量的类型和值。

版本字段为0,该字段的值是通过SNMP版本号减去1得到的,0代表SNMP v1。

共同体字段是一个字符串,是管理进程和代理进程之间的口令,是明文格式,默认值为public。

PDU(协议数据单元,Protocol Data Unit)类型字段取值:
在这里插入图片描述
对于get-request、get-next-request、set-request操作,请求标识字段由管理进程设置,然后由代理进程在get-response中返回,用于管理进程将查询和响应进行匹配。类似的字段在其他UDP应用中也有,(如DNS的标识字段)。这个字段允许管理进程对一个或多个代理进程发出多个请求,并从返回的众多应答中进行分类。

差错状态字段由代理进程标注,指明有差错发生,它的取值如下:
在这里插入图片描述
差错索引字段是一个整数偏移量,代理进程用它指明差错发生在哪个参数,只有在发生noSuchName、readOnly、badValue差错时才进行标注。

在get-request、get-next-request、set-request的请求数据报中,包含变量名称和变量值的一张表,对于get-request和get-next-request操作,变量值部分不需填写。

SNMP中的数据类型:
1.INTEGER:一个变量虽然定义为整型,但也有多种形式,有些整型变量没有范围限制,有些整型变量定义为特定的数值(如IP的转发标志就只有允许转发的1和不允许转发的2两种),有些整型变量定义为一个特定的范围(如UDP和TCP的端口号从0~65535)。
2.OCTER STRING:0或多个8bit字节,每个字节值在0~255之间。不以NULL结尾。BER编码的这种数据类型和DisplayString数据类型中,字符串的字节数被放置在字符串之前。
3.DisplayString:0或多个8bit字节,每个字节必须是ASCII码。MIB-Ⅱ中,该类型的变量的长度不能超过255个字符。
4.OBJECT IDENTIFIER。
5.NULL:表示相关变量没有值,如在get-request或get-next-request数据报中,要获取的变量的值会填为NULL。
6.IpAddress:4字节长度的OCTER STRING,以网络序表示的IP地址,每个字节代表IP地址的一个字段。
7.PhyAddress:OCTER STRING类型,代表物理地址(如以太网物理地址为6字节长度)。
8.Counter:非负整数,可从0递增到232-1(4294976295),达到最大值后归零。
9.Gauge:非负整数,取值范围为0~4294976295,可增可减,达到最大值后变量被锁定,直到被复位。如MIB中的tcpCurrEstab变量就是这种类型,它表示目前在ESTABLISHED或CLOSE_WAIT状态的TCP连接数。
10.TimeTicks:时间计数器,以0.01秒为单位递增,不同变量可以有不同的递增幅度,所以在定义这种变量的时候要指定递增幅度。如MIB中的sysUpTime变量就是这种类型,它表示代理进程从启动开始到现在的时间长度,以多少个0.01秒的数目来表示。
11.SEQUENCE:与C语言中的struct类似,一个SEQUENCE中包含0个或多个元素。如MIB中的UdpEntry变量就是这种类型,它表示代理进程目前在使用的UDP数量,此变量中包含两个元素:一是IpAddress类型变量udpLocalAddress,表示IP地址;二是INTEGER类型的变量udpLocalPort,范围是0~65535,表示端口号。
12.SEQUENCE OF:这是向量的定义。类似SEQUENCE,但其中所有元素的类型是相同的。如果元素类型是类似整数类型的简单数据类型,那么它就是一个一维向量;如果其中的元素类型是SEQUENCE,可将它看作一个二维数组或表。
在这里插入图片描述
对象标识是一种数据类型,它表示一种授权的命名对象,授权的含义为这些标识不是随便分配的,而是由权威机构进行管理和分配的。

对象标识是一个整数序列,以点·分隔,这些整数构成一个树型结构。对象标识从树的顶部开始,顶部没有标识,以root表示:
在这里插入图片描述
如上图,树上的每个结点同时还有一个文字名,如表示1.3.6.1.2.1就对应于iso.org.dod.internet.memt.mib,文字名的目的是为了让人们阅读更方便。实际应用中,管理进程和代理进程进行数据报交互时,其中的MIB变量名都是数字形式的对象标识,这些变量名都以1.3.6.1.2.1开始。

上图中的标识1.3.6.1.4.1是为厂家自定义而预留的,在Assigned Number RFC中列出了此结点下大约400个标识。

信息管理库MIB就是所有代理进程包含的,能够被管理进程进行查询和设置的信息的集合。

如上图所示,MIB被划分为若干组,如system、interfaces、at(地址转换)、ip组等。

我们仅讨论UDP组中的变量,这个组比较简单,它包含几个变量和一个表格。

以下是udp组的结构:
在这里插入图片描述
udp组中包含4个简单变量和由2个简单变量组成的表格,以下是对这4个简单变量的描述:
在这里插入图片描述
上图中,R/W列为空,表示该变量是只读的,如果该变量可读可写,则用·表示。数据类型列中,如果数据类型是INTEGER且有范围限制,则该列会填其上下限。这两点在后面的图中也是这样。

以下是udp组中,2个简单变量组成的表格的描述:
在这里插入图片描述
以下三个计数器是有相互关系的:
在这里插入图片描述
上图表明udpInDatagram不包括udpInError和udpNoPorts且分组的所有数据路径都被计数。

当查询和设置变量的值时,必须对MIB的变量进行标识,只有叶子结点是可操作的,且SNMP没法处理表格的一整行或一整列。

简单变量的标识直接在其对象标识后面添加.0即可,如计数器udpInDatagrams,它的对象标识是1.3.6.1.2.1.7.1,它的实例标识为1.3.6.1.2.1.7.1.0,其对应的文字名称为iso.org.dod.internet.mgmt.mid.udp.udpInDatagrams.0,该变量通常缩写为udpInDatagrams.0。在SNMP报文中,该变量的名称为1.3.6.1.2.1.7.1.0。

表格的实例标识要更复杂,每个MIB中的表格都有一个或以上的索引,对于图25-9中的表格,MIB定义了包含两个变量的联合索引,这两个变量分别为udpLocalAddress(它是一个IP地址)和udpLocalPort(它是一个整数)。假设该表格有3行,如下图:
在这里插入图片描述
对以上表格中的6个变量进行MBI字典式排序,这个排序是按对象标识的字典顺序进行的,以上表格中的6个变量为:
在这里插入图片描述
将上图中的6个变量经过字典排序后的结果如下:
在这里插入图片描述
这种字典排序有两个结果:
1.一个给定变量(这里指udpLocalAddress)的所有实例都在下个变量(这里指udpLocalPort)的所有实例之前显示,这暗示表格操作的顺序是先列后行。这是由于对对象标识进行字典式排序所得到的,而不是按照人们的阅读习惯而排列的。
2.表格中对行的排序与表格中的值有关。如上图,67的字典序小于161,而161的字典序小于250。
在这里插入图片描述
从代理进程处进行查询的程序属于ISODE(ISO开发环境,ISO Development Environment)系统,这个程序叫做snmpi。

从一个路由器处取两个udp组的简单变量值:
在这里插入图片描述
snmpi程序的-a选项表示要通信的代理进程名,-c选项表示SNMP的共同体名(即由客户进程snmpi提供,同时能被服务器进程(即代理进程gateway)所识别的一个口令,共同体名称是管理进程请求的权限标志)。代理进程允许管理进程用一个共同体名对变量进行只读操作,用另一个共同体名对变量进行读写操作。

上图中的get命令会使用get-request报文段。

以上过程的tcpdump输出:
在这里插入图片描述
对这两个变量的查询请求是封装在一个UDP数据报中的,响应也在一个UDP数据报中。tcpdump显示的变量是以其对象标识的形式显示的,这是在SNMP报文中实际传输的内容。我们必须指定这两个变量的实例是0。

get-next操作是基于MIB的字典式排序的,下面的例子中,首先向代理进程询问udp节点后的下一个对象标识(udp节点不是一个叶子对象,即我们没有指定任何实例),代理进程将返回UDP组中的第1个对象,然后我们继续向代理进程取该对象的下一个对象标识,此时第2个对象将被返回:
在这里插入图片描述
该方式可从MIB树的顶点开始,对代理进程一步步地进行查询,就可得到代理进程处所有的变量值和标识。get-next请求的另一个用处就是对表格进行遍历。

遍历udpTable,由于udpTable不是叶子对象,我们不能指定一个实例,但我们可以使用next命令返回表格中的对象,然后以返回的结果为基础进行下一步操作,返回顺序是先列后行,如遍历图25-13中的表:
在这里插入图片描述
如上图,当返回的变量名是表格之外的变量时,就获取完了表格中的内容。

MIB中的system(系统标识)组只包含以下7个简单变量:
在这里插入图片描述
我们可以对netb路由器做system组的变量值的查询:
在这里插入图片描述
如上图查询,netb路由器的system组中的对象标识符sysObjectID在iso.org.dod.internet.private.enterprises(1.3.6.1.4.1)组中,在Assigned Numbers RFC中可知,下一个对象标识符12指派给了厂家Epilogue。此外,根据sysService变量为4和8,则说明它支持网络层(如选路)和运输层的应用。

MIB中的interface(接口)组中定义了一个简单变量:
在这里插入图片描述
此外interface组中还有一个表格变量,其中有22列,表格中每行定义了接口的一些特征参数:
在这里插入图片描述
如向主机sun查询3个接口的一些变量:
在这里插入图片描述
上图中,对于SLIP链路的接口类型,报告的是点对点的专用串行链路,而非SLIP链路,且速率没有报告。

上例中,get-next操作返回的是表格中下一行所对应的变量,而不是同一行中的下一个变量,这就是先列后行。

MIB的at(地址转换)组对所有系统都是必需的,但在MIB-Ⅱ中已经没有这个组,从MIB-Ⅱ开始,每个网络协议组(如IP组)都包含它们自己的网络地址转换表,如IP组的网络地址转换表是ipNetToMediaTable。

at组中只有一个由3列组成的表格变量,下图中atIfIndex列的含义应该是接口的索引,而非接口数:
在这里插入图片描述
可用snmpi程序中的命令dump来获取整个表格,下图向名叫kinetics的路由器查询其整个ARP高速缓存,其输出是字典式排序后的整个表格内容:
在这里插入图片描述
路由器kinetics的ARP高速缓存内容如下:
在这里插入图片描述
snmpi的dump命令是通过get-next操作获取整张表。

路由器kinetics的路由表中,接口2的物理地址是32bit的,这是由于接口2连接的是一个AppleTalk网络。

MIB的ip组中的简单变量:
在这里插入图片描述
ip组中的一个表格变量是IP地址表ipAddrTable,系统中每个IP地址对应表格中的一行,每行有5个变量,表中ipAdEntIfIndex列表示的含义应该是接口的索引,而非接口数:
在这里插入图片描述
IP路由表ipRouteTable也是ip组中的表格变量,该表中每行记录的索引是目的IP地址,下表中的ipRouteIfIndex列的含义应该是接口索引,而非接口数:
在这里插入图片描述
ip组中最后一张表是ipNetToMediaTable,该表用于替换at组中的地址转换表:
在这里插入图片描述
MIB的icmp组包括以下变量:
在这里插入图片描述
MIB的tcp组包含以下简单变量,其中变量tcpRetransSegs的数据类型是Counter:
在这里插入图片描述
tcp组中还包括一个表格变量TCP连接表tcpConnTable,对于每一个TCP连接,都对应表格中的一条记录:
在这里插入图片描述
观察sun系统上的tcpConnTable表,由于有很多服务器进程在监听,因此我们只显示该表的一部分内容,在dump全部表格之前,我们先建立两条TCP连接:
在这里插入图片描述
在所有正在监听的服务器进程中,我们仅列出了FTP服务器的情况,它使用端口21:
在这里插入图片描述
在这里插入图片描述
相比于rlogin登录到localhost,rlogin登录到gemini在上图中只有一行记录,这是因为localhost是本机,而gemini是另一台主机,并且通过rlogin登录到gemini的这一行记录我们只能看到连接的客户端信息(端口1023)。但rlogin登录到localhost的连接,客户端(端口1415)和服务器端(端口23)都显示,这是因为这种连接通过环回接口。FTP服务器监听的本地IP是0.0.0.0,表明它接受来自任何接口的连接。

可通过SNMP获取SLIP链路的MTU,首先从IP路由表中找出SLIP连接对应的端口号,然后通过端口号在接口表中找到这个接口的MTU:
在这里插入图片描述
可见,即使连接类型是SLIP连接,但MTU仍设为以太网的1500,目的可能是为了避免分片。

从域名服务器返回的第1个IP地址总是和客户有相同的子网掩码,虽然其他IP也能正常工作,但效率比较低。

路由器gemini是一个多接口主机,有两个以太网接口,首先确认两个接口都可从sun机器Telnet登录:
在这里插入图片描述
在这里插入图片描述
使用traceroute命令查看这两个地址选路方面的不同:
在这里插入图片描述
可见如果采用属于140.252.3子网的地址,会多额外一跳。以下是系统的连接关系图:
在这里插入图片描述
由上图,主机gemini和路由器swnrt都连接了两个网段:140.252.3和140.252.1。

路由器netb采用了ARP代理,使得sun工作站好像是直接连接到140.252.1子网上。我们忽略了sun和netb之间SLIP连接的调制解调器,因为这和我们的讨论不相关。

上图中,用虚线画出了当Telnet到140.252.3.54时的路径,返回的数据报没有从原路返回。我们可以看下带有宽松选路特性的traceroute的输出结果:
在这里插入图片描述
如上图,在命令中指明宽松源站选路时,swnrt路由器不会回应,由不指定宽松源站选路选项的traceroute输出可知,swnrt是事实上的第二跳,而在上例中,swnrt却超时了,原因在于swnrt在指定了源站宽松选路时没有产生ICMP超时差错(当路由器收到TTL为0的数据报时,会丢弃该数据报并返回一个ICMP超时差错)。我们发现,返回路径中确实没有经过swnrt路由器。

为获取netb路由器的路由表,在主机sun上用snmpi程序的get命令取netb上140.252.3.0的下一跳路由器的值:
在这里插入图片描述
可见netb路由器会把分组发给swnrt路由器。

而gemini把分组回送给sun时,由于目的地址是140.252.1.29,而子网140.252.1是直接连到gemini上的,因此gemini会将分组传给netb。

以上讨论的例子都是从管理进程到代理进程的,代理进程也可以主动发送trap到管理进程,以告诉管理进程在代理进程侧有某些管理进程所关心的事件发生,trap会发送到管理进程的162号端口。

现在已经定义了6种trap类型,第7种类型是由供应商自己定义的特定类型:
在这里插入图片描述
用tcpdump看trap的情况,我们在系统sun上启动SNMP代理进程,然后让它产生coldStart类型的trap(我们告诉代理进程把trap信息发送到bsdi主机,虽然该主机上没有处理trap的管理进程,但可以用tcpdump查看产生了什么样的分组,trap不需要管理进程给代理进程发送确认,所以我们不需要trap的处理程序),然后我们用管理进程端的snmpi程序向sun发送一个请求,但该请求的共同体名称是无效的,这将使sun产生一个authenticationFailure类型的trap,以下是tcpdump的输出:
在这里插入图片描述
上图中,两个UDP数据报都是从SNMP代理进程(端口号161,图中显示的名称是snmp)发送到目的端口号是162(图中显示的名称是snmp-trap)的服务器进程上的。

上图中的C=traps是trap消息的共同体名,这是一个由ISODE SNMP代理进程使用的配置选项。

上图中,第一行的Trap(28)和第二行的Trap(29)是PDU类型和长度。

上图中两个输出行的第一项内容是相同的E:unix.1.2.5,这是企业名字段,即代理进程的sysObjectID,它是1.2.6.1.4.1(iso.org.dod.internet.private.enterparses)结点下面的某个结点,所以代理进程的对象标识是1.2.6.1.4.1.4.1.2.5,,它的简称是unix.agents.fourBSD-isode.5,最后的数字5代表ISODE代理进程软件的版本号。此企业名代表产生trap的代理进程的软件信息。

上图中输出的下一项是代理进程的IP地址140.252.13.33。

上图第一行中,trap的类型是coldStart,第二行中,是authenticationFailure,与之对应的trap类型值分别为0和4,由于这些都不是厂家自定义的trap,所以特定代码字段(specific code,见图25-30)是0,在图中没有打印出来。

上图中两个trap的最后一个输出分别是20和1907,这是时间戳字段,它是TimeTicks类型值,表示从代理进程初始化到trap发生所经历了多少百分之一秒,在冷启动trap的情况下,在代理进程初始化后到trap的产生共经历了200ms,上图显示,第2个trap在第1个trap产生的18.86秒后出现,这与19.07-0.2的结果很接近。

trap报文中还可以包含很多代理进程想发送给管理进程的变量,但上例中没有包含任何变量。

正式的SNMP规范中采用的是ASN.1(Abstract Syntax Notation 1,抽象语法标记1)语法,在SNMP报文中比特的编码采用BER(Basic Encoding Rule,基本编码规则)。

ASN.1是一种描述数据和数据特征的语言,它和数据的存储和编码无关。MIB和SNMP报文中的所有字段都是用ASN.1描述的,如ASN.1这样描述SNMP的数据类型ipAddress:
在这里插入图片描述
ASN.1这样描述MIB中的简单变量:
在这里插入图片描述
对于以上ASN.1的定义,有多种编码方式把数据编码为传输的比特流,SNMP使用的是BER,如一个简单的整数64,在BER中需要3个字节来表示,第一个字节说明这是一个整数,下个字节说明用了多少字节来存储该整数(此处是1),最后一个字节才是该整数的值。

ASN.1和BER这两个繁琐的概念只有在实现SNMP时才重要,对我们理解网络管理的概念和流程并没有太大关系。

1993年,发表了定义新版本SNMP的11个RFC,RFC 1441是其中的第一个,它系统地介绍了SNMPv2,当时已经有了两个SNMPv2的基本模型,但厂家的实现在1994年才能广泛使用。

SNMPv2中新增内容:
1.新的报文类型get-bulk-request,它高效地从代理进程读取大块数据。
2.新的报文类型inform-request,它使一个管理进程向另一个管理进程发送信息。
3.两个新MIB:SNMPv2 MIB和SNMPv2-M2M MIB(管理进程到管理进程的MIB)。
4.SNMPv2比SNMPv1更安全。SNMPv1中从管理进程发往代理进程的共同体名是一个明文密码,SNMPv2可提供加密和身份验证。

如果管理进程和代理进程使用的是同一个端口,则一个主机就不能同时是管理进程和代理进程,因为端口会被另一个进程占用。

编辑推荐 本书是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP协议包的定义原因及在各种不同的操作系统中(如Sunos4.1.3、Soloris2.2、AIX3.2.2)的应用与工作方式,这样可以以动态方式讲述TCP/IP的知识,使读者可以轻松掌握TCP/IP的知识:路由协议、寻址协议、组控制协议简单邮件传输协议等。全书内容实用性强,是在校生学习TCP/IP知识的良师益友。 内容简介  《TCP/IP详解1:协议》是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。 作者简介 W.Richard Stevens(1951-1999)是一位非常受人尊敬的专家,除了《TCP/IP详解》三本外,他还有其他两部最为畅销的作品:《UNIX环境高级编程》和《UNIX网络编程》(两本)。 目录 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 1.13 互联网 12 1.14 实现 12 1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口 20 2.8 最大传输单元MTU 21 2.9 路径MTU 21 2.10 串行线路吞吐量计算 21 2.11 小结 22 第3章 IP:网际协议 24 3.1 引言 24 3.2 IP首部 24 3.3 IP路由选择 27 3.4 子网寻址 30 3.5 子网掩码 32 3.6 特殊情况的IP地址 33 3.7 一个子网的例子 33 3.8 ifconfig命令 35 3.9 netstat命令 36 3.10 IP的未来 36 3.11 小结 37 第4章 ARP:地址解析协议 38 4.1 引言 38 4.2 一个例子 38 4.3 ARP高速缓存 40 4.4 ARP的分组格式 40 4.5 ARP举例 41 4.5.1 一般的例子 41 4.5.2 对不存在主机的ARP请求 42 4.5.3 ARP高速缓存超时设置 43 4.6 ARP代理 43 4.7 免费ARP 45 4.8 arp命令 45 4.9 小结 46 第5章 RARP:逆地址解析协议 47 5.1 引言 47 5.2 RARP的分组格式 47 5.3 RARP举例 47 5.4 RARP服务器的设计 48 5.4.1 作为用户进程的RARP服务器 49 5.4.2 每个网络有多个RARP服务器 49 5.5 小结 49 第6章 ICMP:Internet控制报文协议 50 6.1 引言 50 6.2 ICMP报文的类型 50 6.3 ICMP地址掩码请求与应答 52 6.4 ICMP时间戳请求与应答 53 6.4.1 举例 54 6.4.2 另一种方法 55 6.5 ICMP端口不可达差错 56 6.6 ICMP报文的4.4BSD处理 59 6.7 小结 60 第7章 Ping程序 61 7.1 引言 61 7.2 Ping程序 61 7.2.1 LAN输出 62 7.2.2 WAN输出 63 7.2.3 线路SLIP链接 64 7.2.4 拨号SLIP链路 65 7.3 IP记录路由选项 65 7.3.1 通常的例子 66 7.3.2 异常的输出 68 7.4 IP时间戳选项 69 7.5 小结 70 第8章 Traceroute程序 71 8.1 引言 71 8.2 Traceroute 程序的操作 71 8.3 局域网输出 72 8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute程序示例 78 8.5.2 严格的源站选路的traceroute程序示例
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值