Linux網絡編程-tcp

tcp、udp對比:

UDP

1. 特點

  • 無連接:無需建立連接即可發送數據。
  • 不可靠:不保證數據順序或完整性。
  • 低延遲:適合實時性要求高的場景。

2. 應用場景

  • 視頻/音頻流傳輸(如直播)。
  • DNS 查詢、在線游戲。

TCP

1. 特點

  • 面向連接:通過三次握手建立連接。
  • 可靠傳輸:通過序列號SYN、ACK 確認和重傳機制保證數據完整性。
  • 流量控制:滑動窗口機制避免網絡擁塞。

一、三次握手和四次揮手和其余機制

🌟 1. 三次握手的第二個階段為什么是 ACK+SYN?
核心目標:同步序列號 + 確認能力。
TCP 是全雙工協議,雙方需獨立確認發送和接收能力。
SYN 用于交換初始序列號(ISN),ACK 用于確認收到 SYN。
合并原因:
減少網絡開銷(從 4 次握手優化為 3 次)。
服務器收到 SYN 后必須立即確認(ACK),同時需同步自己的序列號(SYN)。
🌟 2. 四次揮手的確認和結束為什么要分開發送?
核心目標:非對稱關閉 + 數據傳輸可能性。
一方可能仍有數據需要發送(如 HTTP 響應剩余部分)。
FIN 表示“無數據發送”,ACK 表示“已收到 FIN”。
分開發送原因:
被動關閉方可能無法立即停止發送數據。
合并 FIN+ACK 會導致被動關閉方無法完成剩余數據傳輸。
🌟 3. 關鍵差異總結

方面三次握手四次揮手

目標

雙向同步序列號 + 確認能力非對稱關閉連接
SYN/FIN 的角色同步初始序列號(必須立即確認)請求關閉連接(可能延遲發送)
ACK 的角色確認?SYN(必須立即發送)確認?FIN(可能延遲發送)
合并的必要性合并為?SYN+ACK?減少開銷

無法合并,因?FIN?和?ACK?發送時機不同

其余機制:

1.應答機制:為每個數據增加序列發,發送數據時,第一個數據的序號作為報文中的序號。接收方收到相關數據,會回應ACK報文,報文中的確認號是接收方下次希望接收到的數據的起始序號

2.超時重傳機制:TCP發送數據后會在一定的時間內等待ACK,假設在指定時間ACK未收到,則視為此數據包丟失,

二、 tcp相關接口

1. send 函數
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:發送數據。
參數:
sockfd:套接字文件描述符。
buf:數據緩沖區首地址。
len:數據長度。
flags:默認設為 0。
返回值:
成功:發送的字節數。
失敗:-1。
2. recv 函數
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:從 TCP 套接字接收數據。
參數:
sockfd:套接字文件描述符。
buf:保存接收數據的緩沖區首地址。
len:期待接收的字節數。
flags:默認設為 0。
返回值:
成功:實際接收的字節數。
發送端關閉時:返回 0。
失敗:-1。
3. listen 函數
int listen(int sockfd, int backlog);
功能:監聽三次握手請求。
參數:
sockfd:套接字文件描述符。
backlog:等待處理的三次握手請求的最大數量。
返回值:
成功:0。
失敗:-1。
4. accept 函數
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:處理三次握手隊列中的第一個請求,創建新套接字。
參數:
sockfd:套接字文件描述符。
addr:保存客戶端 IP 地址的緩沖區首地址。
addrlen:IP 地址長度。
返回值:
成功:新套接字文件描述符。
失敗:-1。

三、TCP粘包問題

1.TCP在接受數據時,多包數據粘在一起

2.原因:

? ? ? ? (1)TCP發送數據時,會根據緩沖區數據的情況進行重新組包

? ? ? ? (2)TCP接收方,沒有及時讀走緩沖區數據,導致緩沖區大量數據緩存。

3.如何解決

? ? ? ? (1)發指定大小字節

將要發數據,封裝在結構體里

struct data

{

? ? ? ? int id;

? ? ? ? float tmp;

? ? ? ? xxx

};?

