三次握手內部實現原理

socket()創建一個新的套接字

int socket(int domain, int type, int protocol);

參數:

domain:地址族,如 AF_INET(IPv4),AF_INET6(IPv6)

type:套接字類型,如 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)

protocol:協議類型,通常為 0(默認協議)

返回值:成功返回套接字描述符,失敗返回 -1

Linux操作系統流行一句話,“一切皆文件”,這里的文件不是說文件系統,磁盤里的某個文件,而是struct flie

也就是說,socket也其實也是一個struct file,將socket的所有底層都抽象為一個socket

bind()就是將套接字綁定到一個本地地址(IP+端口)

具體操作也就是將IP和端口號賦值到socket對象的成員里面去

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

參數:

sockfd:套接字描述符

addr:指向 struct sockaddr 類型的指針,包含要綁定的地址信息

addrlen:地址長度,通常為 sizeof(struct sockaddr_in)

返回值:成功返回 0,失敗返回 -1

listen()將套接字設置為被動監聽模式,準備接受連接請求

int listen(int sockfd, int backlog);

參數:

sockfd:套接字描述符

backlog:等待連接隊列的最大長度

返回值:成功返回 0,失敗返回 -1

Listen()函數的最主要作用就是:初始化半連接隊列(哈希表) + 全連接隊列(鏈表)

半連接隊列的作用就是,區分來客戶端的請求是第一次握手還是第三次握手

全連接隊列的作用是,讓accept()函數從其中取走已完成連接的socket

accept()接受一個來自客戶端的連接請求

底層就是去全連接隊列里取socket

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

參數:

sockfd:監聽套接字描述符

addr:指向 struct sockaddr 類型的指針,接收客戶端的地址信息

addrlen:地址長度指針,接收客戶端地址長度

返回值:成功返回新的套接字描述符,失敗返回 -1

connect()主動發起與服務器的連接

底層就是去,動態選擇一個本地可用端口,作為發起連接的源端口

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

參數:

sockfd:套接字描述符

addr:指向 struct sockaddr 類型的指針,包含服務器的地址信息

addrlen:地址長度,通常為 sizeof(struct sockaddr_in)

返回值:成功返回 0,失敗返回 -1

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

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

相關文章

DeepSeek 助力 Vue3 開發:打造絲滑的懸浮按鈕(Floating Action Button)

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

【前端場景題】如何應對頁面請求接口的大規模并發問題

如何應對頁面請求接口的大規模并發問題,尤其是前端方面的解決方案,并且需要給出詳細的代碼解釋。首先,我需要仔細閱讀我搜索到的資料,找出相關的信息,然后綜合這些信息來形成答案。 首先看,它提到前端優化策…

360個人版和企業版的區別

功能方面 管理能力 個人版:主要用于單臺設備的安全防護,只能在單獨的電腦上進行安裝使用,無集中管理和監控其他設備的功能。企業版:可批量管理大量電腦,如公司的十臺、百臺甚至千臺電腦。管理員能通過管理控制臺對所有…

蘋果與小米破冰合作:iPhone 16e全面支持Find My網絡,跨生態互通實現技術性突破

2025年2月28日&#xff0c;蘋果公司正式宣布其中國區特供機型iPhone 16e全面接入Find My網絡升級版&#xff0c;并與小米旗艦機型15 Ultra實現跨平臺互聯互通。 核心功能升級 1. Find My網絡能力擴展 iPhone 16e搭載的Find My 3.0網絡支持亞米級定位&#xff08;誤差<1米…

Spring MVC 程序開發(1)

目錄 1、什么是 SpringMVC2、返回數據2.1、返回 JSON 對象2.2、請求轉發2.3、請求重定向2.4、自定義返回的內容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分別是什么&#xff1f;有什么關系&#xff1f; Servlet 是 java 官方定義的 web 開發的標準規范&#xff1b;Tomcat 是…

一鍵安裝Mysql部署腳本之Linux在線安裝Mysql,腳本化自動化執行服務器部署(附執行腳本下載)

相關鏈接 一鍵安裝Redis部署腳本之Linux在線安裝Redis一鍵安裝Mysql部署腳本之Linux在線安裝Mysql一鍵安裝JAVA部署腳本之Linux在線安裝JDK一鍵安裝Nginx部署腳本之Linux在線安裝NginxNavicat最新版(17)詳細安裝教程Xshell客戶端免費版無需注冊XFtp客戶端免費版無需注冊 前言…

1.2.2 使用Maven方式構建Spring Boot項目

本次實戰通過Maven方式構建了一個Spring Boot項目&#xff0c;實現了簡單的Web應用。首先&#xff0c;創建了Maven項目并設置好項目名稱、位置、構建系統和JDK等。接著&#xff0c;添加了Spring Boot的父項目依賴和web、thymeleaf起步依賴。然后&#xff0c;創建了項目啟動類He…

