Linux笔记:ip r结果解析

ip r命令在Linux环境下用于显示路由表信息。以下是对该命令输出的详细解析:

示例输出

假设执行ip r命令后得到以下输出:

default via 192.168.1.1 dev eth0 proto dhcp metric 100 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100 
10.0.0.0/8 via 192.168.1.1 dev eth0

解析每一行

1.默认路由
default via 192.168.1.1 dev eth0 proto dhcp metric 100
  • default:表示默认路由。当没有其他更具体的路由匹配时,数据包将通过这个路由发送。
  • via 192.168.1.1:数据包将通过网关192.168.1.1发送。
  • dev eth0:使用网络接口eth0。
  • proto dhcp:路由是通过DHCP协议获取的。
  • metric 100:路由的优先级,数值越小优先级越高。
2.直连路由
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
  • 192.168.1.0/24:表示网络192.168.1.0,子网掩码为255.255.255.0。
  • dev eth0:使用网络接口eth0。
  • proto kernel:路由是由内核自动添加的。
  • scope link:路由的作用范围是链路本地。
  • src 192.168.1.100:源IP地址为192.168.1.100。
  • metric 100:路由的优先级。
3.静态路由
10.0.0.0/8 via 192.168.1.1 dev eth0
  • 10.0.0.0/8:表示网络10.0.0.0,子网掩码为255.0.0.0。
  • via 192.168.1.1:数据包将通过网关192.168.1.1发送。
  • dev eth0:使用网络接口eth0。

关键字段解释

  • default:默认路由,所有未匹配其他路由的数据包将通过此路由发送。
  • via:指定下一跳网关的IP地址。
  • dev:指定使用的网络接口。
  • proto:路由的来源,常见的有kernel(内核自动添加)、static(静态路由)、dhcp(通过DHCP获取)。
  • metric:路由的优先级,数值越小优先级越高。
  • scope:路由的作用范围,常见的有link(链路本地)、global(全局)。
  • src:源IP地址,表示从该接口发送数据包没有指定源IP时使用该IP作为源IP地址。

关于源IP示例

假设您在创建socket时没有指定源IP地址:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in dest;
dest.sin_family = AF_INET;
dest.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.50", &dest.sin_addr);
connect(sockfd, (struct sockaddr *)&dest, sizeof(dest));

在这种情况下,系统会使用路由表中指定的默认源IP地址192.168.1.100。如果您在创建socket时指定了源IP地址:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in src, dest;
src.sin_family = AF_INET;
src.sin_port = htons(0); // 让系统自动选择端口
inet_pton(AF_INET, "192.168.1.101", &src.sin_addr);
bind(sockfd, (struct sockaddr *)&src, sizeof(src));

dest.sin_family = AF_INET;
dest.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.50", &dest.sin_addr);
connect(sockfd, (struct sockaddr *)&dest, sizeof(dest));

在这种情况下,系统会使用您在bind函数中指定的源IP地址192.168.1.101,而不是路由表中默认的源IP地址192.168.1.100。

  • 默认源IP地址:路由表中的src字段指定了默认源IP地址,当没有在创建socket时指定源IP地址时使用。
  • 指定源IP地址:如果在创建socket时通过bind函数指定了源IP地址,系统会使用指定的源IP地址,而不是路由表中的默认源IP地址。

总结

通过ip r命令,可以查看Linux系统的路由表,了解数据包的转发路径。每一行输出代表一条路由规则,包含目标网络、下一跳网关、使用的网络接口、路由来源、优先级等信息。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值