缺點:發送端與接收端體系不同,32位與64位對齊方式的不同造成數據丟失;所有要在指定的相同平臺使用,注意結構體對齊問題。

? ? ? ? (2)發送具有指定分隔符的數據

? ? ? ? hello world\n

? ? ? ? miss you\n

? ? ? ? (3)封裝自定義數據幀

? ? ? ? AA len0C ?0001 0112 1314 1504 XXXX XXXXBB

? ? ? ? 校驗:8位和校驗

? ? ? ? ? ? ? ? ? 16位和校驗

四、網絡抓包

抓取通過設備網卡的數據

wireshark:網絡抓包工具

????????1.分析和追蹤網絡問題

????????2.查看網絡協議棧

安裝:sudo apt-get install wireshark

1.sudo wireshark

2.選擇通信設備的網卡==》any

3.選擇抓取的過濾條件

4.開始抓取

5.進行一次通信

五、TCP報文頭

標志位:緊急指針標志,為I時表示緊急指針有效,該報文應該優先傳送,
1. URG:
確認應答標志
2 ACK:
表示發送數據,提示接收端從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間
3.PSH:
4. RST:重置連接標志
表示請求建立一個連接5.SYN:
fmish標志,表示釋放連接6.FN

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

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

相關文章

記一次flink資源使用優化

