分布式系統 第2課

2021-07-03 17:44:19 字數 3366 閱讀 7030

第一題:

用tcpdump、tshark等工具來來分析arp請求報文和應答報文,對照截獲的資料,做出arp請求應答的邏輯分析,建議本機安裝虛擬機器來進行測試和實踐。

假設主機a和b在同乙個網段,主機a要向主機b傳送資訊,通過arp將ip位址解析為mac位址的過程如下:

(1)主機a首先檢視自己的arp表,確定其中是否包含有主機b對應的arp表項。如果找到了對應的mac位址,則主機a直接利用arp表中的mac位址,對ip資料報進行幀封裝,並將資料報傳送給主機b。

(2)如果主機a在arp表中找不到對應的mac位址,則將快取該資料報文,然後以廣播方式傳送乙個arp請求報文。arp請求報文中的傳送端ip位址和傳送端mac位址為主機a的ip位址和mac位址,目標ip位址和目標mac位址為主機b的ip位址和全0的mac位址。由於arp請求報文以廣播方式傳送,該網段上的所有主機都可以接收到該請求,但只有被請求的主機(即主機b)會對該請求進行處理。

(3)主機b比較自己的ip位址和arp請求報文中的目標ip位址,當兩者相同時進行如下處理:將arp請求報文中的傳送端(即主機a)的ip位址和mac位址存入自己的arp表中。之後以單播方式傳送arp響應報文給主機a,其中包含了自己的mac位址。

(4)主機a收到arp響應報文後,將主機b的mac位址加入到自己的arp表中以用於後續報文的**,同時將ip資料報進行封裝後傳送出去。

當主機a和主機b不在同一網段時,主機a就會先向閘道器發出arp請求,arp請求報文中的目標ip位址為閘道器的ip位址。當主機a從收到的響應報文中獲得閘道器的mac位址後,將報文封裝並發給閘道器。如果閘道器沒有主機b的arp表項,閘道器會廣播arp請求,目標ip位址為主機b的ip位址,當閘道器從收到的響應報文中獲得主機b的mac位址後,就可以將報文發給主機b;如果閘道器已經有主機b的arp表項,閘道器直接把報文發給主機b。

第二題:

如果乙個vlan交換機的所有埠都是trunk模式,則意味著什麼?

當使用多台交換機分別配置vlan後,可以使用trunk(幹道)方式實現跨交換機的vlan內部連通,交換機的trunk埠不隸屬於某個vlan, 而是可以承載所有vlan的幀。

如果所有埠都是trunk模式,雖然只有屬於相同vlan的主機才能相互通訊,但是廣播域擴充套件到所有vlan,有可能引起廣播風暴,導致整個網路全被廣播資訊充滿,直至完全癱瘓。

第三題:

說明下nat在linux中實現的原理和大致做法。

原理:如果內網使用者希望共享linux主機的上網線路,則資料報由客戶端傳送到linux主機時,先經過nat表的prerouting鏈,再經過postrouting鏈,在postrouting鏈中將內網的ip位址(源ip)更改為linux主機連線公網的ip位址,然後將記錄快取,當收到來自公網的回應資料時,在prerouting鏈的地方將目的位址修改為內網的客戶端ip位址。

設定nat:

首先要開啟系統的路由功能:

