[你能做到的,只是不要想一步登天]
一、概述
在以太網中,我們都很清楚網絡的分層模型,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_addressIPv4地址是非常缺乏的,這個跟當時的設計有關係。爲此引入了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的數據包,當發現發給我的數據包後,應答的時候,就把源地址與目標地址互相換下,再發給對方。其實發送方並不知道數據包是否真的發給了對方。
大學課程《計算機網絡》第四版