原文地址-程序員的自我修養(yǎng)(2)計算機網(wǎng)絡
幾乎所有的計算機程序,都會牽涉到網(wǎng)絡通信。因此,了解計算機基礎網(wǎng)絡知識,對每一個程序員來說都是異常重要的。
本文在介紹一些基礎網(wǎng)絡知識的同時,給出了一些高質量的系列文章鏈接,以方便大家隨時參考學習。相信通過本文的學習,你能對計算機網(wǎng)絡有全面的認識!
在閱讀本文之前,建議閱讀以下兩遍文章,以便對”計算機網(wǎng)絡是如何工作”的有個大概的了解。
互聯(lián)網(wǎng)協(xié)議入門(一)
互聯(lián)網(wǎng)協(xié)議入門(二)
接下來,我們介紹一些基礎網(wǎng)絡知識。
OSI參考模型
一上來就是OSI七層參考模型,是不是有點暈?如果是,那先閱讀文章開頭推薦的那兩篇文章吧!
第7層:應用層(ApplicationLayer)
應用層能與應用程序界面溝通,以達到展示給用戶的目的。在此常見的協(xié)議有:HTTP,HTTPS,F(xiàn)TP,TELNET,SSH,SMTP,POP3等。
第6層:表示層(PresentationLayer)
表示層能為不同的客戶端提供數(shù)據(jù)和信息的語法轉換內碼,使系統(tǒng)能解讀成正確的數(shù)據(jù)。同時,也能提供壓縮解壓、加密解密。
第5層:會話層(SessionLayer)
會話層用于為通信雙方制定通信方式,并創(chuàng)建、注銷會話(雙方通信)。
第4層:傳輸層(TransportLayer)
傳輸層用于控制數(shù)據(jù)流量,并且進行調試及錯誤處理,以確保通信順利。而發(fā)送端的傳輸層會為分組加上序號,方便接收端把分組重組為有用的數(shù)據(jù)或文件。
第3層:網(wǎng)絡層(NetworkLayer)
網(wǎng)絡層的作用是決定如何將發(fā)送方的數(shù)據(jù)傳到接收方。該層通過考慮網(wǎng)絡擁塞程度、服務質量、發(fā)送優(yōu)先權、每次路由的耗費來決定節(jié)點X到節(jié)點Y的最佳路徑。我們熟知的路由器就工作在這一層,通過不斷的接收與傳送數(shù)據(jù)使得網(wǎng)絡變得相互聯(lián)通。
第2層:數(shù)據(jù)鏈路層(DatalinkLayer)
首先數(shù)據(jù)鏈路層的功能在于管理第一層的比特數(shù)據(jù),并且將正確的數(shù)據(jù)發(fā)送到?jīng)]有傳輸錯誤的路線中。創(chuàng)建還有辨認數(shù)據(jù)開始以及退出的位置同時予以標記。另外,就是處理由數(shù)據(jù)受損、丟失甚至重復傳輸錯誤的問題,使后續(xù)的層級不會受到影響,所以它運行數(shù)據(jù)的調試、重傳或修正,還有決定設備何時進行傳輸。設備有:Bridge橋接器switch交換器
第1層:物理層(PhysicalLayer)
物理層定義了所有電子及物理設備的規(guī)范。其中特別定義了設備與物理媒介之間的關系,這包括了針腳、電壓、線纜規(guī)范、集線器、中繼器、網(wǎng)卡、主機適配器(在SAN中使用的主機適配器)以及其他的設備的設計定義。因為物理層傳送的是原始的比特數(shù)據(jù)流,即設計的目的是為了保證當發(fā)送時的信號為二進制“1”時,對方接收到的也是二進制“1”而不是二進制“0”。因而就需要定義哪個設備有幾個針腳,其中哪個針腳發(fā)送的多少電壓代表二進制“1”或二進制“0”,還有例如一個bit需要持續(xù)幾微秒,傳輸信號是否在雙向上同時進行,最初的連接如何創(chuàng)建和最終如何終止等問題。
為了更好理解物理層與數(shù)據(jù)鏈路層之間的區(qū)別,可以把物理層認為是主要的,是與某個單一設備與傳輸媒介之間的交互有關,而數(shù)據(jù)鏈路層則更多地關注使用同一個通訊媒介的多個設備(例如,至少兩個設備)之間的互動。物理層的作用是告訴某個設備如何傳送信號至一個通訊媒介,以及另外一個設備如何接收這個信號(大多數(shù)情況下它并不會告訴設備如何與通訊媒介相連接)。有些過時的物理層標準如RS-232倒是的確使用物理線纜來控制通訊媒介的接入。
物理層的主要功能和提供的服務如下:
在設備與傳輸媒介之間創(chuàng)建及終止連接。
參與通訊過程使得資源可以在共享的多用戶中有效分配。例如,沖突解決機制和流量控制。
對信號進行調制或轉換使得用戶設備中的數(shù)字信號定義能與信道上實際傳送的數(shù)字信號相匹配。這些信號可以經(jīng)由物理線纜(例如銅纜和光纜)或是無線信道傳送。
TCP/IP的5層模型
相比于OSI的七層模型,更常用的是TCP/IP的5層模型。TCP/IP的5層模型是將ISO的七層模型的應用層、表示層、會話層合并為應用層,得到如下圖所示的五層模型:
TCP/IP通信的三次握手、四次揮手
三次握手:
第一次握手:客戶端發(fā)送syn包(syn=x)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發(fā)送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP連接都將被一直保持下去。
與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次握手”。
第一次揮手:主動關閉方發(fā)送一個FIN,用來關閉主動方到被動關閉方的數(shù)據(jù)傳送,也就是主動關閉方告訴被動關閉方:我已經(jīng)不會再給你發(fā)數(shù)據(jù)了(當然,在fin包之前發(fā)送出去的數(shù)據(jù),如果沒有收到對應的ack確認報文,主動關閉方依然會重發(fā)這些數(shù)據(jù)),但是,此時主動關閉方還可以接受數(shù)據(jù)。
第二次揮手:被動關閉方收到FIN包后,發(fā)送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)。 第三次揮手:被動關閉方發(fā)送一個FIN,用來關閉被動關閉方到主動關閉方的數(shù)據(jù)傳送,也就是告訴主動關閉方,我的數(shù)據(jù)也發(fā)送完了,不會再給你發(fā)數(shù)據(jù)了。 第四次揮手:主動關閉方收到FIN后,發(fā)送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
戲說TCP/IP狀態(tài)轉化圖
TCP/IP協(xié)議是計算機網(wǎng)絡中的一個協(xié)議族,也是網(wǎng)絡編程中的重頭戲!理解TCP/IP狀態(tài)轉化圖,對理解TCP/IP協(xié)議的工作過程異常重要。
如下圖所示,描述了一個狀態(tài)機到另一個狀態(tài)機的轉變,已經(jīng)觸發(fā)這種狀態(tài)轉變的條件。
狀態(tài)圖詳細說明如下:
1.CLOSED:起始點,在超時或者連接關閉時候進入此狀態(tài)。
2.LISTEN:svr端在等待連接過來時候的狀態(tài),svr端為此要調用socket,bind,listen函數(shù),就能進入此狀態(tài)。此稱為應用程序被動打開(等待客戶端來連接)。
3.SYN_SENT:客戶端發(fā)起連接,發(fā)送SYN給服務器端。如果服務器端不能連接,則直接進入CLOSED狀態(tài)。
4.SYN_RCVD:跟3對應,服務器端接受客戶端的SYN請求,服務器端由LISTEN狀態(tài)進入SYN_RCVD狀態(tài)。同時服務器端要回應一個ACK,同時發(fā)送一個SYN給客戶端;另外一種情況,客戶端在發(fā)起SYN的同時接收到服務器端得SYN請求,客戶端就會由SYN_SENT到SYN_RCVD狀態(tài)。
5.ESTABLISHED:服務器端和客戶端在完成3次握手進入狀態(tài),說明已經(jīng)可以開始傳輸數(shù)據(jù)了。
以上是建立連接時服務器端和客戶端產(chǎn)生的狀態(tài)轉移說明。相對來說比較簡單明了,如果你對三次握手比較熟悉,建立連接時的狀態(tài)轉移還是很容易理解。
下面,我們來看看連接關閉時候的狀態(tài)轉移說明,關閉需要進行4次雙方的交互,還包括要處理一些善后工作(TIME_WAIT狀態(tài)),注意,這里主動關閉的一方或被動關閉的一方不是指特指服務器端或者客戶端,是相對于誰先發(fā)起關閉請求來說的:
6.FIN_WAIT_1:主動關閉的一方,由狀態(tài)5進入此狀態(tài)。具體的動作是發(fā)送FIN給對方。
7.FIN_WAIT_2:主動關閉的一方,接收到對方的FIN-ACK,進入此狀態(tài)。由此不能再接收對方的數(shù)據(jù)。但是能夠向對方發(fā)送數(shù)據(jù)。
8.CLOSE_WAIT:接收到FIN以后,被動關閉的一方進入此狀態(tài)。具體動作是接收到FIN,同時發(fā)送ACK。
9.LAST_ACK:被動關閉的一方,發(fā)起關閉請求,由狀態(tài)8進入此狀態(tài)。具體動作是發(fā)送FIN給對方,同時在接收到ACK時進入CLOSED狀態(tài)。
10.CLOSING:兩邊同時發(fā)起關閉請求時,會由FIN_WAIT_1進入此狀態(tài)。具體動作是接收到FIN請求,同時響應一個ACK。
11.TIME_WAIT:最糾結的狀態(tài)來了。從狀態(tài)圖上可以看出,有3個狀態(tài)可以轉化成它,我們一一來分析:
a.由FIN_WAIT_2進入此狀態(tài):在雙方不同時發(fā)起FIN的情況下,主動關閉的一方在完成自身發(fā)起的關閉請求后,接收到被動關閉一方的FIN后進入的狀態(tài)。
b.由CLOSING狀態(tài)進入:雙方同時發(fā)起關閉,都做了發(fā)起FIN的請求,同時接收到了FIN并做了ACK的情況下,由CLOSING狀態(tài)進入。
c.由FIN_WAIT_1狀態(tài)進入:同時接受到FIN(對方發(fā)起),ACK(本身發(fā)起的FIN回應),與b的區(qū)別在于本身發(fā)起的FIN回應的ACK先于對方的FIN請求到達,而b是FIN先到達。這種情況概率最小。
關閉的4次連接最難理解的狀態(tài)是TIME_WAIT,存在TIME_WAIT的2個理由:
1.可靠地實現(xiàn)TCP全雙工連接的終止。
2.允許老的重復分節(jié)在網(wǎng)絡中消逝。
MAC地址的概念及其作用
MAC地址(MediaAccessControlAddress),媒體訪問控制地址,或稱為物理地址,是用來定義網(wǎng)絡設備的位置的。在OSI模型中,第三層網(wǎng)絡層負責IP地址,第二層數(shù)據(jù)鏈結層則負責MAC地址。一個主機會有一個IP地址,而每個網(wǎng)絡位置會有一個專屬于它的MAC地址。
ARP協(xié)議的用途及其工作原理
地址解析協(xié)議(AddressResolutionProtocol),其基本功能為通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。它是IPv4中網(wǎng)絡層必不可少的協(xié)議,不過在IPv6中已不再適用,并被鄰居發(fā)現(xiàn)協(xié)議(NDP)所替代。
在每臺安裝有TCP/IP協(xié)議的電腦或路由器里都有一個ARP緩存表,表里的IP地址與MAC地址是一對應的,如下表所示。
主機名稱 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
C | 192.168.38.12 | 00-CC-00-62-C2-02 |
D | 192.168.38.13 | 00-DD-00-62-C2-02 |
E | 192.168.38.14 | 00-EE-00-62-C2-02 |
… | … | … |
以主機A(192.168.38.10)向主機B(192.168.38.11)發(fā)送數(shù)據(jù)為例。當發(fā)送數(shù)據(jù)時,主機A會在自己的ARP緩存表中尋找是否有目標IP地址。如果找到了,也就知道了目標MAC地址為(00-BB-00-62-C2-02),直接把目標MAC地址寫入幀里面發(fā)送就可以了;如果在ARP緩存表中沒有找到相對應的IP地址,主機A就會在網(wǎng)絡上發(fā)送一個廣播(ARPrequest),目標MAC地址是“FF.FF.FF.FF.FF.FF”,這表示向同一網(wǎng)段內的所有主機發(fā)出這樣的詢問:“192.168.38.11的MAC地址是什么?”網(wǎng)絡上其他主機并不響應ARP詢問,只有主機B接收到這個幀時,才向主機A做出這樣的回應(ARPresponse):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。
這樣,主機A就知道了主機B的MAC地址,它就可以向主機B發(fā)送信息了。同時它還更新了自己的ARP緩存表,下次再向主機B發(fā)送信息時,直接從ARP緩存表里查找就可以了。ARP緩存表采用了老化機制,在一段時間內如果表中的某一行沒有使用,就會被刪除,這樣可以大大減少ARP緩存表的長度,加快查詢速度。
了解交換機、路由器、網(wǎng)關的概念,并知道各自的用途
1)交換機
在計算機網(wǎng)絡系統(tǒng)中,交換機是針對共享工作模式的弱點而推出的。交換機擁有一條高帶寬的背部總線和內部交換矩陣。交換機的所有的端口都掛接在這條背部總線上,當控制電路收到數(shù)據(jù)包以后,處理端口會查找內存中的地址對照表以確定目的MAC(網(wǎng)卡的硬件地址)的NIC(網(wǎng)卡)掛接在哪個端口上,通過內部交換矩陣迅速將數(shù)據(jù)包傳送到目的端口。目的MAC若不存在,交換機才廣播到所有的端口,接收端口回應后交換機會“學習”新的地址,并把它添加入內部地址表中。
交換機工作于OSI參考模型的第二層,即數(shù)據(jù)鏈路層。交換機內部的CPU會在每個端口成功連接時,通過ARP協(xié)議學習它的MAC地址,保存成一張ARP表。在今后的通訊中,發(fā)往該MAC地址的數(shù)據(jù)包將僅送往其對應的端口,而不是所有的端口。因此,交換機可用于劃分數(shù)據(jù)鏈路層廣播,即沖突域;但它不能劃分網(wǎng)絡層廣播,即廣播域。
交換機被廣泛應用于二層網(wǎng)絡交換,俗稱“二層交換機”。
交換機的種類有:二層交換機、三層交換機、四層交換機、七層交換機分別工作在OSI七層模型中的第二層、第三層、第四層盒第七層,并因此而得名。
2)路由器
路由器(Router)是一種計算機網(wǎng)絡設備,提供了路由與轉送兩種重要機制,可以決定數(shù)據(jù)包從來源端到目的端所經(jīng)過的路由路徑(host到host之間的傳輸路徑),這個過程稱為路由;將路由器輸入端的數(shù)據(jù)包移送至適當?shù)穆酚善鬏敵龆?在路由器內部進行),這稱為轉送。路由工作在OSI模型的第三層——即網(wǎng)絡層,例如網(wǎng)際協(xié)議。
路由器的一個作用是連通不同的網(wǎng)絡,另一個作用是選擇信息傳送的線路。路由器與交換器的差別,路由器是屬于OSI第三層的產(chǎn)品,交換器是OSI第二層的產(chǎn)品(這里特指二層交換機)。
3)網(wǎng)關
網(wǎng)關(Gateway),網(wǎng)關顧名思義就是連接兩個網(wǎng)絡的設備,區(qū)別于路由器(由于歷史的原因,許多有關TCP/IP的文獻曾經(jīng)把網(wǎng)絡層使用的路由器(Router)稱為網(wǎng)關,在今天很多局域網(wǎng)采用都是路由來接入網(wǎng)絡,因此現(xiàn)在通常指的網(wǎng)關就是路由器的IP),經(jīng)常在家庭中或者小型企業(yè)網(wǎng)絡中使用,用于連接局域網(wǎng)和Internet。網(wǎng)關也經(jīng)常指把一種協(xié)議轉成另一種協(xié)議的設備,比如語音網(wǎng)關。
在傳統(tǒng)TCP/IP術語中,網(wǎng)絡設備只分成兩種,一種為網(wǎng)關(gateway),另一種為主機(host)。網(wǎng)關能在網(wǎng)絡間轉遞數(shù)據(jù)包,但主機不能轉送數(shù)據(jù)包。在主機(又稱終端系統(tǒng),endsystem)中,數(shù)據(jù)包需經(jīng)過TCP/IP四層協(xié)議處理,但是在網(wǎng)關(又稱中介系統(tǒng),intermediatesystem)只需要到達網(wǎng)際層(Internetlayer),決定路徑之后就可以轉送。在當時,網(wǎng)關(gateway)與路由器(router)還沒有區(qū)別。
在現(xiàn)代網(wǎng)絡術語中,網(wǎng)關(gateway)與路由器(router)的定義不同。網(wǎng)關(gateway)能在不同協(xié)議間移動數(shù)據(jù),而路由器(router)是在不同網(wǎng)絡間移動數(shù)據(jù),相當于傳統(tǒng)所說的IP網(wǎng)關(IPgateway)。
網(wǎng)關是連接兩個網(wǎng)絡的設備,對于語音網(wǎng)關來說,他可以連接PSTN網(wǎng)絡和以太網(wǎng),這就相當于VOIP,把不同電話中的模擬信號通過網(wǎng)關而轉換成數(shù)字信號,而且加入?yún)f(xié)議再去傳輸。在到了接收端的時候再通過網(wǎng)關還原成模擬的電話信號,最后才能在電話機上聽到。
對于以太網(wǎng)中的網(wǎng)關只能轉發(fā)三層以上數(shù)據(jù)包,這一點和路由是一樣的。而不同的是網(wǎng)關中并沒有路由表,他只能按照預先設定的不同網(wǎng)段來進行轉發(fā)。網(wǎng)關最重要的一點就是端口映射,子網(wǎng)內用戶在外網(wǎng)看來只是外網(wǎng)的IP地址對應著不同的端口,這樣看來就會保護子網(wǎng)內的用戶。
初識路由表
路由表(routingtable)或稱路由擇域信息庫(、RoutingInformationBase),是一個存儲在路由器或者聯(lián)網(wǎng)計算機中的電子表格(文件)或類數(shù)據(jù)庫。路由表存儲著指向特定網(wǎng)絡地址的路徑(在有些情況下,還記錄有路徑的路由度量值)。路由表中含有網(wǎng)絡周邊的拓撲信息。路由表建立的主要目標是為了實現(xiàn)路由協(xié)議和靜態(tài)路由選擇。
路由表使用了和利用地圖投遞包裹相似的思想。只要網(wǎng)絡上的一個節(jié)點需要發(fā)送數(shù)據(jù)給網(wǎng)絡上的另一個節(jié)點,它就必須要知道把數(shù)據(jù)發(fā)送到哪。設備不可能直接連接到目的節(jié)點,它需要找到另一個方式去發(fā)送數(shù)據(jù)包。在局域網(wǎng)中,節(jié)點也不知道如何發(fā)送IP包到網(wǎng)關。將數(shù)據(jù)包發(fā)到正確的地址是一個復雜的任務,網(wǎng)關需要記錄發(fā)送數(shù)據(jù)包的路徑信息。路由表就存儲著這樣的路徑信息,就如地圖一樣,是一個記錄路徑信息,并為需要這些信息的節(jié)點提供服務的數(shù)據(jù)庫。
如下圖所示為一張路由表:
路由表參數(shù)說明:
Destination:目的網(wǎng)段 mask:子網(wǎng)掩碼 interface:到達該目的地的本路由器的出口ip gateway:下一跳路由器入口的ip,路由器通過interface和gateway定義一調到下一個路由器的鏈路,通常情況下,interface和gateway是同一網(wǎng)段的 metric:跳數(shù),該條路由記錄的質量,一般情況下,如果有多條到達相同目的地的路由記錄,路由器會采用metric值小的那條路由
MTU
最大傳輸單元(MaximumTransmissionUnit,MTU)是指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)包大小(以字節(jié)為單位)。最大傳輸單元這個參數(shù)通常與通信接口有關(網(wǎng)絡接口卡、串口等)。
因特網(wǎng)協(xié)議允許IP分片,這樣就可以將數(shù)據(jù)包分成足夠小的片段以通過那些最大傳輸單元小于該數(shù)據(jù)包原始大小的鏈路了。這一分片過程發(fā)生在網(wǎng)絡層(OSI模型的第三層),第四層為傳輸層,傳輸層是OSI模型中最重要的一層,這里是根據(jù)窗口控制傳輸,而非MTU。傳輸協(xié)議同時進行流量控制或是基于接收方可接收數(shù)據(jù)的快慢程度規(guī)定適當?shù)陌l(fā)送速率。
除此之外,傳輸層按照網(wǎng)絡能處理的最大尺寸將較長的數(shù)據(jù)包進行強制分割。例如,以太網(wǎng)無法接收大于1500字節(jié)的數(shù)據(jù)包。發(fā)送方節(jié)點的傳輸層將數(shù)據(jù)分割成較小的數(shù)據(jù)片,同時對每一數(shù)據(jù)片安排一序列號,以便數(shù)據(jù)到達接收方節(jié)點的傳輸層時,能以正確的順序重組,該過程即被稱為排序。它使用的是將分組發(fā)送到鏈路上的網(wǎng)絡接口的最大傳輸單元的值。
以太網(wǎng)MTU值為1500字節(jié)。
RIP、OSPF、BGP認識
路由信息協(xié)議(RoutingInformationProtocol,RIP)是一種使用最廣泛的內部網(wǎng)關協(xié)議(IGP)。(IGP)是在內部網(wǎng)絡上使用的路由協(xié)議(在少數(shù)情形下,也可以用于連接到因特網(wǎng)的網(wǎng)絡),它可以通過不斷的交換信息讓路由器動態(tài)的適應網(wǎng)絡連接的變化,這些信息包括每個路由器可以到達哪些網(wǎng)絡,這些網(wǎng)絡有多遠等,RIP屬于網(wǎng)絡層。
開放式最短路徑優(yōu)先(OpenShortestPathFirst,OSPF)是對鏈路狀態(tài)路由協(xié)議的一種實現(xiàn),是大中型網(wǎng)絡上使用最為廣泛的IGP(InteriorGatewayProtocol)協(xié)議,運作于自治系統(tǒng)內部。著名的迪克斯加算法被用來計算最短路徑樹。它使用“代價(Cost)”作為路由度量。鏈路狀態(tài)數(shù)據(jù)庫(LSDB)用來保存當前網(wǎng)絡拓撲結構,它在同一區(qū)域中的所有路由器上是相同的。
BGP(邊界網(wǎng)關協(xié)議,BorderGatewayProtocol)是自治系統(tǒng)之間的路由選擇協(xié)議,是互聯(lián)網(wǎng)上一個核心的去中心化自治路由協(xié)議。
BGP是唯一一個用來處理像因特網(wǎng)大小的網(wǎng)絡的協(xié)議,也是唯一能夠妥善處理好不相關路由域間的多路連接的協(xié)議。BGP構建在EGP的經(jīng)驗之上。BGP系統(tǒng)的主要功能是和其他的BGP系統(tǒng)交換網(wǎng)絡可達信息。網(wǎng)絡可達信息包括列出的自治系統(tǒng)(AS)的信息。這些信息有效地構造了AS互聯(lián)的拓樸圖并由此清除了路由環(huán)路,同時在AS級別上可實施策略決策。
DNS
DNS(DomainNameSystem,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的IP數(shù)串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協(xié)議運行在UDP協(xié)議之上,使用端口號53。
TCP、UDP和HTTP區(qū)別于聯(lián)系
TCP/IP協(xié)議是一個協(xié)議簇,這個協(xié)議簇中包含了很多種協(xié)議,TCP、UDP和HTTP只是TCP/IP協(xié)議簇的成員。之所以命名為TCP/IP協(xié)議,因為TCP,IP協(xié)議是兩個很重要的協(xié)議,就用他兩命名了。
1)TCP/IP協(xié)議簇,大致可分為三個層次:網(wǎng)絡層、傳輸層和應用層。 在網(wǎng)絡層有IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議和BOOTP協(xié)議。 在傳輸層中有TCP協(xié)議與UDP協(xié)議。 在應用層有FTP、HTTP、TELNET、SMTP、DNS等協(xié)議。 HTTP也是一個協(xié)議,是從Web服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。
2)HTTP協(xié)議是建立在請求/響應模型上的。首先由客戶建立一條與服務器的TCP鏈接,并發(fā)送一個請求到服務器,請求中包含請求方法、URI、協(xié)議版本以及相關的MIME樣式的消息。服務器響應一個狀態(tài)行,包含消息的協(xié)議版本、一個成功和失敗碼以及相關的MIME式樣的消息。 HTTP/1.0為每一次HTTP的請求/響應建立一條新的TCP鏈接,因此一個包含HTML內容和圖片的頁面將需要建立多次的短期的TCP鏈接。一次TCP鏈接的建立將需要3次握手。 另外,為了獲得適當?shù)膫鬏斔俣龋瑒t需要TCP花費額外的回路鏈接時間(RTT)。每一次鏈接的建立需要這種經(jīng)常性的開銷,而其并不帶有實際有用的數(shù)據(jù),只是保證鏈接的可靠性,因此HTTP/1.1提出了可持續(xù)鏈接的實現(xiàn)方法。HTTP/1.1將只建立一次TCP的鏈接而重復地使用它傳輸一系列的請求/響應消息,因此減少了鏈接建立的次數(shù)和經(jīng)常性的鏈接開銷。
3)雖然HTTP本身是一個協(xié)議,但其最終還是基于TCP的。目前,有人正在研究基于TCP+UDP混合的HTTP協(xié)議。
在瀏覽器中輸入一個網(wǎng)站后,都發(fā)生了什么
詳細參見:互聯(lián)網(wǎng)協(xié)議入門(二)
以上講述了一些計算機網(wǎng)絡相關的術語,概念,當然,一切才剛剛開始。
如果,你需要了解更多。我可以很負責任的告訴你:以下鏈接是你更深入的了解計算機網(wǎng)絡工作機制的最佳資源,是被奉為圣經(jīng)的《TCP-IP詳解-卷I》一書的精華內容,出自vamei君。
TCP-IP協(xié)議詳解(1)郵差與郵局 (網(wǎng)絡協(xié)議概觀)
TCP-IP協(xié)議詳解(2) 小喇叭開始廣播 (以太網(wǎng)與WiFi協(xié)議)
TCP-IP協(xié)議詳解(3) IP接力賽(IP, ARP, RIP和BGP協(xié)議)
TCP-IP協(xié)議詳解(4)地址耗盡危機(IPv4與IPv6地址)
TCP-IP協(xié)議詳解(5) 我盡力(IP協(xié)議詳解)
TCP-IP協(xié)議詳解(6) 瑞士軍刀 (ICMP協(xié)議)
TCP-IP協(xié)議詳解(7) 傀儡(UDP協(xié)議)
TCP-IP協(xié)議詳解(8) 不放棄 (TCP協(xié)議與流通信)
TCP-IP協(xié)議詳解(9) 愛的傳聲筒(TCP連接)
TCP-IP協(xié)議詳解(10) 魔鬼細節(jié) (TCP滑窗管理)
TCP-IP協(xié)議詳解(11) 涅槃 (TCP重新發(fā)送)
TCP-IP協(xié)議詳解(12) 天下為公(TCP堵塞控制)
TCP-IP協(xié)議詳解(13) 9527(DNS協(xié)議)
TCP-IP協(xié)議詳解(14) 逆襲(CIDR與NAT)
TCP-IP協(xié)議詳解(15) 先生,要點單嗎?(HTTP協(xié)議概覽)
如果上述文章的知識都有所了解,那么原理性的東西我們差不多都似懂非懂了。接下來,我們需要的是實戰(zhàn)。恩,接下來實現(xiàn)一下如下的網(wǎng)絡程序吧。
1、實現(xiàn)一個簡單的一問一答的服務器/客戶機模型。
2、用多進程/線程的方式實現(xiàn)一個服務器同時為多個客戶端服務的程序(阻塞式的網(wǎng)絡程序)。
3、實現(xiàn)一個基于事件驅動的服務器網(wǎng)絡程序(如Linux epoll)(異步非阻塞網(wǎng)絡程序)。
如果以上事情都做完了,接下來,精彩繼續(xù)!在Nginx風靡全球之際,每個人都難免好奇,去一探究竟。下面是幾個相當好的學習Nginx的精華文章匯總!
Nginx學習資源匯總
最后,計算機網(wǎng)絡相關的兩篇不該錯過的好文章:
TCP 的那些事兒(上)
TCP 的那些事兒(下)