[root@root ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

[root@root ~]# iptables –t nat –a postrouting –s eht0 –o eth1 –j masquerade

上段**就是開啟位址轉換的功能了,當來自eth0介面的資料報要**出去的時候,會將ip位址轉換為eth1介面的ip位址,轉換會自動進行,如果介面有固定的位址或者多個位址,可以直接指定ip位址的值:

[root@root ~]# iptables –t nat –a postrouting –o eth1 snat --to 116.255.176.222

[root@root ~]# iptables –t nat –a postrouting –o eth1 snat --to 116.255.176.222-116.255.176.225

埠對映:

當希望在nat裝置後邊將內網的伺服器發布到外部網路的時候,就會用到埠對映,前邊也說了,nat表中的prerouting鏈就是專門負責轉換目的位址的,要設定埠對映當然要用到它了,這裡以web伺服器為例,埠為tcp的80埠。

[root@root ~]# iptables –t nat –a prerouting –p tcp –i eth1 --dport 80 –j dnat --to 192.168.1.100:80

這樣的話當外部使用者訪問linux的80埠的時候,就會重定向到內網的192.168.1.100上邊去,如果內網web伺服器用的不是常規80埠的話,直接在ip位址後邊接其他埠就可以了。同理,也可以在linux主機上的非80埠對映到內網web伺服器的80埠,除此之外,iptables的埠對映還有比較高階的功能,那就是本機的埠重定向:

[root@root ~]# iptables –t nat –a prerouting --p tcp --dport 80 –j redirect --to-ports 8080

這樣當訪問linux主機的80埠時會自動變為訪問本機的8080埠。

第四題:

路由的原理和機制是什麼?解釋下linux裡 ip route命令的結果。

區域網的主機通過資料鏈路層就可以通訊,當一台主機要與其它網段的主機通訊時,它要選擇乙個能到達目的子網上的路由器,把ip分組送給該路由器,由路由器負責把資料報送到目的地。如果沒有找到這樣的路由器,主機就把ip分組送給乙個稱為 「預設閘道器」的路由器上。「預設閘道器」是每台主機上的乙個配置引數,它是接在同乙個網路上的某個路由器埠的ip位址。 路由器**資料報時,只根據資料報目的ip位址的網路號部分,選擇合適的埠,把資料報送出去。同主機一樣,路由器也要判定埠所接的是否是目的子網,如果是,就直 接把資料報通過埠送到網路上,否則,也要選擇下乙個路由器來傳送資料報。路由器也有它的預設閘道器,用來傳送不知道往哪兒送的ip分組。這樣,通過路由器把知 道如何傳送的資料報正確**出去,不知道的資料報送給「預設閘道器」路由器,這樣一級級地傳送,資料報最終將送到目的地,送不到目的地的資料報則被網路丟棄了。 

ip route命令用於顯示linux系統的路由表。如下,

[nemo@spring01 ~]$ /sbin/ip route

10.0.0.0/8 via 10.173.47.247 dev eth0 

default via 182.92.235.247 dev eth1

第一行表示如果目標主機所在網路的位址為10.0.0.0/8,則通過eth0將資料報**到閘道器10.173.47.247;

第二行表示預設閘道器為182.92.235.247,通過eth1將資料報傳送到預設閘道器。

第五題:

說說你所理解高效能網路程式設計的幾個重要因素和他們之間的相互關係

使用者執行緒要及時從syn佇列和accept佇列取出連線套接字,防止佇列滿了之後丟棄新的連線。

使用io多路復用或者非同步io高效率的使用cpu資源,增加併發連線數。

使用reactor模式,單執行緒專門輪詢io操作是否就緒,避免伺服器產生大量執行緒,減少執行緒切換的效能消耗。

使用讀寫快取,增加系統吞吐量。

分布式系統

分布式系統和計算機網路系統的共同點是 多數分布式系統是建立在計算機網路之上的,所以分布式系統與計算機網路在物理結構上是基本相同的。他們的區別在於 分布式作業系統的設計思想和網路作業系統是不同的,這決定了他們在結構 工作方式和功能上也不同。網路作業系統要求網路使用者在使用網路資源時首先必須了解網路資源...

分布式系統

分布式,一來就直接看書,除非你有比較深厚的技術功底,要不還是很晦澀難懂的。先想想為什麼會有分布式,分布式怎麼來的。傳統的電信 銀行業,當業務量大了之後,普通伺服器cpu io 網路到了100 請求太慢怎麼辦?最直接的做法,公升級硬體,反正也不缺錢,ibm小型機,大型機,採購了堆硬體。但是網際網路不能...

分布式系統

zookeeper讓服務配置變得更簡單 zookeeper是hadoop下的乙個子專案,它是乙個針對大型分布式系統的可靠的協調系統,提供的功能包括 配置維護 名字服務 分布式同步 組服務等。zookeeper是可以集群複製的,集群間通過zab zookeeper atomic broadcast 協...