網絡是怎樣連接配接的_學習筆記(第2章)
隻要慢慢堅持,最壞的結果無非是大器晚成
-
-
-
- 網絡是怎樣連接配接的_學習筆記(第2章)
-
- 2.0 前言
- 2.1 建立套接字及其細節
- 2.2 連接配接伺服器及其細節
- 2.3 收發資料及其細節
- 2.4 斷開并删除套接字及其細節
- 2.5 IP與以太網的包收發操作(TCP)
- 2.6 名詞解釋
- 2.7 最後上兩張做的導圖一覽(等我全本書都做好了就免費上傳分享出來)
-
-
2.0 前言
- 這一章的思維導圖因為出差前前後後寫了有20多天,本文主要就是按照自己對網絡的了解進行表述,希望看到本文的小夥伴可以較為清晰的了解其中内容,希望可以幫助到讀者,這是我莫大的榮幸。
- 文字部分主要是講一個架構和思路,具體細節在思維導圖中呈現。
2.1 建立套接字及其細節
- 待發送的資料從應用程式被送出給協定棧,協定棧分為上下兩層,上邊是TCP/UDP子產品,下面是IP子產品。對于一般的TCP/IP協定通訊,自然這些資料會先交給TCP子產品來處理,之後TCP處理後再把資料交給IP子產品(這個下文會細講)
- 所謂建立套接字,在代碼實作上非常簡單如下所示
// Win下建立Socket的API SOCKET WSAAPI socket( int af, int type, int protocol );
- socket套接字的本質一堆網絡通信相關的控制資訊,比如IP位址、端口号、目前通信狀态等等
- 建立套接字的本質就是配置設定一塊可以用于存儲這些控制資訊的記憶體,之後寫入初始狀态資訊
2.2 連接配接伺服器及其細節
- 連接配接伺服器,也就是所謂的建立連接配接的過程,我們知道TCP\IP通信的特點是基于連接配接的、可靠的。這一步就是連接配接那一步啦
- 連接配接連接配接的目的主要是交換用戶端與服務端之間的控制資訊,因為這是通信的基礎。
- 用戶端将自己的IP位址、端口号等告知服務端,服務端将這些資訊告知自己的協定棧 (第1次握手)
- 服務端将傳回自己的IP位址、端口号等資訊,用戶端接收到後将服務端或對端的這些資訊告知自己的協定棧 (第2次握手)
- 用戶端再給服務端回複一個消息表示自己受到了服務端的資料 (第3次握手)
- 如果一切順利,雙方都将配置設定用于存儲臨時資料的緩沖區
- 至此,連接配接成功,然後就可以快樂的收發資料了
2.3 收發資料及其細節
- 還是浏覽器等應用軟體将資料交給協定棧,在協定棧看來,這些資料都是沒有任何分别的二進制位元組序列。
- 協定棧會根據資料長度和延遲時間的要求決定資料的發送時機
- 資料長度是一個網絡包最多可以發送的資料量-----網絡包變大可以提高網絡傳輸效率,但會使延遲時間增加
- 延遲時間是資料送出給協定棧到協定棧發送這些資料之間的時間差—協定棧接收到資料後立刻發送會導緻網絡包的傳輸效率降低,也會使延遲時間降低
- 從應用程式拿到原始的資料,如果太大,超過了MSS(一個網絡包最多可攜帶的資料量),将會進行分包。然後再将這些資料進行打包,打包過程如下所示:
- TCP對原始資料打包---->加上TCP頭部
- IP子產品對上述包再打包---->加上IP頭部
- IP子產品繼續對上述包打包---->加上MAC頭部
- TCP/IP協定傳輸是非常可靠的,那他是靠什麼來實作這種可靠呢?
- ACK号确認就是最重要的因素,也就是确認響應
- 如果一個網絡包就把資料發送完畢,那就不需要分包之類的操作了,對端接受到資料後,需要傳回一個确認響應
- 如果需要分包,那麼每次發送的網絡包中就要重點關注其中的序号字段了,這個序号代表了本網絡包在拆分前資料包中次序(位置),這些包被發送到對端後,會根據其中的序号進行重組,重組成原始資料的樣子
- 基于以上的基本原理,用戶端—服務端在資料收發時的動作大緻如下
- 用戶端連接配接伺服器,将自己的資料起始序号告訴伺服器,嘗試建立連接配接(這起始時第一次握手過程中發生的)
- 服務端收到後,根據收到的序号計算ACK值、自己這邊的資料起始序号一并發給用戶端(第二次握手中發生)
- 用戶端收到後,再計算ACK号,傳回給伺服器(第三次握手-----建立連接配接成功)
- 從這一步開始就是資料的收發階段,TCP/IP是全雙工的工作方式,也即兩端都可以同時收發資料
- 發送方發送包含資料和更新的序号的網絡包
- 接收方接到資料後,傳回ACK号進行響應确認
- 上面講到說,接收方在接收到資料之後會進行ACK号傳回,也就是确認響應。發送方隻有接收到确認響應之後才會認為自己的資料已經正确接收了,否則就會進行重發!
- 那麼問題來了,就好比約會等人一樣,等多久就被認為對方不會來了呢?在這裡也即是等ACK多久呢?(多久算是逾時時間呢?)
-
我們可以稍微分析一下:
①如果目前網絡狀況不太好,有點擁擠勢必會造成ACK傳回時間變長,但是隻要給衣袋裡時間,ACK(确認響應)就會到達,是以逾時時間不能太短。
②如果網絡很差很差,甚至網線都斷了,總之,就是資料不能被傳回了,那麼發送端等再久,ACK确認響應也不會到大,是以逾時時間也不能無限長。
- 實際的處理方式是動态的調整逾時時間
- 當ACK傳回非常快時,就縮短逾時時間
- 當ACK傳回變慢時,就适當的延長逾時時間
==經常被問到的滑動視窗技術
- 滑動視窗技術是一種用于提高TCP\IP網絡通信效率的機制
- 設想一下,如果每次發送端發送完資料後都要等待ACK傳回确認之後再發送下一個包,那麼等待的這段時間不久被極大的浪費了嗎?《教員曾說過:“浪費和腐敗是極大的犯罪!”》于是,滑動視窗應運而生。
- 具體來講也比較簡單:就是不等待ACK傳回,就直接發送下一個資料包
- 但是接收方可能接收資料的能力有限,如果發送方不知疲倦的一直發送,必然導緻資料傳輸出錯,是以接收方在正是收發資料之前,需要将自己能接收到資料量告訴對端,這個資料量也即是視窗大小
- 其實在建立連接配接的時候,兩端就會将自己的視窗大小告訴對端。然後後續的資料收發過程中,會及時的更新視窗大小,因為視窗大小字段也是TCP頭部中的一個字段
2.4 斷開并删除套接字及其細節
- 斷開連接配接的過程就是那個非常著名的**“四次揮手”**了,其實了解了三次握手後,四次揮手就好了解了
-
如上思維導圖所示:(四次揮手)
①伺服器向用戶端發送斷開請求(FIN = 1)也可以是由用戶端發起,這因應用軟體而異
②用戶端收到後,向服務端回複确認響應(ACK = 1)
③用戶端向伺服器發送斷開請求(FIN = 1)
④伺服器收到後,向用戶端回複确認響應(ACK = 1)
2.5 IP與以太網的包收發操作(TCP)
2.5.1網絡包的結構
2.5.3協定棧中的TCP和IP子產品
協定棧的結構示意圖
TCP子產品主要是打包TCP頭部(包括了通訊所要用到控制資訊、端口号以及給IP子產品指定對端的IP位址等)
IP子產品主要是打包IP頭部(包含了自己的IP位址、對端的IP位址等)打包MAC頭部(發送方和接收方的MAC位址)
2.5.3以太網的基本知識
- MAC位址就是服務與以太網協定通信的,資料隻會流到MAC位址指定的裝置,不會跑到其他地方
2.5.4網卡的基本知識
- 網卡結構如下所示
-
網卡的結構如上圖所示:
發送資料和接收資料邏輯相反,就以發送為例進行闡述
- 在網卡驅動對網卡進行初始化之後,網卡就可以正常工作了
- 首先MAC子產品從網卡緩沖區中讀取要發送的已經打包好的資料包
- 在資料包的前面(加上報頭,起始幀分界符)後面(加上幀校驗序列)形成一個**“最終版的網絡包”**
- MAC子產品将這個包(數字資訊)轉化為通用格式的信号(我的了解就是可以讓PHY子產品根據網線或協定的同,轉化為任意需要的其他格式的通用格式)
- MAC子產品将通用格式的資料交給PHY子產品
- PHY子產品将通用格式的資料轉化為在網線(光纖、電話線)上傳輸的信号格式
- 通過RJ-45接口将資料傳輸出去
2.5.5 UDP協定收發資料
2.6 名詞解釋
- TCP協定
- Transmission Control Protocol:傳輸控制協定
- 一種可靠的、面向連接配接的、基于位元組流的傳輸層通信協定
- 如上文所述,是要和IP協定配合使用
- 上文中的TCP頭部便是其協定中的各種字段内容,對應其工作方式
- UDP
- User Datagram Protocol:使用者資料報協定
- 一種無連接配接的、不太可靠(會丢包)、快速傳輸的傳輸層通信協定
- 和IP協定配合使用
- IP協定與IP位址
- Internet Protocol:網絡互連協定
- IP協定提供了一種端到端的連接配接,通過IP位址。
- IP位址是IP協定中一個重要的“成員”
- IPv4
- IPv6
- ICMP協定
- Internet Control Message Protocol:網絡控制封包協定
- 主要功能是:在主機和路由器之間傳輸例如“網絡出錯”、“路由時候故障”等資訊
- ARP協定
- Address Resolution Protocol:位址解析協定
- 主要功能是:通過IP查詢目标的實體位址(具體工作方式将上文導圖)
- MAC位址
- Media Access Control Address:媒體存取位址又稱為MAC位址、以太網位址、實體位址
- 每一個網卡都有一個全球唯一的MAC位址,用于辨別其身份
- 主要用于以太網中确定某子網中的一台裝置
- MTU
- Maximum Transmission Unit:最大傳輸單元
- 指的是一個網絡包的最大長度(包含頭部資料)
- MSS
- Maximum Segment Size:最大封包段長度
- 特屬于TCP協定中的一個名詞
- 指的是TCP包中,去掉TCP頭部後,所能承載的最大的資料量(資料長度)
- 主要用于以太網中确定某子網中的一台裝置
- MTU
- Maximum Transmission Unit:最大傳輸單元
- 指的是一個網絡包的最大長度(包含頭部資料)
- MSS
- Maximum Segment Size:最大封包段長度
- 特屬于TCP協定中的一個名詞
- 指的是TCP包中,去掉TCP頭部後,所能承載的最大的資料量(資料長度)