當我們決定要談?wù)劸W(wǎng)絡(luò)的時候武花,我想在談之前凄吏,有必要了解一下“協(xié)議”這個詞短纵。協(xié)議带污,定義了在倆個或者多個通信實體之間交換報文的格式和次序,以及報文發(fā)送香到、接收報文或者其他的事件所采取的動作鱼冀。定義都比較晦澀报破,那就讓我們來個例子吧。
假設(shè)我要向你(互不相識)詢問一下當前的時間千绪;
我首先和你說:你好充易,以示我想要和你交流(發(fā)出報文,請求通信)
荸型。而你回應(yīng)我(收到報文盹靴,通信建立)
:你好,表明能夠繼續(xù)詢問你了瑞妇。我發(fā)出詢問(發(fā)出報文稿静,包含事件處理)
:幾點了?你看了看表(采取動作)
辕狰,然后回答我(收到報文改备,包含結(jié)果)
,2:00了蔓倍。之后我說悬钳,謝謝(請求結(jié)束通信)
。你說柬脸,不客氣(通信結(jié)束)
。
以上就是我們?nèi)粘I钪兴褂玫膮f(xié)議毙驯。相類比計算機倒堕,其實也是相差不多的。不同的是爆价,計算機畢竟不是人垦巴,所以得指定很多的協(xié)議,以保障它們正常的通信铭段。比如以下幾個常見的傳輸協(xié)議骤宣,當然不了解也沒有關(guān)系,之后會詳細的提及序愚。
超文本傳輸協(xié)議(HTTP憔披,HyperText Transfer Protocol)
傳輸控制協(xié)議(TCP,Transmission Control Protocol)
因特網(wǎng)協(xié)議(IP爸吮,Internet Protocol)
地址解析協(xié)議(ARP芬膝,Address Resolution Protocol)
一、網(wǎng)絡(luò)模型
既然存在多種協(xié)議形娇,那么總需要一種結(jié)構(gòu)把它們合理的組織在一起锰霜。而現(xiàn)如今的倆種模型,都是采用的層次結(jié)構(gòu)桐早。每一層通過在該層中執(zhí)行某些動作或者使用直接下層的服務(wù)來提供服務(wù)癣缅。下面就先來看看這倆類分層結(jié)構(gòu):五層因特網(wǎng)模型
(應(yīng)用層厨剪,傳輸層,網(wǎng)絡(luò)層友存,鏈路層祷膳,物理層)、OSI七層模型
(應(yīng)用層爬立,表示層钾唬,會話層,傳輸層侠驯,網(wǎng)絡(luò)層抡秆,鏈路層,物理層)吟策。下面我們以五層模型為例儒士,談?wù)動嬎銠C網(wǎng)絡(luò)。不過由于物理層涉及比較廣檩坚,所以我們實際討論的只有四層:應(yīng)用層着撩,傳輸層,網(wǎng)絡(luò)層匾委,鏈路層拖叙。
應(yīng)用層:就是網(wǎng)絡(luò)應(yīng)用程序及它們的應(yīng)用層協(xié)議存在的地方,我們常把位于應(yīng)用層要傳遞的信息稱為報文(message)赂乐。
傳輸層:因特網(wǎng)的傳輸層負責在倆個應(yīng)用程序端點之間傳遞應(yīng)用層報文薯鳍。在因特網(wǎng)中,有倆種傳輸協(xié)議挨措,
TCP
和UDP
挖滤,使用其中的任何一個都能傳遞應(yīng)用層報文,值得注意的是浅役,在這一層斩松,TCP
/UDP
會把上層報文包裝成一個新的結(jié)構(gòu),我們稱為報文段(segment)觉既。網(wǎng)絡(luò)層:在這一層惧盹,網(wǎng)絡(luò)層也會把上一層的
報文段
包裝成一個被稱作數(shù)據(jù)報(datagram)的結(jié)構(gòu)。然后把這個數(shù)據(jù)報
從一臺主機移動到另外一臺主機上瞪讼。在這一層就包括著名的IP
協(xié)議岭参。鏈路層:同理,在這一層尝艘,又在
數(shù)據(jù)報
的外面加了個殼演侯,我們把加殼之后的這個東西叫做幀(frame)。然后通過這一層把幀
從當前的一個節(jié)點移動到下一個節(jié)點背亥,網(wǎng)絡(luò)層必須依靠鏈路層的服務(wù)秒际。如下圖悬赏,從源主機到鏈路交換機。
在網(wǎng)絡(luò)中娄徊,我們經(jīng)常會忽略具體的設(shè)備闽颇,而統(tǒng)一稱為主機(host),或者端系統(tǒng)(end system)寄锐。比如智能手機兵多,平板電腦,電視橄仆,游戲機剩膘,web相機等等......而主機與主機之間通過通信鏈路(communication link)和分組交換機(packet switch)連接在一起。分組交換機各式各樣盆顾,但當今最著名的類型是路由器(Router)和鏈路層交換機(Link-layer switch)怠褐,分別也稱為,三層交換機您宪,或者倆層交換機奈懒。由上圖可以看出。
最后宪巨,來說一個小程序磷杏,tracert
。通過它捏卓,可以確定從你當前的主機到目的主機之間經(jīng)過了那些交換機极祸。
## 運行cmd
C:\>tracert baidu.com
通過最多 30 個躍點跟蹤
到 baidu.com [123.125.114.144] 的路由:
1 4 ms 4 ms 3 ms 10.205.64.1
2 4 ms 2 ms 3 ms 192.168.24.2
3 * 11 ms 8 ms 124.93.192.65
4 341 ms 88 ms 310 ms 124.93.179.249
5 9 ms 5 ms 8 ms 61.189.75.13
6 12 ms 15 ms 14 ms 113.230.185.37
7 23 ms 22 ms 22 ms 219.158.21.69
8 24 ms 24 ms 32 ms 202.96.12.14
9 22 ms 23 ms 21 ms 202.106.34.194
10 22 ms 28 ms 154 ms 202.106.43.30
11 * * * 請求超時。
12 * * * 請求超時天吓。
13 22 ms 22 ms 31 ms 123.125.114.144
跟蹤完成贿肩。
二峦椰、應(yīng)用層
對于應(yīng)用層龄寞,我想絕大多數(shù)人,應(yīng)該是最熟悉的了汤功。尤其是從事軟件開發(fā)的人物邑。這類應(yīng)用程序體系結(jié)構(gòu)是由應(yīng)用程序研發(fā)者設(shè)計,不過多是利用的現(xiàn)代所流行的倆種主流體系結(jié)構(gòu)之一:C/S結(jié)構(gòu)(客戶 - 服務(wù)器)滔金,P2P結(jié)構(gòu)(對等體系)色解。
C/S結(jié)構(gòu):在這種體系中,總有一個需要一直打開的主機餐茵,我們稱為服務(wù)器(server)科阎,它服務(wù)于其他稱為客戶(client)主機的請求。服務(wù)器總是具有一個固定的地址忿族,大家都知道的地址锣笨,稱為IP地址蝌矛。比如
baidu.com
的IP地址之一為180.149.132.47
。啥错英?你不知道baidu.com
的地址入撒,但是你知道baidu.com
這個名字吧,又因為存在DNS服務(wù)(后面說)椭岩,所以想當于了解茅逮。在這種結(jié)構(gòu)下,值得注意的是判哥,其他客戶主機之間是不可以之間進行通信的献雅。P2P結(jié)構(gòu):在對等(Peer-to-peer)體系中,每臺計算機之間都處于對等的地位姨伟,各臺計算機有相同的功能惩琉,無主從之分,一臺計算機既可作為服務(wù)器夺荒,設(shè)定共享資源供網(wǎng)絡(luò)中其他計算機所使用瞒渠,又可以作為工作站。網(wǎng)絡(luò)中的每一臺計算機既能充當網(wǎng)絡(luò)服務(wù)的請求者技扼,又對其它計算機的請求做出響應(yīng)伍玖,提供資源、服務(wù)和內(nèi)容剿吻。通常這些資源和服務(wù)包括:信息的共享和交換窍箍、計算資源(如CPU計算能力共享)、存儲共享(如緩存和磁盤空間的使用)丽旅、網(wǎng)絡(luò)共享椰棘、打印機共享等。
2x01.是什么在通信
對于學(xué)習(xí)過操作系統(tǒng)榄笙,或閱讀過unix網(wǎng)絡(luò)編程的人邪狞,對Tcp echo服務(wù)器應(yīng)該不會陌生。當前進程通過fork()生成另外一個進程茅撞,一個進程發(fā)送一句話帆卓,然后另外一個接收到,并且顯示在屏幕上米丘。所以剑令,我們可以想得到,在應(yīng)用層而言拄查,忽略下層數(shù)據(jù)傳輸細節(jié)吁津,那么通信的其實就是進程。然而我們不怎么關(guān)注同一臺主機上進程間的通信堕扶,而關(guān)注不同端系統(tǒng)上的進程間的通信碍脏。那么就不得不一個新東西:套接字癣疟,主機上應(yīng)用層與傳輸層的接口,但是應(yīng)用程序開發(fā)者對于傳輸層的控制僅限于:
- 選擇傳輸層的協(xié)議
- 也許能設(shè)定幾個傳輸層的參數(shù)潮酒,比如最大換成數(shù)睛挚,和最大報文段長度等。
2x02.網(wǎng)絡(luò)應(yīng)用
互聯(lián)網(wǎng)從誕生到現(xiàn)在不過短短百年急黎,但是對于人類社會的影響確實翻天覆地扎狱。試想,一百年前的時候勃教,你能身處中華淤击,卻知道美國現(xiàn)在發(fā)生著選舉大會嗎?你能通過一個東西隨身攜帶萬卷書嗎故源?你能實時與你遠在他鄉(xiāng)的好友實時通訊嗎污抬?不能,都不能绳军。但是現(xiàn)在可以印机。那么接下來,就介紹幾個極為流行的應(yīng)用以及它的應(yīng)用層協(xié)議吧门驾。
-
HTTP:Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫射赛。常有倆個程序?qū)崿F(xiàn),客戶機-服務(wù)器奶是,并且分別運行在不同的端系統(tǒng)上楣责。其下的支撐運輸協(xié)議是使用的TCP,而且由于http服務(wù)器并不保存關(guān)于客戶的任何信息聂沙,所以
http
也被稱為是一個無狀態(tài)協(xié)議秆麸。但是為了跟蹤用戶的輸入(比如用戶的購物車商品),網(wǎng)站會提供一個用戶身份的識別碼及汉,存放在cookie中沮趣,每次再訪問網(wǎng)站則自動將cookie加入到HTTP報文頭部,實現(xiàn)身份的識別豁生。
交互過程 FTP:File Transfer Protocol(文件傳輸協(xié)議)的英文簡稱兔毒,而中文簡稱為“文傳協(xié)議”漫贞。同時甸箱,它也是一個應(yīng)用程序。通過使用倆個并行的TCP鏈接來傳輸文件迅脐,一個是控制鏈接芍殖,一個是數(shù)據(jù)鏈接,控制鏈接用于在倆個主機之間傳輸控制信息谴蔑,如用戶標識豌骏,口令龟梦,命令。數(shù)據(jù)鏈接用于實際發(fā)送一個窃躲。
-
DNS:Domain Name System(域名系統(tǒng))的縮寫计贰,運行在UDP協(xié)議之上。就像我們上面提到的
baidu.com
怎么轉(zhuǎn)換成ip地址蒂窒,這個就是DNS的服務(wù)躁倒。下面來介紹一下。首先洒琢,總的來說秧秉,DNS采用了分布式的設(shè)計方案。如下衰抑。
DNS服務(wù)器層次結(jié)構(gòu)
每個組織象迎,如一個大學(xué),一個院系呛踊,一個公司都會有一臺本地DNS服務(wù)器砾淌,當一臺主機想要訪問baidu.com
的ip地址時,會先發(fā)送她的查詢請求到本地DNS服務(wù)器谭网,里面查找是否有baidu.com
的ip地址拇舀。沒有的話,本地DNS服務(wù)器就把這個請求轉(zhuǎn)發(fā)到根DNS服務(wù)器蜻底,然后根DNS服務(wù)器把com
DNS服務(wù)器地址發(fā)送給本地DNS服務(wù)器骄崩,然后本地DNS服務(wù)器發(fā)送查詢請求到com
DNS服務(wù)器,完成名字與ip地址的轉(zhuǎn)換薄辅。
如果你想在你的主機上發(fā)送一個DNS查詢報文要拂,那么就使用nslookup
程序吧,它可以幫助你完成,前倆行是你的主機的DNS服務(wù)器的名字,以及ip地址鱼炒。
## 運行cmd
C:\> nslookup baidu.com
服務(wù)器: cache3-dlcity
Address: 202.96.69.38
非權(quán)威應(yīng)答:
名稱: baidu.com
Addresses:180.149.132.47
123.125.114.144
220.181.57.217
111.13.101.208
三宾毒、傳輸層
傳輸層協(xié)議為運行在不同的主機上的應(yīng)用進程之間提供了邏輯通信,不需要考慮下層的實現(xiàn)細節(jié)囤攀,即使是相隔很遠,也可以通過運用傳輸層的接口彼此發(fā)送報文。所以傳輸層協(xié)議是在端系統(tǒng)上而不是在路由器上蔚润。我們通過應(yīng)用層,都知道尺栖,倆個主機之間通信就是倆個進程在通信嫡纠。但是我們的電腦經(jīng)常運行著很多的軟件,QQ、網(wǎng)易云音樂除盏、chrome.......那么怎么保證它們正常接收到自己的數(shù)據(jù)包呢叉橱?這里就要提出一個叫做端口的東西。端口者蠕,是一個16比特的數(shù)窃祝,其大小在0-65535之間,但是0-1023范圍的端口稱為公認端口踱侣,它們緊密綁定于一些服務(wù)锌杀。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議。例如:80端口實際上總是HTTP通訊泻仙,F(xiàn)TP一般使用端口(20糕再,21),53為DNS服務(wù)的端口等等玉转。
多路復(fù)用/分解:一個進程可以有一個或者多個套接字突想,就像FTP,但是一般一個套接字值綁定只一個端口號究抓,那么在同一個時刻猾担,一定存在著多個套接字,所以每個套接字都有自己唯一的標識符刺下。用來區(qū)別于其他套接字绑嘹。這樣傳輸層就可以把不同的報文數(shù)據(jù)交付到正確的套接字上面,稱為多路分解橘茉。而不同的套接字加上各種的殼工腋,從而生成報文段,然后將報文段傳遞到網(wǎng)絡(luò)層畅卓,稱為多路復(fù)用擅腰。
3x01.UDP
為了說清楚UDP(User Datagram Protocol)協(xié)議,我想有必要簡單的說明一下網(wǎng)絡(luò)層的IP
協(xié)議翁潘。IP
協(xié)議的服務(wù)模型為盡力而為交付服務(wù)趁冈,這就意味著IP盡它“最大的努力”在通信的主機之間交付報文,但它不會做任何的保證拜马。不保證報文段的交付渗勘,不保證報文段的按序交付,不保證報文段中數(shù)據(jù)的完整性俩莽。所以IP
協(xié)議也被稱為是不可靠服務(wù)旺坠。
就像IP
協(xié)議是不可靠協(xié)議一般,UDP
也是如此豹绪。但是盡管如此价淌,有一些場合,還是很適合UDP
的瞒津,比如交談式音頻/視頻蝉衣,這些應(yīng)用能夠承受一定程度的數(shù)據(jù)損失,因為那丟失的數(shù)據(jù)對于播放出現(xiàn)的干擾巷蚪,并不是很致命病毡。如果說應(yīng)用程序開發(fā)人員在開發(fā)時選擇了UDP
,那么這個應(yīng)用差不多就是直接與IP
協(xié)議打交道了屁柏。我知道啦膜,你想說,既然UDP這么不好淌喻,為什么編程有時還選擇這個僧家。那是因為UDP在傳輸?shù)乃俣壬弦艽蟮膬?yōu)于TCP協(xié)議。TCP提供很多的保障裸删,但是保障的背后就是時間的代價八拱。就像在相同算法下,C語言與其他高級語言運行時間明顯有差別涯塔。
上圖為UDP報文段結(jié)構(gòu)肌稻,我們可以看出,相比較上層(應(yīng)用層)傳來的報文匕荸,多了四個字節(jié)爹谭,分別為,源端口號榛搔,目的端口號诺凡,長度(報文),校驗和践惑。通過后倆個傳輸數(shù)據(jù)绑洛,確定是否在移動中,其中的比特發(fā)生了改變童本。比如鏈路中的噪音干擾真屯,或者存儲在路由器時引入問題。有人可能會說怎么這個報文段里面沒有對方或者自己的IP地址穷娱,那時因為IP地址是在下一層包裝進去的绑蔫。
3x02.TCP
tcp(Transmission Control Protocol)協(xié)議相比叫UDP協(xié)議,最為重要的就是比UDP多了倆項功能泵额。
可靠傳輸配深。保證數(shù)據(jù)正確、按序到達嫁盲。雖然UDP不能保證篓叶,但是可以在上層應(yīng)用程序里建立自己的可靠機制來完成烈掠。
-
擁堵控制。由于UDP沒有限制發(fā)送報文段缸托,所以導(dǎo)致UDP發(fā)送方和接受方之間的高丟包率左敌,并擠跨了TCP的會話。
TCP報文段結(jié)構(gòu)
三次握手:
在報文段的首部中的一個標志位
SYN
被置為1俐镐,所以矫限,有時也稱其為SYN報文段,另外佩抹,客戶會隨機的選擇一個初始序號(client_isn)并放到序號(Sequence number) 叼风。然后發(fā)送給服務(wù)器。服務(wù)器會從該數(shù)據(jù)報中提取
SYN
報文段棍苹,并且為TCP連接分配TCP緩存和變量无宿,并向該TCP發(fā)送允許連接的報文段。其具體為:首先枢里,SYN
置為1懈贺;其次,首部的確認字段(Acknowledgment number)被置為(client_isn + 1)坡垫,最后會選擇自己的初始序號(server_isn)放到序號(Sequence number) 梭灿。然后發(fā)送給客戶機。有時也稱這個報文段為SYN報文段(SYNACK segment)冰悠。-
在客戶機收到SYN報文段后堡妒,客戶機也要給該連接分配緩存和變量,然后給服務(wù)器發(fā)送一個確認報文段溉卓。對服務(wù)器的允許連接的報文段進行確認皮迟。連接建立之后,該SYN被置為0桑寨。
三次握手
四次揮手:
客戶機想服務(wù)器發(fā)送一個特殊的報文段伏尼,這個報文段讓其首部的標志位
FIN
被置為1,然后發(fā)送給服務(wù)器尉尾。當服務(wù)器接受到該報文的時候爆阶,就向客戶機發(fā)送一個確定報文。
服務(wù)器發(fā)送自己的終止報文段沙咏,其
FIN
被置為1辨图。-
客戶機對這個服務(wù)器終止報文段進行確認。
四次揮手
由于TCP并沒有提供任何的加密機制肢藐,所以現(xiàn)在研制了TCP的加強版本故河,稱為安全套接字(Secure Sockets Layer,SSL)吆豹。用SSL加強后的TCP不僅能夠完成傳統(tǒng)TCP所能做的一切鱼的,而且提供了關(guān)鍵的進程到進程的安全性服務(wù)理盆。
四、網(wǎng)絡(luò)層
網(wǎng)絡(luò)層的作用從表面上看極為簡單凑阶,就是把數(shù)據(jù)報從一臺主機移動到另外一臺主機上猿规,為此,需要倆種重要的功能晌砾。當然坎拐,這一層有上面提到的IP
(Internet Protocol)協(xié)議烦磁。
轉(zhuǎn)發(fā)养匈。數(shù)據(jù)報從單一的路由器中從一條入鏈路到出鏈路的傳送。
路由選擇都伪。一個網(wǎng)絡(luò)中所有的路由器呕乎,它們經(jīng)路由選擇協(xié)議共同交互,以決定數(shù)據(jù)報從源到目的地所采用的路徑陨晶。
在實際的網(wǎng)絡(luò)中猬仁,每一個路由器,都會有多個輸入端先誉,就像(A湿刽,B),和多個輸出端褐耳。并且在輸入端使用了存儲轉(zhuǎn)發(fā)傳輸機制诈闺,這種機制是指在每個路由器能夠開始向輸出端傳輸該數(shù)據(jù)報的第一個比特之前,必須接受整個數(shù)據(jù)報铃芦。而在每一個輸出端雅镊,都具有一個輸出隊列,它用于存儲路由器準備發(fā)送到這個輸出端的數(shù)據(jù)報刃滓。當然仁烹,既然是隊列,還是在實際情況下咧虎,那么總會有輸出隊列被充滿的時候卓缰,這個時候就會出現(xiàn)丟包(packet lost),到達的數(shù)據(jù)報或者已經(jīng)在排隊的數(shù)據(jù)報之一會被丟棄砰诵。
4x01.IPv4編址
我們知道僚饭,主機,路由器是通過一條條的物理鏈路鏈接在一起胧砰,而主機/路由器與物理鏈路的邊界鳍鸵,我們常稱其為接口。在ip協(xié)議中尉间,要求每臺主機/路由器的每個接口都擁有自己的ip地址偿乖,也就是說击罪,一個路由器可能有多個ip地址。在IPv4中贪薪,規(guī)定IP地址長度為32比特媳禁,等價于四個字節(jié)。每字節(jié)最大255画切,所以ip最大為255.255.255.255
竣稽。這些地址一般使用所謂的點分十進制記法
書寫,即地址中的每個字節(jié)用它的十進制書寫霍弹,各字節(jié)之間以句點隔開毫别。例如127.0.0.1
。
用ip的術(shù)語來說典格,互聯(lián)的三個主機和一個路由器接口形成一個子網(wǎng)岛宦。ip編址為這個子網(wǎng)分配了一個地址:
233.1.1.0/24
,其中/24記法耍缴,有時也被稱為子網(wǎng)掩碼砾肺,指示了32比特中的最左24比特定義了子網(wǎng)地址。其他要連接在這個233.1.1.0/24
網(wǎng)絡(luò)的主機防嗡,其地址要求具有233.1.1.xxx
的形式变汪。ip地址通過限制特定長度的比特,對ip進行分類編址蚁趁。如下裙盾。
類型 | 范圍 |
---|---|
A | 0.0.0.0 - 127.255.255.255 |
B | 128.0.0.0 - 191.255.255.255 |
C | 192.0.0.0 - 223.255.255.255 |
D | 224.0.0.0 - 239.255.255.255 |
E | 240.0.0.0 - 255.255.255.255 |
4x02.DHCP
試想,如果一個組織一旦獲得一塊地址荣德,那么它就可以為本組織內(nèi)的主機與路由器接口逐個分配ip地址闷煤。那么就不得不提出DHCP(Dynamic Host Configuration Protocol,動態(tài)主機配置協(xié)議)協(xié)議了涮瞻。DHCP具有將主機連接進一個網(wǎng)絡(luò)的網(wǎng)絡(luò)相關(guān)方面的自動能力鲤拿,在早期,對于網(wǎng)絡(luò)管理員署咽,不得不手動執(zhí)行這些認為任務(wù)近顷,所以它的出現(xiàn)對于網(wǎng)絡(luò)管理員非常吸引。
DHCP建立過程:
DHCP客戶端發(fā)送
DHCP discover
消息(IP地址租用申請)宁否,這個消息是通過廣播方式發(fā)送出去的窒升,所有網(wǎng)絡(luò)中的DHCP服務(wù)器都將接收到這個消息。網(wǎng)絡(luò)中的DHCP服務(wù)器會回應(yīng)一個
DHCP offer
消息(IP地址租用提供)慕匠,由于這個時候客戶端還沒有網(wǎng)絡(luò)地址饱须,所以DHCP offer
也是通過廣播的方式發(fā)送出去的。需要注意的是台谊,由于網(wǎng)絡(luò)中可能存在不止一臺的DHCP服務(wù)器蓉媳,所以譬挚,如果不考慮網(wǎng)絡(luò)丟包的話,客戶端將接收到不止一條的DHCP offer
消息酪呻。那么客戶端會選擇它接收到的第一條DHCP offer
作為獲取配置的服務(wù)器减宣。客戶機向該服務(wù)器發(fā)送
DHCP request
消息。雖然這個時候客戶端已經(jīng)明確知道選擇的DHCP服務(wù)器的地址所在玩荠,但仍將采用廣播的方式發(fā)送DHCP request
消息漆腌,這樣做不僅可以通知選中的服務(wù)器向客戶端分配IP地址,同時也可以通知其他沒有選中的DHCP服務(wù)器不需要再響應(yīng)它的請求阶冈。在DHCP request
消息中將包含客戶端申請的IP地址闷尿。-
DHCP服務(wù)器將回送
DHCP ACK
的響應(yīng)消息對請求報文進行響應(yīng)。
DHCP客戶-服務(wù)器交互
鏈路層
對于一個主機體系結(jié)構(gòu)眼溶,鏈路層的主題部分是在網(wǎng)絡(luò)適配器中實現(xiàn)的(有時也被稱為網(wǎng)絡(luò)接口卡)悠砚。而在網(wǎng)絡(luò)適配器也具有自己的鏈路層地址晓勇。鏈路層的地址有各種不同的叫法:LAN地址(LAN address)堂飞,物理地址(physical address),MAC地址(MAC 地址)绑咱。
既然有了網(wǎng)絡(luò)層ip地址绰筛,為什么還要鏈路層的mac地址?那是因為要保證每層的獨立性描融,假如在鏈路層的上層不是網(wǎng)絡(luò)層铝噩,那么鏈路層該如何尋址?所以引入mac 地址窿克。
那么在網(wǎng)絡(luò)層和鏈路層之間適合轉(zhuǎn)化的呢骏庸。這就是地址解析協(xié)議(ARP,Address Resolution Protocol)的功勞年叮。ARP將一個ip地址解析為MAC地址的時候具被,很多方面與DNS類似。雖然DNS是將主機名解析成ip地址只损。
以上內(nèi)容是最近看了幾本書網(wǎng)絡(luò)書籍的部分總結(jié):
- 《計算機網(wǎng)絡(luò):自頂向下方法》 v6
- 《TCP/IP詳解 卷一:協(xié)議》 v1
剛剛看到一個朋友推薦了一個web頁面請求歷程的拓展閱讀一姿,看了一下不是很全面,就找到了這個A Day in the Life of a Web Page Request跃惫。這篇文章講了在訪問google.com
這個實際情況下叮叹,各個協(xié)議之間是如何分工進行的,如果全部理解的話爆存,那對于網(wǎng)絡(luò)體系結(jié)構(gòu)也會有更深的理解蛉顽。當然,如果手里有《計算機網(wǎng)絡(luò):自頂向下方法》 v6這本書的話先较,可以參考5.7節(jié)携冤,因為那片文章就是這節(jié)的原文遥诉。沒有的話,戳這里下載 (密碼: xsyk)噪叙。