全部博文(403)
分类: 系统运维
2006-09-26 17:10:39
TCP/IP学习笔记(三)
作者:
一、Ping程序:
先看:
//pingICMP回显请求和回显应答报文格式如下:(以Ping为例)
C:\WINNT\system32>ping svr00804
Pinging svr00804.sccnj.swirebev.com [192.1.8.12] with 32 bytes of data:
Reply from 192.1.8.12: bytes=32 time<10ms TTL=128
Reply from 192.1.8.12: bytes=32 time<10ms TTL=128
Reply from 192.1.8.12: bytes=32 time<10ms TTL=128
Reply from 192.1.8.12: bytes=32 time<10ms TTL=128
Ping statistics for 192.1.8.12:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
类型0或8 | 代码0 | 检验和 |
标识符 | 序号 |
结构定义如下:
typedef struct icmp_hdr { unsigned char icmp_type; //类型 unsigned char icmp_code; //代码 unsigned short icmp_checksum; //检验和 unsigned short icmp_id; //标识符 unsigned short icmp_sequence; //序号 } ICMP_HDR, *PICMP_HDR, FAR *LPICMP_HDR;
PING程序把ICMP报文中的标识符字段设置为发送进程的ID号,这样即使在同一台主机同时运行多个ping实例,ping程序也可以识别返回的信息。
二、IP记录路由选项
PING程序为我们提供了查看IP记录路由(RR)选项的机会。每个处理PING请求的路由器都把它的IP地址放入选项字段中。当PING程序收到回显应答时,它就可以打印出这份IP地址清单。
由于IP首部中的首部长度字段只有4bit,因此IP首部最大为60字节。由于IP首部固定长度为20个字节,RR选项用去3个字节,因此存放IP地址的控件只有37个字节,也就是最多放9个IP地址。
code(1) | len(1) | ptr(1) | 9个IP地址 | 多余1 |
code:IP选项类型,RR选项为7。
len:RR选项总长度,为39。
ptr:指针字段,存放下一个IP地址的位置,开始为4,放满为40。
IP地址为路由器的出口地址,同时原始主机收到带有RR选项的ICMP回响应答时也把它的入口IP地址放入清单。
三、IP时间戳选项:
Code(1) | Len(1) | Ptr(1) | OF(4bit) | FL(4bit) | 时间戳 |
Code:时间戳的代码为0x44。
Len: 时间戳选项总长度,一般为36或者40。
Ptr:时间戳数据指针。
OF:溢出字段。
FL:标志字段:0-只记录时间戳
1-每台路由七都记录IP地址和时间戳,在选项列表中只存放4对IP地址和时间戳。
3-发送端对选项列表进行初始化,存放4个IP地址和4个取值为0的时间戳。只有当列表中的下一个IP地址与当前路由器地址相匹配时,才记录它的时间戳。
如果路由器没有控件而不能增加时间戳选项时,那么将设置溢出字段的值。
四、Traceroute程序:
Traceroute程序使用ICMP报文和IP首部的TTL字段,发送ICMP回显应答时一般把TTL设置为255。工作原理:开始时发送一个TTL字段为1的数据报,然后每次将TTL字段值加1,以确定路径中的每个路由器。每个路由器在丢弃UDP数据报时都返回一个ICMP超时报文2,而最终目的主机则产生一个ICMP端口不可到达的报文。
报文长度为40:
◆ 20字节的IP首部
◆ 8字节的UDP首部
◆ 4字节的序列号,每发一个就加1
◆ 4个字节的TTL副本
◆ 4个字节的发送数据报的时间戳。
超时报文格式:
类型11 | 代码0或1 | 检验和 |
保留,必须为0 | ||
IP首部+原始IP数据报中数据的前8位 |
五、IP选路
IP搜索路由表的步骤:
◆ 搜索匹配的主机地址
◆ 搜索匹配的网络地址
◆ 搜索默认选项
1、 路由表:
DestinationGatewayFlags Refcnt use 140.252.13.65 140.252.13.35 UGH 0 0 127.0.01127.0.01 UH10 default 140.252.13.33 UG 00 140.252.13.32 140.252.13.34 U 4 25043
说明:U-该路由可以使用(use)
G-该路由似到一个网关。(gateway)
H-该路由是到一个主机(host)
Refcnt-是正在使用路由的进程数
Use-通过该路由发送的分组数
每当初始化一个接口时,系统就为接口自动创建一个直接路由。如果到达主机和网络的路由不是直接相连的,就需要手工加入路由表。
> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2 destination^ ^mask ^gateway metric^ Interface^
如果表中没有默认项,又没有找到匹配项。如果数据报时本地主机产生的,那么就给发送该数据报的应用程序一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。
2、 ICMP重定向差错
如果我们发送一份IP报给R1路由器,R1收到数据报并且检查它的路由表,发线R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到达接口是相同的(即主机和两个路由器所在的LAN)。这样路由器R1就会发送重定向报文给主机。
ICMP重定向差错报文格式:
类型5 | 代码(0-3) | 检验和 |
应该使用的路由器IP地址 | ||
IP首部+原始IP数据报中前8个字节 |
代码说明:0-网络重定向
1-主机重定向
2-服务类型和网络重定向
3-服务类型和主机重定向
ICMP重定向报文的接受者必须查看三个IP地址:(1)导致重定向的IP地址(2)发送重定向报文的路由器IP地址(3)因该采用的路由器IP地址。
ICMP重定向报文只能由路由器生成,不能由主机生成。
主机收到重定向报文时,在修改路由表前必须做一些检查。
◆ 新的路由器必须直接与网络相连接
◆ 重定向报文必须来自当前到目的地所选择的路由器
◆ 重定向报文不能让主机本身作为路由器
◆ 被修改的路由必须是一个间接路由
3、 ICMP路由器发现报文
主机在引导以后要广播或多播传送一份路由器请求报文。一台或多台路由器响应一份路由器通告报文。另外,路由器定期关波或多播传送他们的路由器通告报文,允许每个正在监听的主机相应地更新它们地路由表。
ICMP路由器请求报文格式:
类型10 | 代码0 | 检验和 |
保留,必须为0 |
ICMP路由器通告报文格式:
类型9 | 代码0 | 检验和 |
地址数 | 地址项长度2 | 生存时间 |
路由器地址1 | ||
优先级1 | ||
路由器地址2 | ||
优先级2 | ||
... |
地址数指的是报文重所包含得地址数。
地址项大小指的是每个路由器地址32bit的数目,始终为2。
生存时间指的是通告地址有效的时间(秒数)
IP地址必须是发送路由器的某个地址
优先级是一个有符号的32位整数,指出该IP地址作为默认路由器地址的优先等级,值越大说明优先级越高。优先级的默认值一般设定位0。
六、动态选路协议RIP
当相邻路由器之间进行通信,以告知对方每个路由器当前所在的网络,这就出现了动态选路。路由器上有一个进程叫路由守护程序,它运行选路协议,并于其相邻的一些路由器进行通信。路由器根据它从相邻路由器接收到的信息,更新内核中的路由表。
报文格式:
IP首部 | UDP首部 | RIP报文 |
命令1-6 | 版本1 | 必须为0 |
地址系列2 | 必须为0 | |
32位IP地址 | ||
必须为0 | ||
必须为0 | ||
度量(1-16) | ||
最多24个另外的路由,与前20个字节格式相同 |
RIP报文包含在UDP数据报中。
命令1表示请求,2表示应答,3和4不用,5和6为非正式的命令。请求表示要求其他系统发送其全部或部分路由表,应答则包含发送者全部或部分路由表。
版本字段通常为1,根据实际设定。
地址系列为地址类型,IP地址为2。
由于每个报文最多携带25个路由,因此为了发送整个路由表,经常需要发送多个报文。
1、 运行过程
3、 RIP2
RIP2利用RIP报文中必须为0的字段来传递一些额外的信息。其报文格式如下:
命令1-6 | 版本2 | 路由域 |
地址类2 | 路由标记 | |
32位IP地址 | ||
32位子网掩码 | ||
32位下一站IP地址 | ||
度量(1-16) | ||
最多24个另外的路由,与前20个字节格式相同 |
选路域是一个选路守护程序的标识符,指出了这个数据报的所有者。一般是进程号。
选路标记是为了指出外部网关协议存在的。
子网掩码是应用在相应的IP地址上的。
下一站IP地址指明发往目的IP地址的报文该发向哪里。该字段为0表示发往目的地址的报文应该发给发送RIP报文的系统。
RIP2还支持多播,以减少不收听RIP2报文的主机的负载。
作者:肖进
单位:南京中萃食品有限公司 资讯部
邮件:
电话:025-58642091