0%

tcpip_routeicmp

IP选路和ICMP协议

IP如何选路概述:

  • ip选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组,区别于选路策略,后者是一组决定把哪些路由放入路由表的规则;ip执行选路机制,而路由守护程序则一般提供选路策略如rip,ospf
  • 点对点时,直接送到
  • 非点对点时,经过路由器送到
  • Ip层可以是配置为路由或者主机前者非则转发,后者非则丢弃
  • 路由表项:每一项为
    • 目的ip地址(网络地址指定网络中所有主机或主机地址);
    • 下一站路由器的ip地址,可能充当中继转发的,下一站非终点;
    • 标志:指明目的地址是网络还是主机,下一站是路由器还是直连的接口
    • 数据传输的网络接口如wlan0,eth0
  • ip选路是逐跳进行的,
  • 例子:
    没连接热点前:
    1
    2
    3
    4
    5
    6
    ernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    10.42.0.0 * 255.255.255.0 U 600 0 0 wlp2s0
    link-local * 255.255.0.0 U 1000 0 0 wlp2s0```

    连接热点后:
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    default 192.168.0.1 0.0.0.0 UG 600 0 0 wlp2s0
    link-local * 255.255.0.0 U 1000 0 0 wlp2s0

192.168.0.0 * 255.255.255.0 U 600 0 0 wlp2s0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
```
Destination 目标网段或者主机
Gateway 网关地址,”*” 表示目标是本主机所属的网络,不需要路由
Genmask 网络掩码
Flags 标记。一些可能的标记如下:
U — 路由是活动的
H — 目标是一个主机
G — 路由指向网关
R — 恢复动态路由产生的表项
D — 由路由的后台程序动态地安装,(由重定向报文创建)
M — 由路由的后台程序修改(已被重定向报文修改)
! — 拒绝路由
Metric 路由距离,到达指定网络所需的中转数(linux 内核中没有使用)
Ref 路由项引用次数(linux 内核中没有使用)
Use 此路由项被路由软件查找的次数
Iface 该路由表项对应的输出接口```

##### 如何搜索路由表
+ 搜索路由表,目的ip地址匹配条母时,送到该条目的下一站,否则下一步:
+ 搜索路由表,寻找与目的网络相匹配的条目,找到则送到下一站,如本地局域网;否则下一步:
+ 搜索路由表,寻找标为默认的条目,有则使用它
+ 若走完最后一步都没有,则数据包无法被传送,会向生成数据包的程序返回主机不可达或者网络不可达的错误
+ 详细例子见卷1,这里较清楚了

##### 子网寻址rfc950
+ 主机号再分为子网号和主机号,子网掩码也跟着变化;这样可以缩小路由表规模,想象一个包含30个子网的B类地址和30个C类地址相比
+ 此时,外网-->网关-->局域网1-->局域网1中的子网(局域网)10-->子网11。。。
+ 所以此时网关并非就是其直接路由器,若主机在子网11,10中,路由器需要知道发往哪个子网,通过子网掩码
+ 给定ip地址和子网掩码后能知道什么:
知道该主机所在的子网;路由器可以知道是本子网的主机还是本网络中其他子网的主机还是其他网络的主机。。。路由进行的比较不需要比较到主机,如先比较类别网络地址如A,B,C:
如我们主机为140.252.1.1,子掩码为255.255.255.0,则与目的ip地址比较:140.252.4.5,可以知道B类网络地址相同但是子网不同(1,4),就不用再比较主机了,

##### 特殊的网络地址
##### ifconfig命令
+ ifconfig -a

wlp2s0 Link encap:Ethernet HWaddr 48:5a:b6:6e:c9:5f
inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::d713:7c0f:b40c:c085/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7032 errors:0 dropped:0 overruns:0 frame:0
TX packets:4297 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3668623 (3.6 MB) TX bytes:703812 (703.8 KB)

1
2
3
##### netstat命令
+ 其实这个命令的功能很强,可以相互开服务端客户端通信和反向shell
+ netstat -in

Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp1s0 1500 0 0 0 0 0 0 0 0 0 BMU
lo 65536 0 1404 0 0 0 1404 0 0 0 LRU
wlp2s0 1500 0 7257 0 0 0 4311 0 0 0 BMRU

1

netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlp2s0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 wlp2s0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp2s0

1
2
3
4
5
6
7
8
9
##### 初始化路由表
+ ifconfig设置接口地址,并用route 命令添加或删除路由表项
##### 主机可以选择转发或者不转发报文
+ 在配置文件中配置ipfordwarding:
+ echo 1 >> /proc/sys/net/ipv4/ip_forwardroot
#### ICMP协议rfc792
##### Icmp报文:
+ ICMP:IP头(20字节)+ICMP报文
+ IP头:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

1
2
其中options和padding不一定有
+ ICMP报文:type+code共同决定ICMP类型,如回显or差错,,,

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| different type and code has different content |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

```

  • 被封装于ip报文中,ip头加icmp,所有报文前四个字节都相同
    (8位类型,8位代码,16位校验和)
  • 类型+代码决定ICMP的报文类型,种类很多,见协议卷表
  • 下列几种不会导致icmp差错报文:
  • icmp差错报文;
  • 目的地址为广播地址
  • 作为链路层的广播地址
  • 不是ip分片第一片
  • 源地址不能为零地址,环回地址,广播地址或多播地址
  • 上述是为了防止过去允许icmp差错报文对广播分组带来的广播风暴
  • ICMP协议总结几种类型:
  • 主机不可达
  • 重定向错误
  • 路由发现报文
  • icmp地址掩码请求和应答
  • icmp时间戳请求和应答
  • icmp端口不可达
  • ping 回显请求:
  • 等等见表
  • 且类型不同发送的报文格式不同
  • 主机不可达:当路由器收到一份ip数据报但是在路由表中搜索后找不到,不能转发时,会发送一份icmp主机不可达的差错报文
  • 还有可能是已经经过了几个路由器后出现主机或网络不可达的情况,所以若是测试局域网,则先让路由器断开网络,ping路由器则确保问题不是在本地,而是在网络上;
  • icmp重定向错误:
    举个例子,主机在路由表中搜索后将数据包发给默认路由,R1路由器,接着R1路由器搜索后发送给R2路由器,并同时发现它正在发送的接口(R2)和数据报到达的接口相同,即主机和两个路由器所在lan,即在同一个lan中)此时主机可以直接发送给R2,所以R1就发送一份ICMP重定向报文给主机,这样主机下次就可以直接发给R2了
  • 如何更新路由表?通过ICMP的路由器发现报文:
    以及利用路由器的定期广播多播它们的路由器通告报文rfc1256,而它一般是由用户守护进程来创建和处理
  • icmp地址掩码请求和应答,发送对某个ip地址请求地址掩码,并接收到子网掩码。路由器回复或者主机回复
  • icmp时间戳请求和应答,通过向某个IP主机发送这个,从而得到时间信息,telnet也可以进行,如NTP协议(网络时间协议)
  • icmp端口不可达:udp报文发送给主机后,若端口不匹配,对方主机会发送端口不可达的差错报文
  • ping回显,后面有文章记录ping程序编写

    动态选路

    使用场景
    上述讲的是静态路由表的情况:适合于1网络较小,2且与其他网络只有单个连接点,3且没有多余的路由时(如主路由失败,可以选择备用路由);
  • 总结:一种更新路由表的动态协议,从而达到最短路径
  • 上述三个条件不满足时,通常使用动态选路协议
  • 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时出现动态选路,路由器之间必须采用选路协议进行通信;路由器上有一个称为路由守护程序的进程,它运行选路协议,并与相邻的路由器通信,根据收到的信息,更新路由表
