久久www影院人成免费

免费情侣作爱视频然后决定使用哪个网卡发送出去

发布日期:2022-04-22 19:50    点击次数:140

 免费情侣作爱视频

本文转载自微信公众号「开采内功修齐」,作家张彦飞allen。转载本文请筹办开采内功修齐公众号。

各人好,我是飞哥。

容器是一种新的捏造化技能,每一个容器都是一个逻辑上独处的收罗环境。Linux 上提供了软件捏造出来的二层交换机 Bridge 不错处分归拢个宿主机上多个容器之间互连的问题,但这是不够的。二层交换无法处分容器和宿主机外部收罗的互通。

容器细目是需要和宿主机除外的外部收罗互通才具备实用价值的。比如在 Kubernets 中,就条款通盘的 pod 之间都不错互通。相等于在原先物理机所构成的收罗之上,要再建一个互通的捏造收罗出来。这即是 Overlay 收罗的认识,用一个苟简的示例图暗示如下。

回首在传统物理物理收罗中,不同子网之间的做事器是若何互联起来的呢,没错,即是在三层责任的路由器,也叫网关。路由器使得数据包不错从一个子网中传输到另一个子网中,进长途毕更大畛域的收罗互通。如下图所示,一台路由器将 192.168.0.x 和 192.168.1.x 两个子网连气儿了起来。

在容器捏造化收罗中,当然也需要这样一个脚色,将容器和宿主机除外的收罗连气儿起来。其实 Linux 天生就具备路由的功能,仅仅在云原生期间,它的路由功能再一次找到了用武之地。在容器和外部收罗通讯的历程中,Linux 就又承担起路由器的脚色,已毕容器数据包的正确转发和送达。

在各式基于容器的云原生技能盛行的今天,再次回头久了领略路由责任旨趣显得相等有必要,况且也相等的有价值。今天,咱们就再来强化一下 Linux 上的路由学问!

一、什么时分需要路由

先来聊聊 Linux 在什么情况下需要路由历程。其确切发送数据时和采纳数据时都会波及到路由聘任,为什么?咱们挨个来看。

1.1 发送数据时选路

Linux 之是以在发送数据包的时分需要进行路由聘任,这是因为做事器上是可能会有多张网卡建筑存在的。数据包在发送的时分,一齐通过用户态、TCP 层到了 IP 层的时分,就要进行路由聘任,以决定使用哪张网卡建筑把数据包送出去。详备历程参见25 张图,一万字,拆解 Linux 收罗包发送历程

来大概过一下路由筹办源码源码。收罗层发送的进口函数是 ip_queue_xmit。

//file: net/ipv4/ip_output.c int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl) {  // 路由聘任历程  // 聘任完跋文录路由信息到 skb 上  rt = (struct rtable *)__sk_dst_check(sk, 0);  if (rt == NULL) {   // 莫得缓存则查找路由项   rt = ip_route_output_ports(...);   sk_setup_caps(sk, &rt->dst);  }  skb_dst_set_noref(skb, &rt->dst);  ...  //发送  ip_local_out(skb); } 

在 ip_queue_xmit 里咱们开端就看到了路由项查找, ip_route_output_ports 这个函数中完成路由聘任。路由聘任即是到路由表中进行匹配,然后决定使用哪个网卡发送出去。

Linux 中最多不错有 255 张路由表,其中默许情况下有 local 和 main 两张。使用 ip 号召不错搜检路由表的具体确立。拿 local 路由表来例如。

#ip route list table local local 10.143.x.y dev eth0 proto kernel scope host src 10.143.x.y local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 
1.2 采纳数据时选路

没错,采纳数据包的时分也需要进行路由聘任。这是因为 Linux 可能会像路由器同样责任,将收到的数据包通过合适的网卡将其转发出去。

Linux 在 IP 层的采纳进口 ip_rcv 实践后调用到 ip_rcv_finish。在这里张开路由聘任。淌若发现如实即是本建筑的收罗包,那么就通过 ip_local_deliver 送到更表层的 TCP 层进行处理。

淌若路由后发现非本建筑的收罗包,那就参预到 ip_forward 进行转发,终末通过 ip_output 发送出去。

具体的代码如下。

//file: net/ipv4/ip_input.c static int ip_rcv_finish(struct sk_buff *skb){     ...     if (!skb_dst(skb)) {         int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,                            iph->tos, skb->dev);         ...     }     ...     return dst_input(skb); } 

其中 ip_route_input_noref 即是在进行路由查找。

//file: net/ipv4/route.c int ip_route_input_noref(struct sk_buff *skb, __be32 daddr, __be32 saddr,     u8 tos, struct net_device *dev) {  ...  res = ip_route_input_slow(skb, daddr, saddr, tos, dev);  return res; } 

这里记住 ip_route_input_slow 就行了,后头咱们再看。

1.3 linux 路由小结

