TCP基本入門-簡單認識一下什么是TCP

部分內容來源:小林Coding


TCP的特點

1.面向連接

一定是“一對一”才能連接,不能像 UDP 協議可以一個主機同時向多個主機發送消息,也就是一對多是無法做到的

2.可靠的

無論的網絡鏈路中出現了怎樣的鏈路變化,TCP 都可以保證一個報文一定能夠到達接收端

3.字節流

用戶消息通過 TCP 協議傳輸時,消息可能會被操作系統“分組”成多個的 TCP 報文,如果接收方的程序如果不知道“消息的邊界”,是無法讀出一個有效的用戶消息的。

并且 TCP 報文是“有序的

當“前一個” TCP 報文沒有收到的時候,即使它先收到了后面的 TCP 報文,那么也不能夠給應用層去處理

同時對“重復”的 TCP 報文會自動丟棄


什么是TCP連接

簡單來說就是

用于保證可靠性和流量控制維護的某些狀態信息

這些信息的組合包括 Socket、序列號和窗口大小稱為連接

所以我們可以知道,建立一個 TCP 連接是需要客戶端與服務端達成上述三個信息的共識。

  • Socket:由 IP 地址端口號組成
  • 序列號:用來解決亂序問題
  • 窗口大小:用來做流量控制

如何唯一確定一個TCP連接呢

TCP 四元組可以唯一的確定一個連接,四元組包括如下:

1.源地址

2.源端口

3.目的地址

4.目的端口

源地址目的地址的字段(32 位)是在 IP 頭部中,作用是通過 IP 協議發送報文給對方主機。

源端口目的端口的字段(16 位)是在 TCP 頭部中,作用是告訴 TCP 協議應該把報文發給哪個進程


有一個 IP 的服務端監聽了一個端口,它的 TCP 的最大連接數是多少??

服務端通常固定在某個本地端口上監聽,等待客戶端的連接請求。

因此,客戶端 IP 和端口是可變的,其理論值計算公式如下:

最大 TCP 連接數 = 客戶端的 IP 數 X 客戶端的端口數

對 IPv4,客戶端的 IP 數量最多為 2 的 32 次方,客戶端的端口數量最多為 2 的 16 次方,也就是服務端單機最大 TCP 連接數,約為 2 的 48 次方。

當然,服務端單機能發 TCP 連接數能達到理論上的上限,會受以下因素影響:

文件描述符限制:每個 TCP 連接都是一個文件,如果文件描述符被占滿了,會發生 Too many open files。Linux 對于打開的文件描述符數量分別作了三個方面的限制:

系統級:當前系統可打開的最大數量,通過 cat /proc/sys/fs/file-max 查看;用戶級:指定用戶可打開的最大數量,通過 cat /etc/security/limits.conf 查看;進程級:單個進程可打開的最大數量,通過 cat /proc/sys/fs/nr_open 查看。

內存限制:每個 TCP 連接都會占用一定內存,操作系統的內存是有限的,如果內存資源被占滿后,會發生 OOM


UDP和TCP有什么區別?分別應用場景是?

1.連接

TCP是面向連接的傳輸層協議,傳輸數據前要先建立連接

UDP是不需要建立連接的,即刻傳輸數據

2.服務對象

TCP是一對一的兩點服務,即一條連接只有兩個端點

UDP支持一對一,一對多,多對多的交互通信

3.可靠性

TCP 是可靠交付數據的,數據可以無差錯、不丟失、不重復、按序到達。

UDP 是盡最大努力交付,不能保證可靠交付數據。

4.擁塞控制、流量控制

TCP 有擁塞控制流量控制機制,保證數據傳輸的安全性

UDP 則沒有,即使網絡非常擁堵了,也不會影響 UDP 的發送速率(因為根本不在意發送成功不成功,所以我們速率不用變)

5.首部開銷

TCP 首部較長較復雜,會有一定的開銷,首部在沒有使用【選項】字段時是 20 個字節,如果使用了【選項】字段則會變長的。

