數據在網絡中的傳輸(一)

最近面試被問到了一些<<計算機網絡>>方面的問題,由於之前的工作中很少涉及到,7、8年了前學的了,都基本還給老師了,回答得不太滿意。所以這幾天又從頭學習了一遍<<計算機網絡>>,看的是人民郵電出版社出的<<圖解TCP/IP>>。看完之後還要查很多資料,我並不推薦這本書,感覺是本入門書,很多細節沒有講清楚,就像今天遇到的這個問題,很多都一筆帶過,講得很淺。而網上的文章很多就抄的教科書,情況都特別理想,一個ARP過去就有迴應了,真的是這樣嗎?要沒回應怎麼玩,是不是很尷尬?沒回應就自個查資料!哈哈~~。這篇文章就簡單聊聊那些不那麼理想的情況。就當作複習,內容僅供參考。

首先,一個最基本的問題,兩臺計算機是怎麼進行通信的

假設現在A主機中的向B主機的發一條消息,“今晚約嗎”。

首先,A主機需要開機入網,A主機會問路由器“我該設置什麼IP地址和子網掩碼,默認網關地址是多少”,路由器上的DHCP服務器收到後就分配一個IP地址給主機(DHCP服務分爲兩個階段,有的書分爲4個階段,怎麼分都不重要,後面會單獨講)。於是打開應用程序,編輯消息,點擊發送。

應用層:當點擊"發送"的時候,A主機的應用程序就會把發送給誰,端口號,消息內容等等封裝成數據包,交給表示層。除此以外,還要知道接收方的IP地址是多少,這裏要進行DNS域名解析。(比方說發郵件到目的郵箱,郵件要通過服務器中轉,域名解析就是服務器的IP地址。爲什麼要中轉?因爲你發送的時候B主機可能是關機的狀態,那麼B主機自然是沒有IP地址的,那服務器就要先保留A發送的郵件,等B主機連接上服務器了,服務器再把郵件發給B主機。)

表示層:表示層收到應用層數據,一看,你這編碼格式B主機不一定有啊,萬一沒有,B就算收到了數據顯示出來可能是一堆亂碼,於是表示層把數據把數據轉換成通用格式,這樣B收到後就能準確的知道A發的消息是什麼。如果當心別人竊取了消息,還可以對數據進行加密,B收到後再解密。

會話層:接下來數據就來到了會話層,會話層主要是管理何時建立連接,傳送順序,何時關閉連接。比方說登錄FTP服務器要進行身份驗證,QQ上傳送文件,要先建立一個會話,會話結束後關閉會話。

傳輸層:數據來到傳輸層,由於是端到端的傳輸,傳輸層採用TCP協議,進行三次握手建立連接,準備發送數據,在傳輸前應用層還要考慮幾個問題,
問題1:我應該發送多大的數據包,因爲數據經過的網絡有的數據鏈路可承載的最大傳輸單元(MTU)都不盡相同,我如果不按最小的單元封包發送,數據在傳輸的過程中可能要先分片再重組。所以我得知道MTU大小
問題2:如果每次都發送一幀,然後等待接收回復確認幀,如果這個確認幀在網絡中丟失了或者由於網絡擁堵一直沒傳過來,我又要重發數據,這樣一來一往的傳送效率就低了,那怎樣提高發送效率呢。那我就一次多發幾條。發送窗口控制
問題3:我一次多發幾條數據接收端能不能接收得過來,如果接收不過來,我後面又要重發數據,那就白折騰了,所以我得知道接收端的實際接收能力。流量控制
問題4:網絡是一個共享環境,如果一開始就發送一個較大的包到網絡,可能網絡 會出現擁堵,爲了防止這個問題的出現,所以要還進行擁塞控制
問題5:發送的數據是否到達,如果沒有接收端返回的確認收到的消息,過多久進行重發數據,重發控制
傳輸層爲了保證通信質量可靠性要作很多控制,以上的這些問題都是實際網絡通信探索中遇到的,後續會一個一個問題單獨介紹是怎麼解決的。

