python網絡編程-TCP/IP

鏈路層

幀組成(按順序):

目標MAC:6B

源MAC:6B

類型:2B

數據:46B-1500B

CRC:4B

其中,源MAC為主機網卡地址,類型為來源網絡層的數據類型,ipv4為0800,arp為0806,pppoe為8864,1qtag為8100,ipv6為86dd

python可以通過uuid模塊獲取到本機mac地址

網絡層

數據報結構

首部:20-60B,其中前20B必選項,后40B可選項

數據:0-65516B

首部結構

版本:4位,表示ipv4還是ipv6

ihl:4位,表示首部長度,單位位4B,所以最大為4x15=60B,剛好是首部最大長度

ds:區分服務,8位,前三位表示優先級,接下來四位表示最小時延,最大吞吐量,最高可靠性和最小代價,最后一位未使用

總長度:16位,表示首部和數據總長度,單位為B。注意到鏈路層數據長度為46-1500,當網絡層數據報不夠46B時會填補數據,超過1500時會切片

標識:16位,表示分片數據的唯一id

標志:3位,最高位為預留位,第二位表示是否可分片,0表示可分片,1表示不可分片,最后一位表示此數據報是否為分片,0表示非分片,且是最后一個分片,1表示分片,且后面還有分片

分片位移:13位,8B

生存時間,8位,最大255,表示路由最大跳數

協議:8位,表ip數據報類型,如ICMP,IGMP,TCP,UDP等

首部校驗和:16位

源ip地址和目標ip地址,各32位

python獲取網絡信息可通過psutil和netifaces兩個模塊去獲取,其中netifaces版本廢棄了,可以安裝netifacce2

傳輸層

udp

不保證數據可達

報頭8B:源端口2B,目標端口2B,長度2B,校驗和2B

數據0-65527B

TCP

創建連接3次握手,關閉連接4次握手

數據報結構

首部20-60B

數據0-65535B

首部結構

源端口16位

目標端口16位

序號:32位:每個字節的數據都有序號,到pow(2,32)后從0開始

確認號:32位,接收方發給發送方,希望收到下一個數據報文第一個字節的序號,比如發送方發了0-999字節,接收方發的確認號就是1000

數據偏移:4位,單位位4B,類似ipv4報頭的ihl

保留:6位,一般為0

URG:1位,1表示緊急數據,緊急指針有效

ACK:1位,為1表示確認號字段有效

PSH:1位,1表示報文被創建并立即發出去,接收端收到后會立即交給進程,而不是放緩存中等緩存滿了才遞交

RST:1位,為1表示當前連接出現嚴重問題,徐奧釋放連接并重新創建連接,RST為1還可用于拒絕接受非法報文或拒絕打開非法連接

SYN:1位,為1表示報文為連接請求或連接接受報文

FIN:1位,為1表示數據發送完畢并要求釋放連接

窗口:16位,由接收方發給發送方,表示期望接受下個報文的長度

校驗和:16位

緊急指針:16位,URG為1時指出緊急數據結束位置

python獲取網絡信息

psutil可以獲取網絡一些統計信息,net_io_counters方法默認收集整機的網絡統計信息,入參pernic=True會單獨收集每個網卡的統計信息

應用層

http

http默認是無狀態通信,可以通過cookie進行有狀態的服務

http端口一般為80

報文結構

請求報文:方法,url,版本,其他首部字段,報文實體(可選)

應答報文:版本,狀態碼,短語,其他首部字段,報文實體(可選)

方法:有8種,get,post,head,put,delete,option,connect,trace

版本:http版本號

其他首部字段:比如Cache-Control, Accept-Encoding等

報文實體:長度不限,可以為0

狀態碼:即404這種,三位數。1xx表示服務器收到了請求,2xx表示服務器接受客戶端請求,3xx表示服務器對客戶端請求重定向,4xx表示客戶端請求有誤,5xx表示服務端有問題

短語:對狀態碼的注釋,比如202返回碼對應的短語是Accept,404對應的短語是Not Fount

https

http沒有安全保證,可以被抓包,https使用ssl或tls對數據報文加密后tcp傳輸,默認端口443

一般會使用對稱加密和非對稱加密,對稱加密一般用于報文加密,非對稱加密一般用于密碼加密

請求流程

客戶端請求時會將自己支持的一套加密規則發給服務器

服務器根據客戶端加密規則組合出一組加密和hash算法,連同自己的身份信息,以數字證書形式返回給客戶端

