網絡原理---TCP/IP

活動發起人@小虛竹 想對你說:

這是一個以寫作博客為目的的創作活動,旨在鼓勵大學生博主們挖掘自己的創作潛能,展現自己的寫作才華。如果你是一位熱愛寫作的、想要展現自己創作才華的小伙伴,那么,快來參加吧!我們一起發掘寫作的魅力,書寫出屬于我們的故事。我們誠摯邀請你參加為期14天的創作挑戰賽!

提醒:在發布作品前,請將不需要的內容刪除。

1.應用層

我們之前編寫完了基本的 java socket ,要知道,我們之前所寫的所有代碼都在應?層,都是為了 完成某項業務,如翻譯等。關于應?層,我們在講解完畢基本的 TCP/IP 協議之后,我們會單獨來進 ?講解。

2.傳輸層

負責數據能夠從發送到傳輸到接收端。

2.1 再談端口號

端口號標識了一個主機上進行通信的不同的應用程序。

在TCP/IP協議中,?"源IP","源端?號","?的IP","?的端?號","協議號"這樣?個五元組來標識?個 通信(可以通過netstat-n查看);

端?號范圍劃分

? 0-1023:知名端?號,HTTP,FTP,SSH等這些?為使?的應?層協議,他們的端?號都是固定的.

? 1024-65535:操作系統動態分配的端?號.客?端程序的端?號,就是由操作系統從這個范圍分配 的.

2.2UDP協議

UDP協議格式

? 16位UDP?度,表?整個數據報(UDP?部+UDP數據)的最??度;?如果校驗和出錯,就會直接丟棄;

UDP的特點:

  • 無連接:知道對端的IP和端?號就直接進?傳輸,不需要建?連接,
  • 不可靠傳輸:沒有確認機制,沒有重傳機制;如果因為?絡故障該段?法發到對?,UDP協議層也不會給應 ?層返回任何錯誤信息;(如何理解這里的不可靠,?向數據報?應?層交給UDP多?的報?,UDP原樣發送,既不會拆分,也不會合并;)
  • 面向數據報:不能夠靈活的控制讀寫數據的次數和數量
  • 全雙工

我們接下來了解UDP報頭,我們所熟知的HTTP協議的報頭是文本格式的,UDP/TCP/IP的報頭是二進制格式的。

長度

整個UDP數據報長度(報頭+載荷),長度屬性也是兩個字節,表示范圍0~65535(64KB).

端口號

一個端口號的取值范圍是0~65535,實際上一般把1024以下的端口保留,我們寫代碼都用1024~65535這個范圍的。服務器的端口是程序員指定的(提前指定好,客戶端才能訪問到),客戶端的端口是系統自動分配的空閑端口(如果提前指定了,可能會與你客戶端上的程序起沖突)。

校驗和

驗證數據是否發生修改,之前我們將HTTP的數字簽名是為了防止黑客篡改(防人),但UDP的校驗和不是為了防人,和安全性無關,而是為了防止出現運輸過程中的“比特翻轉”(即1變0,0變1)。

發送之前,先計算一個校驗和,把整個數據包的數據都代入,把數據與校驗和一起發送給對端,接收方收到之后重新計算一下校驗和,和收到的校驗和進行對比(UDP發現校驗和不一致,就會直接丟棄)。UDP的校驗和使用了CRC方式來進行校驗(循環冗余校驗),把每個字節(除了校驗和位置的部分之外),都當做整數,進行累加,溢出來也沒有關系,繼續加最終得到結果,crc校驗和傳輸到對端,數據出現錯誤了,對端再次 計算的校驗和就會和第一個校驗和不以樣。

認為兩個原始數據相同,使用相同的校驗和算法,得到的校驗和也應該是相同的,反之,兩個校驗和相同,原始數據一定也相同(可能存在變數)。

UDP使?注意事項

UDP總長度最大是64KB,可以表述為UDP總長度達到64KB或UDP攜帶的載荷長度達到64KB上限。

我們注意到,UDP協議?部中有?個16位的最??度.也就是說?個UDP能傳輸的數據最??度是 64K(包含UDP?部). 然?64K在當今的互聯?環境下,是?個?常?的數字.如果我們需要傳輸的數據超過64K,就需要在應?層?動的分包,多次發送,并在接收端?動拼裝。

2.3TCP協議

