ping指令
ping是個使用頻率極高的實用程式,主要用于确定網絡的連通性。這對确定網絡是否正确連接配接,以及網絡連接配接的狀況十分有用。簡單的說,ping就是一個測試程式,如果ping運作正确,大體上就可以排除網絡通路層、網卡、Modem的輸入輸出線路、電纜和路由器等存在的故障,進而縮小問題的範圍。
ping能夠以毫秒為機關顯示發送請求到傳回應答之間的時間量。如果應答時間短,表示資料報不必通過太多的路由器或網絡,連接配接速度比較快。ping還能顯示TTL(Time To Live,生存時間)值,通過TTL值可以推算資料包通過了多少個路由器。
1、指令格式
ping 主機名
ping 域名
ping IP位址
如圖所示,使用ping指令檢查到IP位址210.43.16.17的計算機的連通性,該例為連接配接正常。共發送了四個測試資料包,正确接收到四個資料包。
2、ping指令的基本應用
一般情況下,使用者可以通過使用一系列ping指令來查找問題出在什麼地方,或檢驗網絡運作的情況。下面就給出一個典型的檢測次序及對應的可能故障:
① ping 127.0.0.1
如果測試成功,表明網卡、TCP/IP協定的安裝、IP位址、子網路遮罩的設定正常。如果測試不成功,就表示TCP/IP的安裝或設定存在有問題。
② ping 本機IP位址
如果測試不成功,則表示本地配置或安裝存在問題,應當對網絡裝置和通訊媒體進行測試、檢查并排除。
③ ping區域網路内其他IP
如果測試成功,表明本地網絡中的網卡和載體運作正确。但如果收到0個回送應答,那麼表示子網路遮罩不正确或網卡配置錯誤或電纜系統有問題。
④ ping 網關IP
這個指令如果應答正确,表示區域網路中的網關路由器正在運作并能夠做出應答。
⑤ ping 遠端IP
如果收到正确應答,表示成功的使用了預設網關。對于撥号上網使用者則表示能夠成功的通路Internet(但不排除ISP的DNS會有問題)。
⑥ ping localhost
local host是系統的網絡保留名,它是127.0.0.1的别名,每台計算機都應該能夠将該名字轉換成該位址。否則,則表示主機檔案(/Windows/host)中存在問題。
⑦ ping www.yahoo.com(一個著名網站域名)
對此域名執行Ping指令,計算機必須先将域名轉換成IP位址,通常是通過DNS伺服器。如果這裡出現故障,則表示本機DNS伺服器的IP位址配置不正确,或它所通路的DNS伺服器有故障。
如果上面所列出的所有ping指令都能正常運作,那麼計算機進行本地和遠端通信基本上就沒有問題了。但是,這些指令的成功并不表示你所有的網絡配置都沒有問題,例如,某些子網路遮罩錯誤就可能無法用這些方法檢測到。
3、ping指令的常用參數選項
ping IP -t:連續對IP位址執行ping指令,直到被使用者以Ctrl C中斷。
ping IP -l 2000:指定ping指令中的特定資料長度(此處為2000位元組),而不是預設的32位元組。
ping IP -n 20:執行特定次數(此處是20)的ping指令。
ipconfig指令
ipconfig實用程式可用于顯示目前的TCP/IP配置的設定值。這些資訊一般用來檢驗人工配置的TCP/IP設定是否正确。
而且,如果計算機和所在的區域網路使用了動态主機配置協定DHCP,使用ipconfig指令可以了解到你的計算機是否成功地租用到了一個IP位址,如果已經租用到,則可以了解它目前得到的是什麼位址,包括IP位址、子網路遮罩和預設網關等網絡配置資訊。
下面給出最常用的選項:
1、ipconfig
當使用不帶任何參數選項ipconfig指令時,顯示每個已經配置了的接口的IP位址、子網路遮罩和預設網關值。
2、ipconfig /all
當使用all選項時,ipconfig能為DNS和WINS伺服器顯示它已配置且所有使用的附加資訊,并且能夠顯示内置于本地網卡中的實體位址(MAC)。如果IP位址是從DHCP伺服器租用的,ipconfig将顯示DHCP伺服器配置設定的IP位址和租用位址預計失效的日期。圖為運作ipconfig /all指令的結果視窗。
3、ipconfig /release和ipconfig /renew
這兩個附加選項,隻能在向DHCP伺服器租用IP位址的計算機使用。如果輸入ipconfig /release,那麼所有接口的租用IP位址便重新傳遞給DHCP伺服器(歸還IP位址)。如果使用者輸入ipconfig /renew,那麼本地計算機便設法與DHCP伺服器取得聯系,并租用一個IP位址。大多數情況下網卡将被重新賦予和以前所賦予的相同的IP位址。
arp指令(位址轉換協定)
ARP是TCP/IP協定族中的一個重要協定,用于确定對應IP位址的網卡實體位址。
使用arp指令,能夠檢視本地計算機或另一台計算機的ARP高速緩存中的目前内容。此外,使用arp指令可以人工方式設定靜态的網卡實體位址/IP位址對,使用這種方式可以為預設網關和本地伺服器等常用主機進行本地靜态配置,這有助于減少網絡上的資訊量。
按照預設設定,ARP高速緩存中的項目是動态的,每當向指定地點發送資料并且此時高速緩存中不存在目前項目時,ARP便會自動添加該項目。
常用指令選項:
① arp –a:用于檢視高速緩存中的所有項目。
② arp -a IP:如果有多個網卡,那麼使用arp -a加上接口的IP位址,就可以隻顯示與該接口相關的ARP緩存項目。
③ arp -s IP 實體位址:向ARP高速緩存中人工輸入一個靜态項目。該項目在計算機引導過程中将保持有效狀态,或者在出現錯誤時,人工配置的實體位址将自動更新該項目。
④ arp -d IP:使用本指令能夠人工删除一個靜态項目。
traceroute指令
掌握使用traceroute指令測量路由情況的技能,即用來顯示資料包到達目的主機所經過的路徑。
traceroute指令的基本用法是,在指令提示符後鍵入“tracert host_name”或“tracert ip_address”,其中,tracert是traceroute在Windows作業系統上的稱呼。
輸出有5列:
- 第一列是描述路徑的第n跳的數值,即沿着該路徑的路由器序号;
- 第二列是第一次往返時延;
- 第三列是第二次往返時延;
- 第四列是第三次往返時延;
- 第五列是路由器的名字及其輸入端口的IP位址。
如果源從任何給定的路由器接收到的封包少于3條(由于網絡中的分組丢失),traceroute在該路由器号碼後面放一個星号,并報告到達那台路由器的少于3次的往返時間。
此外,tracert指令還可以用來檢視網絡在連接配接站點時經過的步驟或采取哪種路線,如果是網絡出現故障,就可以通過這條指令檢視出現問題的位置。
思考:
【測試大型網絡的路由】
(1)多嘗試幾次“ping www.sina.com.cn”操作,比較得到的新浪網的IP位址。如果兩次ping得到的IP位址不同,試考慮其中的原因(如考慮到負載均衡)。然後,針對這些不同的IP位址,執行“tracert ip_address”指令,觀察分析輸出的結果是否有差異。
(2)對于大型網絡中的某站點進行traceroute測試,記錄測試結果。觀察其中是否出現第n跳的時延小于第n-1跳的時延情況。試分析其中原因(提示:可分别考慮時延的各個構成成分在總時延中所起的作用)。
(3)在一天的不同時段内,用traceroute程式多次測試從固定主機到遠端固定IP位址的主機的路由。試分析比較測量資料,觀察該路由是否有變化?如果有變化,該變化頻繁嗎?
route指令
大多數主機一般都是駐留在隻連接配接一台路由器的網段上。由于隻有一台路由器,是以不存在選擇使用哪一台路由器将資料包發送到遠端計算機上去的問題,該路由器的IP位址可作為該網段上所有計算機的預設網關。
但是,當網絡上擁有兩個或多個路由器時,使用者就不一定想隻依賴預設網關了。實際上可能想讓某些遠端IP位址通過某個特定的路由器來傳遞,而其他的遠端IP則通過另一個路由器來傳遞。在這種情況下,使用者需要相應的路由資訊,這些資訊儲存在路由表中,每個主機和每個路由器都配有自己獨一無二的路由表。大多數路由器使用專門的路由協定來交換和動态更新路由器之間的路由表。
但在有些情況下,必須人工将項目添加到路由器和主機上的路由表中。route指令就是用來顯示、人工添加和修改路由表項目的。該指令可使用如下選項:
1、route print
本指令用于顯示路由表中的目前項目,在單個路由器網段上的輸出結果如圖所示。
2、route add
使用本指令,可以将路由項目添加給路由表。
例如,如果要設定一個到目的網絡209.99.32.33的路由,其間要經過5個路由器網段,首先要經過本地網絡上的一個路由器IP為202.96.123.5,子網路遮罩為255.255.255.224,那麼使用者應該輸入以下指令:
route add 209.99.32.33 mask 255.255.255.224 202.96.123.5 metric 5
3、route change
可以使用本指令來修改資料的傳輸路由,不過,使用者不能使用本指令來改變資料的目的地。下面這個例子将上例路由改變采用一條包含3個網段的路徑:
route add 209.99.32.33 mask 255.255.255.224 202.96.123.250 metric 3
4、route delete
使用本指令可以從路由表中删除路由。
例如:route delete 209.99.32.33
nslookup指令
指令nslookup的功能是查詢任何一台機器的IP位址和其對應的域名。它通常需要一台域名伺服器來提供域名。如果使用者已經設定好域名伺服器,就可以用這個指令檢視不同主機的IP位址對應的域名。
(1)在本地機上使用nslookup指令檢視本機的IP及域名伺服器位址。
直接鍵入指令,系統傳回本機的伺服器名稱(帶域名的全稱)和IP位址,并進入以“>”為提示符的操作指令行狀态;鍵入“?”可查詢詳細指令參數;若要退出,需鍵入exit。
(2)檢視www.haut.edu.cn的IP。在提示符後輸入要查詢的IP位址或域名并回車即可。
nbtstat指令
使用nbtstat指令可以檢視計算機上網絡配置的一些資訊。使用這條指令還可以查找出别人計算機上一些私人資訊。如果想檢視自己計算機上的網絡資訊,可以運作nbtstat -n,可以得到你所在的工作組,計算機名以及網卡位址等等;想檢視網絡上其他的電腦情況,就運作nbtstat -a *.*.*.*,此處的*.*.*.*用IP位址代替就會傳回得到那台主機上的一些資訊。
netstat指令
學習使用netstat指令,以了解網絡目前的狀态。
netstat指令能夠顯示活動的TCP連接配接、計算機偵聽的端口、以太網統計資訊、IP路由表、IPv4統計資訊(對于IP、ICMP、TCP和UDP協定)以及IPv6統計資訊(對于IPv6、ICMPv6、通過IPv6的TCP以及UDP協定)。使用時如果不帶參數,netstat顯示活動的TCP連接配接。
下面給出netstat的一些常用選項:
① netstat –a:-a選項顯示所有的有效連接配接資訊清單,包括已建立的連接配接(ESTABLISHED),也包括監聽連接配接請求(LISTENING)的那些連接配接。
② netstat –n:以點分十進制的形式列出IP位址,而不是象征性的主機名和網絡名。
③ netstat -e:-e選項用于顯示關于以太網的統計資料。它列出的項目包括傳送的資料包的總位元組數、錯誤數、删除數、資料包的數量和廣播的數量。這些統計資料既有發送的資料包數量,也有接收的資料包數量。使用這個選項可以統計一些基本的網絡流量。
④ netstat -r:-r選項可以顯示關于路由表的資訊,類似于route print指令時看到的資訊。除了顯示有效路由外,還顯示目前有效的連接配接。
上圖顯示的是一個路由表,其中:Network Destination表示目的網絡,0.0.0.0表示不明網絡,這是設定預設網關後系統自動産生的;127.0.0.0表示本機網絡位址,用于測試;224.0.0.0表示多點傳播位址;255.255.255.255表示限制廣播位址;Netmask表示網絡掩碼,Gateway表示網關,Interface表示接口位址,Metric表示路由跳數。
⑤ netstat -s:-s選項能夠按照各個協定分别顯示其統計資料。這樣就可以看到目前計算機在網絡上存在哪些連接配接,以及資料包發送和接收的詳細情況等等。如果應用程式(如Web浏覽器)運作速度比較慢,或者不能顯示Web頁之類的資料,那麼可以用本選項來檢視一下所顯示的資訊。仔細檢視統計資料的各行,找到出錯的關鍵字,進而确定問題所在。
萬文解析openvswitch中流表轉發原理
2023-04-11 17:33·運維法拉令
在過去10幾年裡面,虛拟化已經改變了應用,資料,服務的實作部署方式。據Gartner 2016的報道[1],80%的x86 workload已經是虛拟化,其中大部分是虛拟機,但是容器所占比例正以極快的增長速度。
伺服器的虛拟化給資料中心網絡帶來了根本性的變化。在傳統的資料中心網絡架構基礎上,出現了一個新的,位于實體伺服器内的接入層。這個新的接入層包含的裝置是運作在x86伺服器中的vSwitch,而這些vSwitch連接配接着一個伺服器内的多個workload(包括容器和虛機)。
vSwitch的早期代表是Linuxbridge,它在設計之初就是為了提供基本的網絡連接配接,是以它隻是模拟了ToR交換機的行為,并将自己接入到現有的實體網絡中。這樣實作的優點是,現有實體網絡的理論和協定可以直接套用,不需要重複設計。缺點就是,作為實體網絡的延伸,使得虛拟workload的網絡與實體網絡緊耦合,影響了虛拟化本身帶來的諸如靈活,快速上線的優勢。
随着網絡虛拟化(network virtualization)的出現,為連接配接虛拟workload的網絡提供了另一種可能。實體網絡仍然由實體網絡裝置管理,虛拟workload的網絡,單獨由vSwitch管理,并且在現有實體網絡(underlay)基礎之上,再定義一個獨立的overlay網絡(例如VxLAN)。這個overlay網絡不受實體網絡裝置控制,完全由vSwitch控制。
OpenVSwitch就是基于這個設計思想實作的。OpenVSwitch是一個多層的,開源虛拟交換機。不過到目前為止,LinuxBridge也支援了VxLAN,OpenVSwitch也能夠支援對應于實體網絡的VLAN,FLAT網絡。
OpenFlow
除了基于overlay網絡的思想設計以外,OpenVSwitch的另一大特點就是基于OpenFlow。
傳統的交換機,不論是硬體的,還是軟體的,所具備的功能都是預先内置的,需要使用某個功能的時候,進行相應的配置即可。而OpenVSwitch通過OpenFlow實作了交換機的可程式設計。OpenFlow可以定義網絡包在交換機中的處理流程(pipeline),是以支援OpenFlow的交換機,其功能不再是固定的,通過OpenFlow可以軟體定義OpenVSwitch所具備的功能。
OpenFlow以多個Table串行工作的方式來處理網絡資料包,如下圖所示。
OpenFlow的靈活性是實作SDN必不可少的一部分,但是在一些實際場景中,因為涉及的功能多且複雜,相應的OpenFlow pipeline會變得很長。直覺上來看,pipeline越長,處理一個網絡包需要的時間也越長。這是OpenFlow從理論到實際的一個問題,OpenVSwitch為此嘗試過很多優化。
對于一個Linux系統來說,可以分為使用者空間(user space)和核心空間(kernel space),網絡裝置接入到核心空間。如果需要将資料傳輸到使用者程式則需要通過核心空間将資料上送到使用者空間,如果需要在網絡裝置之間轉發資料,直接在核心空間就可以完成。
作為運作在x86伺服器中的軟體交換機,直覺上來看,應該在核心空間來實作轉發。是以,OpenVSwitch在最早期的時候,在Linux核心子產品實作了所有的OpenFlow的處理。當時的OpenVSwitch核心子產品,接收網絡資料包,根據OpenFlow規則,一步步的Match,并根據Action修改網絡資料包,最後從某個網絡裝置送出。
但是這種方式很快就被認為是不能實際應用的。首先,雖然在核心實作可以縮短網絡資料包在作業系統的路徑,但是在核心進行程式開發和更新也更加困難,以OpenVSwitch的更新速度,完全在核心實作将變得不切實際。其次,完全按照OpenFlow pipeline去處理網絡包,勢必要消耗大量CPU,進而降低網絡性能。
是以,最新版本(2.x版本)的OpenVSwitch采用了一種很不一樣的方式來避免這些問題。
OpenVSwitch架構
現在OpenVSwitch主要由三個部分組成:
- ovsdb-server:OpenFlow本身被設計成網絡資料包的一種處理流程,它沒有考慮軟體交換機的配置,例如配置QoS,關聯SDN控制器等。ovsdb-server是OpenVSwitch對于OpenFlow實作的補充,它作為OpenVSwitch的configuration database,儲存OpenVSwitch的持久化資料。
- ovs-vswitchd:運作在使用者空間的轉發程式,接收SDN控制器下發的OpenFlow規則。并且通知OVS核心子產品該如何處理網絡資料包。
- OVS核心子產品:運作在核心空間的轉發程式,根據ovs-vswitchd的訓示,處理網絡資料包
OpenVSwitch中有快速路徑(fast path)和慢速路徑(slow path)。其中ovs-vswitchd代表了slow path,OVS核心子產品代表了fast path。現在OpenFlow存儲在slow path中,但是為了快速轉發,網絡包應該盡可能的在fast path中轉發。是以,OpenVSwitch按照下面的邏輯完成轉發。
當一個網絡連接配接的第一個網絡資料包(首包)被發出時,OVS核心子產品會先收到這個packet。但是核心子產品現在還不知道如何處理這個包,因為所有的OpenFlow都存在ovs-vswitchd,是以它的預設行為是将這個包上送到ovs-vswitchd。ovs-vswitchd通過OpenFlow pipeline,處理完網絡資料包送回給OVS核心子產品,同時,ovs-vswitchd還會生成一串類似于OpenFlow Action,但是更簡單的datapath action。這串datapath action會一起送到OVS核心子產品。因為同一個網絡連接配接的所有網絡資料包特征(IP,MAC,端口号)都一樣,當OVS核心子產品收到其他網絡包的時候,可以直接應用datapath action。是以,這裡将OVS核心子產品與OpenFlow協定解耦了,OpenFlow的小改動影響不到核心子產品。
這樣,成功的解決了之前的問題。首先,核心子產品不用關心OpenFlow的變化,不用考慮OpenVSwitch的代碼更新,這些都在ovs-vswitchd完成。其次,整個網絡連接配接,隻有首包需要經過OpenFlow pipeline的處理,其餘的包在核心子產品比對網絡包特征,直接應用datapath action,就可以完成轉發。
OVS核心子產品通過緩存來保持datapath action的記錄。稍微早期的核心子產品實作了名為microflow的緩存,這個緩存就是一個hash map,key是所有OpenFlow可能比對的值對應的hash值,包括了網絡2-4層header資料和一些其他的metadata例如in_port,value就是datapath action。hash map可以實作O(1)的查找時間,這樣可以在OVS核心子產品中實作高效的查找轉發。
看起來似乎是個完美的方案,但是在實際應用的時候存在一些問題。
那這個問題該如何解決?下面細細道來!
OpenVSwitch,不論是使用者空間的ovs-vswitchd,還是核心空間的kernel datapath,最核心都是要實作一個查找算法。對于ovs-vswitchd,需要根據網絡資料包的特征(2-4層標頭,metadata)從一個個的OpenFlow Table中查找OpenFlow規則。對于kernel datapath,也需要根據網絡資料包的特征,從cache中查找datapath actions。OpenVSwitch實作了一個統一的查找算法:TSS(Tuple Space Search),這本質上是一個hash 查找算法。
私信小編,發送“資料包”,領取網絡工程師入門大禮包
更多網工提升幹貨,請關注公衆号:運維法拉令