軟件工程師的視角看網絡(網絡那點事)

[你能做到的,只是不要想一步登天]


一、概述

     在以太網中,我們都很清楚網絡的分層模型,ISO模型7層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。TCP/IP模型四層協議:主機至網絡層、互聯網層、傳輸層、應用層。 在實際應用中我們都是用TCP/IP的模型。下面我講下軟件設計需要了解的網絡知識,個人感覺軟件工程師應該知道這些知識的,當然也是些基礎的網絡知識。主要從從物理層、數據鏈路層、互聯網層、傳輸層、應用層的角度。 對於網絡設備,集線器工作在物理層;2層交換機在鏈路層;3層交換機在網絡層、鏈路層;路由器在網絡層;負載均衡一般是在傳輸層,也有應用層、網絡層、鏈路層的。防火牆也一般是穿層。不過,以上也不是絕對的。現在的一些設備基本沒有固定的層次,基本都是穿層的。

以下這張圖是經典的網絡邏輯圖:


數據是一層一層封裝的。如下圖所示:


二、物理層
物理層涉及到通信信道上面傳輸的原始的數據位。簡單地講,怎麼用電壓表示0或者1。也涉及到傳輸介質的問題。磁介質有:雙絞線、同軸電纜、光纖。還有無限傳輸等問題。其中也涉及到著名的香濃定理。不深入講,軟件設計人員涉及較少。

三、數據鏈路層
將一個原始的傳輸設施轉變成一條邏輯的傳輸線路。主要是將上層的數據拆開,分裝到數據幀中,然後順序的發送。其中涉及到怎麼成幀、錯誤控制、流控制、檢測與校驗。IEEE將數據鏈路層劃分爲邏輯鏈路控制LLC(Logical Link Control)子層與介質訪問控制MAC(Media Access Control)子層。介質訪問控制子層:MAC(Medium Access Control)子層,這個就存在大家熟悉的mac地址,48位,也就是熟悉的網卡地址。此子層可以是多播與廣播的幀給網卡的。基本的技術就是CSMA/CD。LLC基本就是提供一個標準化的接口給網絡層了。
Internet是用PPP(point-to-point Protocol)作爲點到點線路的基本數據鏈路協議。此協議中涉及到一個重要的數據:MTU(Maximum Transmission Unit,MTU),默認是1500,此數據在網絡編程數據傳輸中還是很重要的。
 

四、網絡層
控制子網的運行,在以太網中,最重要的數據協議是:IP協議。其他的傳輸拓撲協議,如:OSPF、BGP我們不關心。ipv4協議:其中Source IP Address就是源地址。


IP地址分爲:網絡段+主機端 一個網絡段就代表一個子網。這個可以參考:
http://en.wikipedia.org/wiki/IP_address

IPv4地址是非常缺乏的,這個跟當時的設計有關係。爲此引入了NAT,此有很多爭議,但是這個解決ipv4的ip缺乏問題,也不乏是一個好的方案。
以下是其中的一種結構,簡單地講就是:就是把無連接的網絡做成了面向連接的網絡。引入了傳輸層端口的概念。


另外還有:ARP(address resolution protocol)\RARP(reverse address resolution protocol)
DHCP(dynamic host configuration protocol)

五、傳輸層
是協議層次的核心所在,它的任務是在原機器和目標機器之間提供可靠的、性價比合理的數據傳輸功能,並且與當前所使用的物理網絡完全獨立。他是端到端的,與點到點的最大的區別是跨網絡。
傳輸層的核心概念.socket,端口的概念。在一些操作系統低於1024是有特別用途的。
用途最廣的是TCP協議:
TCP的Header如下所示:


到傳輸層,纔有了連接的概念了。在傳輸層以下是不用面向連接的(也就是直接扔包,直接存儲轉發掉。),第一張圖,data flow基本說明了傳輸層的含義。
TCP連接連接建立需要三次握手,斷開連接是四次握手【因爲TCP是雙工的,斷開需要一方申請且另一方確認的,連接的時候可以把sync、ack合爲一個】。如下是 TCP鏈接管理有限狀態機: 

以下是握手及斷開的過程,參考上圖看:



六、應用層
就是實際的網絡應用了,這裏就千奇百怪了,想深入瞭解那塊,就google吧。目前大約有:DNS、e-mail、萬維網(其中涉及http)等等。。。
大部分的軟件從業人員都工作在此層的。

有一些應用就用傳輸層低於1024的端口,如 HTTP的80端口。當然這些都可以更改,沒有絕對的。

七、一個關於傳輸層連接的例子
我從家的機器訪問公司的網絡,通過netstat查看得到:
client的情況爲:

家裏路由器的出口ip爲:60.176.147.50(中國電信的租用地址)

公司服務器的情況:

爲此我畫了以下的拓補圖:(我們這裏還是非三角模式,就不是修改mac地址的。)

主要解釋下連接的事情,連接是傳輸層的事情。下層是不存在的連接的事情。爲什麼存在端口,原因還是應用層程序通過監聽端口來區分不同的線程的。

從client上發起與服務器的三次握手連接後,連接建立起來,但是雙方的目標ip都不是對方的ip。怎麼建立的呢?圖中也給出一些答案。
這個關鍵的就是NAT做了手腳。建立連接本質就是要分析tcp的數據包,當發現發給我的數據包後,應答的時候,就把源地址目標地址互相換下,再發給對方。其實發送方並不知道數據包是否真的發給了對方。

八、參考資料
大學課程《計算機網絡》第四版

九、特別說明:
     大部分的圖片來自網絡,特別是wikiped。作者:阿里巴巴封神悟

     【您感覺軟件人員應該掌握哪些網絡呢? 請留下您的言論吧。您的言論是我前進最大的動力。】
發佈了76 篇原創文章 · 獲贊 109 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章