路由在内核契约栈中的位置不错用如下一张图来暗示。

收罗包在发送的时分,需要从本机的多个网卡建筑中聘任一个合适的发送出去。收罗包在采纳的时分,也需要进行路由聘任,淌若是属于本建筑的包就往表层送到收罗层、传输层直到 socket 的采纳缓存区中。淌若不是本建筑上的包,就聘任合适的建筑将其转发出去。

二、Linux 的路由已毕 2.1 路由表

路由表(routing table)在内核源码中的另外一个叫法是转发信息库(Forwarding Information Base,FIB)。是以你在源码中看到的 fib 开端的界说基本上即是和路由表筹办的功能。

其中路由表本人是用 struct fib_table 来暗示的。

struct fib_table {  struct hlist_node tb_hlist;  u32   tb_id;  int   tb_default;  int   tb_num_default;  unsigned long  tb_data[0]; }; 

通盘的路由表都通过一个 hash - fib_table_hash 来组织和不休。它是放在收罗定名空间 net 下的。这也就证明每个定名空间都有我方独处的路由表。

//file:include/net/net_namespace.h struct net {  struct netns_ipv4 ipv4;  ... }  //file: include/net/netns/ipv4.h struct netns_ipv4 {  // 通盘路由表   struct hlist_head *fib_table_hash;   // netfilter  ... } 

在默许情况下,Linux 唯有 local 和 main 两个路由表。淌若内核编译时因循战术路由,那么不休员最多不错确立 255 个独处的路由表。

淌若你的做事器上创建了多个收罗定名空间的话,那么就会存在多套路由表。以除了默许定名收罗空间外,又创明显一个新收罗定名空间的情况为例,路由表在通盘这个词内核数据结构中的关联关联归来如下图所示。

2.2 路由查找

在上头的末节中咱们看到,发送历程调用 ip_route_output_ports 来查找路由,采纳历程调用 ip_route_input_slow 来查找。但其实这两个函数都又最终会调用到 fib_lookup 这个中枢函数,源码如下。

//file: net/ipv4/route.c struct rtable *__ip_route_output_key(struct net *net, struct flowi4 *fl4) {  ...  // 参预 fib_lookup  if (fib_lookup(net, fl4, &res)) {  } }  //file: net/ipv4/route.c static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,           u8 tos, struct net_device *dev) {  ...  // 参预 fib_lookup  err = fib_lookup(net, &fl4, &res); } 

咱们来看下 fib_loopup 都干了啥。为了容易领略,咱们只看一下不因循多路由表版块的 fib_lookup。

//file: include/net/ip_fib.h static inline int fib_lookup(struct net *net, const struct flowi4 *flp,         struct fib_result *res) {  struct fib_table *table;   table = fib_get_table(net,久色精品 RT_TABLE_LOCAL);  if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))   return 0;   table = fib_get_table(net, RT_TABLE_MAIN);  if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))   return 0;  return -ENETUNREACH; } 

这个函数即是次第到 local 和 main 表中进行匹配,匹配到后就复返,不会接续往下匹配。从上头不错看到 local 表的优先级要高于 main 表,淌若 local 表中找到了功令,则路由历程就限度了。

这也即是好多同学说为什么 ping 本机的时分在 eth0 上抓不到包的根柢原因。通盘掷中 local 表的包都会被送往 loopback 竖立,不会过 eth0。

三、路由的使用规律 3.1 开启转发路由

在默许情况下,Linux 上的转发功能是关闭的,这时分 Linux 发现收到的收罗包不属于我方就会将其丢弃。

但在某些场景下,例如关于容器收罗来说,Linux 需要转发本机上其它收罗定名空间中过来的数据包,需要手工开启转发。如下这两种规律都不错。

# sysctl -w net.ipv4.ip_forward=1 # sysctl net.ipv4.conf.all.forwarding=1 

开启后,Linux 就能像路由器同样对不属于本机(严格地说是本收罗定名空间)的 IP 数据包进行路由转发了。

3.2 搜检路由表

在默许情况下,Linux 唯有 local 和 main 两个路由表。淌若内核编译时因循战术路由,那么不休员最多不错确立 255 个独处的路由表。在 centos 上不错通过以下形势搜检是否开启了 CONFIG_IP_MULTIPLE_TABLES 多路由表因循。

# cat /boot/config-3.10.0-693.el7.x86_64  CONFIG_IP_MULTIPLE_TABLES=y ... 

通盘的路由表按照从 0 - 255 进行编号,每个编号都有一个别号。编号和别号的对应关联在 /etc/iproute2/rt_tables 这个文献里不错查到。

# cat /etc/iproute2/rt_tables 255     local 254     main 253     default 0       unspec 200     eth0_table 

搜检某个路由表确实立,通过使用 ip route list table {表名} 来搜检。

#ip route list table local local 10.143.x.y dev eth0 proto kernel scope host src 10.143.x.y local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 