TCP協議特點:有鏈接,面向字節流,可靠傳輸,全雙工。

TCP協議段格式

1.16位源端口號/16位目的端口號:傳輸層的核心內容;

2.4位首部長度:表?該TCP頭部有多少個32位bit(有多少個4字節);所以TCP頭部最??度是15*?4=60。

3.選項:選項的存在,導致tcp報頭長度是可變的。

4.保留6位:TCP報頭中就預留了一些“保留位”,現在先不用,但是先占個位子。

5.:TCP最核心的6個標志位

  • ?URG:緊急指針是否有效.
  • ?ACK:確認號是否有效,ack為1,表示是應答報文.
  • ?PSH:提?接收端應?程序?刻從TCP緩沖區把數據讀?.
  • ?RST:對?要求重新建?連接;我們把攜帶RST標識的稱為復位報?段.
  • SYN:請求建?連接;我們把攜帶SYN標識的稱為同步報?段.
  • ?FIN:通知對?,本端要關閉了,我們稱攜帶FIN標識的為結束報?段.

6.16位校驗和:用來校驗數據是否出現錯誤.

7.針對確認應答中的情況,給數據進行編號,其中確認序號只在應答報文中才生效。

8.16位緊急指針:標識哪部分數據是緊急數據

TCP的核心機制

可靠性:此處的可靠性,不是說A給B發一個消息,B100%能收到,而是A給B發了消息之后,盡量讓B收到消息。

TCP核心機制一:確認應答

保證可靠性的一個關鍵前提,發送方知道自己的數據是否被對方收到,需要對方給返回一個“應答報文”(acknowledge.ack),發送方知道應答報文,就可以確認對方收到了。

舉個例子,我們用短信給別人發送多條消息時,正常情況下,如圖所示

但是在網絡上會出現后發先至的情況,如圖所示,這種情況會引起誤解,

那么針對這種情況,我們又該如何解決,接下來我們介紹一下TCP的解決方案

TCP將每個字節的數據都進行了編號,即為序列號。上述列子編號如上圖所示:

每?個ACK都帶有對應的確認序列號,意思是告訴發送者,我已經收到了哪些數據;下?次你從哪?開始 發.

1.TCP是面向字節流的,在編號時,不是按照用條、2條來編號的,而是按照“字節”的方式來編號的,每個字節都分配一個編號,編號是連續遞增的。

? ? ? ? 一個TCP的載荷是由多個字節構成的,需要多個編號,那么此處的序號該怎么填寫:序號字段填寫載荷部分的第一個字節的序號,序號連續遞增;確認序號填法是把收到的載荷數據的最后一個字節序號+1。

2.引入序號之后,接收方就可以根據序號對數據進行排序,TCP需要先處理后發先至的情況,確保應用程序通過socket api讀到的數據順序(即確保代碼里讀到的數據和發送方寫入的數據順序一致)是正確的。

3.TCP報頭不參與排序,序號、確認序號都是針對載荷的,TCP在接收方這里會安排“接收緩沖區”,(內存,操作系統內核里),通過網卡讀到的數據,先放到緩沖區中,后續代碼里調用read,也是從接收緩沖區來讀的。

4.在接收緩 沖中,根據序號來排序,序號小的在前面,大的在后面,確保前面的數據已經到了,然后read才能接觸阻塞,如果是后面的數據先到,read會繼續阻塞,不會讀取到數據。

TCP核心機制二:超時重傳

1.超時重傳是針對丟包的情況做出處理,這里首先會設置一個超時時間,

比如A給B發送數據等B的回應,如果達到等待時間上限,還沒有收到ack,A就認為傳輸過程中發生丟包情況。這里的丟包可能是A給B發生的數據丟了或者B給A返回的ack丟了。

2.為什么會發生丟包現象?

因為網絡結構是非常復雜的,數據報經過某個路由器,交換機轉發的時候,該路由器、交換機已經非常繁忙了,導致當前所需要轉發的數據量超出路由器、交換機的轉發能力上限,此時,數據報會消耗更多的時間,才能到達對方,跟糟糕的是,數據報太多,路由器、交換機根本處理不過來,接收緩沖區已滿,只能丟棄。

3.丟包是不能避免的客觀現象,而重傳是有效對抗丟包的手段。

4.如何判斷是否丟包?