分类:

RIP ,OSPF(开放最短路径优先),BGP

宏观上看

在internet上,存在大量的主机,路由器等;并以一组自治系统(AS)的方式组织的,每个自治系统通常由单个实体管理,比如大学校园,公司,常常被定义为一个自治系统,NSFNET的internet骨干网形成一个自治系统;

  • 自治系统中使用的选路协议,称为内部网关协议IGP或者称为域内选路协议,这些协议有RIP,OSPF
  • 用于不同自治系统之间的路由器,称为外部网关协议EGP,常见有BGP
  • unix选路守护程序:routed,gated等
RIP:rfc1058
  • rip采用udp报文,端口号位520,为一种采用距离向量的协议,易受攻击
  • 流程:
    • 初始化:启动一个路由守护进程时,先判断启动了哪些接口,接着在每个接口上发送请求报文,要求其他路由器发送完整的路由表,广播或点对点
    • 接收请求:接收到上述请求后,会回复完整的路由表,否则处理请求报文每一个表项,若有链接到指明地址路由,则度量设置为我们的值,否则设置为16表示无穷大。返回响应
    • 接收到响应后,更新路由表,如增加或修改或删除,采用Dijkstra算法得到最短路径树
    • 定期选路更新,30s一次,进行广播发送完整路由表给相邻的路由器
    • 触发更新:即每当度量发生变化,则对它进行更新,只需要发送度量变化的表项
    • 定时器:3min内无更新路由,则度量设置为无穷大,标注为删除,再过60s删除并传波
  • 注:度量就是跳数,相邻路由度量为1
  • rip问题:无子网概念;路由器或链路故障要很久才能稳定下来,即收敛慢;易发生环回路由;跳数限制了网络大小15
OSPF开放最短路径优先:rfc1247
  • 是一个链路状态协议;
  • 使用ip协议而不是udp.tcp,
  • 不与邻站交换距离信息而是主动测试与其他邻站相连链路状态,并将这些信息发送给它的其他邻站,邻站接着广播出去,每个路由器接收到后更新路由表
  • 收敛快
  • 可以对每个ip服务类型计算各自的路由集,意味着对任何目的,可以有多个路由表表项,每个表项对应一个ip服务类型;
  • 给每个接口指派一个费用,通过吞吐率,往返时间,可靠性等,可以给每个ip服务类型指派一个费用
  • 同一个目的地址存在多个相同费用的路由时,在这些路由上平均分配流量,即流量平衡
  • 支持子网
  • 路由器之间的点对点链路不需要每端都有一个ip地址,-无编号网络,节省ip
  • 多播而非广播
BGP边界网关协议rfc1268
  • 自治系统分类:
  • 残桩自治系统,他和其他自治系统只有单个连接,只有本地流量
  • 多接口自治系统,和其他多个自治系统有多个链接,但是拒绝传送流量
  • 转送自治系统,多链接且在一些策略准则下,它可以传送本地流量和通过流量
  • 是距离向量协议,用于自治系统之间,定期发送keepalive报文,30s
    CIDR无类型域间选路:rfc1518,1519
    待探索