目錄[-]
幾近所有的計算機程序,都會牽涉到網絡通訊。因此,了解計算機基礎網絡知識,對每個程序員來講都是異常重要的。
本文在介紹1些基礎網絡知識的同時,給出了1些高質量的系列文章鏈接,以方便大家隨時參考學習。相信通過本文的學習,你能對計算機網絡有全面的認識!
在瀏覽本文之前,建議瀏覽以下兩遍文章,以便對”計算機網絡是如何工作”的有個大概的了解。
互聯網協議入門(1)
互聯網協議入門(2)
接下來,我們介紹1些基礎網絡知識。
1上來就是OSI7層參考模型,是否是有點暈?如果是,那先瀏覽文章開頭推薦的那兩篇文章吧!
第7層 利用層(Application Layer)
利用層能與利用程序界面溝通,以到達展現給用戶的目的。 在此常見的協議有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第6層 表示層(Presentation Layer)
表示層能為不同的客戶端提供數據和信息的語法轉換內碼,使系統能解讀成正確的數據。同時,也能提供緊縮解壓、加密解密。
第5層 會話層(Session Layer)
會話層用于為通訊雙方制定通訊方式,并創建、注銷會話(雙方通訊)。
第4層 傳輸層(Transport Layer)
傳輸層用于控制數據流量,并且進行調試及毛病處理,以確保通訊順利。而發送真個傳輸層會為分組加上序號,方便接收端把分組重組為有用的數據或文件。
第3層 網絡層(Network Layer)
網絡層的作用是決定如何將發送方的數據傳到接收方。該層通過斟酌網絡堵塞程度、服務質量、發送優先權、每次路由的耗費來決定節點X到節點Y的最好路徑。我們熟知的路由器就工作在這1層,通過不斷的接收與傳送數據使得網絡變得相互聯通。
第2層 數據鏈路層(Data link Layer)
首先數據鏈路層的功能在于管理第1層的比特數據,并且將正確的數據發送到沒有傳輸毛病的線路中。創建還有辨認數據開始和退出的位置同時予以標記。 另外,就是處理由數據受損、丟失乃至重復傳輸毛病的問題,使后續的層級不會遭到影響,所以它運行數據的調試、重傳或修正,還有決定裝備什么時候進行傳輸。 設 備有:Bridge橋接器switch交換器
第1層 物理層(Physical Layer)
物理層定義了所有電子及物理裝備的規范。其中特別定義了裝備與物理媒介之間的關系,這包括了針腳、電壓、線纜規范、集線器、中繼器、網卡、主機適配 器(在SAN中使用的主機適配器)和其他的裝備的設計定義。由于物理層傳送的是原始的比特數據流,即設計的目的是為了保證當發送時的信號為2進制“1” 時,對方接收到的也是2進制“1”而不是2進制“0”。因此就需要定義哪一個裝備有幾個針腳,其中哪一個針腳發送的多少電壓代表2進制“1”或2進制“0”, 還有例如1個bit需要延續幾微秒,傳輸信號是不是在雙向上同時進行,最初的連接如何創建和終究如何終止等問題。
為了更好理解物理層與數據鏈路層之間的區分,可以把物理層認為是主要的,是與某個單1裝備與傳輸媒介之間的交互有關,而數據鏈路層則更多地關注使用 同1個通訊媒介的多個裝備(例如,最少兩個裝備)之間的互動。物理層的作用是告知某個裝備如何傳送信號至1個通訊媒介,和另外1個裝備如何接收這個信號 (大多數情況下它其實不會告知裝備如何與通訊媒介相連接)。有些過時的物理層標準如RS⑵32倒是的確使用物理線纜來控制通訊媒介的接入。
物理層的主要功能和提供的服務以下:
在裝備與傳輸媒介之間創建及終止連接。
參與通訊進程使得資源可以在同享的多用戶中有效分配。例如,沖突解決機制和流量控制。
對信號進行調制或轉換使得用戶裝備中的數字信號定義能與信道上實際傳送的數字信號相匹配。這些信號可以經過物理線纜(例如銅纜和光纜)或是無線信道傳送。
相比于OSI的7層模型,更經常使用的是TCP/IP的5層模型。TCP/IP的5層模型是將ISO的7層模型的利用層、表示層、會話層合并為利用層,得到以下圖所示的5層模型:
3次握手:
第1次握手:客戶端發送syn包(syn=x)到服務器,并進入SYN_SEND狀態,等待服務器確認;
第2次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送1個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第3次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送終了,客戶端和服務器進入ESTABLISHED狀態,完成3次握手。
握手進程中傳送的包里不包括數據,3次握手終了后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接1旦建立,在通訊雙方中的任何1方主動關閉連接之前,TCP 連接都將被1直保持下去。
與建立連接的“3次握手”類似,斷開1個TCP連接則需要“4次握手”。
第1次揮手:主動關閉方發送1個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告知被動關閉方:我已不 會再給你發數據了(固然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方仍然會重發這些數據),但是,此時主動關閉方還可 以接受數據。
第2次揮手:被動關閉方收到FIN包后,發送1個ACK給對方,確認序號為收到序號+1(與SYN相同,1個FIN占用1個序號)。
第3次揮手:被動關閉方發送1個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告知主動關閉方,我的數據也發送完了,不會再給你發數據了。
第4次揮手:主動關閉方收到FIN后,發送1個ACK給被動關閉方,確認序號為收到序號+1,至此,完成4次揮手。
TCP/IP協議是計算機網絡中的1個協議族,也是網絡編程中的重頭戲!理解TCP/IP狀態轉化圖,對理解TCP/IP協議的工作進程異常重要。
以下圖所示,描寫了1個狀態機到另外一個狀態機的轉變,已觸發這類狀態轉變的條件。
狀態圖詳細說明以下:
1.CLOSED:起始點,在超時或連接關閉時候進入此狀態。
2.LISTEN:svr端在等待連接過來時候的狀態,svr端為此要調用socket,bind,listen函數,就可以進入此狀態。此稱為利用程序被動打開(等待客戶端來連接)。
3.SYN_SENT:客戶端發起連接,發送SYN給服務器端。如果服務器端不能連接,則直接進入CLOSED狀態。
4.SYN_RCVD:跟3對應,服務器端接受客戶真個SYN要求,服務器端由LISTEN狀態進入SYN_RCVD狀態。同時服務器端要回應1個ACK,同時發送1個SYN給客戶端;另外1種情況,客戶端在發起SYN的同時接收到服務器端得SYN要求,客戶端就會由SYN_SENT到SYN_RCVD狀態。
5.ESTABLISHED:服務器端和客戶端在完成3次握手進入狀態,說明已可以開始傳輸數據了。
以上是建立連接時服務器端和客戶端產生的狀態轉移說明。相對來講比較簡單明了,如果你對3次握手比較熟習,建立連接時的狀態轉移還是很容易理解。
下面,我們來看看連接關閉時候的狀態轉移說明,關閉需要進行4次雙方的交互,還包括要處理1些善后工作(TIME_WAIT狀態),注意,這里主動關閉的1方或被動關閉的1方不是指特指服務器端或客戶端,是相對誰先發起關閉要求來講的:
6.FIN_WAIT_1:主動關閉的1方,由狀態5進入此狀態。具體的動作是發送FIN給對方。
7.FIN_WAIT_2:主動關閉的1方,接收到對方的FIN -ACK,進入此狀態。由此不能再接收對方的數據。但是能夠向對方發送數據。
8.CLOSE_WAIT:接收到FIN以后,被動關閉的1方進入此狀態。具體動作是接收到FIN,同時發送ACK。
9.LAST_ACK:被動關閉的1方,發起關閉要求,由狀態8進入此狀態。具體動作是發送FIN給對方,同時在接收到ACK時進入CLOSED狀態。
10.CLOSING:兩邊同時發起關閉要求時,會由FIN_WAIT_1進入此狀態。具體動作是接收到FIN要求,同時響應1個ACK。
11.TIME_WAIT:最糾結的狀態來了。從狀態圖上可以看出,有3個狀態可以轉化成它,我們逐一來分析:
a.由FIN_WAIT_2進入此狀態:在雙方不同時發起FIN的情況下,主動關閉的1方在完成本身發起的關閉要求后,接收到被動關閉1方的FIN落后入的狀態。
b.由CLOSING狀態進入:雙方同時發起關閉,都做了發起FIN的要求,同時接收到了FIN并做了ACK的情況下,由CLOSING狀態進入。
c.由FIN_WAIT_1狀態進入:同時接遭到FIN(對方發起),ACK(本身發起的FIN回應),與b的區分在于本身發起的FIN回應的ACK先于對方的FIN要求到達,而b是FIN先到達。這類情況幾率最小。
關閉的4次連接最難理解的狀態是TIME_WAIT,存在TIME_WAIT的2個理由:
1.可靠地實現TCP全雙工連接的終止。
2.允許老的重復分節在網絡中消逝。
MAC地址(Media Access Control Address),媒體訪問控制地址,或稱為物理地址,是用來定義網絡裝備的位置的。在OSI模型中,第3層網絡層負責IP地址,第2層數據鏈結層則負責MAC地址。1個主機會有1個IP地址,而每一個網絡位置會有1個專屬于它的MAC地址。
地址解析協議(Address Resolution Protocol),其基本功能為通過目標裝備的IP地址,查詢目標裝備的MAC地址,以保證通訊的順利進行。它是IPv4中網絡層必不可少的協議,不過在IPv6中已不再適用,并被鄰居發現協議(NDP)所替換。
在每臺安裝有TCP/IP協議的電腦或路由器里都有1個ARP緩存表,表里的IP地址與MAC地址是1對應的,以下表所示。
主機名稱 | IP地址 | MAC地址 |
A | 192.168.38.10 | 00-AA-00⑹2-D2-02 |
B | 192.168.38.11 | 00-BB-00⑹2-C2-02 |
C | 192.168.38.12 | 00-CC-00⑹2-C2-02 |
D | 192.168.38.13 | 00-DD-00⑹2-C2-02 |
E | 192.168.38.14 | 00-EE-00⑹2-C2-02 |
… | … | … |
以主機A(192.168.38.10)向主機B(192.168.38.11)發送數據為例。當發送數據時,主機A會在自己的ARP緩存表中尋覓 是不是有目標IP地址。如果找到了,也就知道了目標MAC地址為(00-BB-00⑹2-C2-02),直接把目標MAC地址寫入幀里面發送就能夠了;如 果在ARP緩存表中沒有找到相對應的IP地址,主機A就會在網絡上發送1個廣播(ARP request),目標MAC地址是 “FF.FF.FF.FF.FF.FF”,這表示向同1網段內的所有主機發出這樣的詢 問:“192.168.38.11的MAC地址是甚么?”網絡上其 他主機其實不響應ARP詢問,只有主機B接收到這個幀時,才向主機A做出這樣的回應(ARP response):“192.168.38.11的MAC地 址是(00-BB-00⑹2-C2-02)”。 這樣,主機A就知道了主機B的MAC地址,它就能夠向主機B發送信息了。同時它還更新了自己的ARP緩 存表,下次再向主機B發送信息時,直接從ARP緩存表里查找就能夠了。ARP緩存表采取了老化機制,在1段時間內如果表中的某1行沒有使用,就會被刪除, 這樣可以大大減少ARP緩存表的長度,加快查詢速度。
1)交換機
在計算機網絡系統中,交換機是針對同享工作模式的弱點而推出的。交換機具有1條高帶寬的背部總線和內部交換矩陣。交換機的所有的端口都掛接在這條背 部總線上,當控制電路收到數據包以后,處理端口會查找內存中的地址對比表以肯定目的MAC(網卡的硬件地址)的NIC(網卡)掛接在哪一個端口上,通過內部 交換矩陣迅速將數據包傳送到目的端口。目的MAC若不存在,交換機才廣播到所有的端口,接收端口回應后交換機會“學習”新的地址,并把它添加入內部地址表 中。
交換機工作于OSI參考模型的第2層,即數據鏈路層。交換機內部的CPU會在每一個端口成功連接時,通過ARP協議學習它的MAC地址,保存成1張 ARP表。在今后的通訊中,發往該MAC地址的數據包將僅送往其對應的端口,而不是所有的端口。因此,交換機可用于劃分數據鏈路層廣播,即沖突域;但它不 能劃分網絡層廣播,即廣播域。
交換機被廣泛利用于2層網絡交換,俗稱“2層交換機”。
交換機的種類有:2層交換機、3層交換機、4層交換機、7層交換機分別工作在OSI7層模型中的第2層、第3層、第4層盒第7層,并因此而得名。
2)路由器
路由器(Router)是1種計算機網絡裝備,提供了路由與轉送兩種重要機制,可以決定數據包歷來源端到目的端所經過 的路由路徑(host到host之間的傳輸路徑),這個進程稱為路由;將路由器輸入真個數據包移送至適當的路由器輸出端(在路由器內部進行),這稱為轉 送。路由工作在OSI模型的第3層――即網絡層,例如網際協議。
路由器的1個作用是連通不同的網絡,另外一個作用是選擇信息傳送的線路。 路由器與交換器的差別,路由器是屬于OSI第3層的產品,交換器是OSI第2層的產品(這里特指2層交換機)。
3)網關
網關(Gateway),網關顧名思義就是連接兩個網絡的裝備,區分于路由器(由于歷史的緣由,許多有關TCP/IP 的文獻曾把網絡層使用的路由器(Router)稱為網關,在今天很多局域網采取都是路由來接入網絡,因此現在通常指的網關就是路由器的IP),常常在家 庭中或小型企業網絡中使用,用于連接局域網和Internet。 網關也常常指把1種協議轉成另外一種協議的裝備,比如語音網關。
在傳統TCP/IP術語中,網絡裝備只分成兩種,1種為網關(gateway),另外一種為主機(host)。網關能在網絡間轉遞數據包,但主機不能 轉送數據包。在主機(又稱終端系統,end system)中,數據包需經過TCP/IP4層協議處理,但是在網關(又稱中介系 統,intermediate system)只需要到達網際層(Internet layer),決定路徑以后就能夠轉送。在當時,網關 (gateway)與路由器(router)還沒有區分。
在現代網絡術語中,網關(gateway)與路由器(router)的定義不同。網關(gateway)能在不同協議間移動數據,而路由器(router)是在不同網絡間移動數據,相當于傳統所說的IP網關(IP gateway)。
網關是連接兩個網絡的裝備,對語音網關來講,他可以連接PSTN網絡和以太網,這就相當于VOIP,把不同電話中的摹擬信號通過網關而轉換成數字信號,而且加入協議再去傳輸。在到了接收真個時候再通過網關還原成摹擬的電話信號,最后才能在電話機上聽到。
對以太網中的網關只能轉發3層以上數據包,這1點和路由是1樣的。而不同的是網關中并沒有路由表,他只能依照預先設定的不同網段來進行轉發。網關最重要的1點就是端口映照,子網內用戶在外網看來只是外網的IP地址對應著不同的端口,這樣看來就會保護子網內的用戶。
路由表(routing table)或稱路由擇域信息庫(、 Routing Information Base),是1個存儲在路由器或聯網計算機中的電子表格(文件)或類數據庫。路由表存儲著指向特定網絡地址的路徑(在有些情況下,還記錄有路徑的路由度量值)。路由表中含有網絡周邊的拓撲信息。路由表建立的主要目標是為了實現路由協議和靜態路由選擇。
路由表使用了和利用地圖投遞包裹相似的思想。只要網絡上的1個節點需要發送數據給網絡上的另外一個節點,它就必須要知道把數據發送到哪。裝備不可能直接連接到目的節點,它需要找到另外一個方式去發送數據包。在局域網中,節點也不知道如何發送IP包到網關。將數據包發到正確的地址是1個復雜的任務,網關需要記錄發送數據包的路徑信息。路由表就存儲著這樣的路徑信息,就如地圖1樣,是1個記錄路徑信息,并為需要這些信息的節點提供服務的數據庫。
以下圖所示為1張路由表:
路由表參數說明:
Destination:目的網段
mask:子網掩碼
interface:到達該目的地的本路由器的出口ip
gateway:下1跳路由器入口的ip,路由器通過interface和gateway定義1調到下1個路由器的鏈路,通常情況下,interface和gateway是同1網段的
metric:跳數,該條路由記錄的質量,1般情況下,如果有多條到達相同目的地的路由記錄,路由器會采取metric值小的那條路由
最大傳輸單元(Maximum Transmission Unit,MTU)是指1種通訊協議的某1層上面所能通過的最大數據包大小(以字節為單位)。最大傳輸單元這個參數通常與通訊接口有關(網絡接口卡、串口等)。
因特網協議允許IP分片,這樣就能夠將數據包分成足夠小的片斷以通過那些最大傳輸單元小于該數據包原始大小的鏈路了。這1分片進程產生在網絡層 (OSI 模型的第3層),第4層為傳輸層,傳輸層是 OSI 模型中最重要的1層,這里是根據窗口控制傳輸,而非MTU。傳輸協議同時進行流量控制或是 基于接收方可接收數據的快慢程度規定適當的發送速率。除此以外,傳輸層依照網絡能處理的最大尺寸將較長的數據包進行強迫分割。例如,以太網沒法接收大于 1500字節的數據包。發送方節點的傳輸層將數據分割成較小的數據片,同時對每數據片安排1序列號,以便數據到達接收方節點的傳輸層時,能以正確的順序 重組,該進程即被稱為排序。它使用的是將分組發送到鏈路上的網絡接口的最大傳輸單元的值。
以太網MTU值為1500字節 。
路由信息協議(Routing Information Protocol,RIP)是1種使用最廣泛的內部網關協議(IGP)。(IGP)是在內部網絡上使用的路由協議(在少數情形下,也能夠用于連接到因特網的網絡),它可以通過不斷的交換信息讓路由器動態的適應網絡連接的變化,這些信息包括每一個路由器可以到達哪些網絡,這些網絡有多遠等, RIP 屬于網絡層。
開放式最短路徑優先(Open Shortest Path First,OSPF)是對鏈路狀態路由協議的1種實現,是大中型網絡上使用最為廣泛的IGP(Interior Gateway Protocol)協議,運作于自治系統內部。著名的迪克斯加算法被用來計算最短路徑樹。它使用“代價(Cost)”作為路由度量。鏈路狀態數據庫(LSDB)用來保存當前網絡拓撲結構,它在同1區域中的所有路由器上是相同的。
BGP (邊界網關協議,Border Gateway Protocol )是自治系統之間的路由選擇協議,
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
下一篇 80后在上海的8年總結