簡介
- 《網絡是怎樣連接的》是一本計算機網絡入門書籍,中級從業者可以查漏補缺,梳理凌亂的計算機網絡知識,了解網絡全貌。
- 書中從打開瀏覽器,在地址欄中輸入網址開始講解,計算機是如何處理網址信息,最后又是如何把網絡信息顯示在瀏覽器中。
- 書中所涵蓋的網絡知識比較全面,但只是點到為止,不然這A5大的一本書,也不可能330幾頁就能講完,要知道,計算機網絡是一個很龐大的系統,雖然發展史可能才數十年,但是能支撐這全球網絡設備通信,遠比想象的要復雜,但話又說回來,任何復雜的知識只要拆解的足夠細,只要有點學習能力,都能搞懂。
- 所以我覺得這本書對各部分的網絡知識分解和講解都是恰到好處。既能了解網絡全貌,又能了解各個環節所涉及到的相關知識,并以提問的方式引發讀者思考。
- 這本書主要內容都集中在前兩個章節,畢竟HTTP協議和協議棧相關協議內容都很復雜,三四五章節主要是對網絡包和信號傳輸過程進行講解,最后一個章節主要是描述了服務器的工作原理以及與客戶端的一些差異。
正文
一圖瀏覽全書(摘自書中序第16頁)
如圖,從打開瀏覽器輸入網址開始,共分這樣六步最終把網絡內容顯示在瀏覽器上,每一步分為一個章節展開講解。
第一章 瀏覽器生成消息
首先會對瀏覽器中輸入的網址(URL,Uniform Resource Locator,統一資源定位符)進行解析,分為域名和文件路徑,以圖中為例:http://www.lab.glasscom.com/simple1.htm
- 請求協議:超文本傳輸協議
http
,Hypertext Transfer Protocol,請求協議還有文件傳輸ftp
、郵件mailto
、文件file
、新聞news
- 域名:
www.lab.glasscom.com
,域名也有層次結構,根據句點.
分割,分為根域和子域,通常根域被省略不寫,完整的域名應該在最后再追加一個句點.
。
全世界根域服務器只有13個
- 文件路徑:
/simple1.htm
是web服務器中的文件路徑,這部分通常被稱為URI(Uniform Resource Identifier統一資源標識符),也就是要訪問的目標,這部分也可以是其他CGI程序(web服務器以外的程序) - 方法和端口號:這里有兩個個隱藏的部分,首先是請求方法這里用的是
GET
方法,請求參數拼接在URL中,需要注意的是GET方法只能傳遞幾百個字節大小的數據,還有一個經常用的是POST
方法,請求參數是以表單的形式上傳,還有其他方法例如:HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT
;其次是域名和文件路徑中間隱藏了端口號,web程序的端口號默認是80,郵件(mailto)是25.
每個部分解析完之后,就開始生成請求消息,請求消息中有很多頭字段信息,大體分為通用頭、請求頭、響應頭、實體頭,詳見HTTP Header官方介紹,需要注意的是HTTP1.0和1.1有部分差異。
請求之前會先根據域名通過解析器去DNS服務器查詢web服務器的IP地址。
- IP:通常可以理解為計算機在網絡中的地址,準確的說應該是計算機網卡的地址,就好像是一棟樓里的門牌號一個意思。
- web服務器:可以理解為存儲網絡數據的計算機程序
- DNS服務器:與web服務器一樣,都是服務器的一種,只不過它是專門用來存儲域名和IP地址關系表格的計算機,因為域名分層關系,所以一個域名通常按照層次關系被分開存儲。
- 解析器:計算機中有標準的Socket庫,提供相應的解析器供應用程序去查詢IP地址,域名作為參數被封裝成UDP消息,發往最近的DNS服務器(DNS服務器IP地址在接入網絡時會自動被設置),因為域名被分開存儲,每次查詢都很耗時,所以DNS服務器會采用緩存技術提升效率,同時設置緩存數據的有效期。
查詢到web服務器IP地址后,會委托協議棧發送請求,大致分為四個階段。
- 創建套接字
- 將管道連接到服務器的套接字上(保存對方IP地址和端口號)。
- 收發數據。
- 斷開連接并刪除套接字。
描述符:應用程序用于識別套接字的機制
IP和端口號:客戶端與服務器之間用于識別套接字的機制
請求發出后會收到響應消息,狀態碼如下:
狀態碼 | 含義 |
---|---|
1xx | 告知請求的處理進度和狀況 |
2xx | 成功 |
3xx | 表示需要進一步操作 |
4xx | 客戶端錯誤 |
5xx | 服務器錯誤 |
第二章 用電信號傳輸TCP/IP數據
上一章主要了解了通過解析器向DNS服務器獲取IP,然后再封裝請求消息的大致過程,本章主要介紹應用程序如何委托協議棧進行收發消息。
先了解一下協議棧大致結構(摘自書中圖2.1):
第一章介紹了協議棧收發數據的四個階段,接下來展開介紹它的工作原理。這四個階段都是應用程序委托Socket庫來完成的。
- 創建套接字(Socket)
當解析器拿到IP地址后,就會創建套接字Socket程序實例,系統為套接字分配內存空間,然后向里面里面記錄IP地址、端口號、通信狀態等控制信息,協議棧會參考這些記錄的控制信息進行工作。
Windows中查看套接字命令:netstat -ano,a表示所有套接字,n表示IP地址和端口號,o顯示使用該套接字的程序PID
終端中輸入命令會顯示如下內容
字段名 | 含義 |
---|---|
Proto | 顯示協議名稱,TCP或UDP |
Local Address | 本機IP地址和端口號,多個網卡顯示多個IP地址和端口號。0.0.0.0表示沒有綁定IP地址和端口號。 |
Foreign Address | 通信對象的IP地址和端口號,0.0.0.0表示沒開始通信,沒有綁定IP和端口號,UDP不綁定IP和端口號,顯示*.* |
State | 通信狀態,LISTENING等待對方鏈接,ESTABLISHED完成連接并正在進行數據通信的狀態 |
- 套接字創建完成后,開始進行連接操作。
第一步是在TCP模塊創建表示連接控制信息的頭部,發起連接時TCP頭部中控制位SYN
會設置為1,還有數據包序號
和窗口
大小等,通過TCP頭部中的發送方和接收方端口號可以找到要連接的套接字。TCP模塊頭部創建好之后又會傳遞給并委托IP模塊進行發送,然后網絡包就會通過網絡到達服務器。服務器在收到連接請求時,如果接受連接同樣會設置SYN
(如果拒絕則不設置SYN
,而是RST
為1),同時會設置ACK
控制位為1,表示接收到相應的網絡包,客戶端在收到服務端的ACK
響應后,客戶端還會再發一個ACK
響應包,表示收到了服務端的響應,這時連接操作基本完成,可以隨時進行數據收發。(網絡部分后邊章節介紹)
這個連接確認過程就是面試經常被聞到的三次握手
TCP頭部信息如下:
字段名稱(TCP頭部20字節) | 長度(比特) | 含義 |
---|---|---|
發送方端口號 | 16 | 發送網絡包的程序的端口號 |
接收方端口號 | 16 | 網絡包的接收方程序的端口號 |
序號(發送數據的順序編號) | 32 | 發送方告知接收方該網絡包發送的數據相當于所有發送數據的第幾個字節 |
ACK號(接受數據的順序編號) | 32 | 接收方告知發送方,接收方已經收到了數據的第幾個字節。ACK,acknowledge |
數據偏移量 | 4 | 表示數據部分的起始位置,也可以認為是頭部長度 |
保留 | 6 | 該字段保留,現在未使用 |
控制位 | 6 | 該字段中的每個比特分別表示以下通信控制含義: |
URG:緊急指針字段有效; | ||
ACK:接收數據序號字段有效,一般表示數據已被接收方收到; | ||
PSH:表示通過flush操作發送數據; | ||
RST:強制斷開連接,用于異常中斷情況; | ||
SYN:發送方和接收方相互確認序號,表示連接操作; | ||
FIN:表示斷開連接 | ||
窗口 | 16 | 接收方告知發送方窗口大小(即無需等待確認可一起發送的數據量) |
校驗和 | 16 | 用來校驗是否出現錯誤 |
緊急指針 | 16 | 表示應緊急處理的數據位置 |
可選字段 | 可變長度 | 除了上面的固定頭部字段外,還可以添加可選字段,但除了連接操作之外,很少使用可選字段。 |
- 連接完成,開始收發數據
在HTTP請求消息交給協議棧進行發送的時候,需要判斷網絡包的容量,因為Http請求消息通常數據量都比較大,而網絡包的容量則有限。協議棧中用MTU(Maximum Transmission Unit)
表示網絡包的最大長度,通常是1500字節,TCP和IP頭部長度通常是40字節,MTU
減去TCP和IP頭部長度就是能容納的最大數據長度MSS(Maximum Segment Size)
。所以當HTTP請求的數據量超過這個限制便會被切割成MSS
大小的數據包進行傳輸。
數據被拆分之后便會對數據包進行發送,每個數據包都有自己的序號,但是這些數據包并不是按順序發送的,而是隨機發送的,因為順序發送數據通信過程容易被預測,因而遭受攻擊。
數據發送過程是通過ACK
號進行確認數據是否接收到,如果沒有,則重新發送數據包,ACK
確認方式有兩種:一來一回
和滑動窗口
,一來一回的方式是每接收到一個數據包就返回一個ACK
號,這樣很影響性能,而且ACK
號是有等待時長限制的,雖然有動態調整機制,但是這樣傳輸效率非常低;滑動窗口的方式則是多個數據同時發送,然后在緩沖區中對這些數據進行拼接處理,雖然提高了數據發送量,但是網卡對數據的處理能力也是有限的,數據不能有效被處理就會被拋棄,所以就通過窗口
來管理ACK,窗口
一般和接收方緩沖區大小一致,發送方會根據窗口
大小進行數據發送,這樣便提升了數據的處理效率。另外ACK
和窗口
是同一個響應包,而且會等待一定時間再做出響應。原因是分開傳送會造成信息不對等,還會對網絡傳輸效率造成影響,另外等待這段時間緩沖區的數據處理很快會更新ACK
號,只要發送最后一個ACK
號就可以了,或者也有可能收到其它通知操作。 - 數據發送完畢,斷開并刪除套接字
斷開操作可以由任何一方發起,假設首先是客戶端發送FIN
信號,然后服務器會響應ACK
號,再由服務器發送FIN
信號,客戶端再回應ACK
號。
當斷開信號確認完畢之后,等待一定時間(幾分鐘)相應的套接字就會被刪除。為何不馬上刪除,是為了防止相同的套接字連接操作再次被發起。
在斷開才做發起時,可能會有數據讀取操作,這時數據讀取操作會被掛起。
以上主要介紹協議棧中TCP包的收發操作過程,接下來看一下IP與以太網的包收發操作。
-
網絡包結構網絡包結構.png
MAC頭部用于以太網協議,將網絡包傳輸到下一個轉發設備;IP頭部用于IP協議,根據目標地址判斷下一個IP轉發設備位置。
剛開始理解這段很困難,感覺MAC頭部和IP頭部的用處是一樣的,但為什么會同時存在,而且都有用到呢?書都看完了也沒看到說明原因,這一點感覺很不好,網上查了一下也沒有很細的說明,網友反應很多書里面似乎都沒有太多相關說明,這里說一下個人理解。
IP地址是適用于虛擬網絡。MAC地址用于物理網絡。虛擬網絡地址就好像快遞包裹留下的手機號,但是最后快遞是怎么到達最終目的地只有快遞公司知道,而物理網絡就好像的具體地址,例如XX省XX市……門牌號XX,快遞公司運輸快遞的方式,水運、陸運、空運?具體什么方式,經過哪些地方由快遞公司決定,不論經過什么地方,都會有相應的手機號和具體地址,似乎可以認為手機號就是用來查詢具體地址的(老司機除外)。
這個例子可能不是很恰當,但需要知道的是先有的以太網協議,后有的IP協議,以太網只只用于以太網類型的物理網絡傳輸數據,但是換其他類型的物理網絡,以太網協議可能就不適用了,這顯然不是開放性網絡設計的初衷,所以才有了IP網絡,用來兼容不同物理網絡之間進行數據傳輸。
以太網在傳輸網絡包會先區路由表中查詢轉發目標的IP地址,在查詢IP地址之前先了解一下子網掩碼
,子網掩碼
表示網絡號與主機號之間的邊界值。1的部分表示網絡號,0的部分表示主機號,IP地址主機號全0表示整個子網,全1表示向子網上所有設備發送包,即‘廣播’。子網掩碼和目標地址都是0表示默認網關,所以通過IP地址和子網掩碼做與運算便可以計算出下一個轉發目標,如果都不匹配則會轉向默認網關。查詢到IP地址后由TCP模塊
開始生成IP頭部
,IP頭格式如下:
字段名稱(IP頭部20字節) | 長度(比特) | 含義 |
---|---|---|
版本號 | 4 | IP協議版本號目前使用的版本號是4 |
頭部長度(IHL) | 4 | IP頭部長度。可選字段可導致頭部長度變化,因此這里需要指定頭部的長度。 |
服務類型(ToS) | 8 | 表示包傳輸優先級。最初的協議規格里對這個參數規定很模糊,最近DiffServ規格從新定義了這個字段的用法 |
總長度 | 16 | 表示IP消息的總長度 |
ID號 | 16 | 用于識別包的編號,一般為包的序列號。如果一個包被IP分片,則所有分片都擁有ID |
標志(Flag) | 3 | 該字段有三個比特,其中兩個比特有效分別代表是否允許分片,以及當前包是否為分片包 |
分片偏移量 | 13 | 表示當前包的內容為整個IP消息的第幾個字節開始的內容。 |
生存時間(TTL) | 8 | 表示包的生存時間,這個是為了避免網絡出現回環時一個包永遠在網絡中打轉,沒經過一個路由器,這個值就會減1,減到0時這個包就會被丟棄。 |
協議號 | 8 | 協議號表示協議的類型(以下均為16進制)TCP:06;UDP:11;ICMP:01 |
頭部校驗和 | 16 | 用于校驗錯誤,現在已經不用 |
發送方IP地址 | 32 | 網絡包發送方IP地址 |
接收方IP地址 | 32 | 網絡包接收方IP地址 |
可選字段 | 可變長度 | 除了上面的頭部字段外,還可以添加可選字段用于記錄其他控制信息,但可選字段很少用 |
IP頭部創建完,開始由IP模塊
生成以太網用的MAC頭部
字段名稱(MAC頭部14字節) | 長度(比特) | 含義 |
---|---|---|
接收方MAC地址 | 48 | 網絡包接收方的MAC地址,在局域網中使用這一地址來傳輸網絡包。 |
發送方MAC地址 | 48 | 網絡包發送方的MAC地址,接收方通過它來判斷是誰發送了這個包 |
以太類型 | 16 | 使用的協議類型。下面是一些常見類型,一般在TCP/IP通信中只使用0800和0806這兩種。 |
0000-05DC:IEEE802.3 | ||
0800:IP協議 | ||
0806:ARP協議 | ||
86DD:IPv6 |
在生成MAC頭部之前首先要知道目的地的MAC地址,這個MAC地址就是通過ARP在網絡中發送廣播,向附近所有計算機詢問MAC地址,很顯然這不是一個很高效的方法,所有這個地方也會有緩存機制,同時設置有效期,一般幾分鐘。
可以在Windows終端中輸入
arp -a
命令,查詢網絡中的MAC地址。
MAC地址是網卡生產時被寫入的,而且是全世界唯一,網卡中保存的MAC地址是由網卡驅動讀取出來并保存在網卡的ROM中。
MAC頭部生成之后,由MAC模塊
會從緩沖區
中讀取數據,還會再加3個控制數據,分別是:報頭、起始幀分節符、FCS
。
網絡包大概是這個樣子:
報頭和起始幀分節符(SFD) | MAC頭部 | IP頭部 | TCP頭部 | 數據 | FCS |
---|
報頭
用來測定時機,起始幀分節符(SFD)
用來確定幀的起始位置,FCS(幀校驗序列)
是用來校驗網絡包是否因為噪聲導致數據錯誤、紊亂
FCS校驗算法類似CRC(循環冗余校驗)算法
噪聲:主要是電子設備或線路本身所產生的電磁波干擾。
MAC模塊
生成通用信號(時鐘信號+數據信號),由PHY(MAU)模塊
轉換成可以在網線中傳輸的格式,并通過網線傳輸出去,傳輸到服務器。以上大致過程如下圖:
當服務器發出響應包時,客戶端IP模塊
會對響應包接收方IP地址進行校驗,如果不是本機IP地址,則會發送一個ICMP消息
,否則接收此響應包并交給TCP模塊
進行后面的處理。
ICMP消息
消息 | 類型 | 含義 |
---|---|---|
Echo reply | 0 | 響應Echo消息 |
Destination unreachable | 3 | 出于某些原因沒有到達目的地而是被丟棄,則通過此消息通知發送方。可能的原因包括目標IP地址在路由表中不存在;目標端口號不存在對應的套接字;需要分片,但分片被禁用 |
Source quench | 4 | 當發送的包數量超過路由器的轉發能力時,超過的部分會被丟棄,這時會通過這一消息通知發送方。但是,并不是說遇到這種情況一定會發送這一消息。當路由器的性能不足時,可能連這條消息都不發送,就直接把多余的包丟棄了。當發送方接收到這條消息時,必須降低發送速率 |
Redirect | 5 | 當查詢路由表后判斷該包的入口和出口為同一個網絡接口時,則表示這個包不需要該路由器轉發,可以由發送方直接發送給下一個路由器。遇到這種情況時,路由器會發送這條消息,給出下一個路由器的IP地址,指示發送方直接發送過去 |
Echo | 8 | ping命令發送的消息。收到這條消息的設備需返回一個Echo reply消息,以便確認通信對象是否存在 |
Time exceeded | 11 | 由于超過了IP頭部中的TTL字段表示的存活時間而被路由器丟棄,此時路由器會向發送方發送這條消息 |
Parameter problem | 12 | 由于IP頭部字段存在錯誤而被丟棄,此時會向發送方發送這條消息 |
以上操作過程都是基于TCP協議,雖然TCP協議的數據傳輸非常可靠,但是過程過于復雜,效率不高,
因此有些情況會采用UDP協議,像DNS解析用的就是UDP協議,還有音視頻數據傳輸也是用的UDP。先來看一下UDP協議頭部信息:
字段名稱(UDP頭部8字節) | 長度(比特) | 含義 |
---|---|---|
發送方端口號 | 16 | 網絡包發送方端口號 |
接收方端口號 | 16 | 網絡包接收方端口號 |
數據長度 | 16 | UDP頭部后面的數據長度 |
校驗和 | 16 | 用于校驗錯誤 |
由此可見UDP協議非常簡單,相比TCP協議中頭部控制信息要少很多,UDP協議的功能非常少,基本就只負責發送包,協議棧并不知道是否發生錯誤,出錯時應用程序不能收到接收方的回復,所有由應用程序決定是否重新發包,而TCP則一直監聽包的送達狀態。所以不需要重發數據
或者控制用的短數據交換操作
用UDP協議
效率更高。
UDP數據長度 = IP包最大65535 - IP頭部20 - UDP頭部8 = 65507字節。
第三章 從網線到網絡設備
- 雙絞線
網卡中的PHY(MAU)模塊負責將包轉換成電信號,信號通過RJ-45接口進入雙絞線。
電信號是正負變化的電壓,電信號在網線中傳輸會出現衰減,線越長衰減越多,高頻信號會產生電磁波也會消耗一部分能量。
然而局域網中的雙絞線的擰麻花一樣的設計就是為了抑制噪聲的影響,而且每對信號線的纏繞間隔都不一樣。
雙絞線種類有:五類、超五類、六類、超六類、七類,每種線都有不同的信號傳輸速率和頻率。
PHY(MAU):以太網由多種派生方式,每種方式中信號收發裝置的名稱都不一樣。100Mbit/s以上的叫PHY(物理層裝置),以前低俗方式中叫MAU(介質連接單元)。
噪聲:是電子設備發出的電池波,經過金屬線(網線)就會沿電磁波傳播的右旋方向產生電流,從而擾亂電信號,“雙絞線”的纏繞設計就是為了讓線纜本身產生逆向電池波,從而抵消周圍電池波的影響。
- 集線器
電信號會被送到集線器,然后被原封不動的廣播的整個網絡中,接收信號的設備(交換機、路由器、服務器)先根據MAC地址檢測是否是自己的包,然后會對信號進行FCS校驗,不匹配就直接丟棄。(不用擔心出錯,TCP模塊檢測到無響應的包會重新發包)
集線器有MDI/MDI-X兩種接口,MDI表示直連,MDI-X表示交叉連接。 - 交換機
交換機的輸入的端和輸出端都能連接,信號線排成網格,每個交叉點都有一個電子開關,控制信號流向。
交換機也是直接轉發包到目的地,它類似與計算機的網卡,但是它沒有MAC地址,所以在接收包時沒有MAC地址校驗,直接把所有包都放到緩沖區,然后通過包的MAC地址發送到目的地。(交換機中維護著網絡中設備的MAC地址表) - 全雙工與半雙工
全雙工是交換機的工作方式,也就是可以同時發送和接受信號,而集線器不具備這樣的功能,只支持半雙工模式,也就是網絡中有信號時要等待信號傳輸完畢再發送信號。因此全雙工模式要比半雙工模式效率更高。但是網絡中并不是所有節點都支持全雙工模式,比如集線器,傳輸速率也不同,這時在設備接入網絡時就會發送脈沖信號
確認雙方的工作模式以及傳輸速率 - 路由器
網絡包經過交換機后會到達路由器,路由器可以支持多個端口:ADSL、FTTH、無線局域網、以太網等,每個端口都有自己的MAC地址和IP地址,同時根據MAC地址判斷包是否接收。路由器的轉發模塊維護一張路由表,然后根據IP地址判斷轉發目標(忽略主機號,只匹配網絡號),如果找不到路由地址,則選擇默認路由地址0.0.0.0
。路由器的發送操作與計算機相同,也是通過ARP尋址(路由器中也有ARP緩存),在包的轉發過程中,由于網絡中各個端口的口徑(最大包長度)不同,有可能會觸發分片功能,來適應網絡中輸入輸出端口的口徑,如果不能分片(發送方程序不允許或者已經分片過的包)直接丟棄,并發送ICMP消息。
路由器的附加功能:地址轉換
、包過濾
。地址轉換可以使得私有地址計算機訪問外網,也就是互聯網,或者從外網可以訪問內網。轉換的原理就是將私有地址和端口轉換成路由器的公有地址和端口,然后再發送包。包過濾功能類似防火墻設備或軟件,原理是根據MAC頭部、IP頭部、TCP頭部的相關控制信息進行過濾。
第四章 通過接入網進入互聯網內部
- 接入網
連接互聯網與家庭、公司網絡的線路,一般有:ADSL、FTTH、CATV、電話線、ISDN等,公司還可能有專線。 - ADSL
ADSL(Asymmetric Digital Subscriber Line)接入網是通過ADSL Modem(調制解調器,俗稱‘貓’)連接電話線接入互聯網的。
互聯網接入路由器會在網絡包前面加上MAC頭部、PPPoE頭部、PPP頭部總共3種頭部,然后發送給ADSL Modem(PPPoE方式)。
ADSL Modem將包拆分成ATM信元,并將信元通過正交振幅調制
成電信號發送給分離器。調制的原因是原始的方波信號容易失真,高頻信號發出的噪聲更大。
ADSL中數據傳輸的上行速率和下行速率是不同的,原因是ADSL通過不同頻率的合成來提高效率,根據噪聲條件的不同,每個波表示的比特數是可變的。
信號進入分離器會與電話信號混合在一起從電話線中傳出,分離器的作用就是分離ADSL信號和電話信號,保證電話通話聲音不被ADSL信號干擾。
信號從分離器會到達DSLAM,然后再到BAS,最后到達互聯網。
PPP:Point to Point Protocol。點對點協議。它是電話線、ISDN等通信線路使用的一種協議,集成了用戶認證、配置下發、數據壓縮、加密等各種功能。
PPPoE:PPP消息裝入以太網包進行傳輸的方式。
DSLAM:數字用戶線接入復用設備。可以理解為多個ADSL Modem的集合。可以將電信號還原成信元,或者直接把網絡包還原出ADSL信號。
BAS:寬帶接入服務器,也是一種路由器。可以將ATM信元還原成原始包(從PPP頭部取出,追加上隧道專用頭部)。
- FTTH
FTTH是用光纖代替ADSL將用戶接入路由器和運營商的BAS連接起來的接入方式。接入方式有兩種:一種是直連
,直接通過光纖接入附近的電話局;另一種是分路
,用戶端安裝ONU
設備,然后接入附近的分光器,再由分光器接入電話局。
光纖是一種雙層結構的纖維狀透明材質(玻璃和塑料)構成,通過纖芯傳到光信號來傳輸數字信息,亮表示1,暗表示0。光纖分多模(50μm或62.5μm)和單模(8~10μm),多模可以傳輸多條光線,單模只能傳輸一條光線。因為光線在傳輸過程中會進行多次折射,多模光纖中有多條光線且折射角度不同,所以傳輸距離越長信號失真越大,而單模光纖中只有一條光線,所以傳輸距離的影響很小,失真不會很大。
ONU:Optical Network Unit,光網絡單元。用于電信號轉換成光信號,同時與電話機的
OLT
設備配合避免產生碰撞。
OLT:Optical Line Terminal,光線路終端。
一對一連接的端口可以不分配IP地址,這種方式稱為無編號。
- 運營商
網絡包通過接入點后,到達運營商POP
的路由器。之后所有網絡包都會集中到NOC
。而運營商之間通過路由器的BGP
機制實現信息共享,進而達成互聯。在實際鏈路中各個運營商是通過IX
設備實現互聯的。
POP:Point of Presense,接入點。
NOC:Network Operation Center。網絡運行中心。(POP的放大版)
BGP:Border GateWay Protocol。邊界網關協議。
IX:Internet eXchange。互聯網交換中心。核心是具有大量高速以太網端口的二層交換機。
第五章 服務器端的局域網中有什么玄機
- web服務器部署
部署在公司內網:接入外網之前需要建立防火墻。
部署在運營商的數據中心或直接租用運營商服務器:抗災能力強。(租用服務器難道指的是云服務?) - 防火墻
防火墻可以分為包過濾、應用層網關、電路層網關等方式。
包過濾是通過包中各個頭部控制信息進行過濾,例如端口號限制應用程序訪問、TCP的控制位判斷連接方向。 - 負載均衡
DNS服務器自動輪詢分配。優點是配置簡單,缺點是不能跨頁面訪問。
負載均衡器。也是一臺web服務器,用于分配網絡請求,優點是可以判斷請求相關性,缺點是判斷邏輯復雜。
緩存服務器。按功能分類分擔負載,將相對靜態的數據進行緩存。優點是速度快,缺點是CGI程序生成的動態數據不易緩存,且緩存周期管理復雜。
代理:不是轉發消息,而是接收請求消息后,偽裝成原始客戶端向web服務器發起請求。
正向代理:配置在用戶端,例如在瀏覽器中設置代理服務器。
反向代理:配置在服務器端,例如上面說的緩存服務器。
透明代理:集合正向代理和反向代理的優點。對請求消息進行攔截。
緩存服務器轉發給web服務器的消息會添加一個
Via
字段,用與告知web服務器這是一條轉發消息,如果緩存服務器中由數據還會添加一個If-Modified-Since
字段,表示上次數據緩存時間。可以通過配置不添加字段。
- 內容分發服務
面向用戶,選擇最近主要運營商設置緩存服務器。一種方法是利用DNS服務器和路由表信息選擇最近緩存服務器,另一種方法是通過HTTP請求消息中Location字段進行重定向。
第六章 請求到達Web服務器,響應返回瀏覽器
- 服務器端收發操作
服務器程序啟動后會創建套接字進入等待連接狀態。
服務器接收網絡包,由網卡的MAC模塊將電信號還原出數字信息,校驗FCS和MAC地址并放入緩沖區。
再根據MAC頭部判斷協議類型交給協議棧處理,協議棧中IP模塊檢查IP頭部判斷是否是自己的、網絡包是否經過分片、包轉交給TCP或UDP模塊。
如果是發起連接,TCP模塊會確認SYN控制位,檢查接收方端口號,為相應的等待連接套接字生成副本,記錄發送方IP地址和端口號等信息。
TCP模塊發送方的IP地址和端口號、接收方的IP地址和端口號找到相應的套接字,將數據庫拼接起來并保存到緩沖區,向客戶端返回ACK。(由于多個客戶端的連接操作會使得服務器生成多個套接字副本并建立連接,所以TCP模塊僅憑接收方IP地址和端口號是無法識別哪個套接字與哪個客戶端進行的通信)
如果數據收發完成調用了socket的close,TCP模塊會生成一個控制位FIN為1的TCP頭部,返回一個ACK信號。 - 瀏覽器顯示內容
服務器返回信息后,瀏覽器會根據響應消息中Content-Type字段值進行判斷具體消息內容類型,主要由文字、圖像、聲音、視頻等多種類型。 - Web服務器的訪問控制
客戶端IP地址
客戶端域名
用戶名和密碼
總結
此處省略一萬字……