UDP 首部只有 8 個字節,并且固定是不會變的,開銷較小。

6.傳輸方式

TCP 是面向連接,沒有邊界,但保證順序和可靠

UDP 是一個包一個包的發送,是有邊界的,但可能會丟包和亂序

7.數據分片所在的層不同

TCP 的數據大小如果大于 MSS 大小,則會在傳輸層進行分片,目標主機收到后,也同樣在傳輸層組裝 TCP 數據包,如果中途丟失了一個分片,只需要傳輸丟失的這個分片。

UDP 的數據大小如果大于 MTU 大小,則會在 IP 層進行分片,目標主機收到后,在 IP 層組裝完數據,接著再傳給傳輸層


TCP和UDP可以使用同一個端口嗎

可以

所以,傳輸層的「端口號」的作用,是為了區分同一個主機上不同應用程序的數據包。

傳輸層有兩個傳輸協議分別是 TCP 和 UDP,在內核中是兩個完全獨立的軟件模塊

當主機收到數據包后,可以在 IP 包頭的「協議號」字段知道該數據包是 TCP/UDP,所以可以根據這個信息確定送給哪個模塊(TCP/UDP)處理,送給 TCP/UDP 模塊的報文根據「端口號」確定送給哪個應用程序處理

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

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

相關文章

PING命令TTL解析

在 ping 命令中,TTL(Time to Live,生存時間) 是 IP 數據包的核心字段之一,用于控制數據包在網絡中的生命周期。以下是針對 TTL 的簡明解析: 1. TTL 的核心作用 防循環機制:TTL 是一個計數器&a…

PySide(PyQT)重新定義contextMenuEvent()實現鼠標右鍵彈出菜單

在 PySide中,contextMenuEvent() 是 QWidget 類(以及繼承自它的所有子類)的一個事件處理方法,主要用于處理上下文菜單事件,也就是當用戶在控件上右鍵點擊時觸發的事件。 ? 通過重新定義contextMenuEvent()來實現自定…

GitHub SSH連接問題解決指南