引入超時時間來判斷是否丟包,TCP中,判斷超時時間的閾值,不是固定數值,是動態改變的。

假設當前A向B發送數據,丟包時間的閾值是T,當A給B傳輸發生超時之后,就會延長這個時間閾值,即延長這個時間,但不是無休止的,超時次數達到一定程度或等待時間達到一定程度,就會認為網絡出現嚴重故障,放棄這一次傳輸。

5.針對A給B發生的數據丟了或者B給A返回的ack丟了這兩種情況,發送方A區分不了當前是那種情況,所有都重傳。

情況1

A給B發生的數據丟了,直接重傳就可以了。

情況2

對于這種情況,B已經收到了一份數據,如果重傳,B就會收到兩份一樣的數據,如果tcp不處理,可能會使應用層讀到兩次一樣的數據,所以tcp會在內部進行去重操作,此時根據序號,在接收緩沖區中尋找,如果存在,就直接丟棄;如果不存在,才放進去。

注:確認應當和超時重傳是TCP最核心的兩個機制,保證了TCP能夠進行可靠運輸

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

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

相關文章

【大語言模型筆記進階一步】提示語設計學習筆記,跳出框架思維,自己構建提示詞

一、大語言模型應用場景 1. 文本生成 文本創作: 詩歌故事,劇本,推文帖子 摘要與改寫: 長文本摘要與簡化,多語言翻譯與本地化 結構化生成: 表格,根據需求生成代碼片段,API文檔生成…

Unity XR-XR Interaction Toolkit開發使用方法(十一)組件介紹(XR Interactable)

目錄 一、插件介紹 二、主要組件 XR Interaction Manager XR Controller XR Interactor XR Direct Interactor XR Ray Interactor XR Socket Interactor XR Gaze Interactor XR Interaction Group 三、XR Interactable 1、組件介紹 2、核心功能與特點 交互類型支…

Spring Boot spring-boot-maven-plugin 參數配置詳解

一 spring-boot-maven-plugin 插件的5個Goals spring-boot:repackage,默認goal。在mvn package之后,再次打包可執行的jar/war,同時保留mvn package生成的jar/war為.origin;重新打包存在的jar或者war包從而使他們可以在命令行使用…

eMMC安全簡介

