網絡_協議

?關鍵詞:

OSI是Open System Interconnect的縮寫,意為開放式系統互聯。

RTT : Round-Trip time 往返時間

RTO:Retransmission Timeout超時重傳時間

MSL :?

OSI 七層模型和 TCP/IP 四層模型

OSI七層模型和TCP/IP五層模型(原來應該是四層,新版教程改成五層)的映射關系,以及對應的功能和協議:

image

OSI七層模型TCP/IP五層模型對應網絡協議功能
應用層(Application)應用層(Application)HTTP、TFTP, FTP, NFS, WAIS、SMTP文本傳輸、電子郵件、文件服務、虛擬終端等
表示層(Presentation)Telnet, Rlogin, SNMP, Gopher數據格式化、代碼轉換、數據加密
會話層(Session)SMTP, DNS解除/建立與別的連接點的Connection
傳輸層(Transport)傳輸層(Transport)TCP, UDP提供端對端接口
網絡層(Network)網絡層(Network)IP, ICMP, ARP, RARP, AKP, UUCP為數據包提供路由選擇
數據鏈路層(Data Link)數據鏈路層(Data Link)FDDI, Ethernet, Arpanet, PDN, SLIP, PPP傳輸帶地址的幀、提供錯誤檢測功能
物理層(Physical)物理層(Physical)IEEE 802.1A, IEEE 802.2到IEEE 802.11以二進制數據形式在物理媒介上傳輸數據

無論哪種模型,都可以看出來,四層是指傳輸層,七層是指應用層

TCP三次握手四次揮手

TCP是面向連接的,所有的連接是指雙方都確認了連接的建立。

三次握手

我們來看一下三次握手的過程:

  • 一開始,客戶端和服務端都處于?CLOSED?狀態。客戶端主動打開連接,服務端被動打卡連接,結束CLOSED?狀態,開始監聽,進入?LISTEN狀態。

一次握手

客戶端會隨機初始化序號(client_isn),

  • 將此序號置于 TCP 首部的「序號」字段中,
  • 同時把?SYN?標志位置為?1?,表示?SYN?報文。

接著把第一個 SYN 報文發送給服務端,表示向服務端發起連接。該報文不包含應用層數據,之后客戶端處于?SYN-SENT?狀態。

二次握手

服務端收到客戶端的?SYN?報文后,首先服務端也隨機初始化自己的序號(server_isn),

  • 將此序號填入 TCP 首部的「序號」字段中,
  • 其次把 TCP 首部的「確認應答號」字段填入?client_isn + 1,
  • 接著把?SYN?和?ACK?標志位置為?1

最后把該報文發給客戶端,該報文也不包含應用層數據,之后服務端處于?SYN-RCVD?狀態。

三次握手

客戶端收到服務端報文后,還要向服務端回應最后一個應答報文,

  • 首先該應答報文 TCP 首部?ACK?標志位置為?1?,
  • 其次「確認應答號」字段填入?server_isn + 1?,

最后把報文發送給服務端,這次報文可以攜帶客戶到服務器的數據,之后客戶端處于?ESTABLISHED?狀態。

好了,經過三次握手的過程,客戶端和服務端之間的確定連接正常,接下來進入ESTABLISHED狀態,服務端和客戶端就可以快樂地通信了。

問題:為什么是三次,不是兩次、四次?

兩次:如果只有前兩次,服務端會認為連接已經建立,如果客戶端后續不在發送報文,也就是客戶端不認可這個鏈接,相當于這個連接資源浪費了。

四次:三次就可以完成雙方的確認,沒有必要多進行一次。

四次揮手

一次揮手

  • 客戶端打算關閉連接,此時會發送一個 TCP 首部?FIN?標志位被置為?1?的報文,也即?FIN?報文,之后客戶端進入?FIN_WAIT_1?狀態。

二次揮手

  • 服務端收到該報文后,就向客戶端發送?ACK?應答報文,接著服務端進入?CLOSED_WAIT?狀態。

