网络是怎么连接的
目錄
一.以瀏覽器要訪問一個網址為例,理解這一次網絡連接的全貌。
二.協議棧和網卡
?0.TCP/IP的分層結構
1.套接字
2.連接
連接的目的
連接的過程
3.發送數據
4.接收數據
5.斷開連接
6.發送數據時包的情況
?包是怎么轉發的?
包收發的過程
7.網卡
?網卡組裝完成包
8.向集線器發送網絡包
9.接收返回包
網卡處理
TCP&IP處理
三.集線器,交換機,路由器
1.集線器?
集線器的工作過程
2.交換機
交換機的工作過程
交換機的特點
3.路由器
四.通過接入網進入互聯網內部
1.接入網
ADSL接入網
通信過程
光纖接入網
PPP撥號上網
區分
通過隧道將網絡包發送給運營商
2.網絡運營商內部
POP
NOC
運營商之間的連接
?
?
一.以瀏覽器要訪問一個網址為例,理解這一次網絡連接的全貌。
大體過程
- 瀏覽器要訪問一個資源,如www.baidu.com
- 找到提供這個資源的服務器
- 服務器提供資源
1.瀏覽器解析URL,生成請求消息。
1)解析URL,明確訪問目標
2)生成請求消息
注意:
1).URI是/目錄名/文件名
2.瀏覽器將請求消息委托給操作系統
瀏覽器能解析網址并生成HTTP消息,但不具備將消息發送到網絡上的能力。
3.操作系統根據域名查詢IP地址
瀏覽器-Socket庫-協議棧。
1)首先了解IP地址,在TCP/IP協議中,網絡由子網和路由器連接而成,所以IP地址包含了網絡號(具體在哪個子網)和主機號。用子網掩碼來區分網絡號和主機號的界限。
2)操作系統調用計算機上的DNS客戶端(解析器-包含在Socket庫中的一個程序),將域名告訴它。通過代碼gethostbyname來調用這個程序。
3)解析器再將信息發送給操作系統內部的協議棧(協議驅動或TCP/IP驅動).。
4)協議棧執行操作通過網卡將消息發送給最近的DNS服務器(這個最近的DNS服務器的IP地址在電腦中設置好了)。
5)最近的DNS服務器去找根DNS服務器,根DNS服務器管理com等域名,再找管理baidu域名的服務器,再找管理www域名的服務器,在管理www域名的服務器中找到具體具體資源的服務器,獲得該服務器的IP地址。
6)為什么域名和IP公用?
域名方便人們識別記憶,IP為了方便傳輸。
4.操作系統協議棧根據IP地址向服務器發送HTTP請求
需要調用操作系統的協議棧的Socket庫中的程序組件來完成功能
客戶端委托操作系統都是靠調用Socket庫中的程序組件再交給協議棧來完成。
瀏覽器-Socket庫-協議棧。
1)服務器,客戶端分別創建一個套接字(相當于傳輸管道的入口和出口)。
調用Socket庫中的socket組件
2)客戶端的套接字延申出管道連接服務器的套接字。
d五分鐘理解TCP/IP協議中端口號的涵義:什么是端口號?為什么要有端口號?_嗶哩嗶哩_bilibili
3)收發數據
調用socket的write組件發送
調用socket的read組件接收
4)斷開管道刪除套接字
調用socket的close組件關閉
描述符
創建完后,協議棧返回描述符,來識別不同的套接字,因為你可能同時在登錄多個網站就需要建立多個通道。
客戶端在創建套接字時,協議棧會為這個套接字分配一個端口號,接下來執行連接操作時,會將端口號告訴服務器。
5.服務器解析請求消息,返回響應消息
生成響應消息,返回給客戶端,客戶端瀏覽器接收后將數據顯示到屏幕上。
二.協議棧和網卡
?0.TCP/IP的分層結構
上層對下層委派,下層接收執行
Socket庫中有解析器用來對DNS服務器進行查詢還包括其他組件。
瀏覽器、郵件等一般的應用程序都是使用TCP收發數據的,而像DNS查詢等收發較短的控制數據的時候則使用UDP。TCP協議負責加給數據添加TCP協議的控制信息。
IP:下面一半是用IP協議控制網絡包收發操作的部分。在互聯網上傳送數據時,數據會被切分成一個一個的網絡包,而將網絡包發送給通信對象的操作就是由IP來負責的。IP還包括IMCP和ARP協議,ICMP用于告知網絡包傳送過程中產生的錯誤以及各種控制消息,ARP用于根據IP地址查詢相應的以太網MAC地址。IP協議負責給數據添加IP協議的控制信息。
網卡驅動:負責控制網卡硬件。
網卡:完成實際收發操作。對網線中的信號執行發送和接收。
1.套接字
套接字的實體是協議棧中存放通信控制信息的內存空間,記錄通信對象的IP地址、端口號、通信操作的進行狀態等。
套接字的作用是在發送數據時,需要看一看套接字中的通信對象IP地址和端口號,以便向指定的IP地址和端口發送數據,套接字中必須要記錄是否已經收到響應,以及發送數據后經過了多長時間,才能根據這些信息按照需要執行重發操作。
描述符:描述符相當于用來區分協議棧中的多個套接字的號碼牌,來指明這一塊內存地址。
2.連接
連接的目的
1.需要把服務器的IP地址和端口號等信息告知協議棧。
2.客戶端向服務器傳達開始通信的請求??蛻舳藭l出我想和你開始通信,我的IP地址是xxx.xxx. xxx.xxx,端口號是yyyy。
3.開辟一塊用來臨時存放要收發的數據的內存空間。
連接的過程
第一步:在TCP模塊處創建表示連接信息的頭部
上面的調用提供了服務器的IP地址和端口號,這些信息會傳遞給協議棧中的TCP模塊。然后,TCP模塊會與該IP地址對應的對象,也就是與服務器的TCP模塊交換控制信息。
也就是客戶端創建一個控制信息的頭部,主要包括發送方和接收方的端口號。將頭部中的控制位的SYN比特設置為1,設置適當的序號和窗口大小。
第二步:創建好頭部后,TCP模塊傳給IP模塊委托它發送
第三步:服務器上的IP模塊會將接收到的數據傳遞給TCP模塊
第四步:服務器的TCP模塊會返回響應
第五步:客戶端再響應告訴服務器剛才的響應包已經收到
3.發送數據
應用程序調用write將要發送的數據交給協議棧,協議棧收到數據后執行發送操作
第一步:將數據存放在內部的發送緩沖區中,并等待應用程序的下一段數據
第二步:對叫大數據進行拆分
TCP進行拆分,并添加TCP頭部,IP再添加頭部
第三步:發給服務器
第四步:確認操作
TCP具備確認對方是否成功收到網絡包,以及當對方沒收到時進行重發的功能。需要對方返回ACK號來確認。
4.接收數據
瀏覽器在委托協議棧發送請求消息之后,會調用read程序來獲取響應消息。控制流程會通過read轉移到協議棧。協議棧會執行接下來的操作。
第一步:協議棧會檢查收到的數據塊和TCP頭部的內容,判斷是否有數據丟失,如果沒有問題則返回ACK號。
第二步:協議棧將數據塊暫存到接收緩沖區中,并將數據塊按順序連接起來還原出原始的數據,最后將數據交給應用程序。
5.斷開連接
數據發送完畢的一方會發起斷開過程。
第一步:服務器一方的應用程序會調用Socket庫的close程序。
第二步:服務器的協議棧會生成包含斷開信息的TCP頭部(具體來說就是將控制位中的FIN比特設為1)。
第三步:協議棧會委托IP模塊向客戶端發送數據,同時,服務器的套接字中也會記錄下斷開操作的相關信息。
第四步:客戶端收到后,客戶端的協議棧會將自己的套接字標記為進入斷開操作狀態,為了告知服務器已收到FIN為1的包,客戶端會向服務器返回一個ACK號。
第五步:應用程序就會調用read來讀取數據。
第六步:客戶端調用close來結束數據收發操作,這時客戶端的協議棧也會和服務器一樣,生成一個FIN比特為1的TCP包,然后委托IP模塊發送給服務器。一段時間之后,服務器就會返回ACK號。
6.發送數據時包的情況
?包是怎么轉發的?
發送放創建包,發送到最近的網絡轉發設備,網絡轉發設備根據頭部控制信息,向下一個轉發設備轉發,最終到達接收放的網絡設備。
IP頭部
包的目的地,也就是要訪問的服務器的IP地址寫入IP頭部中,IP協議就可以根據這一地址查找包的傳輸方向,從而找到下一個路由器的位置。
MAC頭部
IP協議會查找下一個路由器的以太網地址(MAC地址),并將這個地址寫入(改寫)MAC頭部中。這樣一來,以太網協議就知道要將這個包發到哪一個路由器上了。路由器的MAC就像人的身份證一樣,是設備的唯一標識。
包收發的過程
?1.TCP模塊加頭部
TCP模塊在數據塊的前面加上TCP頭部,然后整個傳遞給IP模塊,TCP模塊還需要指定通信對象的IP地址,也就是需要寫清楚“將什么內容發給誰”
2.IP模塊加頭部
IP模塊會添加IP頭部和MAC頭部這兩種頭部。IP頭部中包含IP協議規定的、根據IP地址將包發往目的地所需的控制信息;MAC頭部包含通過以太網的局域網將包傳輸至最近的路由器所需的控制信息。
3.封裝好的包會被交給網絡硬件
網絡硬件可能是插在計算機主板上的板卡,也可能是筆記本電腦上的PCMCIA卡,或者是計算機主板上集成的芯片,不同形態的硬件名字也不一樣,本書將它們統稱為網卡。
4.網絡硬件發送
傳遞給網卡的網絡包是由一連串0和1組成的數字信息,網卡會將這些數字信息轉換為電信號或光信號,并通過網線(或光纖)發送出去,然后這些信號就會到達集線器、路由器等轉發設備,再由轉發設備一步一步地送達接收方。
MAC
以太網中判斷發送目的地時要用MAC頭部
IP與MAC
IP地址其實標識的是網卡而不是計算機,MAC地址是在網卡生產時寫入ROM里的,只要將這個值讀取出來寫入MAC頭部就可以,所以MAC地址也能標識計算機,但IP地址可以修改,但MAC地址不能修改。
將包轉發的時候轉發給路由器,但需要知道路由器的地址,查詢目標路由器的MAC地址需要用到ARP協議。
驚了!大學一直搞不懂的IP地址和MAC地址的區別原來這么簡單!_嗶哩嗶哩_bilibili
反正沒人看!隨便講講Mac地址和Ip地址有什么區別_嗶哩嗶哩_bilibili
7.網卡
ROM
網卡的ROM中保存著全世界唯一的MAC地址,這是生產網卡時寫入的
網卡驅動
1.網卡中保存的MAC地址在網卡驅動進行初始化時會由網卡驅動程序讀取并分配給MAC模塊。
2.網卡驅動從IP模塊獲取包之后,將其復制到網卡內的緩沖區,再向MAC模塊發送發送包的命令。
MAC模塊
MAC模塊會將包從緩沖區中取出,并在開頭加上報頭和起始幀分界符,在末尾加上用于檢測錯誤的幀校驗序列,MAC模塊從報頭開始將數字信息按每個比特轉換成電信號,將數字信息轉換為電信號的速率就是網絡的傳輸速率。
PHY
將MAC模塊來的電信號將其轉換為可在網線上傳輸的格式發出去
它還需要監控接收線路中有沒有信號進來。在開始發送信號之前,需要先確認沒有其他信號進來,這時才能開始發送。如果在信號開始發送到結束發送的這段時間內一直沒有其他信號進來,發送操作就成功完成了。
?網卡組裝完成包
報頭
是一串比特序列,用來確定包的讀取時機,當這串序列被轉換成電信號,根據波形可以判斷取數據的時機。
起始幀分界符
表示包起始位置的標記
FCS(幀校驗序列)
檢查包傳輸過程中因噪聲導致的波形紊亂、數據錯誤,它是一串32比特的序列,是通過一個公式對包中從頭到尾的所有內容進行計算而得出來的。它和磁盤等設備中使用的CRC[插圖]錯誤校驗碼是同一種東西。
8.向集線器發送網絡包
發送信號的操作分為兩種,一種是使用集線器的半雙工模式,另一種是使用交換機的全雙工模式。
半雙工模式中需要注意信號碰撞的問題
全雙工模式中不需要注意信號碰撞問題
9.接收返回包
網卡處理
1.PHY (MAU)模塊會將信號轉換成通用格式并發送給MAC模塊
2.MAC模塊再從頭開始將信號轉換為數字信息,并存放到緩沖區中。當到達信號的末尾時,還需要檢查FCS。
3.當到達信號的末尾時,還需要檢查FCS。具體來說,就是將從包開頭到結尾的所有比特套用到公式中計算出FCS,然后和包末尾的FCS進行對比,正常情況下兩者應該是一致的,如果中途受到噪聲干擾而導致波形發生紊亂,則兩者的值會產生差異,這時這個包就會被當作錯誤包而被丟棄。
4.再判斷MAC頭部中接收方MAC地址與網卡在初始化時分配給自己的MAC地址是否一致,不是就丟棄,是就將包放到緩沖區。
5.通過中斷機制通知計算機收到了包,調用網卡驅動,從緩沖區中取出收到的包,并通過MAC頭部中的以太類型字段判斷協議的類型交給不同的協議棧。(一般給TCP/IP)
TCP&IP處理
協議棧會判斷這個包應該交給哪個應用程序,并進行相應的處理。
1.第一步是檢查IP頭部,確認格式是否正確。
2.查看接收方IP地址。如果接收網絡包的設備是一臺Windows客戶端計算機,那么服務器返回的包的接收方IP地址應該與客戶端網卡的地址一致。如果布一致,IP模塊會通過ICMP消息將錯誤告知發送方
3.分片重組:IP模塊會將它們還原成原始的包(將小包合起來),分片的包會在IP頭部的標志字段中進行標記,當收到分片的包時,IP模塊會將其暫存在內部的內存空間中,然后等待IP頭部中具有相同ID的包全部到達,這是因為同一個包的所有分片都具有相同的ID。
4.TCP模塊會根據IP頭部中的接收方和發送方IP地址,以及TCP頭部中的接收方和發送方端口號來查找對應的套接字。
5.找到對應的套接字之后,就可以根據套接字中記錄的通信狀態,執行相應的操作,如果包的內容是應用程序數據,則返回確認接收的包,并將數據放入緩沖區,等待應用程序來讀取;如果是建立或斷開連接的控制包,則返回相應的響應控制包,并告知應用程序建立和斷開連接的操作狀態。
三.集線器,交換機,路由器
1.集線器?
集線器的工作過程
1.網卡中的PHY模塊負責將包轉換成電信號,電信號通過RJ-45接口進入雙絞線。?
2.當信號到達集線器后,會被廣播到整個網絡中。以太網的基本架構[插圖]就是將包發到所有的設備,然后由設備根據接收方MAC地址來判斷應該接收哪些包,而集線器就是這一架構的忠實體現,它就是負責按照以太網的基本架構將信號廣播出去。
3.信號到達集線器的PHY模塊,再進入中繼電路,將信號廣播到集線器的所有端口,流向所有設備。
4.這些設備在收到信號之后會通過MAC頭部中的接收方MAC地址判斷是不是發給自己的,如果是發給自己的就接受,否則就忽略。這樣,網絡包就能夠到達指定MAC地址的接收方了。
集線器,交換機,路由器在接收數據方面的區別
由于集線器只是原封不動地將信號廣播出去,所以即便信號受到噪聲的干擾發生了失真,也會原樣發送到目的地。這時,接收信號的設備,也就是交換機、路由器、服務器等,會在將信號轉換成數字信息后通過FCS[插圖]校驗發現錯誤,并將出錯的包丟棄。當然,丟棄包并不會影響數據的傳輸,因為丟棄的包不會觸發確認響應。因此協議棧的TCP模塊會檢測到丟包,并對該包進行重傳。
2.交換機
交換機的工作過程
?1.當信號從雙絞線傳入時,就會進入PHY(MAU)模塊的接收部分。
2.PHY(MAU)模塊會將網線中的信號轉換為通用格式,然后傳遞給MAC模塊。
3.MAC模塊將信號轉換為數字信息,然后通過包末尾的FCS校驗錯誤,如果沒有問題則存放到緩沖區中,[插圖]。這部分操作和網卡基本相同,大家可以認為交換機的每個網線接口后面都是一塊網卡。
交換機和網卡的不同
但交換機的工作方式和網卡有一點不同。網卡本身具有MAC地址,并通過核對收到的包的接收方MAC地址判斷是不是發給自己的,如果不是發給自己的則丟棄;相對地,交換機的端口不核對接收方MAC地址,而是直接接收所有的包并存放到緩沖區中。因此,和網卡不同,交換機的端口不具有MAC地址
4.接下來需要查詢一下這個包的接收方MAC地址是否已經在MAC地址表中有記錄了。MAC地址表主要包含兩個信息,一個是設備的MAC地址,另一個是該設備連接在交換機的哪個端口上。
交換機的特點
1.交換機只將包轉發到具有特定MAC地址的設備連接的端口,其他端口都是空閑的。如圖3.7中的例子所示,當包從最上面的端口發送到最下面的端口時,其他端口都處于空閑狀態,這些端口可以傳輸其他的包,因此交換機可以同時轉發多個包。
2.相對地,集線器會將輸入的信號廣播到所有的端口,如果同時輸入多個信號就會發生碰撞,無法同時傳輸多路信號,因此從設備整體的轉發能力來看,交換機要高于集線器。
3.路由器
?
轉發模塊
判斷包的轉發目的地,判斷具體交給哪一個端口發送。
端口模塊
負責包的收發操作
通過更換網卡,計算機可以支持以太網或無線局域網,路由器也一樣。如果路由器安裝了支持無線局域網的硬件,就可以支持無線局域網了。
發送過程
1.通過端口將發過來的包接收
2.轉發模塊根據收到的包的IP頭部中記錄的接收方的IP地址,在路由表中進行查詢,來判斷轉發目標
3.轉發模塊委托端口將包轉移到轉發目標對應的端口,端口按照硬件的規則將包發送出去。
接收過程
1.在以太網中,從以太網端口接收并放到緩沖區中
2.PHY和MAC部分將信號轉為數字信號
3.通過包末尾的FCS進來錯誤校驗再檢查MAC頭部
注意
1.以以太端口為例,路由器有MAC地址,因為它能成為以太網的發送方和接收方。
端口還有IP地址,當轉發包時,首先路由器端口會接收發給自己的以太網包,然后查詢轉發目標,再由相應的端口作為發送方將以太網包發送出去。這一點和交換機是不同的,交換機只是將進來的包轉發出去而已,它自己并不會成為發送方或者接收方。
IP協議根據目標地址判斷下一個IP轉發設備的位置
子網中的以太網協議將包傳輸到下一個轉發設備
四.通過接入網進入互聯網內部
互聯網的整體架構
?將互聯網理解成家庭公司網絡的方法版
不同點是路由器之間距離和路由器的維護方式
1.接入網
是指連接互聯網與家庭、公司網絡的通信線路[插圖]。一般家用的接入網方式包括ADSL、FTTH、CATV、電話線、ISDN等,公司則還可能使用專線。
ADSL接入網
?用戶端路由器發出的網絡包通過ADSL Modem(調制解調器)到達電話局,再到達ADSL網絡運營商(ISP)。
通信過程
1.計算機-交換機-(接入網)路由器-ADSL Modem
若互聯網接入路由器和ADSL Modem之間是以太網連接,傳送時互聯網接入路由器會在網絡包前面加上MAC頭部、PPPoE頭部、PPP頭部總共3種頭部,然后發送給ADSL Modem。
2.ADSL將數據拆分成信元
3.ADSL將信元調制成信號
4.信號進入分離器,然后ADSL信號會和電話的語音信號混合起來一起從電話線傳輸出去。
信號從分離器發出時,分離器沒有做什么事。
信號從電話線傳入時,分離器負責將電話和ADSL信號分離。
5.通過室內電話線,到達IDF(中間配線盤)和MDF(總配線架),再進入電線桿上的電話電纜,再經過配線盤和分離器發送給DSLAM(相當于多個ADSL Modem)。
6.電信號被還原成數字信號。
ADSL和DSLAM的區別
ADSL Modem具備以太網接口,可與用戶端路由器交互,收發以太包。
DSLAM用的是ATM接口,接收信元,和后方路由器收發數據也是用ATM信元形式。
7.信元被轉到BAS的包轉發設備(具有ATM接口可以接收ATM信元),將ATM轉換成原始的包。
8.將MAC頭部和PPPoE頭部丟掉。取出PPP頭部和后面的數據。
MAC頭部和PPPoE頭部作用是到達BAS的接口
9.BAS在包前面加上隧道專用頭部,送到隧道出口。
10.網絡包到達隧道出口的隧道專用路由器,隧道頭部被丟棄,IP包被取出,轉發到互聯網中。
光纖接入網
FTTH基于光纖接入網的技術的入網方式。
PPP撥號上網
?
?在使用電話線或ISDN撥號上網時,需要傳送PPP包。
1.用戶向運營商的接入點撥打電話,輸入用戶名和密碼
2.用戶名和密碼到達RAS通過RADUIS協議發送到認證服務器
3.認證服務器返回IP地址等信息
4.用戶信息配置IP等信息,便可向網絡發送TCP/IP包了。
區分
ADSL,FTTH,PPP撥號上號都需要給計算機分配公有地址。
ADSL和FTTH通過電纜或光纖固定連接在一起的,沒有必要驗證用戶身份,通過用戶名和密碼登錄的步驟可以根據用戶名來切換不同的運營商,這很方便。因此,接入運營商在ADSL和FTTH中一般也會使用PPP。
也就是說PPP實現了通過用戶名和密碼來上網。
PPP撥號上網中PPP傳送的方式:PPP協議中沒有定義以太網中的報頭和FCS等元素,也沒有定義信號的格式,因此無法直接將PPP消息轉換成信號來發送。要傳輸PPP消息,必須有另一個包含報頭、FCS、信號格式等元素的“容器”,然后將PPP消息裝在這個容器里才行。于是,在撥號接入中PPP借用了HDLC[插圖]協議作為容器,而HDLC協議原本是為在專線中傳輸網絡包而設計的,撥號接入方式對這一規格進行了一些修正。
ADSL和FTTH中PPP的傳送方式:不能借用HDLC來作為容器,我們用以太網包代替HDLC來裝載PPP協議,以太網和PPP在設計上有所不同,為了彌補這些問題就重新設計了一個新的規格,這就是PPPoE。
BAS用作用戶認證和配置下發的窗口?
通過隧道將網絡包發送給運營商
BAS還使用隧道方式傳輸網絡包
隧道方式
類似于套接字之間建立的TCP連接。
2.網絡運營商內部
?互聯網的實體是由多個運營商網絡相互連接而成。
ADSL、FTTH等接入網是與用戶簽約的運營商設備相連的,這些設備稱為POP(Poine Of Presense 接入點)。到達互聯網的入口,運營商POP路由器。
POP
POP中包括各種類型的路由器,根據接入網的類型需要分別使用不同類型的路由器。
專線接入:這里用的路由器就是具有通信線路端口的一般路由器。專線不需要用戶認證、配置下發等功能,因此用一般的路由器就可以了。
電話、ISDN等撥號方式的接入:使用的路由器稱為RAS。撥號接入需要對用戶撥電話的動作進行應答,而RAS就具備這樣的功能。
PPPoE方式的ADSL和FTTH:PPPoE方式中,ADSL、FTTH接入服務商會使用BAS,運營商的路由器則與BAS相連。PPPoE中的身份認證和配置下發操作由接入服務商的BAS來負責,運營商的路由器只負責對包進行轉發,因此這里也是使用一般的路由器就可以了。
NOC
NOC:Network Operation Center 網絡運行中心
運營商的核心設備,從POP傳來的網絡包都會集中到這里,并從這里被轉發到離目的地更近的POP,或者是轉發到其他的運營商??梢哉J為NOC就是規模擴大后的POP。
運營商之間的連接
如果最終目的地Web服務器和客戶端是連接在同一個運營商中的,那么POP路由器的路由表中應該有相應的轉發目標。
如果服務器的運營商和客戶端的運營商不同,網絡包需要先發到服務器所在的運營商。
對于互聯網內部的路由器來說,無論最終目的地是否屬于同一家運營商,都可以從路由表中查到,因此只要一次接一次按照路由表中的目標地址來轉發包,最終一定可以到達Web服務器所在的POP。這樣一來,我們就可以把包發到任何地方,包括地球的另一面。
通過IX連接
??IX的實體是高性能交換機。
總結
- 上一篇: 《网络是怎样连接的》了解网络连接的全貌
- 下一篇: 《网络是怎样连接的》笔记