客戶端驗證服務器證書合法性,通過后生成一串隨機數密碼,并用服務器公鑰對這個隨機數密碼加密。客戶端對要發送的消息計算hash,用隨機數密碼對要發送的消息和消息的hash值進行加密,最后將服務器公鑰加密的隨機數密碼,用隨機數密碼加密的消息和消息是hash一起返回給服務器

服務端收到客戶端數據后,用自己的私鑰揭密處隨機數密碼,然后用隨機數密碼解密消息和消息hash值,對比解密出的hash值和收到消息的hash值是否一致。若一致,則客戶端和服務端連接建立成功,此后,雙方使用隨機數密碼對數據進行加解密。后續數據傳輸過程中,如果出錯或hash不一致則連接自動終止

ftp

dns

snmp

snmp簡單郵件傳輸協議,用于將郵件從源地址傳送到目的地址,端口一般為25

是常用的郵件發送協議,發郵件后,郵件會發到snmp服務器上

pop3

收信方用來從自己服務器上接受其他用戶發給自己的郵件,端口一般110

pop3是離線協議,用戶登錄時會一次性將pop3服務器的郵件下載到本地,同時服務器的郵件都刪掉自動

imap是在線的收信協議,彌補了pop3離線的問題,是目前最常用的郵件接受協議,端口一般143

dhcp

有dhcp的客戶端連接網絡時,會廣播dhcp disocover報文,按一定規則進行有限次次數廣播后如果未收到響應則dhcp失敗

服務器收到報文后會從可用地址池挑一個ip,廣播形式發送dhcp offer報文把這個ip返回給客戶端

客戶端收到dhcp服務器分配的ip后,會發送一個arp請求看這個ip有沒有被占用,如果被占用了則客戶端發送dhcp decline報給dhcp服務器,如果沒被占用則發送dhcp request給服務器,服務器收到后會給客戶端發送一個dhcp ack響應,至此一個dhcp服務流程結束

dhcp服務端端口一般67,dhcp客戶端端口一般68.dhcp使用udp通信

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

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

相關文章

Self-Instruct構造Prompt的例子