三次揮手

  • 客戶端收到服務端的?ACK?應答報文后,之后進入?FIN_WAIT_2?狀態。等待服務端處理完數據后,也向客戶端發送?FIN?報文,之后服務端進入?LAST_ACK?狀態。

四次揮手

  • 客戶端收到服務端的?FIN?報文后,回一個?ACK?應答報文,之后進入?TIME_WAIT?狀態
  • 服務器收到了?ACK?應答報文后,就進入了?CLOSED?狀態,至此服務端已經完成連接的關閉
  • 客戶端在經過?2MSL?一段時間后,自動進入?CLOSED?狀態,至此客戶端也完成連接的關閉。

可以看到,每個方向都需要一個 FIN 和一個 ACK,因此通常被稱為四次揮手

問題:為什么是四次,不是三次?

三次:如果是三次,需要將服務端的ACK和FIN包合成一次發送,但是服務端在收到客戶端的FIN包后,需要釋放資源等各種善后操作,這個會比較浪費時間,導致給客戶端端的響應時間超時,從而導致客戶端重發FIN包。 所以將服務端的ACK和FIN分開發送。

思考:為什么握手需要經過雙方對彼此的確認, 而揮手只需要一方對另一方的確認就可以了呢?

握手需要雙方對彼此的確認,是要保證連接得到雙方認可(不浪費);揮手其實也是雙方對彼此的確認, 只不過是分兩階段進行的。

TCP與UDP

TCP是一個面向連接的、可靠的、基于字節流的傳輸層協議。

UDP是一個面向無連接的傳輸層協議。

面向連接:指的是客戶端和服務端建立連接,在雙方相互通信之前,TCP需要三次握手建立連接,而UDP沒有建立連接的過程。

可靠性:TCP花了很多的功夫保障連接的可靠性

  • TCP有狀態:TCP會進準記錄哪些數據發送了,哪些數據被對方接受了,哪些沒有被接受,而且保證數據包按序到達,不允許半點差錯。
  • TCP可空:意識到丟包了或者網絡環境不佳,TCP會根據情況調整自己的行為,控制自己的發送速度或者重發。

報文中的序列號

凡是對端的確認都需要序列號,防止端發送重復的報文。這樣也使得調用有順序性。

TCP中的端口號

端口號位于傳輸層的TCP報文頭中。端口號用兩個字節表示,最大值65535

1. 熟知的端口號:0~1023

  • HTTP: 80
  • HTTPS: 443
  • FTP: 21
  • SSH: 22
  • Telnet: 23
  • SMTP: 25
  • DNS: 53

2. 已登記的端口號:1024~49151

  • MySQL: 3306
  • Oracle DB: 1521
  • Redis: 6379
  • MongoDB: 27017
  • Tomcat: 8080

3. 臨時端口號:49152~65535?

????????你的瀏覽器在訪問網站時,操作系統會隨機分配這個范圍內的一個端口作為源端口

telnet用法

1. telnet ip/domianName??port :遠端這個地址下的這個端口是否可以訪問

2. telnet 發送http請求

輸入紅框里的內容, 發送http請求,就會得到http的響應

curl? 命令同樣可以訪問網絡域名

netstat

> netstat -at

> netstat -au

tcpdump

是一個命令行的網絡流量分析工具,功能非常強大,一般用于抓TCP的包。

tcpdump -i any host 180.101.49.44

  • tcpdump 抓包
  • -i? 在機器的網卡上抓包
  • any 任意網卡
  • 180.101.49.44? 某次測試時百度的地址

?參考:

1.?深入分析四層/七層網關 - Hello-Brand - 博客園

2.?“三次握手,四次揮手”這么講,保證你忘不了 - 三分惡 - 博客園

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920560.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920560.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920560.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vscode有的結構體不能補全,有的可以補全問題的解決.

定義了一個結構體,發現不能自動補全變量名稱.而另外一個結構體卻可以正常補全.經過研究發現是,新定義的結構體變量類型uint32_t,vscode認為其是錯誤類型導致的.暫時改為int型,后發現問題消失.可以正常補全了.由于工程使用cubeide生成,uint32_t定義在軟件安裝目錄,并沒有和項目文…

JavaScript 數組核心操作實戰:最值獲取與排序實現(從基礎到優化)

在JavaScript開發中,數組的“最值獲取”和“排序”是高頻需求。本文將基于你的原始代碼,系統解析數組最值獲取、升序/降序排序的實現邏輯,通過“問題分析→代碼優化→原理講解”的流程,幫助你掌握更靈活、高效的數組操作方法&…

driver.js實現前端頁面引導

1.安裝 npm install driver.js2.實現代碼示例 <template><div class"home-container"><!-- 頁面內容 --><LeftPanel id"guide-left-panel" /><button id"guide-file-upload">文件上傳</button><button i…

技術速遞|使用 AI 應用模板擴展創建一個 .NET AI 應用與自定義數據進行對話

在本快速入門中&#xff0c;你將學習如何使用 .NET AI 應用模板創建一個 .NET AI 應用&#xff0c;與自定義數據進行對話。該模板旨在簡化 .NET 構建 AI 應用的上手體驗&#xff0c;幫助你處理常見的設置任務和配置。 先決條件 .NET 9.0 SDK 以下任一 IDE&#xff08;可選&am…

使用Cloudflare的AI Gateway代理Google AI Studio

1、說明詳見&#xff1a;詳見&#xff1a;https://developers.cloudflare.com/ai-gateway/usage/providers/google-ai-studio在"Google AI Studio"創建"API key" 在"Cloudflare"創建"AI Gateway"、獲取"Account ID"2、在“G…

Scrapy 框架實戰:構建高效的快看漫畫分布式爬蟲

一、Scrapy框架概述 Scrapy是一個為了爬取網站數據&#xff0c;提取結構性數據而編寫的應用框架&#xff0c;它提供了強大的數據提取能力、靈活的擴展機制以及高效的異步處理性能。其核心架構包括&#xff1a; Engine&#xff1a;控制所有組件之間的數據流&#xff0c;當某個…

數據結構(C語言篇):(六)單鏈表算法題(下)

目錄 前言 一、鏈表的回文結構 二、相交鏈表 三、環形鏈表?編輯 四、環形鏈表II 總結 前言 本篇博客將繼續介紹單鏈表相關的算法題&#xff0c;包括了鏈表的回文結構、相交鏈表、環形鏈表等。現在就讓我們正式開始吧&#xff01; 一、鏈表的回文結構 題目鏈接&#xff1a…

【AI自動化】VSCode+Playwright+codegen+nodejs自動化腳本生成

VSCodePlaywrightnodejs&#xff0c;能完美實現UI自動化全流程腳本自動生成和回放&#xff0c;生成的腳本方便維護&#xff0c;回放執行快速&#xff1b; 概述 Playwright 是由Microsoft開發的一個開源的跨瀏覽器自動化測試庫&#xff0c;它支持Chromium、WebKit和Firefox瀏覽…

基于能量方法的納維-斯托克斯方程高階范數有界性理論推導-陳墨仙

寫在最前面&#xff0c;圈外人&#xff0c;沒有背書沒有教育郵箱&#xff0c;發不了預印本&#xff0c;我先發csdn。剛才首發沒復制完&#xff0c;抱歉&#xff0c;現在編輯下。基于能量方法的納維-斯托克斯方程高階范數有界性理論推導作者 陳墨仙郵件 2488888241qq.com摘要納維…

Labview邪修01:貪吃蛇

從博主很小的時候就在掌機上玩過這個貪吃蛇的小游戲&#xff0c;突然有一天心血來潮的想Labview是不是也可以編這個小游戲&#xff0c;回憶一下童年&#xff01;然后就又了下面的這個程序&#xff0c;執行結果如下圖所示。 基本功能&#xff1a; 1&#xff09;點擊開始按鈕&am…

