接上篇《??通俗易懂圖解網絡面試知識—第一篇??》
關于網絡的知識,上篇學習了網絡層的知識,今天我們學習一下傳輸層協議的知識。
UDP協議UDP協議簡介UDP 是User Datagram Protocol的簡稱,中文名是用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯) 模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠的信息傳送服務。
(資料圖片僅供參考)
UDP主要特點有無連接狀態,無需建立連接,分組首部開銷小,速度快等。所以UDP一般使用在流媒體應用,語音交流,視頻會議應用。
無連接狀態:UDP協議發送數據之前不需要建立連接,減少了開銷和發送數據之前的時延。TCP需要在端系統中維護連接狀態,連接狀態包括接收和發送緩存、擁塞控制參數以及序號和確認號的參數等。無需建立連接:UDP無需任何準備即可進行數據傳輸,UDP是沒有時延的。而TCP 在數據傳輸之前需要經過三次握手的操作。分組首部開銷?。篣DP 首部僅僅只有 8 字節的開銷,TCP 報文段都有 20 字節的首部開銷。速度快:使用UDP協議,只要應用進程把數據傳給UDP,UDP就會將數據打包進UDP報文段立即傳遞給網絡層,而 TCP 有擁塞控制的功能,它會在發送前判斷互聯網的擁堵情況,如果互聯網極度阻塞,那么就會抑制 TCP 的發送方 TCP 有擁塞控制的功能,它會在發送前判斷互聯網的擁堵情況,如果互聯網極度阻塞,那么就會抑制 TCP 的發送方。UDP復用和分用:發送方可能有多個進程需要發送數據報,UDP從不同的進程接收數據報,每個進程都分配一個端口號。在加上UDP報頭之后,UDP將數據報送往網絡層。發送方的UDP處理多個進程的數據報稱為UDP復用。接收方根據接收的每個進程的端口號分別處理稱為UDP分用。其實這個復用和分用只是UDP的一種聚合的功能,因為本身UDP協議是有目的端口和源端口,多進程發送和接口都是基于端口,顯然這樣就能實現多進程的復用和分用了。了解了UDP協議的特點,我們從OSI的模型上看下UDP封包的流程圖:
應用數據通過應用進程端口發送,組裝成應用報文。應用層報文數據在傳輸層添加UDP首部稱UDP段。UDP段在網絡層添加IP首部稱IP數據包。IP數據包到數據鏈路層添加以太網幀首部和尾部組合成以太網幀。最后,幀被轉換為比特,通過網絡介質傳輸。這種協議棧逐層向下傳遞數據,并添加報頭和報尾的過程稱為封裝。如果逐層向上傳遞數據,出現去除報頭和報尾的過程叫解包。UDP協議報文組成部分UDP協議由四個部分組成,源端口號,目的端口號,UDP長度,UDP校驗和,UDP的首部是由8個字節組成,每個組成部分占2個字節,也就是16位。下面我們看下協議報文圖:
源、目標端口號字段:占16比特。作用與TCP數據段中的端口號字段相同,用來標識源端和目標端的應用進程。長度字段:占16比特。標明UDP頭部和UDP數據的總長度字節。校驗和字段:占16比特。用來對UDP頭部和UDP數據進行校驗。和TCP不同的是,對UDP來說,此字段是可選項,而TCP數據段中的校驗和字段是必須有的。UDP服務實現UDP協議和TCP協議在工作方式是不同的,但是他們都是建立了端口到端口的通信。端口(port)是伴隨著傳輸層誕生的概念。實現一個UDP通信服務實現是調用操作系統的API來構建socket,socket是操作系統的一種編程接口,它代表某個網絡通信。下面我們圖解一下UDP基于編程接口的調用實現。
IP協議和UDP都是無連接的,IP協議主要是通過IP地址進行投遞目標主機,UDP是通過端口投遞到指定的網絡應用程序。
TCP協議TCP協議簡介TCP協議是傳輸控制協議,面向連接的,在不可靠的互聯網上提供可靠的,全雙工通信服務傳輸協議。TCP提供傳輸連接管理機制,差錯控制,流量控制,擁塞控制等。
TCP特點TCP協議的主要特點是面向連接,全雙工通信,建立和釋放可靠的連接,流量控制和擁塞控制,支持流接口。
面向連接:源進程在指定的端口和目的進程指定的端口建立傳輸連接,一旦這個連接建立之后,通信的兩個進程就可以在這個連接上發送和接受數據流。面向連接的傳輸服務可以很好地保證數據流傳輸的可靠性。全雙工通信:全雙工概念:可以同時進行信號的雙向傳輸(A->B且B->A)。TCP允許全雙工通信。在兩個應用進程傳輸連接建立后,客戶與服務器進程可以同時發送和接收數據流。TCP在發送和接收方都使用緩存機制,發送緩存用來存儲進程準備發送的數據,接收緩存在收到報文段之后,將它們存儲在接收緩存中,等待接收進程讀取對方傳送來的數據。建立和釋放可靠的連接:為了保證傳輸連接建立和釋放的可靠性,TCP在連接建立階段防止出現因失效的連接請求數據包造成請求錯誤,TCP使用了“三次握手”機制。在釋放傳輸連接時,保證在關閉連接時已經發送的數據報可以全部正確的達到目的端口,TCP使用了“四次揮手”機制。流量控制和擁塞控制:TCP采用了大小可以變化的滑動窗口方法進行流量控制。發送窗口大小在建立連接時由雙方商定。在通信過程中,發送方可以根據自己的資源情況隨機、動態地調整發送窗口的大小,而接收方將跟隨發送方調整接收窗口。支持流接口:TCP提供一個流接口(Stream Interface),應用進程可以利用它發送連續的數據流。TCP傳輸連接提供一個“管道”,保證數據流從一端正確地“流”到另一端。TCP對數據流的內容不作任何解釋,數據流的解釋由雙方的應用程序處理。TCP協議報文組成TCP報文段由首部和數據兩部分組成。TCP首部的前20字節是固定的,稱為TCP固定首部,后面有4×N字節的選項部分。TCP協議如圖:
源端口(Source Port)和目的端口(Destination Port):各占16位。分別表示報文的源端口號和目的端口號。將TCP報文中源端口和目的端口字段加上IP報文中源IP地址和目的IP地址字段構成一個4元組<源端口,源IP地址,目的端口,目的IP地址>,它可以唯一地標識一個TCP連接。序號(Sequence Number)、確認序號(Acknowledgment Number)和通告窗口(Advertised Window):序號和確認序號各占32位,通告窗口占16位。首部長度(Header Length):占4位。表示TCP首部長度,該值以32位為單位計算,如TCP固定首部為20字節,則頭部長度為5。標志位(Flags):占6位。用于區分不同類型的TCP報文,目前用到的標志位有SYN、ACK、FIN、RST、PSH和URG。校驗和:與UDP中的校驗和字段用法完全相同,它是通過計算整個TCP報文的首部、TCP報文的數據報以及來自IP報文首部的源地址、目的地址、協議和TCP長度字段構成的偽首部得來的。TCP報文字段中的校驗和字段是必需的。選項:最常用的選項字段是最大段長度(Maximum Segment Size,MSS),通常用MSS來限制報文段數據的最大長度。TCP服務實現TCP 網絡編程有兩種模式,一種是服務器模式,另一種是客戶端模式。服務器模式創建一個服務程序,等待客戶端用戶的連接,接收到用戶的連接請求后,根據用戶的請求進行處理;客戶端模式則根據目的服務器的地址和端口進行連接,向服務器發送請求,并對服務器的響應進行處理。
關于服務器模式的程序設計流程:
套接字初始化:用戶對套接字的需求來確定套接字的選項。套接字與端口綁定:將套接字與一個地址結構進行綁定。綁定之后,在進行網絡程序設計的時候,套接字所代表的 IP 地址和端口地址以及協議類型等參數按照綁定值進行操作由于一個服務器需要滿足多個客戶端的連接請求,而服務器在某個時刻僅能處理有限個客戶端的連接請求,所以服務器需要設置服務端排隊隊列的長度。服務器在偵聽連接時會設置這個參數,限制客戶端中等待服務器處理的連接請求的隊列長度在客戶端發送連接請求之后,可以從套接字文件描述符中讀取數據或者向描述符發送數據。當服務器處理完數據,要結束與客戶端的通信過程的時候,需要關閉套接字連接。關于服務器模式可以參考下圖:
三次握手,四次揮手場景面試首先我們看下TCP建立和結束示意圖:
問題1:為什么是 TCP 三次握手?不是兩次、四次?三次握手(Three-way Handshake)其實就是指建立一個 TCP 連接時,需要客戶端和服務器總共發送 3 個包。進行三次握手的主要作用就是為了確認對方的接收能力和發送能力是否正常,從而為后面的可靠性傳送做準備。需要三次握手才能確認對方的接收與發送能力是否正常。第一次客戶端發送給服務端,服務端回復給客戶端之后,客戶端就能知道服務端具備發送和接收能力了,此時服務端能知道客戶端具備發送能力,但是接收能力還不確定,等客戶端再次回復服務端的時候,服務端能知曉客戶端也具備發送和接收能力了。三次握手的次要作用是減少惡意偽造數據包的用戶對服務器攻擊,大量攻擊數據包可能占用著未完成三次握手隊列,使得正常需要提供服務的連接進不來,有了第三次握手,如果服務器收不到攻擊數據報的ACK,就會嘗試重發SYN+ACK報文,如果多次重試,連接不上,則服務器會關閉連接,有效降低SYN攻擊帶來的資源損害。問題2:為什么關閉連接的需要四次揮手?當服務端收到客戶端FIN數據包后(第一次揮手),服務端不會立即close,為什么不立即close,因為可能數據還沒有發完,服務端會先將ACK發送告訴客戶端我收到你的斷開請求(第二次揮手),請給我一點時間,這段時間用來發送剩下的數據報文,發送之后再將FIN包發給客戶端表示現在可以斷開了(第三次揮手)??蛻舳耸盏紽IN包之后發送ACK確認斷開消息給服務端(第四次揮手)。TCP允許單向發送數據。當主動關閉方關閉連接,被動方在不調用close的狀態下,可以長時間發送數據,此時連接處于半關閉狀態。這一特性是TCP的雙向通道相互獨立導致的,也導致了關閉連接必須進行四次揮手。問題3:為什么主動斷開方在TIME-WAIT狀態必須等待2MSL的時間?MSL(Maximum Segment Lifetime)Linux中MSL的值固定為30秒,所以TIME_WAIT的時間為60秒。如果沒有這個TIME_WAIT,端口可以復用于新連接了。這時被動方的FIN報文可能再次到達,可能是路由器重復發的,也可能是被動方沒有收到ACK重發的。這樣正常的新連接就會被重復發送的舊的FIN誤關閉。保留了TIME_WAIT就可以應付重發的FIN。等待2倍MSL,其實是允許ACK丟失一次,如果一個ACK丟失,被動方重發的FIN就會在第二個MSL內到達,TIME_WAIT就可以應付。問題4:什么是SYN攻擊?SYN(synchronous)是TCP/IP建立連接時使用的握手信號。SYN攻擊屬于DDoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊解決辦法:修改等待數:sysctl -w net.ipv4.tcp_max_syn_backlog=2048啟用SYN Cookie,它的原理是,在TCP服務器收到TCP SYN包并返回TCP SYN+ACK包時,不分配一個專門的數據區,而是根據這個SYN包計算出一個cookie值。在收到TCP ACK包時,TCP服務器在根據那個cookie值檢查這個TCP ACK包的合法性。如果合法,再分配專門的數據區進行處理未來的TCP連接。
sysctl -w net.ipv4.tcp_syncookies=1修改重試次數,重傳次數設置為0,只要收不到客戶端的響應,立即丟棄該連接,默認設置為5次
sysctl -w net.ipv4.tcp_syn_retries = 0
X 關閉
X 關閉
- 1轉轉集團發布2022年二季度手機行情報告:二手市場“飄香”
- 2充電寶100Wh等于多少毫安?鐵路旅客禁止、限制攜帶和托運物品目錄
- 3好消息!京東與騰訊續簽三年戰略合作協議 加強技術創新與供應鏈服務
- 4名創優品擬通過香港IPO全球發售4100萬股 全球發售所得款項有什么用處?
- 5亞馬遜云科技成立量子網絡中心致力解決量子計算領域的挑戰
- 6京東綠色建材線上平臺上線 新增用戶70%來自下沉市場
- 7網紅淘品牌“七格格”chuu在北京又開一家店 潮人新寵chuu能紅多久
- 8市場競爭加劇,有車企因經營不善出現破產、退網、退市
- 9北京市市場監管局為企業紓困減負保護經濟韌性
- 10市場監管總局發布限制商品過度包裝標準和第1號修改單