一.現狀分析 現有任務的資源配置如下,根據ui監控中Garbage Collection可以發現,此任務頻繁的發生GC,且老年代GC時間較久二.整體memory使用分析如下Framework Heap(框架堆內存)用于Flink框架自身的堆內存(如…

Vue底層換成啥了?如何更新DOM的?

摘要:之前的vue是使用虛擬 DOM的,但是Vue 3.6 帶來了一個意義重大的更新: Vapor Mode 渲染模式。Vue 渲染策略的演進: Vue 1.x: 基于模板渲染策略,直接將模板轉換為DOM元素,并為每個DOM元素創建…

0722 數據結構順序表

Part 1.順序表的代碼一.順序表的內存申請head.h: typedef int datatype;typedef struct sqlist {//數據元素datatype data[MAXSIZE];//順序表長度int len;}*sqlist; //*sqlist的作用: //sqlist:struct Sqlist * sqlist create();head.c: sqlist create() {sqlist list (sqlist)…

為何在 Vue 的 v-model 指令中不能使用可選鏈(Optional Chaining)?

Vue 的 v-model 是實現組件與數據雙向綁定的核心指令之一,它本質上是一個語法糖,用于簡化對表單元素和組件 props 的同步更新。然而,在 Vue 3(以及 Vue 2 的某些模式下),開發者嘗試在 v-model 中使用 JavaS…

基于單片機智能藥盒/智能藥箱/定時吃藥系統

傳送門 👉👉👉👉其他作品題目速選一覽表 👉👉👉👉其他作品題目功能速覽 概述 本設計實現了一種基于單片機的智能藥盒,系統以微控制器(如STM32&#xff…

(25)python+playwright自動化處理單選和多選按鈕-中

1.簡介上一篇中講解和介紹的單選框有點多,而且由于時間的關系,決定今天講解和分享復選框的相關知識。2.什么是單選框、復選框?單選按鈕一般叫raido button,就像我們在電子版的單選答題過程一樣,單選只能點擊一次&#…

Nginx IP授權頁面實現步驟

目標:一、創建白名單文件sudo mkdir -p /usr/local/nginx/conf/whitelist sudo touch /usr/local/nginx/conf/whitelist/temporary.conf二、創建Python認證服務文件路徑:/opt/script/auth_server.pyimport os import time from flask import Flask, requ…

2025年7月中科院一區-向光生長優化算法Phototropic growth algorithm-附Matlab免費代碼

引言 本期介紹一種新的元啟發式算法——向光生長優化算法Phototropic growth algorithm,PGA。靈感來自植物細胞在陽光下的生長模式。于2025年7月最新發表在JCR 1區,中科院1區 SCI 期刊 Knowledge-Based Systems。 該算法將生物學啟發的確定性生長行為與…

poi-excel-添加水印

1、官網快速指南 https://poi.apache.org/components/spreadsheet/quick-guide.html 訪問如上地址可以查看到poi的相關操作方式: How to create a new workbookHow to create a sheetHow to create cellsHow to create date cellsWorking with different types of…

STM32 開發的鼠標:技術詳解與實現指南

概述基于STM32微控制器開發的鼠標是一種高度可定化的輸入設備解決方案,廣泛應用于工業控制、嵌入式系統、特殊人機交互等領域。相比傳統鼠標,STM32鼠標具有以下優勢:高度可定制性:可添加特殊功能按鍵、傳感器集成低功耗設計&#…

GoLang教程007:打印空心金字塔

4.6 案例一&#xff1a;打印金字塔編寫一個程序&#xff0c;可以接收一個整數&#xff0c;表示層數&#xff0c;打印出金字塔。1??第一步&#xff1a;打印一個矩形 package mainimport "fmt"func main() {// i表示層數for i : 1; i < 3; i {// j表示每層打印多少…

iOS開發 Swift 速記3:運算符與控制結構

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的&#xff0c;可以在任何平臺上使用。 源碼指引&#xff1a;github源…

ElasticSearch中需要注意的點,附官方文檔解讀

1.批量更新數量大小限制 https://www.elastic.co/guide/cn/elasticsearch/guide/current/bulk.html#_How_Big_Is_Too_Big 整個批量請求都需要由接收到請求的節點加載到內存中&#xff0c;因此該請求越大&#xff0c;其他請求所能獲得的內存就越少。批量請求的大小有一個最佳值…

Git GitHub精通:前端協作開發的“瑞士軍刀“!

前言&#xff1a;為什么你的代碼總是"失蹤"&#xff1f; "啊&#xff01;我的代碼呢&#xff1f;"——這可能是每個程序員都曾發出過的靈魂吶喊。還記得上周我熬夜寫的300行JavaScript&#xff0c;第二天醒來發現被自己手賤覆蓋了&#xff0c;那一刻我深刻…

第 30 場 藍橋·算法入門賽 題解

1. 零食爭議【算法賽】 簽到題&#xff1a;1-7奇數相加 #include <bits/stdc.h> using namespace std; int main() {// 請在此輸入您的代碼cout<<1357;return 0; } 2. 數字炸彈【算法賽】 把n個人看為前n-1和后n-1 &#xff0c; 方便找到是第幾段的第幾個數 #in…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第二十四課——圖像直方圖均衡化的FPGA實現

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

LabVIEW 2025安裝包| 免費免激活版下載| 附圖文詳細安裝教程

[軟件名稱]&#xff1a;LabVIEW 2025 [軟件大小]&#xff1a;13 G [系統要求]&#xff1a;支持Win7及更高版本 [下載通道]:夸克網盤 [下載鏈接]: https://pan.quark.cn/s/7e9527cc06a3 &#xff08;建議用手機保存到網盤后&#xff0c;再用電腦下載&#xff09; 更多免費軟件&a…

如何實現泵站的無人值守:御控智慧水務平臺

在城鄉供水、農田灌溉、工業循環水等場景中&#xff0c;泵站作為核心動力設施&#xff0c;其運行效率直接影響水資源調配的穩定性。然而&#xff0c;傳統泵站管理長期面臨三大痛點&#xff1a;人力成本高昂&#xff1a;偏遠地區泵站需24小時值守&#xff0c;單站年均人力成本超…

深度學習篇---車道線循跡

要實現基于深度學習的雙車道線&#xff08;黃色車道線&#xff09;循跡&#xff08;通過預測四個輪子的轉速實現自主控制&#xff09;&#xff0c;需要從數據采集、模型設計、訓練策略、環境適應等多維度系統優化。以下是具體方案及需要注意的關鍵事項&#xff0c;旨在提升精準…

JavaScript,發生異常,try...catch...finally處理,繼續向上層調用者傳遞異常信息

JavaScript中&#xff0c;?異常&#xff08;Exception&#xff09;和錯誤&#xff08;Error&#xff09; JavaScript 是一種解釋型語言&#xff0c;通常在瀏覽器中通過JavaScript引擎執行。最著名的兩個引擎是&#xff1a;SpiderMonkey&#xff08;由 Mozilla Firefox 使用&a…