linux鏈路
⑴ linuxpcie鏈路訓練時間
Downstream回到Dectect狀皮數橡態之後,就開始重新進行鏈路訓練,在重新鏈路訓練中,這次在Polling.Active狀態成功實現了Bit Lock和Symbol Lock, 然後進入Polling.Configuration狀態。畢渣最終成功實現PCIe鏈路燃旁訓練。
⑵ 什麼是linux
大家對Linux這個詞比較陌生吧,那麼Linux是什麼呢?
Linux是什麼
Linux是一種自由和開放源碼的類Unix操作系統。目前存在著許多不同的Linux,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,從手機、平板電腦、路由器和視頻游戲控制台,到台式計算機、大型機和超級計算機。Linux是一個領先的操作系統,世界上運算最快的10台超級計算機運行的都是Linux操作系統。
優點
1、Linux由眾多微內核組成,其源代碼完全開源;
2、Linux繼承了Unix的特性,具有非常強大的網路功能,其支持所有的網際網路協議,包括TCP/IPv4、TCP/IPv6和鏈路層拓撲程序等,且可以利用Unix的網路特性開發出新的協議棧;
3、Linux系統工具鏈完整,簡單操作就可以配置出合適的開發環境,可以簡化開發過程,減少開發中模擬工具的障礙,使系統具有較強的移植性。
⑶ Linux伺服器添加永久靜態路由
伺服器添加永久靜態路由
一、Linux添加永久靜態路由
方法一:修改 rc.local 配置文件
范圍:測試 Ubuntu 14.04、centos 6.4、debian 8.1、redhat 6.4 系統可用
使用方法:
向 linux 系統的 /etc/rc.local文件中添加命令route add -net 192.168.2.0/24 gw 192.168.2.254(伺服器的默認路由為192.168.2.254),或者添加命令route add -net 192.168.3.0/24 dev eth0,前者是依賴默認路由進行數據的轉發,後者是依賴網卡介面進行數據的轉發
reboot重啟系統命令生效
用 route -n 命令查看命令是否已經生效
方法二:修改 static-routes 配置文件
范圍:測試 centos 6.4、redhat 6.4 系統可用
使用方法(此方法比 rc.local 方法實用,能保證網路鏈路的通暢):
向系統的 /etc/sysconfig/static-routes 文件(如果系統沒有此文件,可以新建此文件)中添加命令 any net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.254(伺服器的默認路由為192.168.2.254),或者添加命令 any net 192.168.2.0 netmask 255.255.255.0 dev eth0, 前者是依賴默認路由進行數據的轉發,後者是依賴網卡介面進行數據的轉發
service network restart 命令重啟網路服務
用 route -n 命令查看命令是否已經生效
方法三:修改 interface 配置文件
范圍:測試 debian 8.1、Ubuntu 14.04 系統可用
使用方法:
向系統的 /etc/network/interface 文件中添加命令 up route add -net 192.168.2.0/24 gw 192.168.2.254(伺服器的默認路由為192.168.2.254),或者添加命令 up route add -net 192.168.3.0/24 dev eth0,前者是依賴默認路由進行數據的轉發,後者是依賴網卡介面進行數據的轉發
reboot 重啟系統命令生效
用 route -n 命令查看命令是否已經生效
注 1:(引用網上內容)如果在 rc.local中添加路由會造成NFS無法自動掛載問題,所以使用 static-routes 的方法是最好的。無論重啟系統和 service network restart 都會生效,按照linux啟動的順序,rc.local 裡面的內容是在linux所有服務都啟動完畢,最後才被執行的,也就是說,這裡面的內容是在netfs之後才被執行的,那也就是說在netfs啟動的時候,伺服器上的靜態路由是沒有被添加的,所以netfs掛載不能成功。
注 2:以上添加命令可以通過 linux 命令 sed -i 『2i route add -net 192.168.2.0/24 gw 192.168.2.254』 + 文件路徑 命令向相應的文件的第二行添加命令或者用 echo route add -net 192.168.2.0/24 gw 192.168.2.254 >> 文件路徑向文件的末尾添加命令
Ubuntux系統可以修改vim /etc/NetworkManager/system-connections/Wired\ connection\ 3
⑷ Linux下雙網卡綁定七種模式
現在一般的企業都會使用雙網卡接入,這樣既能添加網路帶寬,同時又能做相應的冗餘,可以說是好處多多。而一般企業都會使用linux操作系統下自帶的網卡綁定模式,當然現在網卡產商也會出一些針對windows操作系統網卡管理軟體來做網卡綁定(windows操作系統沒有網卡綁定功能 需要第三方支持)。進入正題,linux有七種網卡綁定模式:0. round robin,1.active-backup,2.load balancing (xor), 3.fault-tolerance (broadcast), 4.lacp, 5.transmit load balancing, 6.adaptive load balancing。 第一種:bond0:round robin標准:round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.
特點:(1)所有鏈路處於負載均衡狀態,輪詢方式往每條鏈路發送報文,基於per packet方式發送。服務上ping 一個相同地址:1.1.1.1 雙網卡的兩個網卡都有流量發出。負載到兩條鏈路上,說明是基於per packet方式 ,進行輪詢發送。(2)這模式的特點增加了帶寬,同時支持容錯能力,當有鏈路出問題,會把流量切換到正常的鏈路上。
實際綁定結果: cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: load balancing (round-robin) -----RR的模式 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 74:ea:3a:6a:54:e3 Slave Interface: eth1 MII Status: up Link Failure Count: 0
應用拓撲:交換機端需要配置聚合口,cisco叫port channel。拓撲圖如下:
第二種:bond1:active-backup標准文檔定義:Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond's MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode.
模式的特點:一個埠處於主狀態 ,一個處於從狀態,所有流量都在主鏈路上處理,從不會有任何流量。當主埠down掉時,從埠接手主狀態。
實際綁定結果: root@1:~# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: fault-tolerance (active-backup) —–backup模式 Primary Slave: None Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 74:ea:3a:6a:54:e3 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: d8:5d:4c:71:f9:94
應用拓撲:這種模式接入不需要交換機端支持,隨便怎麼接入都行。
第三種:bond2:load balancing (xor)標准文檔描述:XOR policy: Transmit based on [(source MAC address XOR'd with destination MAC address) molo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.
特點:該模式將限定流量,以保證到達特定對端的流量總是從同一個介面上發出。既然目的地是通過MAC地址來決定的,因此該模式在"本地"網路配置下可以工作得很好。如果所有流量是通過單個路由器(比如 "網關"型網路配置,只有一個網關時,源和目標mac都固定了,那麼這個演算法算出的線路就一直是同一條,那麼這種模式就沒有多少意義了。),那該模式就不是最好的選擇。和balance-rr一樣,交換機埠需要能配置為"port channel"。這模式是通過源和目標mac做hash因子來做xor演算法來選路的。
實際綁定結果: [root@localhost ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006) Bonding Mode: load balancing (xor) ——配置為xor模式 Transmit Hash Policy: layer2 (0) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:d0:f8:40:f1:a0 Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:d0:f8:00:0c:0c
應用拓撲:同bond0一樣的應用模型。這個模式也需要交換機配置聚合口。
第四種:bond3:fault-tolerance (broadcast)標准文檔定義:Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.
特點:這種模式的特點是一個報文會復制兩份往bond下的兩個介面分別發送出去,當有對端交換機失效,我們感覺不到任何downtime,但此法過於浪費資源;不過這種模式有很好的容錯機制。此模式適用於金融行業,因為他們需要高可靠性的網路,不允許出現任何問題。
實際綁定結果: root@ubuntu12:~/ram# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: fault-tolerance (broadcast) ——- fault-tolerance 模式 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 74:ea:3a:6a:54:e3 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: d8:5d:4c:71:f9:94
應用拓撲:如下:
這種模式適用於如下拓撲,兩個介面分別接入兩台交換機,並且屬於不同的vlan,當一邊的網路出現故障不會影響伺服器另一邊接入的網路正常工作。而且故障過程是0丟包。下面展示了這種模式下ping信息: 64 bytes from 1.1.1.1: icmp_seq=901 ttl=64 time=0.205 ms 64 bytes from 1.1.1.1: icmp_seq=901 ttl=64 time=0.213 ms (DUP!) —p為重復報文 64 bytes from 1.1.1.1: icmp_seq=902 ttl=64 time=0.245 ms 64 bytes from 1.1.1.1: icmp_seq=902 ttl=64 time=0.254 ms (DUP!) 64 bytes from 1.1.1.1: icmp_seq=903 ttl=64 time=0.216 ms 64 bytes from 1.1.1.1: icmp_seq=903 ttl=64 time=0.226 ms (DUP!) 從這個ping信息可以看到,這種模式的特點是,同一個報文伺服器會復制兩份分別往兩條線路發送,導致回復兩份重復報文,這種模式有浪費資源的嫌疑。
第五種:bond4:lacp
標准文檔定義:IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and plex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification. Pre-requisites: 1. Ethtool support in the base drivers for retrieving.the speed and plex of each slave. 2. A switch that supports IEEE 802.3ad Dynamic link aggregation. Most switches will require some type of configuration to enable 802.3ad mode.
特點:802.3ad模式是IEEE標准,因此所有實現了802.3ad的對端都可以很好的互操作。802.3ad 協議包括聚合的自動配置,因此只需要很少的對交換機的手動配置(要指出的是,只有某些設備才能使用802.3ad)。802.3ad標准也要求幀按順序(一定程度上)傳遞,因此通常單個連接不會看到包的亂序。802.3ad也有些缺點:標准要求所有設備在聚合操作時,要在同樣的速率和雙工模式,而且,和除了balance-rr模式外的其它bonding負載均衡模式一樣,任何連接都不能使用多於一個介面的帶寬。 此外,linux bonding的802.3ad實現通過對端來分發流量(通過MAC地址的XOR值),因此在"網關"型配置下,所有外出(Outgoing)流量將使用同一個設備。進入(Incoming)的流量也可能在同一個設備上終止,這依賴於對端802.3ad實現里的均衡策略。在"本地"型配置下,路兩將通過 bond里的設備進行分發。
實際綁定結果: root@:~# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: IEEE 802.3ad Dynamic link aggregation Transmit Hash Policy: layer2 (0) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 802.3ad info LACP rate: slow Aggregator selection policy (ad_select): stable Active Aggregator Info: Aggregator ID: 1 Number of ports: 1 Actor Key: 9 Partner Key: 1 Partner Mac Address: 00:00:00:00:00:00 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 74:ea:3a:6a:54:e3 Aggregator ID: 1 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: d8:5d:4c:71:f9:94 Aggregator ID: 2
應用拓撲:應用拓撲同bond0,和bond2一樣,不過這種模式除了配置port channel之外還要在port channel聚合口下開啟LACP功能,成功協商後,兩端可以正常通信。否則不能使用。
交換機端配置: interface AggregatePort 1 配置聚合口 interface GigabitEthernet 0/23 port-group 1 mode active 介面下開啟lacp 主動模式 interface GigabitEthernet 0/24 port-group 1 mode active
第六種:bond5: transmit load balancing
標准文檔定義:Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave. Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave.
特點:balance-tlb模式通過對端均衡外出(outgoing)流量。既然它是根據MAC地址進行均衡,在"網關"型配置(如上文所述)下,該模式會通過單個設備來發送所有流量,然而,在"本地"型網路配置下,該模式以相對智能的方式(不是balance-xor或802.3ad模式里提及的XOR方式)來均衡多個本地網路對端,因此那些數字不幸的MAC地址(比如XOR得到同樣值)不會聚集到同一個介面上。 不像802.3ad,該模式的介面可以有不同的速率,而且不需要特別的交換機配置。不利的一面在於,該模式下所有進入的(incoming)流量會到達同一個介面;該模式要求slave介面的網路設備驅動有某種ethtool支持;而且ARP監控不可用。
實際配置結果: cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006) Bonding Mode: transmit load balancing —–TLB模式 Primary Slave: None Currently Active Slave: eth1 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:d0:f8:40:f1:a0 Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:d0:f8:00:0c:0c
應用拓撲:這個模式下bond成員使用各自的mac,而不是上面幾種模式是使用bond0介面的mac。
如上圖,設備開始時會發送免費arp,以主埠eth1的mac為源,當客戶端收到這個arp時就會在arp緩存中記錄下這個mac對的ip。而在這個模式下,伺服器每個埠在ping操作時,會根據演算法算出出口,地址不斷變化時他,這時會負載到不同埠。實驗中ping1.1.1.3時往eth2發送,源mac為00:D0:F8:00:0C:0C,ping1.1.1.4是往eth1發送,源mac為00:D0:F8:40:F1:A0,以此類推,所以從伺服器出去的流量負載到兩條線路,但是由於服務發arp時只用00:D0:F8:40:F1:A0,這樣客戶端緩沖記錄的是00:D0:F8:40:F1:A0對的ip,封裝時目標mac:00:D0:F8:40:F1:A0。這樣進入服務的流量都只往eth1(00:D0:F8:40:F1:A0)走。設備會一直發入snap報文,eth1發送源為00d0.f840.f1a0的snap報文,eth2發送源為00d0.f800.0c0c的snap報文。這個snap報文mac和目標mac一樣都是網卡本地mac,源ip和目標ip也一樣,這個報文的作用是檢測線路是否正常的回環報文。 註:可以通過修改bond0的mac地址來引導他發修改後的源mac的免費arp(MACADDR=00:D0:F8:00:0C:0C)
第七種:bond6:adaptive load balancing特點:該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬體地址改寫為bond中某個slave的唯一硬體地址,從而使得不同的對端使用不同的硬體地址進行通信。所有埠都會收到對端的arp請求報文,回復arp回時,bond驅動模塊會截獲所發的arp回復報文,根據演算法算到相應埠,這時會把arp回復報文的源mac,send源mac都改成相應埠mac。從抓包情況分析回復報文是第一個從埠1發,第二個從埠2發。以此類推。 (還有一個點:每個埠除發送本埠回復的報文,也同樣會發送其他埠回復的報文,mac還是其他埠的mac)這樣來自伺服器端的接收流量也會被均衡。 當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中復制並保存下來。當ARP應答從對端到達時,bonding驅動把它的硬體地址提取出來,並發起一個ARP應答給bond中的某個slave(這個演算法和上面一樣,比如算到1口,就給發送arp請求,1回復時mac用1的mac)。使用ARP協商進行負載均衡的一個問題是:每次廣播 ARP請求時都會使用bond的硬體地址,因此對端學習到這個硬體地址後,接收流量將會全部流向當前的slave。這個問題通過給所有的對端發送更新(ARP應答)來解決,往所有埠發送應答,應答中包含他們獨一無二的硬體地址,從而導致流量重新分布。當新的slave加入到bond中時,或者某個未激活的slave重新激活時,接收流量也要重新分布。接收的負載被順序地分布(round robin)在bond中最高速的slave上 當某個鏈路被重新接上,或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個 client發起ARP應答。下面介紹的updelay參數必須被設置為某個大於等於switch(交換機)轉發延時的值,從而保證發往對端的ARP應答不會被switch(交換機)阻截。 必要條件: 條件1:ethtool支持獲取每個slave的速率; 條件2:底層驅動支持設置某個設備的硬體地址,從而使得總是有個slave(curr_active_slave)使用bond的硬體地址,同時保證每個bond 中的slave都有一個唯一的硬體地址。如果curr_active_slave出故障,它的硬體地址將會被新選出來的 curr_active_slave接管。
實際配置結果: root@:/tmp# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: adaptive load balancing Primary Slave: None Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 74:ea:3a:6a:54:e3 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: d8:5d:4c:71:f9:94
應用拓撲:
A是雙網卡綁定。 當B 發送一個arp請求到達A時,按正常情況A會回應一個arp回應報文,源mac為bond的mac,源就是bond的ip。但是這個模式下bonding驅動會截獲這個arp回應,把源mac改成bond狀態 下其中某一個網卡的mac:mac1,這樣B收到這個arp回應時就會在arp緩存中記錄下ip:1.1.1.1對應的mac為mac1。這樣B的過來的流量都走MAC1. 當C 發送一個arp請求到達A時,按正常情況A會回應一個arp回應報文,源mac為bond的mac,源就是bond的ip。但是這個模式下bonding驅動會截獲這個arp回應,把源mac改成bond狀態 下其中某一個網卡的mac:mac2,這樣C收到這個arp回應時就會在arp緩存中記錄下ip:1.1.1.1對應的mac為mac2。這樣C的過來的流量都走MAC2. 這樣就可以做到回來讓回來的流量也負載均衡。出方向均衡和MODE=5一致,不同地址會根據xor演算法算出不同出口,發不同出口發送相應的arp ,mac是對應網卡的mac。
===================================================
Linux (RedHat, Ubuntu, etc.) Bonding 共提供了六種模式:
名辭解釋: 在bonding的領域里, 英文slave interface表示某個實體連線的意思; 因此指令名稱為: ifenslave
mode=0 (balance-rr): 採取依序使用的連線的方式,提供了負載均衡及容錯的功能
mode=1 (active-backup): 眾多的連線中,只有一個是啟用的狀態,當啟用的連線失效(敗),則由備援的連線接手,提供容錯機制。
mode=2 (balance-xor): 採用xor的演演算法來選擇傳輸的連線,其結果是以目的地MAC為基準選擇哪一條連線;提供了負載均衡及容錯機制。
mode=3 ( broadcast): 把封包送到所有的連線,當有連線失效沒有任何downtime,但此法過於浪費連線資源;有容錯機制。
mode=4 (802.3ad, LACP): IEEE 802.3ad Dynamic Link Aggregation協定;提供較好的機制,並可搭配802.1Q trunking同時介接不同的VLAN;惟獨此法必須與支援802.3ad的交換機介接,並且每個slave的驅動程式都需支援ethtool擷取介面的訊息, 較為豪華,但是提供了相當優良的應用,負載均衡及容錯機制。
mode=5 (balance-tlb): Adaptive Transmit load balancing; 無須交換機支援但slave驅動程式需支援ethtool;根據連線介面卡的負載決定traffic如何送出,回覆的traffic則由送出的salve接收。
mode=6 (balance-alb): 包含了mode 5所有功能及需求,再加上接收traffic時的負載均衡.
⑸ Linux系統如何配置鏈路聚合,實現流量負載均衡
本文主要解決3個問題:
第一、鏈路聚合的定義和作用是什麼?
第二、如何配置鏈路聚合?
第三、鏈路聚合的實際應用場景有那些?
第一、鏈路聚合的定義和作用是什麼?
答:鏈路聚合的定義:鏈路聚合,官方稱聚合鏈接,民間又稱網卡組隊,具體指的是將多個網卡綁定在一起組建一個虛擬網卡,外界與虛擬網卡進行通信,虛擬網卡再將信息進行分發;
鏈路聚合的作用:可以實現輪詢式的流量負載均衡和熱備份的作用;
舉個栗子:
鏈路聚合就好比是一個包工頭,這個包工頭為了多賺錢,多接訂單,肯定需要找多個小弟;
這樣就可以保障,萬一有一個小弟感冒了,不能上班,這時有其他小弟可以頂上;
當客戶需要蓋房子的時候,直接找包工頭就好了,不需要一個一個的去找建築工人;
第二、如何配置鏈路聚合?
答:
1、配置鏈路聚合的命令是:
nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{"runner": {"name": "activebackup"}}'
譯為:nmcli connection 添加 類型 team(組隊)
配置文件名 team0 網卡名 team0 每次開機自動啟用
配置運行模式 熱備份模式
整體譯為:為系統網卡添加一個 team (團隊),團隊名稱叫 team0 ,配置文件也叫 team0 , 並且設置為開機自動啟動,配置運行模式為熱備份模式;
2、為鏈路聚合添加成員的命令是:
nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0 ;
nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0;
注釋:nmcli connection 添加 類型為 team的成員
配置文件名 team0-1 網卡為 eth1 主設備為 team0
整體譯為:為主設備team0添加兩張網卡,eth1和eth2;
3、為tem0配置ip地址的命令是:
nmcli connection modify team0 ipv4.method manual ipv4.addresses
「IP 地址 / 子網掩碼」 connection.autoconnect yes
4、激活team0的命令是:
nmcli connection up team0
第三、鏈路聚合的實際應用場景有那些?
答:當伺服器提供比較重要的服務時,只准備一張網卡是遠遠不夠的,因為一但網卡出現故障,客戶就無法訪問,這就會造成客戶流失,體驗感差;
這個時候就可以運用鏈路聚合的方法來解決,將多張網卡綁定在一起創建一張虛擬網卡,從而實現網卡熱備份,流量輪詢式負載均衡;
以此來保障伺服器能夠正常提供服務,給用戶以良好的體驗;
注意事項:
在創建虛擬網卡和添加成員時,如果命令敲錯了,一定要刪除錯誤的信息,以免造成通信混亂;
刪除的命令是:nmcli connection delete team0 (team0或team x)
查看team0的信息命令是: teamdctl team0 state
以上.......
(本篇完)
祝:開心!
羅貴
2019-03-24
⑹ linux安裝全鏈路追蹤工具skywalking8.0
SkyWalking是一個針對分布式系統的APM(應用性能監控)系統,特別針對微服務、cloud native和容器化架構,其核心是個分布式追蹤系統。它通過探針自動收集所需的指標,且基於探針技術對應用零侵入零耦合。通過這些調用鏈路以及指標,SkyWalking APM會感知應用間關系和服務間關系,並進行相應的指標統計。
解壓後,進入目錄,默認自帶了agent,這個是用來追蹤java項目的。我因為是用來追蹤php項目,所以這個用不上,如果要追蹤php項目,需要另外安裝php的agent,請查看我另外一篇文章( linux安裝sky-php-agent )
bin裡面是啟動文件
config目錄裡面是配置文件
webapp目錄裡面是UI界面項目文件和配置文件
默認情況下,只需要更改一下 config/application.yml文件
默認的restHost和gRPCHost的IP為0.0.0.0,我這里改成我這邊內網的IP。這里要注意一下,一旦改了IP,就只能用這個IP,比如我這里改成了內網IP,那麼用127.0.0.1都不能訪問。
如果需要更改UI界面訪問的埠,可以修改 webapp/webapp.yml,裡面配置文件很簡單
注意一下,如果要想能夠讓受控端訪問到skywalking服務,那麼必須將12800埠對受控端伺服器打開。WEB界面的埠,我這里是8081,大家可以改成自己需要的埠。
變更完配置後,就可以進去bin目錄下,運行 startup.sh ,服務就會啟動。然後通過http://伺服器ip:8081進行界面訪問。
受控端如果也啟動了的話,這個時候,界面里就自動會出現數據了。
emmmm.....這里有個坑,默認情況下,打開界面什麼數據都看不到,這個需要點擊右上角的「自動」按鈕,讓按鈕變成藍色,這個時候就會有數據出現了。
如果還是沒有出現數據,那就檢查受控端服務是不是已經啟動了,或者去看一下logs目錄下的日誌。如果受控端連接服務端出現錯誤,就看skywalking-oap-server.log;如果受控端一切正常,界面數據還是不顯示,就看webapp.log
我在安裝的時候,使用startup.sh啟動文件,又遇到一個坑。這個啟動文件,無論中間是不是有報錯,都會提示啟動成功。而且因為沒有停止的命令,如果重復運行startup.sh,日誌里會提示埠佔用。這個時候,需要使用命令先查看佔用埠的進程,然後殺掉進程,再重新運營啟動文件才可以。
⑺ linux常見的應用分哪兩個方面
1、Linux繼承了Unix的特性,具有非常強大的網路功能,其支持所有的網際網路協議,包括TCP/IPv4、TCP/IPv6和鏈路層拓撲程序等,且可以利用Unix的網路特性開發出新的協議棧。
2、Linux系統工具鏈完整,簡單操作就可以配置出合適的開發環境,可以簡化開發過程,減拿余少開發中模擬工具的障礙,使系統具有較強的移植性。
(7)linux鏈路擴展閱讀
Linux一開始是要求所有的源碼必須公開,並且任何人均不得從Linux交易中神敏穗獲利。然而這種純粹的自由軟體的理想對於Linux的普及和發展是不利的,於是Linux開始轉向GPL,成為GNU陣營中的主要一員。
Linux憑借優秀的設游卜計,不凡的性能,加上IBM、INTEL、CA、CORE、ORACLE等國際知名企業的大力支持,市場份額逐步擴大,逐漸成為主流操作系統之一。
⑻ linux鏈路層如何捕捉
目標:在linux下使用C語言的原始套接字來接收乙太網數據鏈路層上的數據,如果接收的數據是IEC61850-9-2 SV類型,則列印。。。。僅供參考!
源好孫世代碼:
#include <stdio.h>凱差
#include <unistd.h>
#include <sys/友肢socket.h>
#include <sys/types.h>
#include <linux/if_ether.h>
#include <linux/in.h>
#define BUFFER_MAX 2048
int main(int argc, char *argv[])
{
int sock, n_read, eth_type;
char buffer[BUFFER_MAX];
char *eth_head;
if((sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0)
{
fprintf(stdout, "create socket error/n");
exit(0);
}
while(1)
{
n_read = recvfrom(sock, buffer, 2048, 0, NULL, NULL);
if(n_read < 42)
{
fprintf(stdout, "Incomplete header, packet corrupt/n");
continue;
}
eth_head = buffer;
eth_type=((unsigned char)eth_head[16])*16*16+(unsigned char)eth_head[17];
if(eth_type==0x88ba){ //judge wether the eth_type is iec61850 sv
printf("\n----------------IEC61850-9-2 SV---------------------\n");
int i=0;
for(i=0;i<n_read;i++){
printf("%.2X ",(unsigned char)eth_head[i]);
if(((i+1)%16)==0) printf("\n");
}
printf("\n----------------------------------------------------\n");
}
}
}
⑼ 關於 Linux 網路,你必須知道這些
我們一起學習了文件系統和磁碟 I/O 的工作原理,以及相應的性能分析和優化方法。接下來,我們將進入下一個重要模塊—— Linux 的網路子系統。
由於網路處理的流程最復雜,跟我們前面講到的進程調度、中斷處理、內存管理以及 I/O 等都密不可分,所以,我把網路模塊作為最後一個資源模塊來講解。
同 CPU、內存以及 I/O 一樣,網路也是 Linux 系統最核心的功能。網路是一種把不同計算機或網路設備連接到一起的技術,它本質上是一種進程間通信方式,特別是跨系統的進程間通信,必須要通過網路才能進行。隨著高並發、分布式、雲計算、微服務等技術的普及,網路的性能也變得越來越重要。
說到網路,我想你肯定經常提起七層負載均衡、四層負載均衡,或者三層設備、二層設備等等。那麼,這里說的二層、三層、四層、七層又都是什麼意思呢?
實際上,這些層都來自國際標准化組織制定的開放式系統互聯通信參考模型(Open System Interconnection Reference Model),簡稱為 OSI 網路模型。
但是 OSI 模型還是太復雜了,也沒能提供一個可實現的方法。所以,在 Linux 中,我們實際上使用的是另一個更實用的四層模型,即 TCP/IP 網路模型。
TCP/IP 模型,把網路互聯的框架分為應用層、傳輸層、網路層、網路介面層等四層,其中,
為了幫你更形象理解 TCP/IP 與 OSI 模型的關系,我畫了一張圖,如下所示:
當然了,雖說 Linux 實際按照 TCP/IP 模型,實現了網路協議棧,但在平時的學習交流中,我們習慣上還是用 OSI 七層模型來描述。比如,說到七層和四層負載均衡,對應的分別是 OSI 模型中的應用層和傳輸層(而它們對應到 TCP/IP 模型中,實際上是四層和三層)。
OSI引入了服務、介面、協議、分層的概念,TCP/IP借鑒了OSI的這些概念建立TCP/IP模型。
OSI先有模型,後有協議,先有標准,後進行實踐;而TCP/IP則相反,先有協議和應用再提出了模型,且是參照的OSI模型。
OSI是一種理論下的模型,而TCP/IP已被廣泛使用,成為網路互聯事實上的標准。
有了 TCP/IP 模型後,在進行網路傳輸時,數據包就會按照協議棧,對上一層發來的數據進行逐層處理;然後封裝上該層的協議頭,再發送給下一層。
當然,網路包在每一層的處理邏輯,都取決於各層採用的網路協議。比如在應用層,一個提供 REST API 的應用,可以使用 HTTP 協議,把它需要傳輸的 JSON 數據封裝到 HTTP 協議中,然後向下傳遞給 TCP 層。
而封裝做的事情就很簡單了,只是在原來的負載前後,增加固定格式的元數據,原始的負載數據並不會被修改。
比如,以通過 TCP 協議通信的網路包為例,通過下面這張圖,我們可以看到,應用程序數據在每個層的封裝格式。
這些新增的頭部和尾部,增加了網路包的大小,但我們都知道,物理鏈路中並不能傳輸任意大小的數據包。網路介面配置的最大傳輸單元(MTU),就規定了最大的 IP 包大小。在我們最常用的乙太網中,MTU 默認值是 1500(這也是 Linux 的默認值)。
一旦網路包超過 MTU 的大小,就會在網路層分片,以保證分片後的 IP 包不大於 MTU 值。顯然,MTU 越大,需要的分包也就越少,自然,網路吞吐能力就越好。
理解了 TCP/IP 網路模型和網路包的封裝原理後,你很容易能想到,Linux 內核中的網路棧,其實也類似於 TCP/IP 的四層結構。如下圖所示,就是 Linux 通用 IP 網路棧的示意圖:
我們從上到下來看這個網路棧,你可以發現,
這里我簡單說一下網卡。網卡是發送和接收網路包的基本設備。在系統啟動過程中,網卡通過內核中的網卡驅動程序注冊到系統中。而在網路收發過程中,內核通過中斷跟網卡進行交互。
再結合前面提到的 Linux 網路棧,可以看出,網路包的處理非常復雜。所以,網卡硬中斷只處理最核心的網卡數據讀取或發送,而協議棧中的大部分邏輯,都會放到軟中斷中處理。
我們先來看網路包的接收流程。
當一個網路幀到達網卡後,網卡會通過 DMA 方式,把這個網路包放到收包隊列中;然後通過硬中斷,告訴中斷處理程序已經收到了網路包。
接著,網卡中斷處理程序會為網路幀分配內核數據結構(sk_buff),並將其拷貝到 sk_buff 緩沖區中;然後再通過軟中斷,通知內核收到了新的網路幀。
接下來,內核協議棧從緩沖區中取出網路幀,並通過網路協議棧,從下到上逐層處理這個網路幀。比如,
最後,應用程序就可以使用 Socket 介面,讀取到新接收到的數據了。
為了更清晰表示這個流程,我畫了一張圖,這張圖的左半部分表示接收流程,而圖中的粉色箭頭則表示網路包的處理路徑。
了解網路包的接收流程後,就很容易理解網路包的發送流程。網路包的發送流程就是上圖的右半部分,很容易發現,網路包的發送方向,正好跟接收方向相反。
首先,應用程序調用 Socket API(比如 sendmsg)發送網路包。
由於這是一個系統調用,所以會陷入到內核態的套接字層中。套接字層會把數據包放到 Socket 發送緩沖區中。
接下來,網路協議棧從 Socket 發送緩沖區中,取出數據包;再按照 TCP/IP 棧,從上到下逐層處理。比如,傳輸層和網路層,分別為其增加 TCP 頭和 IP 頭,執行路由查找確認下一跳的 IP,並按照 MTU 大小進行分片。
分片後的網路包,再送到網路介面層,進行物理地址定址,以找到下一跳的 MAC 地址。然後添加幀頭和幀尾,放到發包隊列中。這一切完成後,會有軟中斷通知驅動程序:發包隊列中有新的網路幀需要發送。
最後,驅動程序通過 DMA ,從發包隊列中讀出網路幀,並通過物理網卡把它發送出去。
多台伺服器通過網卡、交換機、路由器等網路設備連接到一起,構成了相互連接的網路。由於網路設備的異構性和網路協議的復雜性,國際標准化組織定義了一個七層的 OSI 網路模型,但是這個模型過於復雜,實際工作中的事實標准,是更為實用的 TCP/IP 模型。
TCP/IP 模型,把網路互聯的框架,分為應用層、傳輸層、網路層、網路介面層等四層,這也是 Linux 網路棧最核心的構成部分。
我結合網路上查閱的資料和文章中的內容,總結了下網卡收發報文的過程,不知道是否正確:
當發送數據包時,與上述相反。鏈路層將數據包封裝完畢後,放入網卡的DMA緩沖區,並調用系統硬中斷,通知網卡從緩沖區讀取並發送數據。
了解 Linux 網路的基本原理和收發流程後,你肯定迫不及待想知道,如何去觀察網路的性能情況。具體而言,哪些指標可以用來衡量 Linux 的網路性能呢?
實際上,我們通常用帶寬、吞吐量、延時、PPS(Packet Per Second)等指標衡量網路的性能。
除了這些指標,網路的可用性(網路能否正常通信)、並發連接數(TCP 連接數量)、丟包率(丟包百分比)、重傳率(重新傳輸的網路包比例)等也是常用的性能指標。
分析網路問題的第一步,通常是查看網路介面的配置和狀態。你可以使用 ifconfig 或者 ip 命令,來查看網路的配置。我個人更推薦使用 ip 工具,因為它提供了更豐富的功能和更易用的介面。
以網路介面 eth0 為例,你可以運行下面的兩個命令,查看它的配置和狀態:
你可以看到,ifconfig 和 ip 命令輸出的指標基本相同,只是顯示格式略微不同。比如,它們都包括了網路介面的狀態標志、MTU 大小、IP、子網、MAC 地址以及網路包收發的統計信息。
第一,網路介面的狀態標志。ifconfig 輸出中的 RUNNING ,或 ip 輸出中的 LOWER_UP ,都表示物理網路是連通的,即網卡已經連接到了交換機或者路由器中。如果你看不到它們,通常表示網線被拔掉了。
第二,MTU 的大小。MTU 默認大小是 1500,根據網路架構的不同(比如是否使用了 VXLAN 等疊加網路),你可能需要調大或者調小 MTU 的數值。
第三,網路介面的 IP 地址、子網以及 MAC 地址。這些都是保障網路功能正常工作所必需的,你需要確保配置正確。
第四,網路收發的位元組數、包數、錯誤數以及丟包情況,特別是 TX 和 RX 部分的 errors、dropped、overruns、carrier 以及 collisions 等指標不為 0 時,通常表示出現了網路 I/O 問題。其中:
ifconfig 和 ip 只顯示了網路介面收發數據包的統計信息,但在實際的性能問題中,網路協議棧中的統計信息,我們也必須關注。你可以用 netstat 或者 ss ,來查看套接字、網路棧、網路介面以及路由表的信息。
我個人更推薦,使用 ss 來查詢網路的連接信息,因為它比 netstat 提供了更好的性能(速度更快)。
比如,你可以執行下面的命令,查詢套接字信息:
netstat 和 ss 的輸出也是類似的,都展示了套接字的狀態、接收隊列、發送隊列、本地地址、遠端地址、進程 PID 和進程名稱等。
其中,接收隊列(Recv-Q)和發送隊列(Send-Q)需要你特別關注,它們通常應該是 0。當你發現它們不是 0 時,說明有網路包的堆積發生。當然還要注意,在不同套接字狀態下,它們的含義不同。
當套接字處於連接狀態(Established)時,
當套接字處於監聽狀態(Listening)時,
所謂全連接,是指伺服器收到了客戶端的 ACK,完成了 TCP 三次握手,然後就會把這個連接挪到全連接隊列中。這些全連接中的套接字,還需要被 accept() 系統調用取走,伺服器才可以開始真正處理客戶端的請求。
與全連接隊列相對應的,還有一個半連接隊列。所謂半連接是指還沒有完成 TCP 三次握手的連接,連接只進行了一半。伺服器收到了客戶端的 SYN 包後,就會把這個連接放到半連接隊列中,然後再向客戶端發送 SYN+ACK 包。
類似的,使用 netstat 或 ss ,也可以查看協議棧的信息:
這些協議棧的統計信息都很直觀。ss 只顯示已經連接、關閉、孤兒套接字等簡要統計,而 netstat 則提供的是更詳細的網路協議棧信息。
比如,上面 netstat 的輸出示例,就展示了 TCP 協議的主動連接、被動連接、失敗重試、發送和接收的分段數量等各種信息。
接下來,我們再來看看,如何查看系統當前的網路吞吐量和 PPS。在這里,我推薦使用我們的老朋友 sar,在前面的 CPU、內存和 I/O 模塊中,我們已經多次用到它。
給 sar 增加 -n 參數就可以查看網路的統計信息,比如網路介面(DEV)、網路介面錯誤(EDEV)、TCP、UDP、ICMP 等等。執行下面的命令,你就可以得到網路介面統計信息:
這兒輸出的指標比較多,我來簡單解釋下它們的含義。
其中,Bandwidth 可以用 ethtool 來查詢,它的單位通常是 Gb/s 或者 Mb/s,不過注意這里小寫字母 b ,表示比特而不是位元組。我們通常提到的千兆網卡、萬兆網卡等,單位也都是比特。如下你可以看到,我的 eth0 網卡就是一個千兆網卡:
其中,Bandwidth 可以用 ethtool 來查詢,它的單位通常是 Gb/s 或者 Mb/s,不過注意這里小寫字母 b ,表示比特而不是位元組。我們通常提到的千兆網卡、萬兆網卡等,單位也都是比特。如下你可以看到,我的 eth0 網卡就是一個千兆網卡:
我們通常使用帶寬、吞吐量、延時等指標,來衡量網路的性能;相應的,你可以用 ifconfig、netstat、ss、sar、ping 等工具,來查看這些網路的性能指標。
小狗同學問到: 老師,您好 ss —lntp 這個 當session處於listening中 rec-q 確定是 syn的backlog嗎?
A: Recv-Q為全連接隊列當前使用了多少。 中文資料里這個問題講得最明白的文章: https://mp.weixin.qq.com/s/yH3PzGEFopbpA-jw4MythQ
看了源碼發現,這個地方講的有問題.關於ss輸出中listen狀態套接字的Recv-Q表示全連接隊列當前使用了多少,也就是全連接隊列的當前長度,而Send-Q表示全連接隊列的最大長度
⑽ linux下netlink的使用簡介
Netlink套接字是用以實現 用戶進程 與 內核進程 通信的一種特殊的進程間通信(IPC) ,也是網路應用程序與內核通信的最常用的介面。
在Linux 內核中,使用netlink 進行應用與內核通信的應用有很多,如
Netlink 是一種在內核與用戶應用間進行雙向數據傳輸的非常好的方式,用戶態應用使用標準的 socket API 就可以使用 netlink 提供的強大功能,內核態需要使用專門的內核 API 來使用 netlink。
一般來說用戶空間和內核空間的通信方式有三種: /proc、ioctl、Netlink 。而前兩種都是單向的,而Netlink可以實現雙工通信。
Netlink 相對於系統調用,ioctl 以及 /proc文件系統而言,具有以下優點:
Netlink協議基於BSD socket和 AF_NETLINK 地址簇,使用32位的埠號定址,每個Netlink協議通常與一個或一組內核服務/組件相關聯,如 NETLINK_ROUTE 用於獲取和設置路由與鏈路信息、 NETLINK_KOBJECT_UEVENT 用於內核向用戶空間的udev進程發送通知等。
用戶態應用使用標準的 socket API有sendto(),recvfrom(), sendmsg(), recvmsg()。
Netlink通信跟常用UDP Socket通信類似, struct sockaddr_nl 是netlink通信地址,跟普通 socket struct sockaddr_in 類似。
netlink_kernel_create內核函數用於創建內核socket與用戶態通信
首先將編譯出來的Netlink內核模塊插入到系統當中(insmod netlink_test.ko),然後運行應用程序,可以看到如下輸出: