計算機網絡 - 2.基礎協議

1.TCP協議

在這里插入圖片描述

  • 1.TCP(Transmission Control Protocol):傳輸控制協議
  • 2.TCP協議是一種面向連接的可靠的、 基于字節流傳輸層通信協議
    • 1.面向連接:兩個使用TCP協議的應用(通常一個客戶和一個服務器)在彼此交換數據包之前必須先建立一個TCP連接
    • 2.可靠的
      • 1.數據傳輸之前都要建立連接(三次握手),數據傳輸結束后都要釋放連接(四次揮手
      • 2.數據被分割成TCP認為適合發送的數據塊,而采用UDP協議的數據長度將保持不變
      • 3.由TCP傳遞給IP的信息單位稱為報文段或段segment
      • 4.當TCP發出一個段后將啟動一個定時器,等待目的端確認收到這個報文段,如果不能及時收到一個確認,將重發這個報文段
      • 5.等待協議:客戶發送一次數據到服務端,必須等到服務端響應后才發第二次數據,中間的等待時間占了大部分時間,中間如果出現差錯(超時或確認丟失)都需要重新傳輸
      • 5.TCP將保存首部和數據的檢驗和,這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化,如果收到段的檢驗和有差錯,TCP將丟棄這個報文段并不確認收到此報文段,發送端需要重新發送
  • 3.TCP位碼即TCP標志位共有六種
    • 1.SYN(建立)
    • 2.ACK(確認)
    • 3.PSH(傳送)
    • 4.FIN(結束)
    • 5.RST(重置)、
    • 6.URG(緊急)
    • 7.Sequence number(順序號碼)
    • 8.Acknowledge number(確認號碼)
1.三次握手

在這里插入圖片描述
在這里插入圖片描述

  • 1.TCP協議中建立連接需要經過三次握手,開始時客戶端處于CLOSED的狀態,服務端處于LISTEN狀態
    • 1.第一次握手
      • 1.客戶端發送SYN報文()到服務器并指明客戶端的初始化序列號seq,此時客戶端處于SYN_SEND狀態,等待服務器確認
      • 2.首部的同步位SYN=1,初始化序列號sqe=xx是一個隨機生成的值
    • 2.第二次握手
      • 1.服務器收到客戶端的SYN報文,發送一個SYN+ACK報文作為應答并且指定自己的初始化序列號
      • 2.將客戶端的初始化序列號加一,即x + 1作為ack的值,表示已經收到了客戶端的 SYN報文,此時服務器處于SYN_REVD的狀態
      • 3.確認報文段中SYN=1ACK=1,確認號ack=x+1,初始化序列號seq=y
    • 3.第三次握手
      • 1.客戶端收到服務器SYN+ACK報文后,會向服務器發送一個ACK報文表示已經收到了服務端的報文
      • 2.此時客戶端處于ESTABLISHED狀態,服務器收到ACK報文之后,也處于ESTABLISHED狀態,此時雙方已建立起了連接,完成三次握手
      • 3.確認報文段中ACK=1,確認號ack=y+1,初始化序列號seq=x+1
  • 2.三次握手(Three-way Handshake)本質:指建立一個TCP連接時需要客戶端和服務器總共發送3個包
  • 3.三次握手的作用:確認雙方的接收能力和發送能力是否正常,指定自己的初始化序列號為后面的可靠性傳送做準備,實質上是連接服務器指定端口建立TCP連接并同步連接雙方的序列號和確認號,交換TCP窗口大小信息
  • 4.理想狀態下TCP連接一旦建立,則在通信雙方中的任何一方主動關閉連接之前TCP 連接都將被一直保持下去
  • 5.一般握手過程中傳送的包里不包含數據,三次握手完成后客戶端與服務器才正式開始傳送數據
  • 6.注意
    • 1.SYN=1報文段不能攜帶數據,ACK報文段可以攜帶數據,不攜帶數據則不消耗序號,即三次握手的前兩次不能攜帶數據,而第三次可以攜帶數據
    • 2.ACKack的區別
      • 1.三次握手發送的數據包中有兩個ACK,習慣通過一個大寫一個小寫加以區分
      • 2.ACK:確認標志(Acknowledgement),值為1表示確認連接
      • 3.ack:確認編號(Acknowledgement Number),值為發送方傳來的seq+1,表示已經成功接收上一次所有數據
    • 3.需要三次握手的原因
      • 1.第一次握手:客戶端發送網絡包,服務端接收;結論:服務端可知客戶端的發送能力正常
      • 2.第二次握手:服務端發送網絡包,客戶端接收;結論:客戶端可知服務端的接收,發送能力正常,但是此時服務端并不能確認客戶端的接收能力正常所以需要第三次的確認
      • 3.第三次握手:客戶端發送網絡包,服務端接收;結論:服務端可知客戶端的接收,發送能力正常
    • 4.兩次握手的問題
      • 1.客戶端發出連接請求但因連接請求報文丟失而未收到確認,于是客戶端再重傳一次連接請求
      • 2.服務端后來收到了確認,建立了連接,數據傳輸完畢后,就釋放了連接
      • 3.客戶端共發出了兩個連接請求報文段,其中第一個丟失,第二個到達了服務端,但是第一個丟失的報文段只是在某些網絡結點長時間滯留,從而延誤到連接釋放以后的某個時間才到達服務端
      • 4.此時服務端誤認為客戶端又發出一次新的連接請求,于是就向客戶端發出確認報文段,同意建立連接
      • 5.不采用三次握手,只要服務端發出確認就建立新的連接,此時客戶端忽略服務端發來的確認也不發送數據,則服務端一致等待客戶端發送數據,浪費資源
    • 5.半連接隊列和全連接隊列
      • 1.服務器第一次接收到客戶端的SYN報文后會處于SYN_RCVD狀態,此時雙方還沒有完全建立其連接,服務器會把此種狀態下請求連接放在一個隊列里,把這種隊列稱之為半連接隊列
      • 2.全連接隊列:已經完成三次握手建立起連接的會放在全連接隊列中,如果隊列滿了有可能會出現丟包現象
      • 3.服務器發送完SYN+ACK包后如果未收到客戶確認包,服務器進行首次重傳,等待一段時間仍未收到客戶確認包進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除,且每次重傳等待的時間不一定相同,一般會是指數增長
1.初始化序列號ISN

在這里插入圖片描述

  • 1.客戶端和服務端在建立TCP連接時,雙方都會發送SYN報文并初始化序列號(Initial Sequence NumberISN)
  • 2.使用相同ISN導致的問題
    • 1.假設AB使用固定的序號,A使用序號1B建立TCP連接,發送一個SYN報文,此時seq = 1,經過三次握手后AB之間建立TCP連接完成
    • 2.當AB建立TCP連接后,A又使用相同的序號1B發送了200字節數據,不過因為網絡擁塞問題,這個TCP數據報一直在網絡中逗留并沒有立即到達B
    • 3.由于A發送的TCP數據報一直沒到達B,正好此時A發生故障并重啟,于是B就釋放這條TCP連接,然后A重啟后又使用序號1B建立新的TCP連接
    • 4.當TCP連接建立后A又使用序號1B發送了240字節的數據,不過這次網絡很穩定B馬上就收到A發送的數據,注意此時A發送數據使用新的TCP連接
    • 5.A之前發送的TCP數據報經過一段時間后終于到達B,不過該TCP數據報屬于之前已經釋放的舊TCP連接,B應該把這個數據報丟棄掉,但是由于A每次發送報文都使用了相同的序號(seq = 1)從而會讓B誤認為該數據報屬于新建立的TCP連接,因此B會對該數據照收不誤導致B在收到新TCP連接的數據后又收到舊TCP連接的數據從而出現數據亂序的問題
  • 3.ISN的作用:保證消息的順序性
    • 1.由于AB之間的一個TCP連接通常是由AB2ip地址,2個端口號構成的四元組
    • 2.因此當A出現了故障把該TCP連接斷開之后再以相同的四元組建立新的TCP連接(AB兩次建立TCP連接都是使用相同的ip地址和端口),就會出現數據亂序的問題
    • 3.因為只要A發送了一個TCP報文段且這個TCP報文段的四元組和序號和之前的TCP連接(四元組和序號)相同的話就會被B確認
    • 4.這反映了TCP的一些缺點,如果被一些惡意攻擊者加以利用TCP的這種缺點,選擇合適的序號,ip地址和端口就能偽造出一個TCP報文段從而打斷正常的TCP連接
    • 5.但是初始化序號的方式(通過算法來隨機生成序號)就會使序號難以猜出,也就不容易利用這種缺點來進行一些惡意攻擊行為,且如何序號不同那么B在接收到這個序號為1TCP報文時,發現該TCP報文的序號不在新TCP連接的接收范圍內時會把這個TCP報文丟棄掉從而避免了數據亂序的問題
2.四次揮手

在這里插入圖片描述

  • 1.TCP協議中斷開連接需要經過四次揮手,開始時客戶端和服務端都處于ESTABLISHED狀態,假定客戶端先發起關閉請求
    • 1.第一次揮手

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

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

相關文章

前端之vue3創建基本工程,基本登錄、注冊等功能的完整過程

此文也是為了做一個基本學習用的vue3創建項目的過程,包含基本的登錄頁面、登出頁面、基本的router跳轉、axios調用、登錄驗證等內容。與項目: https://gitee.com/rainpet/java-web-demo/tree/master/spring-security01 可以配套使用。 如下為主要過程。 …

如果有三個服務實例部署在三臺不同的服務器上,這三個服務實例的本地緩存,是存儲一模一樣的數據?還是各自只存一部分?

? 答案是:通常每個服務實例都會獨立地緩存它自己訪問過的數據,這些數據可能是相同的,也可能是不同的,取決于請求的內容。 📌 舉個例子說明 假設你有一個商品詳情頁的服務,部署了 3 個服務實例&#xff08…

九州未來十三載:開源賦能 智啟未來

2012年,九州未來以“開源賦能云邊變革”為使命,開啟中國開放云邊基礎架構服務的探索之路。十三載堅守深耕,我們始終以開源為翼,以算力為基,在科技浪潮中砥礪前行,見證并推動著AI時代的算力變革。 堅守初心丨…

Axure項目實戰:智慧運輸平臺后臺管理端-訂單管理1(多級交互)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:訂單管理 主要內容:條件組合、中繼器篩選、表單跟隨菜單拖動、審批數據互通等 應用場景…

WebAssembly:開啟跨平臺高性能編程的新時代

在當今的互聯網時代,Web 應用的復雜性和性能要求越來越高。從簡單的網頁瀏覽到復雜的在線游戲、實時數據處理和圖形渲染,開發者需要一種能夠兼顧性能和兼容性的技術。WebAssembly(簡稱 Wasm)應運而生,它作為一種新興的…

大數據治理:理論、實踐與未來展望(二)

書接上文 文章目錄 七、大數據治理的未來發展趨勢(一)智能化與自動化(二)數據隱私與安全的強化(三)數據治理的云化(四)數據治理的跨行業合作(五)數據治理的生…

計算機視覺與深度學習 | Matlab實現EMD-GWO-SVR、EMD-SVR、GWO-SVR、SVR時間序列預測(完整源碼和數據)

以下是一個完整的Matlab時間序列預測實現方案,包含EMD-GWO-SVR、EMD-SVR、GWO-SVR和SVR四種方法的對比。代碼包含數據生成、信號分解、優化算法和預測模型實現。 %% 主程序:時間序列預測對比實驗 clc; clear; clearvars; close all;% 生成模擬時間序列數據 rng(1); % 固定隨…

RabbitMQ核心特性——重試、TTL、死信隊列

一、重試機制 在消息傳輸過程中,可能遇到各種問題,如網絡故障,服務器不可用等,這些問題可能導致消息處理失敗,因此RabbitMQ提供了重試機制,允許消息處理失敗后重新發送,但是,如果是因…

MVCC實現原理

MVCC的基本概念 MVCC,一個數據的多個版本,使得讀寫操作沒有沖突。 在多個事務并發的情況下,確定到底要訪問哪個版本。 MVCC實現原理 MVCC實現依賴于隱式字段,undo log日志,readView 隱式字段 在mysql用戶自定義的…

湖北理元理律師事務所債務優化方案解析:如何科學規劃還款保障生活質量

在當前經濟環境下,債務問題已成為困擾許多家庭的重要難題。據相關統計數據顯示,我國個人負債率呈現逐年上升趨勢,如何合理規劃還款、保障基本生活質量成為亟待解決的社會問題。湖北理元理律師事務所基于多年實務經驗,研發出一套科…

ffmpeg 轉換視頻格式

使用FFmpeg將視頻轉換為MP4格式的常用命令: ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4 -i input.avi:指定輸入文件 -c:v libx264:使用H.264視頻編碼器 -crf 23:控制視頻質量(范圍18-28&#…

LLM Tuning

Lora-Tuning 什么是Lora微調? LoRA(Low-Rank Adaptation) 是一種參數高效微調方法(PEFT, Parameter-Efficient Fine-Tuning),它通過引入低秩矩陣到預訓練模型的權重變換中,實現無需大規模修改…

實現tdx-hs300-mcp

文章目錄 項目簡介功能說明使用方法配置說明項目簡介 tdx-hs300-mcp是一個Model Context Protocol (MCP)的服務 功能說明 下載數據自動保存為CSV格式文件使用方法 確保已安裝Python 3.7+和依賴庫: pip install pytdx fastapi uvicorn啟動MCP服務: mcp run MCP.py使用MCP工具…

《100天精通Python——基礎篇 2025 第20天:Thread類與線程同步機制詳解》

目錄 一、概念簡單回顧二、Python的線程開發2.1 Thread類2.1.1 線程啟動2.1.2 線程退出2.1.3 線程的傳參2.1.4 threading的屬性和方法2.1.5 Thread實例的屬性和方法2.1.6 start和run方法 2.2 多線程2.3 線程安全2.4 daemon線程2.5 threading.local類2.6 __slots__拓展 三、線程…

【web應用】前后端分離開源項目聯調運行的過程步驟ruoyi

文章目錄 ?前言?一、項目運行環境準備?二、數據庫創建🌟1、新建數據庫🌟2、導入數據腳本 ?三、運行后端項目🌟1、打開后端項目🌟2、后端項目配置項修改 ?四、運行前端項目VUE3🌟1、在IDEA另一個窗口中打開前端項目…

【深度剖析】三一重工的數字化轉型(下篇1)

在數字經濟持續發展的背景下,企業數字化轉型方案成為實現轉型的關鍵。不同行業內的企業因轉型動機和路徑的差異,其轉型成效也各異。三一重工作為機械制造行業的領軍企業,較早地實施了數字化轉型,并積累了豐富的經驗。本研究選取三一重工作為案例,通過梳理相關文獻,對其數…

Nacos適配GaussDB超詳細部署流程

1部署openGauss 官方文檔下載 https://support.huaweicloud.com/download_gaussdb/index.html 社區地址 安裝包下載 本文主要是以部署輕量級為主要教程 1.1系統環境準備 操作系統選擇 系統AARCH64X86-64openEuler√√CentOS7√Docker√√1.2軟硬件安裝環境 版本輕量版(單…

國際前沿知識系列五:時間序列建模方法在頭部撞擊運動學測量數據降噪中的應用

目錄 國際前沿知識系列五:時間序列建模方法在頭部撞擊運動學測量數據降噪中的應用 一、引言 二、時間序列建模方法 (一)ARIMA 模型 (二)指數平滑法 (三)小波變換 三、實際案例分析 &…

線性代數中的向量與矩陣:AI大模型的數學基石

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

第十七次CCF-CSP算法(含C++源碼)

第十七次CCF-CSP認證 小明種蘋果AC代碼 小明種蘋果&#xff08;續&#xff09;AC代碼 后面好難哈哈 小手冰涼 小明種蘋果 輸入輸出&#xff1a; 題目鏈接 AC代碼 #include<iostream> using namespace std; int n,m; int res,res3; int sum; int res21; int main(){cin …