🔍 GitHub SSH連接問題解決指南 問題描述 遇到錯誤:ssh: connect to host github.com port 22: Connection refused 說明您的網絡環境無法訪問GitHub的SSH端口22,常見原因: 防火墻/網絡運營商限制(國內常見&#xf…

Go紅隊開發—并發編程

文章目錄 并發編程go協程chan通道無緩沖通道有緩沖通道創建?緩沖和緩沖通道 等協程sync.WaitGroup同步Runtime包Gosched()Goexit() 區別 同步變量sync.Mutex互斥鎖atomic原子變量 SelectTicker定時器控制并發數量核心機制 并發編程階段練習重要的細節端口掃描股票監控 并發編程…

RabbitMQ 的介紹與使用

一. 簡介 1> 什么是MQ 消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已。 其主要用途:不同進程Process/線程T…

常用的AI文本大語言模型匯總

AI文本【大語言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺問問https://hailuoai.com/ 3、通義千問https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

在自己的數據上復現一下LlamaGen

git倉庫:https://github.com/FoundationVision/LlamaGen 數據集準備 如果用ImageFolder讀取,則最好和ImageNet一致。 data_path/class_1/image_001.jpgimage_002.jpg...class_2/image_003.jpgimage_004.jpg......class_n/image_005.jpgimage_006.jpg.…

Go入門之接口

type Usber interface {start()stop() } type Phone struct {Name string }func (p Phone) start() {fmt.Println(p.Name, "啟動") } func (p Phone) stop() {fmt.Println(p.Name, "關機") } func main() {p : Phone{Name: "華為手機",}var p1 U…

【數據結構進階】哈希表

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:數據結構 目錄 前言 一、哈希表的概念 二、哈希函數的實現方法 1. 直接定址法 2. 除留余數法 三、哈希沖突 1. 開放定址法(閉散列&#xff0…

《深度學習實戰》第4集:Transformer 架構與自然語言處理(NLP)

《深度學習實戰》第4集:Transformer 架構與自然語言處理(NLP) 在自然語言處理(NLP)領域,Transformer 架構的出現徹底改變了傳統的序列建模方法。它不僅成為現代 NLP 的核心,還推動了諸如 BERT、…

高效管理 React 狀態和交互:我的自定義 Hooks 實踐

高效管理 React 狀態和交互:自定義 Hooks 實踐 在 React 中,Hooks 是一種使我們能夠在函數組件中使用狀態和副作用的強大工具。隨著項目的增大,重復的邏輯可能會出現在多個組件中,這時使用自定義 Hooks 就非常合適。它們幫助我們…

Exoplayer(MediaX)實現音頻變調和變速播放

在K歌或錄音類應用中變調是個常見需求,比如需要播出蘿莉音/大叔音等。變速播放在影視播放類應用中普遍存在,在傳統播放器Mediaplayer中這兩個功能都比較難以實現,特別在低版本SDK中,而Exoplayer作為google官方推出的Mediaplayer替…

Meta最新研究:從單張照片到3D數字人的革命性突破

隨著人工智能技術的發展,3D建模和虛擬人物生成逐漸變得更加普及和高效。Meta(前身為Facebook)的最新研究成果展示了如何僅通過一張普通手機拍攝的照片就能生成高質量、全方位的3D數字人。這項技術不僅適用于虛擬試衣、游戲角色建模,還能廣泛應用于AR/VR內容生成等領域。本文…

軟件供應鏈安全工具鏈研究系列——RASP自適應威脅免疫平臺(上篇)

1.1 基本能力 RASP是一種安全防護技術,運行在程序執行期間,使程序能夠自我監控和識別有害的輸入和行為。也就是說一個程序如果注入或者引入了RASP技術,那么RASP就和這個程序融為一體,使應用程序具備了自我防護的能力,…

2025-02-27 學習記錄--C/C++-PTA 7-29 刪除字符串中的子串

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、題目描述 ?? 二、代碼&#xff08;C語言&#xff09;?? #include <stdio.h> // 引入標準輸入輸出庫&#xff0c…

Redis---字符串SDS(簡單動態字符串)底層結構

文章目錄 什么是SDS&#xff08;簡單動態字符串&#xff09;SDS結構SDS的優點O(1) 時間復雜度獲取字符串長度避免緩沖區溢出減少內存重分配次數二進制安全兼容C語言字符串函數 SDS的操作總結 什么是SDS&#xff08;簡單動態字符串&#xff09; redis是由C語言編寫的&#xff0…

Elasticsearch:使用阿里云 AI 服務進行嵌入和重新排名

作者&#xff1a;來自 Elastic Toms Mura 將阿里云 AI 服務功能與 Elastic 結合使用。 更多閱讀&#xff0c;請參閱 “Elasticsearch&#xff1a;使用阿里 infererence API 及 semantic text 進行向量搜索”。 在本文中&#xff0c;我們將介紹如何將阿里云 AI 功能與 Elastics…

Spring Cloud Alibaba與Spring Boot、Spring Cloud版本對應關系

一、前言 在搭建SpringCloud項目環境架構的時候&#xff0c;需要選擇SpringBoot和SpringCloud進行兼容的版本號&#xff0c;因此對于選擇SpringBoot版本與SpringCloud版本的對應關系很重要&#xff0c;如果版本關系不對應&#xff0c;常見的會遇見項目啟動不起來&#xff0c;怪…

【含文檔+PPT+源碼】基于過濾協同算法的旅游推薦管理系統設計與實現

項目介紹 本課程演示的是一款基于過濾協同算法的旅游推薦管理系統設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套…

MTK Android12 預裝apk可卸載

文章目錄 需求解決方法1、device/mediatek/mt6761/device.mk2、/vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt3、路徑&#xff1a;4、Android.mk 需求 近期&#xff0c;客戶需要預裝一個apk&#xff0c;同時該apk要可卸載。解…