網絡層:網絡層的作用就將數據從發送端發送到接收端,使用IP協議。那數據怎麼走,先發送給誰,要進行路徑的選擇。此外還要知道下一段主機/路由器的MAC地址,在實際傳輸的時候,數據可能不是直接從源主機發送到目標主機,數據會經過交換機,路由器等等,是一段一段傳輸。具體是怎麼一段一段傳輸,然後怎麼得到目標IP地址對應的MAC地址的,我後面再細講數據在網絡中怎麼傳送的。

數據鏈路層:數據從上層傳到了鏈路層,首先封裝MAC地址。數據鏈路層只負責一個網絡分段內的數據傳送。

物理層:終於可以發送數據了,發一個前導碼,例如101010,同步一下,然後把0、1轉換爲高低電壓和脈衝光傳輸給物理的傳輸介質(就是光纖和雙絞線)。

假設現在B主機收到了數據,接收方是自下層到上層逐層解包。

物理層收到數據,數據鏈路層先校驗,檢查數據在傳輸過程中有沒有損壞,如果有損壞則丟棄,如果沒有損壞,則匹配MAC地址,發現是發我的數據包,那就收下了,上交給IP層,IP層解析出來目標IP地址和本機IP地址相同,再上交給傳輸層,傳輸層會返回確認幀,再解析出端口號,上交給端口號對應的應用程序,我不知道這裏會話層都幹了什麼,數據到在表示層進行數據編碼轉換或者解密等等。最終顯示消息。接收肯定不會那麼簡單,肯定還有I/O中斷等處理,接收時7層模型每一層都做了什麼,相關資料極少,有了解的朋友歡迎在下方指導。

數據在網絡中怎麼傳送的?
前面我們通過DNS域名解析已經知道了目標IP地址,目標IP地址不一定就是B主機的IP地址,原因我已經說過了,教科書講的都特別理想。
1、 因此首先主機先從會本機的ARP緩存表中查找對應的MAC地址記錄。
2、 如果找不到,主機A根據目標IP地址判斷目標主機是不是在本網絡。
3、 如果不在本網,那說明要數據通過網關發出去。然後主機從本機的ARP緩存表中查找網關對應的MAC地址記錄
4、 如果沒有找到就發送ARP廣播請求網關MAC地址。
5、 迴應後,更新本機ARP緩存表,增加記錄[目標主機IP,網關MAC地址]。
6、 下次如果要發送數據給目標主機,直接封裝網關的MAC地址。
7、 網關收到數據增加記錄[A主機,MAC地址]。查自己的ARP緩存表有沒有目標IP對應的MAC地址。
8、 如果找到了直接封裝對應的MAC地址發送出去,如果沒有找到目標主機的MAC,網關根據目標IP地址找路由表,確定下一跳的IP地址。
9、 網關根據下一跳的IP地址,查找網關的ARP緩存表,如果沒找到,繼續查找下一跳IP地址對應的MAC地址。記錄[下一跳的IP地址, 下一跳的MAC地址]
10、 下一跳收到數據增加記錄[網關,MAC地址]。重複7~10數據就這樣一段一段的在網絡上傳遞,邊查詢邊更新,直到數據查到目標IP的MAC地址。最終把數據發送給目標主機。

DHCP工作原理
DHCP主要是實現自動設置IP地址,統一管理IP地址分配。
第一階段:
1、 DHCP客戶端廣播發現包,發現DHCP服務器,請求IP地址租約。
2、 DHCP服務器收到後預分配一個IP地址,然後發一個ICMP回送請求到網絡,確認沒有返回應答。再通知客戶端可以使用的網絡設置。
第二階段:
3、 DHCP客戶端收到DHCP服務器發來的IP地址,廣播發送ARP請求包,確認沒有返回應答。再給廣播DHCP請求包,要求設置2中通知的設置。
4、 DHCP服務器同意3中的設置。
因爲網絡上可能存在多個DHCP服務器時,一個DHCP服務器不能查出已被其它服務器租出去的IP地址,而且DHCP不能發現網絡上非DHCP客戶機已經在使用的IP地址。DHCP的確認之所以分兩個階段是爲了保證即使在DHCP服務器上重複設置也能正常工作。