將自己的jar包發布到maven中央倉庫(2025-08-29)

將自己的jar包發布到maven中央倉庫(2025-08-29) 一、注冊賬號 https://central.sonatype.com/ 二、新建命名空間 這里的命名空間需要填寫github的用戶名因為我的用戶名是daimao0,所以命名空間填io.github.daimao0 這里要求你建一個名為ubuxfc5q7r的公共項目&#xff0c;先創…

Spring CompositeCacheManager融合緩存

這是一個非常實用但容易被忽視的組件,它在特定的緩存場景下能提供極大的靈活性。 1. 核心概念:它是什么? ??CompositeCacheManager?? 是 Spring Framework 緩存抽象(spring-context模塊)的一部分。它的核心作用正如其名——??組合(Composite)??。 它本身并不…

無懈可擊的 TCP AIMD

不特指 TCP AIMD&#xff0c;而泛指控制范疇的所有 Additive Increase / Multiplicative Decrease 算法&#xff0c;繼 難以超越的 TCP AIMD 再敘。 “你永遠不能僅憑 BBR 的吞吐更高就說 BBR 比 CUBIC 更好” 這句話怎么總是沒人看&#xff0c;這句話是這一系列文章的前提論點…

數據集數量與神經網絡參數關系分析

1. 理論基礎 1.1 經驗法則與理論依據 神經網絡的參數量與所需數據集大小之間存在重要的關系&#xff0c;這直接影響模型的泛化能力和訓練效果。 經典經驗法則10倍法則&#xff1a;數據樣本數量應至少為模型參數量的10倍 公式&#xff1a;數據量 ≥ 10 參數量適用于大多數監督學…

項目經驗處理

訂單取消和支付成功并發問題 這是一個非常經典且重要的分布式系統問題。訂單取消和支付成功同時發生&#xff0c;本質上是一個資源競爭問題&#xff0c;核心在于如何保證兩個并發操作對訂單狀態的修改滿足業務的最終一致性&#xff08;即一個訂單最終只能有一種確定的狀態&…

rabbitmq學習筆記 ----- 多級消息延遲始終為 20s 問題排查

問題現象 在實現多級延遲消息功能時&#xff0c;發現每次消息延遲間隔始終為20s&#xff0c;無法按照預期依次使用20s→10s→5s的延遲時間。日志顯示每次處理時移除的延遲時間都是20000L。 問題代碼片段 1.生產者 Testvoid sendDelayMessage2() {List<Long> expireTimeLi…

軟件測試(三):測試流程及測試用例

1.測試流程1.需求分析進行測試之前先閱讀需求文檔&#xff0c;分析指出不合理或不明確的地方2.計劃編寫與測試用例測試用例用例即&#xff1a;用戶使用的案例測試用例&#xff1a;執行測試的文檔作用&#xff1a;用例格式&#xff1a;----------------------------------------…

Python:列表的進階技巧

列表&#xff08;list&#xff09;作為 Python 最常用的數據結構之一&#xff0c;不僅能存儲有序數據&#xff0c;還能在推導式、函數參數傳遞、數據處理等場景中發揮強大作用。下面介紹一些進階技巧與常見應用。一、去重與排序1、快速去重&#xff08;不保序&#xff09;nums …

【完整源碼+數據集+部署教程】硬幣分類與識別系統源碼和數據集:改進yolo11-SWC

背景意義 隨著經濟的發展和數字支付的普及&#xff0c;傳統硬幣的使用逐漸減少&#xff0c;但在某些地區和特定場合&#xff0c;硬幣仍然是重要的支付手段。因此&#xff0c;硬幣的分類與識別在自動化支付、智能零售和物聯網等領域具有重要的應用價值。尤其是在銀行、商超和自助…