前言
本書以探索之旅的形式,從在瀏覽器中輸入網址開始,一路追蹤了到顯示出網頁的內容為止的整個過程,以圖配文,講解了網絡的全貌,並重點介紹了實際的網絡設備和軟件是如何工作的。
這本書的整體架構如下圖:
第一章 瀏覽器生成消息
1.生成HTTP請求消息
瀏覽器要做的第一步工作就是對URL進行解析,從而生成發送給Web服務器的請求消息。
解析過程如下圖:
HTTP 的基本思路,就是向服務器發送請求,請求包含了方法和 URL,服務器給予響應,包含了響應碼和響應體等。
請求方法有:get、post、put、delete 等。
請求消息包含:請求頭、消息頭、消息體。
響應消息包含:狀態碼、消息頭、消息體。
1條請求消息中只能寫1個URI。如果需要獲取多個文件,必須對每個文件單獨發送1條請求。
2.向DNS服務器查詢Web服務器的IP地址
在委托操作系統發送消息時,必須要提供的不是通信對象的域名,而是它的IP地址。因此,在生成HTTP消息之后,下一個步驟就是根據域名查詢IP地址。
IP地址的表示方法如下圖:
子網掩碼表示網絡號與主機號之間的邊界。
主機號部分全部為0代表整個子網,主機號部分全部為1代表向子網上所有設備發送包,即廣播。
為了方便記憶,人類用域名,路由器用ip,為了彌補兩者的差距,於是 DNS服務器出現了。
我們計算機上都有DNS客戶端,也稱為DNS解析器,DNS解析器向DNS服務器發送請求並獲取響應,解析響應體中的ip地址存入內存中。
DNS解析器,就是一個程序,它包含在操作系統的Socket庫中,庫就是一堆通用程序組件的集合,Socket庫也是一種庫,其中包含的程序組件可以讓其他的應用程序調用操作系統的網絡功能[插圖],而DNS解析器就是這個庫中的其中一種程序組件。
簡言之:根據域名查詢IP地址時,瀏覽器會使用Socket庫中的解析器。
3.全世界DNS服務器的大接力
當DNS解析器向服務器發送請求時,DNS服務器會從域名與IP地址的對照表中查找相應的記錄,並返回IP地址
DNS服務器中的所有信息都是按照域名以分層次的結構來保存的,一個域的信息是作為一個整體存放在DNS服務器中的。
互聯網中有數萬台DNS服務器,根域的DNS服務器中保管着com、jp等的DNS服務器的信息。由於上級DNS服務器保管着所有下級DNS服務器的信息,所以我們可以從根域開始一路往下順藤摸瓜找到任意一個域的DNS服務器。
分配給根域DNS服務器的IP地址在全世界僅有13個。
找到目標DNS服務器的過程如下圖:
在真實的互聯網中,一台DNS服務器可以管理多個域的信息。
此外,有時候並不需要從最上級的根域開始查找,因為DNS服務器有一個緩存功能,可以記住之前查詢過的域名。
4.委托協議棧發送消息
向操作系統內部的協議棧發出委托時,需要按照指定的順序來調用Socket庫中的程序組件。
收發數據的整體思路如下圖:
建立管道的關鍵在於管道兩端的數據出入口,這些出入口稱為套接字。我們需要先創建套接字,然后再將套接字連接起來形成管道。
綜上所述,收發數據的操作分為若干個階段,可以大致總結為以下4個。
-
(1)創建套接字(創建套接字階段)
-
(2)將管道連接到服務器端的套接字上(連接階段)
-
(3)收發數據(通信階段)
-
(4)斷開管道並刪除套接字(斷開階段)
首先是套接字創建階段。客戶端創建套接字的操作非常簡單,只要調用Socket庫中的socket程序組件就可以了.
接下來,應用程序通過調用Socket庫中的名為connect的程序組件來連接起來。這里的要點是當調用connect時,需要指定描述符、服務器IP地址和端口號這3個參數.
應用程序需要在內存中准備好要發送的數據。根據用戶輸入的網址生成的HTTP請求消息就是我們要發送的數據。接下來,當調用write時,需要指定描述符和發送數據,然后協議棧就會將數據發送到服務器。
當消息返回后,需要執行的是接收消息的操作。接收消息的操作是通過Socket庫中的read程序組件委托協議棧來完成的
當瀏覽器收到數據之后,收發數據的過程就結束了。接下來,我們需要調用Socket庫的close程序組件進入斷開階段。最終,連接在套接字之間的管道會被斷開,套接字本身也會被刪除。
第二章 用電信號傳輸 TCP/IP 數據
TCP/IP軟件采用分層結構,上層會向下層逐層委派工作,如下圖:
應用程序的下面是Socket庫,其中包括解析器。
再下面就是操作系統內部了,其中包括協議棧。協議棧的上半部分有兩塊,分別是負責用TCP協議收發數據的部分和負責用UDP協議收發數據的部分
瀏覽器、郵件等一般應用程序收發數據時用TCP;DNS查詢等收發較短的控制數據時用UDP。
下面一半是用IP協議控制網絡包收發操作的部分。此外,IP中還包括ICMP協議和ARP協議。ICMP用於告知網絡包傳送過程中產生的錯誤以及各種控制消息,ARP用於根據IP地址查詢相應的以太網MAC地址。
IP下面的網卡驅動程序負責控制網卡硬件,而最下面的網卡則負責完成實際的收發操作,也就是對網線中的信號執行發送和接收的操作。
1.創建套接字
首先是創建套接字的階段,應用程序調用socket申請創建套接字,協議棧根據應用程序的申請執行創建套接字的操作。
在這個過程中,協議棧首先會分配用於存放一個套接字所需的內存空間。
套接字剛剛創建時,數據收發操作還沒有開始,因此需要在套接字的內存空間中寫入表示這一初始狀態的控制信息。到這里,創建套接字的操作就完成了。
2.連接服務器
創建套接字之后,應用程序(瀏覽器)就會調用connect,隨后協議棧會將本地的套接字與服務器的套接字進行連接。
我們需要把服務器的IP地址和端口號等信息告知協議棧,這是連接操作的目的之一。
連接操作的第一步是在TCP模塊處創建表示連接控制信息的頭部。
通過TCP頭部中的發送方和接收方端口號可以找到要連接的套接字。
3.收發數據
數據收發操作是從應用程序調用write將要發送的數據交給協議棧開始的。
應用程序在調用write時會指定發送數據的長度,在協議棧看來,要發送的數據就是一定長度的二進制字節序列而已。
其次,協議棧並不是一收到數據就馬上發送出去,而是會將數據存放在內部的發送緩沖區中,並等待應用程序的下一段數據。
協議棧會根據一個叫作MTU的參數來進行判斷每個網絡包能容納的數據長度。
MTU表示一個網絡包的最大長度,在以太網中一般是1500字節。
MTU是包含頭部的總長度,因此需要從MTU減去頭部的長度,然后得到的長度就是一個網絡包中所能容納的最大數據長度,這一長度叫作MSS。當從應用程序收到的數據長度超過或者接近MSS時再發送出去,就可以避免發送大量小包的問題了。
對較大的數據進行拆分
應用程序的數據一般都比較大,因此TCP會按照網絡包的大小對數據進行拆分。
使用ACK號確認網絡包已收到
序號和ACK號的用法如下圖:
通過“序號”和“ACK號”可以確認接收方是否收到了網絡包。
根據網絡包平均往返時間調整ACK號等待時間
具體來說,TCP會在發送數據的過程中持續測量ACK號的返回時間,如果ACK號返回變慢,則相應延長等待時間;相對地,如果ACK號馬上就能返回,則相應縮短等待時間
使用窗口有效管理ACK號
所謂滑動窗口,就是在發送一個包之后,不等待ACK號返回,而是直接發送后續的一系列包。這樣一來,等待ACK號的這段時間就被有效利用起來了。
接收HTTP響應消息
首先,瀏覽器在委托協議棧發送請求消息之后,會調用read程序來獲取響應消息。
首先,協議棧會檢查收到的數據塊和TCP頭部的內容,判斷是否有數據丟失,如果沒有問題則返回ACK號。然后,協議棧將數據塊暫存到接收緩沖區中,並將數據塊按順序連接起來還原出原始的數據,最后將數據交給應用程序。
4. 從服務器斷開並刪除套接字
斷開連接的交互過程如下圖:
刪除套接字
和服務器的通信結束之后,用來通信的套接字也就不會再使用了,這時我們就可以刪除這個套接字了。不過,套接字並不會立即被刪除,而是會等待一段時間之后再被刪除。
數據收發操作小結
數據收發操作的第一步是創建套接字。
創建套接字之后,客戶端會向服務器發起連接操作。首先,客戶端會生成一個SYN為1的TCP包並發送給服務器
當這個包到達服務器之后,服務器會返回一個SYN為1的TCP包
當這個包到達客戶端時,客戶端會向服務器返回一個包含表示確認的ACK號的TCP包
雙方進入數據收發階段:
以Web為例,首先客戶端會向服務器發送請求消息。TCP會將請求消息切分成一定大小的塊,並在每一塊前面加上TCP頭部,然后發送給服務器。
當服務器收到客戶端的請求消息后,會向客戶端返回響應消息,這個過程和剛才的過程正好相反。
服務器的響應消息發送完畢之后,數據收發操作就結束了,這時就會開始執行斷開操作,
服務器先發送一個FIN為1的TCP包,然后客戶端返回一個表示確認收到的ACK號,接下來,雙方還會交換一組方向相反的FIN為1的TCP包,和包含ACK號的TCP包。最后,在等待一段時間后,套接字會被刪除。
5.IP與以太網的包收發操作
包是由頭部和數據兩部分構成的。頭部包含目的地址等控制信息,可以把它理解為快遞包裹的面單;頭部后面就是委托方要發送給對方的數據,也就相當於快遞包裹里的貨物。
網絡包的結構如下圖:
路由器和集線器
路由器和集線器是兩種不同的轉發設備,它們在傳輸網絡包時有着各自的分工。
-
(1)路由器根據目標地址判斷下一個路由器的位置
-
(2)集線器在子網中將網絡包傳輸到下一個路由。
實際上,集線器是按照以太網規則傳輸包的設備,而路由器是按照IP規則傳輸包的設備。
具體來說,TCP/IP 包包含如下兩個頭部。
-
(a)MAC頭部(用於以太網協議)
-
(b)IP頭部(用於IP協議)
IP網絡包的傳輸方式如下圖:
P模塊負責添加如下兩個頭部。
-
(1) MAC頭部:以太網用的頭部,包含MAC地址
-
(2)IP頭部:IP用的頭部,包含IP地址
無論要收發的包是控制包還是數據包,IP對各種類型的包的收發操作都是相同的。
IP頭部的“接收方IP地址”填寫通信對象的IP地址。發送方IP地址需要判斷發送所使用的網卡,並填寫該網卡的IP地址。
MAC頭部的開頭是接收方和發送方的MAC地址,IP地址的長度為32比特,而MAC地址為48比特。
通過ARP查詢目標路由器的MAC地址
ARP,地址轉換協議,通過 IP 地址尋找 MAC 地址,過程如下圖:
以太網的基本知識
以太網是一種為多台計算機能夠彼此自由和廉價地相互通信而設計的通信技術,它的原型如圖所示。從圖上不難看出,這種網絡的本質其實就是一根網線。
將IP包轉換成電或光信號發送出去
將數字信息轉換為電或光信號,才能在網線上傳輸,負責執行這一操作的是網卡,但網卡也無法單獨工作,要控制網卡還需要網卡驅動程序。
網卡的ROM中保存着全世界唯一的MAC地址,這是在生產網卡時寫入的。網卡中保存的MAC地址會由網卡驅動程序讀取並分配給MAC模塊。
給網絡包再加3個控制數據
網卡是如何將包轉換成電信號並發送到網線中的?
網卡驅動從IP模塊獲取包之后,會將其復制到網卡內的緩沖區中,然后向MAC模塊發送發送包的命令。
接下來就輪到MAC模塊進行工作了。首先,MAC模塊會將包從緩沖區中取出,並在開頭加上報頭和起始幀分界符,在末尾加上用於檢測錯誤的幀校驗序列,如下圖:
報頭用來確定包的讀取時機,SFD用來確定幀的起始位置。
末尾的FCS(幀校驗序列)用來檢查包傳輸過程中因噪聲導致的波形紊亂、數據錯誤,它是一串32比特的序列。
向集線器發送網絡包
加上報頭、起始幀分界符和FCS之后,我們就可以將包通過網線發送出去了。發送信號的操作分為兩種:
-
一種是使用集線器的半雙工模式
-
另一種是使用交換機的全雙工模式。
接收返回包
在使用集線器的半雙工模式以太網中,一台設備發送的信號會到達連接在集線器上的所有設備。
如果FCS校驗沒有問題,接下來就要看一下MAC頭部中接收方MAC地址與網卡在初始化時分配給自己的MAC地址是否一致,如果接收方MAC地址和自己MAC地址一致,則將包放入緩沖區中。
將服務器的響應包從IP傳遞給TCP
服務器返回的包的以太類型應該是0800,因此網卡驅動會將其交給TCP/IP協議棧來進行處理。
接下來就輪到IP模塊先開始工作了,第一步是檢查IP頭部,確認格式是否正確。如果格式沒有問題,下一步就是查看接收方IP地址。
如果接收到的包是經過分片的,那么IP模塊會將它們還原成原始的包。
到這里,IP模塊的工作就結束了,接下來包會被交給TCP模塊。TCP模塊會根據IP頭部中的接收方和發送方IP地址,以及TCP頭部中的接收方和發送方端口號來查找對應的套接字。找到對應的套接字之后,就可以根據套接字中記錄的通信狀態,執行相應的操作了。
6. UDP協議的收發操作
像DNS查詢等交換控制信息的操作基本上都可以在一個包的大小范圍內解決,這種場景中就可以用UDP來代替TCP。
UDP沒有TCP的接收確認、窗口等機制,因此在收發數據之前也不需要交換控制信息,也就是說不需要建立和斷開連接的步驟,只要在從應用程序獲取的數據前面加上UDP頭部,然后交給IP進行發送就可以了。
接收也很簡單,只要根據IP頭部中的接收方和發送方IP地址,以及UDP頭部中的接收方和發送方端口號,找到相應的套接字並將數據交給相應的應用程序就可以了。
除此之外,UDP協議沒有其他功能了,遇到錯誤或者丟包也一概不管。
第3章 從網線到網絡設備:集線器、交換機和路由器
1. 信號在網線和集線器中傳輸
網絡包從客戶端計算機發出之后,要經過集線器、交換機和路由器最終進入互聯網。實際上,我們家里用的路由器已經集成了集線器和交換機的功能。
網卡中的PHY(MAU)模塊負責將包轉換成電信號,信號通過RJ-45接口進入雙絞線。
以太網信號的本質是正負變化的電壓,可以認為網卡的PHY(MAU)模塊就是一個從正負兩個信號端子輸出信號的電路。
信號在網線的傳輸過程中,能量會逐漸損失。網線越長,信號衰減就越嚴重。
局域網網線使用的是雙絞線,其中“雙絞”的意思就是以兩根信號線為一組纏繞在一起,這種擰麻花一樣的設計是為了抑制噪聲的影響。
當信號到達集線器后,會被廣播到整個網絡中。
以太網的基本架構就是將包發到所有的設備,然后由設備根據接收方MAC地址來判斷應該接收哪些包,而集線器就是這一架構的忠實體現,它就是負責按照以太網的基本架構將信號廣播出去。
信號到達集線器的PHY(MAU)模塊后,會進入中繼電路。中繼電路的基本功能就是將輸入的信號廣播到集線器的所有端口上。
2. 交換機的包轉發操作
首先,信號到達網線接口,並由PHY(MAU)模塊進行接收,這一部分和集線器是相同的。
接下來,PHY(MAU)模塊會將網線中的信號轉換為通用格式,然后傳遞給MAC模塊。
MAC模塊將信號轉換為數字信息,然后通過包末尾的FCS校驗錯誤,如果沒有問題則存放到緩沖區中。
這部分操作和網卡基本相同。
網線接口和后面的電路部分加在一起稱為一個端口,也就是說交換機的一個端口就相當於計算機上的一塊網卡,但和網卡不同,交換機的端口不具有MAC地址。
交換機根據MAC地址表查找MAC地址,然后將信號發送到相應的端口。
交換機會自行更新或刪除地址表中的記錄,不需要手動維護。
全雙工模式是交換機特有的工作模式,它可以同時進行發送和接收操作,集線器不具備這樣的特性。
交換機可以同時轉發多個包。
3. 路由器的包轉發操作
路由器是基於IP設計的,而交換機是基於以太網設計的。
路由器包括轉發模塊和端口模塊兩部分:
-
轉發模塊負責判斷包的轉發目的地
-
端口模塊負責包的收發操作。
路由器的結構如下圖:
路由器的基本原理
路由器在轉發包時,首先會通過端口將發過來的包接收進來,這一步的工作過程取決於端口對應的通信技術。
對於以太網端口來說,就是按照以太網規范進行工作,而無線局域網端口則按照無線局域網的規范工作,總之就是委托端口的硬件將包接收進來。
接下來,轉發模塊會根據接收到的包的IP頭部中記錄的接收方IP地址,在路由表中進行查詢,以此判斷轉發目標。
然后,轉發模塊將包轉移到轉發目標對應的端口,端口再按照硬件的規則將包發送出去,也就是轉發模塊委托端口模塊將包發送出去的意思。
路由器的各個端口都具有MAC地址和IP地址。
路由器根據“IP地址”判斷轉發目標。
路由器會忽略主機號,只匹配網絡號。
路由器的端口都具有MAC地址,只接收與自身地址匹配的包,遇到不匹配的包則直接丟棄。
通過路由器轉發的網絡包,其接收方MAC地址為路由器端口的MAC地址。
路由表中子網掩碼為0.0.0.0的記錄表示“默認路由”。
IP頭部中的TTL(Time to Live,生存時間)字段表示包的有效期,包每經過一個路由器的轉發,這個值就會減1,當這個值變成0時,就表示超過了有效期,這個包就會被丟棄。
發送方在發送包時會將TTL設為64或128,也就是說包經過這么多路由器后就會“壽終正寢”。
路由器判斷下一個轉發目標的方法如下。
●如果路由表的網關列內容為IP地址,則該地址就是下一個轉發目標。
●如果路由表的網關列內容為空,則IP頭部中的接收方IP地址就是下一個轉發目標。
路由器也會使用ARP來查詢下一個轉發目標的MAC地址。
路由器與交換機的關系
給包加上MAC頭部並發送,從本質上說是將IP包裝進以太網包的數據部分中,委托以太網去傳輸這些數據。IP協議本身沒有傳輸包的功能,因此包的實際傳輸要委托以太網來進行。
路由器是基於IP設計的,而交換機是基於以太網設計的,因此IP與以太網的關系也就是路由器與交換機的關系。
簡單來說,IP (路由器)負責將包發送給通信對象這一整體過程,而其中將包傳輸到下一個路由器的過程則是由以太網(交換機)來負責的。
4. 路由器的附加功能
通過地址轉換有效利用IP地址
在內網中可用作私有地址的范圍僅限以下這些:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
當公司內網和互聯網連接的時候,需要將公司內網分成兩個部分,一部分是對互聯網開放的服務器,另一部分是公司內部設備。
其中對互聯網開放的部分分配公有地址,可以和互聯網直接進行通信。相對地,內網部分則分配私有地址,內網中的設備不能和互聯網直接收發網絡包,而是通過一種特別的機制進行連接,這個機制就叫地址轉換。
地址轉換的基本原理
地址轉換的基本原理是在轉發網絡包時對IP頭部中的IP地址和端口號進行改寫。
現在我們使用的地址轉換機制是同時改寫地址和端口號的,為了提高公有地址的利用率。
從互聯網訪問公司內網
除非公司主動允許,否則是無法從互聯網向公司內網發送網絡包的。這種機制具有防止非法入侵的效果。
只要事先將地址和端口的關聯信息添加到地址轉換設備的對應表中,就可以從互聯網訪問內網中的設備了。
路由器的包過濾功能
包過濾就是在對包進行轉發時,根據MAC頭部、IP頭部、TCP頭部的內容,按照事先設置好的規則決定是轉發這個包,還是丟棄這個包。
我們通常說的防火牆設備或軟件,大多數都是利用這一機制來防止非法入侵的。
第四章 通過接入網進入互聯網內部
1. ADSL接入網的結構和工作方式
和家庭、公司網絡一樣,互聯網也是通過路由器來轉發包的,而且路由器的基本結構和工作方式也並沒有什么不同。因此,我們可以將互聯網理解為家庭、公司網絡的一個放大版。
距離的不同和路由的維護方式,就是互聯網與家庭、公司網絡之間最主要的兩個不同點。
互聯網接入路由器發送網絡包的操作和以太網路由器有一點不同,互聯網接入路由器是按照接入網規則來發送包的。
所謂接入網,就是指連接互聯網與家庭、公司網絡的通信線路。一般家用的接入網方式包括ADSL、FTTH、CATV、電話線、ISDN等.
互聯網接入路由器會在網絡包前面加上MAC頭部、PPPoE頭部、PPP頭部總共3種頭部,然后發送給ADSL Modem (PPPoE方式下)。
ADSL Modem將包拆分成信元,並轉換成電信號發送給分離器。
ADSL Modem采用了一種用圓滑波形(正弦波)對信號進行合成來表示0和1的技術,這種技術稱為調制。
調制有很多方式,ADSL采用的調制方式是振幅調制(ASK)和相位調制(PSK)相結合的正交振幅調制(QAM)方式。
ADSL通過使用多個波來提高速率
ADSL通過多個波增加能表示的比特數來提高速率的。
ADSL技術中,上行方向(用戶到互聯網)和下行方向(互聯網到用戶)的傳輸速率是不同的,原因也在這里。如果上行使用26個頻段,下行則可以使用95個或者223個頻段,波的數量不同,導致了上下行速率不同。
分離器的作用
ADSL Modem將信元轉換為電信號之后,信號會進入一個叫作分離器的設備,然后ADSL信號會和電話的語音信號混合起來一起從電話線傳輸出去。
通過分離器將傳入的信號分離,以確保ADSL信號不會傳入電話機。具體來說,分離器的功能是將一定頻率以上的信號過濾掉,也就是過濾掉了ADSL使用的高頻信號,這樣一來,只有電話信號才會傳入電話機。
從用戶到電話局
從分離器出來,就是插電話線的接口,信號從這里出來之后,會通過室內電話線,然后到達大樓的IDF和MDF,外面的電話線在這里和大樓內部的室內電話線相連接。
通過配線盤之后,信號會到達保安器。
保安器是為了防止雷電等情況下電話線中產生過大電流的一種保護裝置,內部有保險絲。
接下來,信號會進入電線桿上架設的電話電纜。
在電話局附近,電話線都是埋在地下的。
由於電話局附近的地下電纜很多,集中埋設電纜的地方就形成了一條地道,這部分稱為電纜隧道。
通過電纜隧道進入電話局后,電纜會逐根連接到電話局的MDF上。
通過DSLAM到達BAS
信號通過電話線到達電話局之后,會經過配線盤、分離器到達DSLAM。在這里,電信號會被還原成數字信息——信元。
信元從DSLAM出來之后,會到達一個叫作BAS的包轉發設備。
BAS和DSLAM一樣,都具有ATM接口,可以接收ATM信元,還可以將接收到的ATM信元還原成原始的包。
BAS負責將ATM信元還原成網絡包並轉發到互聯網內部。
2. 光纖接入網(FTTH)
...
4. 跨越運營商的網絡包
互聯網內部使用BGP機制在運營商之間交換路由信息。
第五章 服務器端的局域網中有什么玄機
2. 防火牆的結構和原理
防火牆的基本思路:即只允許發往特定服務器中的特定應用程序的包通過,然后屏蔽其他的包。
包過濾方式的防火牆可根據接收方IP地址、發送方IP地址、接收方端口號、發送方端口號、控制位等信息來判斷是否允許某個包通過。
3. 通過將請求平均分配給多台服務器來平衡負載
DNS 輪詢
當訪問服務器時,客戶端需要先向DNS服務器查詢服務器的IP地址,如果在DNS服務器中填寫多個名稱相同的記錄,則每次查詢時DNS服務器都會按順序返回不同的IP地址。
負載均衡器
用於對多台Web服務器分配訪問的負載均衡器:
負載均衡器就可以通過這些信息來作出判斷,將一系列相關的請求發送到同一台Web服務器,對於不相關的請求則發送到負載較低的服務器了。
4. 使用緩存服務器分擔負載
緩存服務器是一台通過代理機制對數據進行緩存的服務器。
代理介於Web服務器和客戶端之間,具有對Web服務器訪問進行中轉的功能。當進行中轉時,它可以將Web服務器返回的數據保存在磁盤中,並可以代替Web服務器將磁盤中的數據返回給客戶端。
存服務器和負載均衡器一樣,需要代替Web服務器被注冊到DNS服務器中。
第六章 請求到達web服務器,響應返回瀏覽器
通過客戶端IP地址、客戶端端口號、服務器IP地址、服務器端口號這4種信息可以確定某個套接字。
使用描述符來指代套接字的原因如下。(1)等待連接的套接字中沒有客戶端IP地址和端口號(2)使用描述符這一種信息比較簡單。
2. 服務器的接受操作
- 服務器將接收到的電信號還原為數字信息(網卡)。
網卡的 MAC 模塊將網絡包從信號還原為數字信息,校驗FCS並存入緩沖區。
網卡驅動會根據MAC頭部判斷協議類型,並將包交給相應的協議棧。
-
協議棧的IP模塊會檢查IP頭部,(1)判斷是不是發給自己的;(2)判斷網絡包是否經過分片;(3)將包轉交給TCP模塊或UDP模塊。
-
如果收到的是發起連接的包,則TCP模塊會(1)確認TCP頭部的控制位SYN; (2)檢查接收方端口號;(3)為相應的等待連接套接字復制一個新的副本;(4)記錄發送方IP地址和端口號等信息。
-
收到數據包時,TCP模塊會(1)根據收到的包的發送方IP地址、發送方端口號、接收方IP地址、接收方端口號找到相對應的套接字;(2)將數據塊拼合起來並保存在接收緩沖區中;(3)向客戶端返回ACK。
每天學習一點點,每天進步一點點。