以書中實例為例
- 獲取IP地址及其他網(wǎng)絡(luò)配置
Bob的計算機目前還沒有IP地址咆霜,如何動態(tài)獲取IP地址?
運行動態(tài)主機配置協(xié)議(Dynamic Host Configuration水评,DHCP)艳馒,以從本地的DHCP服務(wù)器獲取一個IP地址以及其他信息寻仗。
Bob計算機上的操作系統(tǒng)生成一個DHCP請求報文,并將這個報文放入目的地端口67(DHCP服務(wù)器)和源端口68(DHCP客戶)的UDP報文段昧穿。該UDP報文段則被放置在一個具有廣播IP目的地地址(255.255.255.255)和源IP地址0.0.0.0的IP數(shù)據(jù)報中勺远,因為此時Bob的計算機還不具有一個IP地址。
該IP數(shù)據(jù)報則被放置在以太網(wǎng)幀中时鸵,目的MAC地址FF:FF:FF:FF:FF:FF胶逢,使該幀將廣播到與交換機連接的所有設(shè)備厅瞎,源MAC地址為Bob計算機的網(wǎng)卡MAC地址00:16:D3:23:68:8A。
包含DHCP請求的廣播以太網(wǎng)幀是第一個有Bob計算機發(fā)送到以太網(wǎng)交換機的幀初坠。該交換機在所有的出端口廣播幀和簸,包括連接到路由器的端口。同時交換機會在交換機表(switch table)中新添加一條記錄碟刺,內(nèi)容包括MAC地址锁保,通往該MAC地址的交換機接口,該記錄放置在表中的時間半沽。
路由器在它的接口(該接口MAC地址00:22:6B:45:1F:1B)接收到該廣播以太網(wǎng)幀爽柒,該幀包含DHCP請求,并且從該以太網(wǎng)幀中抽取出IP數(shù)據(jù)報抄囚。該數(shù)據(jù)報的廣播IP目的地址指示了這個IP數(shù)據(jù)報應(yīng)當(dāng)由在該結(jié)點的高層協(xié)議處理霉赡,因此該數(shù)據(jù)報的載荷(一個UDP報文段)被分解向上到達UDP,從此UDP報文段中抽取出DCHP請求報文。
我們假設(shè)運行在路由器中的DHCP服務(wù)器能夠以CIDR塊68.85.2.0/24分配IP地址月腋,然后分配地址68.85.2.101給Bob計算機挠乳。DHCP服務(wù)器生成一個DHCP ACK報文,包含內(nèi)容
IP地址
DNS服務(wù)器IP地址(68.87.71.226)
默認網(wǎng)關(guān)路由器(第一跳路由)IP地址 68.85.2.1
子網(wǎng)塊(網(wǎng)絡(luò)掩碼) 68.85.2.0/24
包含DHCP ACK報文的以太網(wǎng)幀由路由器發(fā)送給交換機嗓化。因為交換機是自學(xué)習(xí)的,并且先前從Bob計算機收到(包含DHCP請求的)以太網(wǎng)幀谬哀,所以該交換機從交換機表中查詢到通往Bob計算機MAC地址00:22:6B:45:1F:1B的相應(yīng)接口刺覆。
Bob計算機接收到包含DHCP ACk的以太網(wǎng)幀,從該以太網(wǎng)幀中抽取IP數(shù)據(jù)報史煎,從IP數(shù)據(jù)報中抽取UDP報文段谦屑,從UDP報文段中抽取DHCP ACK報文。Bob的計算機DHCP客戶則記錄下它的IP地址和它的DNS服務(wù)器的IP地址篇梭。它還在其IP轉(zhuǎn)發(fā)表中安裝默認網(wǎng)關(guān)的地址氢橙。
如果Bob計算機想向初子網(wǎng)68.85.2.0/24之外的目的地址發(fā)送數(shù)據(jù)報,則先要經(jīng)過默認網(wǎng)關(guān)恬偷。
- DNS & ARP
當(dāng)Bob將www.google.com的URL鍵入其Web瀏覽器時悍手,他開啟了一長串事件,這導(dǎo)致Google主頁最終顯示在其Web瀏覽器上袍患。Bob的Web瀏覽器通過生成一個TCP套接字開始了該過程坦康,套接字用于向www.google.com發(fā)送HTTP請求。為了生成套接字诡延,Bob的計算機機需要知道www.google.com的IP地址滞欠。這就需要DNS協(xié)議提供這種域名到IP地址的轉(zhuǎn)換服務(wù)。
Bob計算機上的操作系統(tǒng)生成一個DNS查詢報文肆良,將字符串www.google.com放入DNS報文的問題段中筛璧。該DNS報文則放置在一個具有53號(DNS服務(wù)器)目的端口的UDP報文段中赤兴。該UDP報文段則被放入具有IP目的地址68.87.71.226(在DHCP ACK返回的DNS服務(wù)器地址)和源地址68.85.2.101的IP數(shù)據(jù)報中。
Bob的計算機則將包含DNS請求報文的數(shù)據(jù)報放入一個以太網(wǎng)幀中隧哮。該幀將發(fā)送到(在鏈路層尋址)Bob學(xué)校網(wǎng)絡(luò)中的網(wǎng)關(guān)路由器桶良。目前僅從DHCP ACK報文知道學(xué)校網(wǎng)關(guān)路由器的IP地址65.85.2.1,但不知道網(wǎng)關(guān)路由器的MAC地址沮翔。此時就需要ARP協(xié)議提供IP地址到MAC地址的轉(zhuǎn)換服務(wù)陨帆。
2.1 ARP
Bob計算機生成一個具有目的IP地址68.85.2.1(默認網(wǎng)關(guān))的ARP查詢報文,將該ARP報文放置在一個具有廣播目的地址FF:FF:FF:FF:FF:FF的以太網(wǎng)幀中采蚀,并向交換機發(fā)送該以太網(wǎng)幀疲牵,交換機將該幀交付給所有連接的設(shè)備,包括網(wǎng)關(guān)路由器榆鼠。
網(wǎng)關(guān)路由器在通往學(xué)校網(wǎng)絡(luò)的接口上接收到包含該ARP查詢報文的幀纲爸,發(fā)現(xiàn)在ARP報文中的目標(biāo)地址68.85.2.1與其接口IP地址相同,網(wǎng)關(guān)路由器此時將準(zhǔn)備一個ARP回答妆够,指示IP地址68.85.2.1對應(yīng)的MAC地址為00:22:6B:45:1F:1B识啦。它將ARP回答放在一個以太網(wǎng)幀中,其目的地址為00:16:D3:23:68:8A(Bob的計算機)神妹,并向交換機發(fā)送該幀颓哮,再由交換機將幀交付給Bob的計算機。
Bob計算機收到包含ARP回到報文的幀鸵荠,并從ARP回答報文中抽取網(wǎng)關(guān)路由器的MAC地址(00:22:6B:45:1F:1B)冕茅。并在本地ARP表中創(chuàng)建一條新的記錄。
現(xiàn)在蛹找,Bob的計算機能夠使包含DNS查詢報文的以太網(wǎng)幀尋址到網(wǎng)關(guān)路由器的MAC地址了姨伤。
2.2 DNS
網(wǎng)關(guān)路由器接收該幀并抽取包含DNS查詢的IP數(shù)據(jù)報。路由器查找該數(shù)據(jù)報的目的地址(68.87.71.226)庸疾,并根據(jù)其轉(zhuǎn)發(fā)表決定該數(shù)據(jù)報應(yīng)道發(fā)送到Comcast網(wǎng)絡(luò)中最左邊的路由器乍楚。
Comcast最左邊的路由器接到該幀,抽取IP數(shù)據(jù)報彼硫,檢查該數(shù)據(jù)報的目的地址(68.87.71.226)炊豪,并根據(jù)其轉(zhuǎn)發(fā)表確定接口凌箕,經(jīng)過該接口朝著DNS服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)報拧篮,而轉(zhuǎn)發(fā)表已根據(jù)Comcast的域內(nèi)協(xié)議(如RIP、OSPF或IS-IS)以及因特網(wǎng)的域間協(xié)議BGP所填寫牵舱。
最終包含DNS查詢的IP數(shù)據(jù)報到達了DNS服務(wù)器串绩。DNS服務(wù)器抽取出DNS查詢報文,在它的DNS數(shù)據(jù)庫中查找域名www.google.com芜壁,找到包含對應(yīng)www.google.com的IP地址(64.233.169.105)的DNS源記錄礁凡。該DNS服務(wù)器形成了一個包含這種主機名到IP地址映射的DNS回答報文高氮,將該DNS回答報文放入UDP報文段中,該報文段放入尋址到Bob計算機的IP數(shù)據(jù)報中顷牌。該數(shù)據(jù)報將通過Comcast網(wǎng)絡(luò)反向轉(zhuǎn)發(fā)到學(xué)校的路由器剪芍,并從這里經(jīng)過以太網(wǎng)交換機到Bob計算機。
Bob計算機從DNS報文抽取出服務(wù)器www.google.com的IP地址窟蓝。
經(jīng)過大量的工作后罪裹,Bob的計算機終于可以與www.google.com服務(wù)器通信了。
- Web客戶——服務(wù)器交互:TCP和HTTP
Bob計算機有了www.google.com的IP地址运挫,它就能夠生成TCP套接字状共,該套接字將用于向www.google.com發(fā)送HTTP GET報文。當(dāng)Bob生成TCP套接字時谁帕,在Bob計算機中的TCP必須首先與www.google.com中的TCP執(zhí)行三次握手峡继。Bob計算機首先生成一個具有目的端口80(針對HTTP)的TCP SYN報文段,將該TCP報文段放置在具有目的IP地址64.233.169.105(www.google.com)的IP數(shù)據(jù)報中匈挖,將該數(shù)據(jù)報放置在MAC地址為00:22:6B:45:1F:1B(網(wǎng)關(guān)路由器)的幀中碾牌,并向交換機發(fā)送該幀。
在學(xué)校網(wǎng)絡(luò)儡循、Comcast網(wǎng)絡(luò)和Google網(wǎng)絡(luò)中的路由器朝著www.google.com轉(zhuǎn)發(fā)包含TCP SYN的數(shù)據(jù)報小染,使用每臺路由器中的轉(zhuǎn)發(fā)表。
最終贮折,包含TCP SYN的數(shù)據(jù)報到達www.google.com裤翩。Google服務(wù)器從數(shù)據(jù)報抽取出TCP SYN報文并分解到與端口80相聯(lián)系的套接字。對于Google HTTP服務(wù)器和Bob計算機之間的TCP連接生成一個連接套接字调榄。產(chǎn)生一個TCP SYNACK報文段(SYNACK segment)踊赠,將其放入一個向Bob計算機尋址的數(shù)據(jù)報中。包含TCP SYNACK報文段的數(shù)據(jù)報經(jīng)過Google每庆、Comcast和學(xué)校網(wǎng)絡(luò)筐带,最終到達Bob計算機的以太網(wǎng)卡。
Bob的Web瀏覽器生成HTTP GET報文缤灵。HTTP GET報文則寫入套接字伦籍,其中GET報文成為一個TCP報文段的載荷,該TCP報文段則被放進一個數(shù)據(jù)報中腮出,并交付到www.google.com帖鸦。
在www.google.com的HTTP服務(wù)器從TCP套接字讀取HTTP GET報文,生成一個HTTP響應(yīng)報文胚嘲,將請求的Web頁面內(nèi)容放入HTTP響應(yīng)體重作儿,并將報文發(fā)送進TCP套接字中。包含HTTP響應(yīng)報文的數(shù)據(jù)報經(jīng)過Google馋劈、Comcast和學(xué)校網(wǎng)絡(luò)轉(zhuǎn)發(fā)攻锰,到達Bob計算機晾嘶。Bob的Web瀏覽器從套接字讀取HTTP響應(yīng),從HTTP響應(yīng)體中抽取Web網(wǎng)頁的HTML娶吞,最終渲染出頁面效果垒迂。
客戶端發(fā)起TCP連接
客戶端
CLOSED -> (發(fā)送SYN)SYN_SENT -> (接收到SYN&ACK 發(fā)送ACK)ESTABLISHED
服務(wù)器端
CLOSED -> (服務(wù)器應(yīng)用創(chuàng)建一個監(jiān)聽套接字)LISTEN -> (接收到SYN并發(fā)送SYN&ACK)SYN_RCVD -> (接收到ACK 不發(fā)送)ESTABLISHED
其中一端主動關(guān)閉TCP連接
主動關(guān)閉TCP一端
ESTABLISHED -> (發(fā)送FIN)FIN_WAIT1 -> (接收到ACK 不發(fā)送)FIN_WAIT2 -> (接收到FIN 發(fā)送ACK)TIME_WAIT -> CLOSED
被動關(guān)閉TCP一端
ESTABLISHED -> (接收到FIN 發(fā)出ACK)CLOSE_WAIT -> (發(fā)出FIN)LAST_ACK -> (接收到ACK 不發(fā)送)CLOSED
- 非持續(xù)鏈接HTTP和持續(xù)鏈接HTTP
非持續(xù)鏈接(non-persistent connection)HTTP
必須為每一個請求的對象建立和維護一個全新的連接。對于每個連接妒蛇,在客戶和服務(wù)器中都要分配TCP的緩沖區(qū)和保持TCP變量娇斑。每一個對象經(jīng)理兩倍RTT(Round-Trip Time)的交付時延,一個用于創(chuàng)建TCP材部,另一個RTT用于請求和接收一個對象毫缆。
持續(xù)鏈接(persistent connection)
服務(wù)器在發(fā)送響應(yīng)后保持該TCP連接打開。在相同的客戶與服務(wù)器之間的后續(xù)請求和響應(yīng)報文能夠通過相同的連接進行傳送乐导。一個完整的Web頁面可以用單個持續(xù)TCP連接進行傳送苦丁,甚至位于同一臺服務(wù)器的多個Web頁面可以在單個持續(xù)TCP連接中進行傳送。如果一條持續(xù)連接經(jīng)過一定時間間隔仍未被使用物臂,HTTP服務(wù)器就關(guān)閉該連接旺拉。