【愚公系列】《Python網絡爬蟲從入門到精通》037-文件的存取

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

C++:vector的push_back時間復雜度分析

引導示例 #include <iostream> #include <vector>int main() {std::vector<int> v;std::cout << v.capacity() << " ";int last 0;for (int i 1; i < 10; i) {v.push_back(1);std::cout << v.capacity() << " …

LeetCode 202. 快樂數 java題解

https://leetcode.cn/problems/happy-number/description/ 哈希表 class Solution {public boolean isHappy(int n) {if(n1) return true;HashSet<Integer> setnew HashSet<>();while(n!1&&!(set.contains(n))){//沒找到結果&#xff1b;沒有重復出現過se…

11.24 SpringMVC(1)@RequestMapping、@RestController、@RequestParam

一.RequestMapping("/user")//HTTP 請求方法既支持get也支持post&#xff0c;可表示為類路徑與方法路徑 二.RequestMapping(value "/m7", method {RequestMethod.POST, RequestMethod.GET}) value這個參數指定了請求的 URL 路徑。method 參數指定了允許…

解決npm run dev報錯

解決&#xff1a;Node.js 版本更新后與 OpenSSL 不兼容導致的npm報錯“Error: error:0308010C:digital envelope routines::unsupported” 方法一&#xff1a;更改系統環境變量方法二&#xff1a;更改項目環境變量方法三&#xff1a;更換 Node.js 版本方法四&#xff1a;升級依…

Django模型管理器/QuerySet 常見的方法

模型管理器/QuerySet 常見的方法 get([**kwargs]) 方法 用途&#xff1a;獲取滿足條件的唯一對象。參數&#xff1a;關鍵字參數&#xff0c;指定查詢條件。返回值&#xff1a;模型對象。異常&#xff1a;如果找到多個對象或未找到對象&#xff0c;將分別拋出 MultipleObjects…

爬蟲系列之【數據解析之JSON】《三》

目錄 前置知識 一、 json.loads()&#xff1a;JSON 轉 Python 數據 二、json.dump()&#xff1a;python數據 轉 json 并寫入文件 三、json.loads() &#xff1a;json 轉 python數據 四、json.load() &#xff1a;json 轉 python數據&#xff08;在文件操作中更方便&#xf…

Python核心技術,Django學習基礎入門教程(附環境安裝包)

文章目錄 前言1. 環境準備1.1Python安裝1.2選擇Python開發環境1.3 創建虛擬環境1.4 安裝 Django 2. 創建 Django 項目3. Django項目結構介紹4. 啟動開發服務器5. 創建 Django 應用6. 應用結構介紹7. 編寫視圖函數8. 配置 URL 映射9. 運行項目并訪問視圖10. 數據庫配置與模型創建…

功能豐富的自動化任務軟件zTasker_2.1.0_綠色版_屏蔽強制更新閃退

&#x1f680; zTasker 一鍵式效率倍增器使用指南 &#x1f64f; 致謝 首先感謝開發者提供如此高效的工具&#xff01; 軟件本身功能強大&#xff0c;但部分機制需特別注意&#xff01; &#x1f4d6; 軟件概述 zTasker 是一款通過自動化腳本/任務流實現效率飛躍的生產力工…

MFC中CMutex類和CSingleLock類,配合使用疑惑

在使用CMutex過程中&#xff0c;看到別人使用了CSingleLock類&#xff0c;想著明明CMutex已經可以實現線程同步了&#xff0c;為什么還有使用CSingleLock類呢&#xff1f; 在MFC中&#xff0c;雖然CMutex類本身可以實現線程同步&#xff0c;但通常會與CSingleLock類一起使用&am…

【最大半連通子圖——tarjan求最大連通分量,拓撲排序,樹形DP】

題目 分析 最大連通分量肯定是滿足半連通分量的要求&#xff0c;因此tarjan。 同時為了簡化圖&#xff0c;我們進行縮點&#xff0c;圖一定變為拓撲圖。 我們很容易看出&#xff0c;只要是一條不分叉的鏈&#xff0c;是滿足條件的。 于是我們按照拓撲序不斷樹形DP 建邊注意…

LabVIEW正弦信號處理:FFT與最小二乘擬合的參數提取

問題一&#xff1a;LabVIEW能否對采集的正弦力信號進行快速傅里葉變換&#xff08;FFT&#xff09;&#xff0c;并得到幅值和相位結果&#xff1f; 答案&#xff1a; 可以。LabVIEW通過內置信號處理工具包提供完整的FFT分析功能&#xff0c;具體實現如下&#xff1a; FFT分析流…

Nginx+PHP+MYSQL-Ubuntu在線安裝

在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步驟如下&#xff1a; 1. 更新系統包 首先&#xff0c;確保系統包是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安裝 Nginx 安裝 Nginx&#xff1a; sudo apt install nginx啟動并啟用 Nginx 服務&#xff1a; sudo…