1. 引言 術語“信息安全”涵蓋多種不同的設計特性。一般而言, 信息安全是指通過實踐防止信息遭受未經授權的訪問、使用、披露、中斷、篡改、檢查、記錄或銷毀。 信息安全的三大核心目標為 機密性(Confidentiality)、完整性(Integr…

Python 數據結構 2.時間復雜度和空間復雜度

Life is a journey —— 25.2.28 一、引例:窮舉法 1.單層循環 所謂窮舉法,就是我們通常所說的枚舉,就是把所有情況都遍歷了的意思。 例:給定n(n ≤ 1000)個元素ai,求其中奇數有多少個 判斷一…

FFmpeg-chapter3-讀取視頻流(原理篇)

ffmpeg網站:About FFmpeg 1 庫介紹 (1)libavutil是一個包含簡化編程函數的庫,包括隨機數生成器、數據結構、數學例程、核心多媒體實用程序等等。 (2)libavcodec是一個包含音頻/視頻編解碼器的解碼器和編…

面試(進階) —虛擬列表在什么場景使用,如何實現?

面試(進階) —虛擬列表在什么場景使用,如何實現? 在前端開發中,當需要渲染大量數據時,傳統的渲染方式往往會遇到性能瓶頸。一次性將大量數據渲染到DOM中,不僅會導致頁面加載緩慢,還可能占用大量內存&#x…

Linux Mem -- 關于AArch64 MTE功能的疑問

目錄 1.虛擬地址和物理地址映射完成后,才可以設置虛擬地址對應的memory tag ? 2.各種memory allocator中的address tag從哪來,怎么產生? 2.1 vmalloc allocator 2.2 slub分配器 2.3 用戶可以指定IRG指令產生的address tag 3.kasan…

python-leetcode-顏色分類

75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""low, mid, high 0, 0, len(nums) - 1while mid < h…

ArcGIS Pro技巧實戰:高效矢量化天地圖地表覆蓋圖

在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;地表覆蓋圖的矢量化是一項至關重要的任務。天地圖作為中國國家級的地理信息服務平臺&#xff0c;提供了豐富且詳盡的地表覆蓋數據。然而&#xff0c;這些數據通常以柵格格式存在&#xff0c;不利于進行空間分析和數據…

【江科大STM32】TIM輸出比較(學習筆記)

本章圖片文字內容也為重要知識&#xff0c;請馬住&#xff01; 輸出比較簡介 OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形…

【網絡安全 | 漏洞挖掘】利用文件上傳功能的 IDOR 和 XSS 劫持會話

未經許可,不得轉載。 本文涉及漏洞均已修復。 文章目錄 前言正文前言 想象這樣一個場景:一個專門處理敏感文檔的平臺,如保險理賠或身份驗證系統,卻因一個設計疏漏而成為攻擊者的“金礦”。在對某個保險門戶的文件上傳功能進行測試時,我意外發現了一個可導致大規模賬戶接管…

飛算 JavaAI 如何讓微服務開發快人一步?

在當今競爭激烈的軟件開發領域&#xff0c;微服務架構因其靈活性和可擴展性備受青睞。然而&#xff0c;微服務開發過程復雜&#xff0c;從需求分析到最終代碼實現&#xff0c;每個環節都需要耗費大量時間和精力。飛算 JavaAI 的出現&#xff0c;猶如一道曙光&#xff0c;為開發…

Python—Excel全字段轉json文件(極速版+GUI界面打包)

目錄 專欄導讀1、背景介紹2、庫的安裝3、核心代碼4、完整代碼(簡易版)5、進階版(GUI)總結專欄導讀 ?? 歡迎來到Python辦公自動化專欄—Python處理辦公問題,解放您的雙手 ?????? 博客主頁:請點擊——> 一晌小貪歡的博客主頁求關注 ?? 該系列文章專欄:請點擊——…

2025年光電科學與智能傳感國際學術會議(ICOIS 2025)

重要信息 官網&#xff1a;www.ic-icois.org 時間&#xff1a;2025年3月14-16日 地點&#xff1a;中國-長春 簡介 2025年光電科學與智能傳感國際學術會議&#xff08;ICOIS 2025&#xff09;將于2025年3月14-16日在中國-長春隆重召開。會議將圍繞“光學光電”、“智能傳感”…

企業微信里可以使用的企業內刊制作工具,FLBOOK

如何讓員工及時了解公司動態、行業資訊、學習專業知識&#xff0c;并有效沉淀企業文化&#xff1f;一份高質量的企業內刊是不可或缺的。現在讓我來教你該怎么制作企業內刊吧 1.登錄與上傳 訪問FLBOOK官網&#xff0c;注冊賬號后上傳排版好的文檔 2.選擇模板 FLBOOK提供了豐富的…

YOLOv5 + SE注意力機制:提升目標檢測性能的實踐

一、引言 目標檢測是計算機視覺領域的一個重要任務&#xff0c;廣泛應用于自動駕駛、安防監控、工業檢測等領域。YOLOv5作為YOLO系列的最新版本&#xff0c;以其高效性和準確性在實際應用中表現出色。然而&#xff0c;隨著應用場景的復雜化&#xff0c;傳統的卷積神經網絡在處…

跟我學C++中級篇——定時器的設計

一、定時器 談到定時器&#xff0c;理論上講是各種語言和各種設計都無法避開的一個技術點。對于定時器來說&#xff0c;表面上就是一種時間間隔的處理約定&#xff0c;但對程序來說&#xff0c;可能就是設計層面、接口層面和庫或框架以及系統應用的一個大集合。不同的系統&…

智能機器人加速進化:AI大模型與傳感器的雙重buff加成

Deepseek不僅可以在手機里為你解答現在的困惑、占卜未來的可能&#xff0c;也將成為你的貼心生活幫手&#xff01; 2月21日&#xff0c;追覓科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日發布的追覓S50系列掃地機器人也成為市面上首批搭載DeepSeek-R1的…

PostgreSQL10 邏輯復制實戰:構建高可用數據同步架構!

PostgreSQL10 邏輯復制實戰&#xff1a;打造高可用數據同步架構&#xff01; 概述 PostgreSQL 10 引入了邏輯復制&#xff08;Logical Replication&#xff09;&#xff0c;為數據庫高可用和數據同步提供了更靈活的選擇。PostgreSQL 復制機制主要分為物理復制和邏輯復制兩種&…