人工構造一批Prompt做種子。(Starting with a small seed set of human-written tasks)每次把一些種子后來生成的Prompt,放到Input里做few-shot examples,用LLM生成更多的Prompt;(Using the LLM to generat…

PyTorch學習之torch.transpose函數

PyTorch學習之torch.transpose函數 一、簡介 torch.transpose 函數我們用于交換張量的維度。 二、語法 torch.transpose 函數用于交換給定張量的兩個維度,其語法如下: torch.transpose(input, dim0, dim1)三、參數 input:待交換維度的張…

kotlin 基礎

文章目錄 1、安裝 Java 和 Kotlin 環境2、程序代碼基本結構3、變量的聲明與使用4、數據類型5、數字類型的運算1)布爾類型2)字符類型3)字符串類型 6、 選擇結構1)(if - else)2) 選擇結構(when&am…

useImperativeHandle淺談

useImperativeHandle 是 React Hooks 提供的一個高級功能,它允許你在函數式組件中自定義并暴露特定的實例值或方法給父組件。主要的作用是: 自定義對外暴露的實例值或方法: 通常情況下,函數式組件內部的實例值或方法對外是不可見的&#xff0…

如何有效管理你的Facebook時間線?

Facebook作為全球最大的社交平臺之一,每天都有大量的信息和內容在用戶的時間線上展示。有效管理你的Facebook時間線,不僅可以提升用戶體驗,還能夠幫助你更好地控制信息流和社交互動。本文將探討多種方法和技巧,幫助你有效管理個人…

分班結果老師怎么發給家長?

分班結果老師怎么發給家長? 隨著新學期的腳步漸近,老師們的工作也變得愈發繁忙。從準備教學計劃到整理課程材料,每一項任務都不容小覷。而其中,分班結果的告知工作,更是讓不少老師頭疼不已。傳統的分班通知方式&#…

7、Redis主從復制過程

Redis主從復制過程 ? 當一個Redis節點(Slave節點)接受到類似slaveof 127.0.0.1 6380的指令直到其可以從master持續復制數據,大致經歷如下過程: 1、保存master地址 ? 當slave接收到slaveof命令后,slave會立即將新的…

Python爬蟲與數據可視化:構建完整的數據采集與分析流程

Python爬蟲技術概述 Python爬蟲是一種自動化的數據采集工具,它可以模擬瀏覽器行為,訪問網頁并提取所需信息。Python爬蟲的實現通常涉及以下幾個步驟: 發送網頁請求:使用requests庫向目標網站發送HTTP請求。獲取網頁內容&#xf…

.gitignore 的奧秘:前端開發者必須了解的文件忽略規則(二).gitignore 匹配規則

.gitignore 匹配規則 Git 版本管理在開發中場景,其中.gitignore也是Git中必不可少的配置文件,.gitignore 文件用于告訴 Git 哪些文件或目錄應該被忽略,即不被版本控制系統跟蹤和提交。 系列文章,上一篇介紹了:.gitigno…

Python 如何批量壓縮PDF文件或減小PDF文件大小

目錄 安裝Python PDF庫 Python通過壓縮圖片來減小PDF文件大小 Python通過壓縮字體或取消嵌入字體來減小PDF文件大小 Python通過刪除不必要的內容如附件、注釋或表單來減小PDF文件大小 總結 PDF文件憑借其平臺無關性和便攜性,已經成為日常辦公和信息共享的首選格…

15集終于編譯成功了-了個球!編譯TFLite Micro語音識別工程-《MCU嵌入式AI開發筆記》

15集終于編譯成功了-個球!編譯TFLite Micro語音識別工程-《MCU嵌入式AI開發筆記》 還是參考這個官方文檔: https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干貨! 這里面提到的這個Micro工程已經移開了&#xff1…

【微服務】springboot對接Prometheus指標監控使用詳解

目錄 一、前言 二、微服務監控概述 2.1 微服務常用監控指標 2.2 微服務常用指標監控工具 2.3 微服務使用Prometheus監控優勢 三、環境準備 3.1 部署Prometheus服務 3.2 部署Grafana 服務 3.3 提前搭建springboot工程 3.3.1 引入基礎依賴 3.3.2 配置Actuator 端點 3.…

【Linux】信號的處理

你很自由 充滿了無限可能 這是很棒的事 我衷心祈禱你可以相信自己 無悔地燃燒自己的人生 -- 東野圭吾 《解憂雜貨店》 信號的處理 1 信號的處理2 內核態 VS 用戶態3 鍵盤輸入數據的過程4 如何理解OS如何正常的運行5 如何進行信號捕捉信號處理的總結6 可重入函數volatile關…

C# 如何獲取屬性的displayName的3種方式

文章目錄 1. 使用特性直接訪問2. 使用GetCustomAttribute()方法通過反射獲取3. 使用LINQ查詢總結和比較 在C#中,獲取屬性的displayName可以通過多種方式實現,包括使用特性、反射和LINQ。下面我將分別展示每種方法,并提供具體的示例代碼。 1.…

數據庫逆向工程工具reverse_sql

reverse_sql 是一個用于解析和轉換 MySQL 二進制日志(binlog)的工具。它可以將二進制日志文件中記錄的數據庫更改操作(如插入、更新、刪除)轉換為反向的 SQL 語句,以便對系統或人為產生的誤操作進行數據回滾和恢復。 *…

JVM專題之垃圾收集器

JVM參數 3.1.1 標準參數 -version -help -server -cp 3.1.2 -X參數 非標準參數,也就是在JDK各個版本中可能會變動 ``` -Xint 解釋執行 -Xcomp 第一次使用就編譯成本地代碼 -Xmixed 混合模式,JVM自己來決定 3.1.3 -XX參數 > 使用得最多的參數類型 > > 非…

RedHat運維-Linux文本操作基礎-牛客AWK

1. 查看static這個連接文件是否自動連接的命令是____________________________________; 2. 查看default這個連接文件是否自動連接的命令是_____________________________________; 3. 查看con0這個連接文件是否自動連接的命令是_______________________…

【Python】已解決:(paddleocr導包報錯)ModuleNotFoundError: No module named ‘paddle’

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決:(paddleocr導包報錯)ModuleNotFoundError: No module named ‘paddle’ 一、分析問題背景 近日,一些使用PaddleOCR庫進行文字…

Python數據分析案例49——基于機器學習的垃圾郵件分類系統構建(樸素貝葉斯,支持向量機)

案例背景 trec06c是非常經典的郵件分類的數據,還是難能可貴的中文數據集。 這個數據集從一堆txt壓縮包里面提取出來整理為excel文件還真不容不易,肯定要做一下文本分類。 雖然現在文本分類基本都是深度學習了,但是傳統的機器學習也能做。本案…

C#架構師的成長之路

成為一名C#架構師不僅需要深厚的技術功底,還需要廣泛的行業知識、優秀的團隊協作能力和領導力。以下是C#架構師成長之路上的關鍵步驟和技能要求: 1. 扎實的技術基礎 精通C#語言:深入理解C#的語法、特性,包括但不限于泛型、多線程…