ICMP協議
ICMP主要負責與IP相關的設置,IP包被廢棄的原因,網絡通信等提供這類功能的協議,像平時經常使用的ping命令,traceroute命令都是利用了ICMP的回送應答消息。

DNS
因爲IP地址不好記,所以會給主機取一個方便記憶的標識名,於是就有管理主機名與IP地址的對應表,DNS就提供了一個自動檢索某主機名的IP地址的系統。叫域名解析,域名是分層的,如果mail.163和mail.qq就是在mail層下的兩個不同的域名。DNS就是互聯網中的分佈式數據庫。

ARP的工作機制
ARP主要是通過IP地址查找對應的MAC地址信息。例如A主機想詢問B主機的MAC地址。首先可以通過DNS找到B的IP地址。
1、 首先查找本機的ARP緩存表中有沒有記錄,
2、 如果本機上沒有找到記錄,就廣播發送一個ARP請求包,這個請求包將會被同一鏈路上的其它主機收到。
3、 只有目標IP的主機收到消息後,目標主機纔會通過單播的形響應請求主機,如同一鏈路上沒有目標主機就收不到任何響應。
ARP能穿過兩層交換機,但不能穿過路由器。對於兩層交換機在收到ARP請求後,首先會增加記錄[請求主機IP地址,請求主機的MAC地址],接着找到本機的ARP緩存表中是否有目標IP的MAC地址,如果有則從對應的端口發送出去,如果沒有,則從默認端口廣播ARP請求。

路徑MUT發現工作原理
由於每種數據鏈路的可承載的最大傳輸單元可能不同,在傳輸的過程中IP報文可能要先分片再在目標主機進行數據重組,這樣會降低網絡傳送效率,因此,並不希望路由器做IP數據包的分片處理。所以產生了“路徑MUT發現”(Path MTU Discovery)。
1、 發送時IP首部的分片標誌位設置爲不分片,路由器收到包後會丟棄。
2、 路由器會ICMP通知下一次MTU的大小。
3、 主機收到後,如果是UDP傳輸,那麼後面發送包都會小於等於MTU大小,對於TCP傳輸,會在發送端傳輸層就進行分片重發處理。
4、 對於UDP傳輸,分片到達目標主機後,要重組再傳給UDP,但對於TCP傳輸不需要重組,原樣發給TCP層。

窗口控制
TCP以段爲單位發送數據,每發一個段都會進行確認應答。如果這樣發一個段就等待回覆再發下一段數據,效率太低了,爲了提高效率,發送端在發送一個段後可以不必要等待確認應答,繼續發送。窗口大小就是指無需等待確認應答而可以發送的最大值。如果收到了前面的確認幀那麼窗口就向前滑動一段。否則等待確認應答。

流量控制
考慮到接收端的接收能力,控制發送的數據量,就是流量控制,具體操作是,接收端主機向發送端主機通知自己可以接收數據的大小,然後發送端調整窗口大小。
在這裏插入圖片描述

擁塞控制
防止網絡擁塞,控制窗口大小。
在這裏插入圖片描述

重發控制
在這裏插入圖片描述
在這裏插入圖片描述

三層交換機與路由器的區別
三層交換機和路由器都可以進行路由轉發功能,三層交換機的更偏重數據轉發功能,路由器偏重不同網絡的互聯,路由功能更全。

網關與路由器的區別
網關是個概念,能進行協議轉換,能讓不同的網絡進行通信。可以是路由器,也可能用三層交換機做網關。而路由器是指一個具體設備。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章