淌若是搜检 main 路由表,也不错平直使用 route 号召

# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 10.0.0.0        10.*.*.254      255.0.0.0       UG    0      0        0 eth0 10.*.*.0        0.0.0.0         255.255.248.0   U     0      0        0 eth0 

上头字段中的含义如下

Destination:主张地址,不错是一个具体的 IP,也不错是一个网段,和 Genmask 一齐暗示。 Gateway:网关地址,淌若是 0.0.0.0 暗示不需要经过网关。 Flags: U 暗示有用,G 暗示连气儿路由,H 这条功令是主机路由,而不是收罗路由。 Iface:网卡建筑,使用哪个网卡将包送夙昔。

上述效果中输出的第一条路由功令暗示这台机器下,真确地说这个收罗环境下,所打算为 10.0.0.0/8(Genmask 255.0.0.0 暗示前 8 位为子网掩码) 网段的收罗包都要通过 eth0 建筑送到 10...254 这个网关,由它再匡助转发。

第二条路由功令暗示,淌若主张地址是 10...0/21(Genmask 255.255.248.0 暗示前 21 位为子网掩码)则平直通过 eth0 发出即可,不需要经过网关就可通讯。

3.3 修改路由表

默许的 local 路由表是内核字据现时机器的网卡建筑确立自动生成的,不需要手工珍藏。关于main 的路由表确立咱们一般只需要使用 route add 号召就不错了,删除使用 route del。

修改主机路由

# route add -host 192.168.0.100 dev eth0 //直连毋庸网关 # route add -host 192.168.1.100 dev eth0 gw 192.168.0.254 //下一跳网关 

修改收罗路由

# route add -net 192.168.1.0/24 dev eth0 //直连毋庸网关 # route add -net 192.168.1.0/24 dev eth0 gw 10.162.132.110 //下一跳网关 

也不错指定一条默许功令,不掷中其它功令的时分会实践到这条。

# route add default gw 192.168.0.1 eth0 

关于其它编号的路由表想要修改的话,就需要使用 ip route 号召了。这里不外多张开,只用 main 表举一个例子,有更多使用需求的同学请自行搜索。

# ip route add 192.168.5.0/24 via 10.*.*.110 dev eth0 table main 
3.4 路由功令测试

在确立了一系列路由功令后,为了快速校验是否稳健预期,不错通过 ip route get 号召来阐明。

# ip route get 192.168.2.25 192.168.2.25 via 10.*.*.110 dev eth0 src 10.*.*.161     cache 
本文归来

在现如今各式收罗捏造化技能里,到处都能看着对路由功能的纯真诓骗。是以咱们今天有利深入盘问了一下 Linux 路由责任旨趣。

在 Linux 内核中,关于发送历程和采纳历程都会波及路由聘任,其中采纳历程的路由聘任是为了判断是该土产货采纳仍是将它转发出去。

 

默许有 local 和 main 两个路由表,不外淌若装置的 linux 开启了 CONFIG_IP_MULTIPLE_TABLES 选项的话,最多能因循 255 张路由表。

路由聘任历程其实不复杂,即是字据各个路由表确实立找到合适的网卡建筑,以及下一跳的地址,然后把包转发出去就算是完事。

通过合适地确立路由功令,容器中的收罗环境和外部的通讯不再是难事。通过大宗地干涉路由功令就不错已毕捏造收罗互通。

统商人和售卖方式亦在不断“升级”,面对更好的购物体验,越来越多的人选择进行网上交易,这对传统的面面交易无疑是一个巨大的冲击。尤其是近几年,网购人数的激增,致使线上成交额逐年飙升,至今依旧是呈加速度式增长,5G网的运行又为电商的发展按下了加速键!

这并非是电信运营商第一次将矛头指向互联网巨头,但是13家运营商联合“揭竿而起”并不多见。类似的问题在很多国家都出现过,这对国内运营商的启示是什么?

很多人第一次知道频谱这个词,好像还是前几个月瑞典在斯德哥尔摩公开拍卖自己的频谱。当时,瑞典有意将中国的企业中兴和华为排除在外,许多业内人士称华为这一次可能会彻底丧失进入瑞典市场的机会。当时,这个消息一公布,所有人都在骂瑞典忘恩负义、卑鄙无耻,但是很多人没弄明白频谱究竟是什么,为什么失去频谱的招标资格就等于失去了瑞典的整个通信市场呢?

从历史上看,有线广域网将各种分布式局域网、设备、数据和应用相互连接起来。当涉及到云应用时,广域网是新的LAN(局域网),需要有只有蜂窝网络才能提供的不间断连接水平。无线广域网部署蜂窝宽带,包括4G LTE和5G技术,作为一个重要的基础设施,为网络边缘的商店、办公室、车辆和/或物联网设备提供主要或故障切换的蜂窝连接。

 

好了,今天的共享就到这里了,期待你的点赞、再看和转发~~