【HTTP】解碼網絡通信的奧秘:HTTP,IP 地址,端口,DNS及NAT地址轉換的協同之舞

引言

? ? ? ? 每文學習一句詩:行一棋不足以見智,彈一弦不足以見悲 ——《淮南子·說林訓》

????????譯文:走一個棋子,不足以現出智慧;彈一根琴弦,不能夠使人產生悲哀之情。

? ? ? ? 自述:互聯網現如今已經成為每個人都離不開的一個通信工具,他滲透到生活的方方面面,在享受它為人們帶來便利的同時,我們對他的工作原理也充滿了好奇。下面我將介紹了HTTP的GET/POST/響應、IP 地址、端口,公內網,DNS及NAT地址轉換的相關內容,讓你初步了解互聯網的通信過程。

? ? ? ? 如果本文對你有所幫助,那能否支持一下老弟呢,嘻嘻

??個人主頁?點擊??

目錄

?編輯

引言

IP地址(IPv4/Ipv6)

定義

分類

A類IP地址

B類IP地址

C類IP地址

特殊IP地址

?IPv6地址的基本概念

端口

定義

HTTP協議

定義

工作流程

瀏覽器開發者工具NetWork使用

GET請求報文

POST請求報文

響應報文

狀態碼

?編輯

公網/內網

?編輯

NAT網絡地址轉換

DNS/DDNS/域名


IP地址(IPv4/Ipv6)

定義

IP地址指的是互聯網中所有聯網設備的“身份證”,就好比每個人都有自己的身份證號一樣。

分類

分為IPv4地址和IPv6地址

IPv4:通常以點分十進制的格式來表示,即4個8位的二進制來表示。

例如:192.168.64.24(十進制)

11000000.10101000.01000000.00011000(二進制)

IP地址由網絡地址主機地址組成

A類IP地址

網絡地址由第一個八位數組組成,且第一個字節以“0”開始,有效網絡地址:8-1=7位

?主機地址由后三個8位數組共24位(1.0.0.0-126.255.255.255)(0與127留作他用)

B類IP地址

網絡地址由前兩個八位數組組成,且第一個字節以“10”開始,有效網絡地址:16-2=14位

?主機地址由后兩個8位數組共16位(128.0.0.0-191.255.255.255)

C類IP地址

網絡地址由前三個八位數組組成,且第一個字節以“110”開始,有效網絡地址:24-3=21位

?主機地址由后一個8位數組共8位(192.0.0.0-223.255.255.255)

特殊IP地址

127.xxx.xxx.xxx :環回地址,用于本地測試

0.0.0.0:所有網絡,用于指定缺省路由

1.1.1.1:廣播地址,用于所有網絡節點

?IPv6地址的基本概念

IPv6(Internet Protocol Version 6)是下一代互聯網協議,旨在解決IPv4地址枯竭問題。其核心特點包括:

  • 地址長度:128位(IPv4為32位),提供約?3.4×10383.4×1038?個地址。

  • 簡化路由:層次化地址結構,優化網絡管理。

  • 增強功能:原生支持安全性(IPsec)、自動配置、多播等。

端口

定義

端口(Port):是設備上的一個“邏輯通道”,用于區分同一設備上運行的不同應用程序或服務。例如,Web服務、郵件服務、游戲等可以通過不同端口同時運行。

如果說IP地址是用于找到一臺設備的,那么端口就是用于找到該設備中的一個運行的程序。

端口號是一個16位數字(0~65535)

常見的端口號及用途
端口號通信協議用途
80HTTP未加密網絡傳輸
443HTTPS加密網絡傳輸
21FTP文件傳輸
22SSH遠程管理服務器
25SMTP發送郵件
53DNS域名解析
3389RDP遠程桌面連接
  • 客戶端:發起請求時,操作系統會隨機分配一個臨時端口(動態端口)。

  • 服務端:長期監聽固定端口(如Web服務器監聽80端口),等待請求。

當你在瀏覽器訪問網站時:

你的電腦IP + 隨機端口 → 服務器的IP + 80端口

HTTP協議

定義

HTTP(HyperText Transfer Protocol)
是一種?應用層協議,用于在客戶端(如瀏覽器)和服務器之間傳輸超文本(如HTML頁面、圖片、視頻等)。它是萬維網(WWW)數據通信的基礎。

HTTP的底層是TCP/IP協議

工作流程

  1. 客戶端在瀏覽器中發起請求:用戶在瀏覽器中輸入URL(域名),例如www.baidu.com,此時瀏覽器會解析生成HTTP請求。
  2. DNS服務器解析域名:輸入的域名會被DNS服務器解析得到目標主機的IP地址
  3. 建立TCP連接:根據解析得到的IP地址來訪問目標主機的服務器的80端口,與其建立TCP連接。
  4. 發送GET/POST請求報文:?獲取目標服務器的數據(GET),向目標服務器提交數據(POST請求)。
  5. 服務器返回相應報文:服務器會根據請求的內容來返回給客戶端具體的響應。
  6. 關閉連接:但在HTTP1.1中保持連接復用(Keep-alive)。

瀏覽器開發者工具NetWork使用

Eage瀏覽器為例,在瀏覽器頁面右擊選擇“檢查”,點擊后,選擇“網絡”

如圖片所示可以看到瀏覽器在網絡請求中的一些數據。

GET請求報文

對象:瀏覽器向web服務器的獲取數據的請求

以下時通過瀏覽器開發者工具得到的請求報文:

請求行

1.GET /serach.html HTTP/1.1 b表示請求方法,請求服務器中資源路徑,HTTP協議版本

請求頭

2.告訴服務器可以接受的數據類型

3.告訴服務端支持的壓縮算法

4.告訴服務端支持的語言

5.和服務器端保持長連接

6.服務器端的IP地址和端口號,沒有顯示端口號則為80

7.讓客戶端請求不安全請求,https則是加密的

8.用戶代理

空行\r\n

總結:http的get請求報文為

請求行\r\n

請求頭\r\n

空行\r\n

注意每條數據后都要有一個\r\n

POST請求報文

對象:瀏覽器向web服務器提交數據的請求

在“負載”中可以看到請求體的內容,這里是JSON數據

HTTP POST請求報文

請求行\r\n

請求頭\r\n

空行\r\n

請求體

響應報文

對象:服務器處理瀏覽器發送的請求而做出的響應。

這里面展示的是我自己寫的簡單服務器的響應頭

響應行

HTTP/1.1 200 OK 協議版本 狀態碼 狀態

響應頭

Server:Rqtzws/1.0 服務器名稱

空行\r\n

響應體

HTTP 響應報文

響應行\r\n

響應頭\r\n

空行\r\n

響應體\r\n

狀態碼

狀態碼說明
200請求成功
307重定向
400錯誤請求
404請求資源不存在
500服務器出現錯誤

公網/內網

公網

????????公網是全球范圍內的互聯網,由無數網絡設備(如路由器、服務器)通過TCP/IP協議互聯而成,允許任何接入網絡的設備進行公開通信。例如,訪問百度、使用微信或瀏覽國外網站都是通過公網實現的。

特點:

  • 具有全球唯一的公網IP地址
  • 所有用戶都可以訪問

內網

????????內網是私有網絡,僅在特定組織或家庭內部使用,設備通過路由器、交換機等連接。例如,家庭Wi-Fi、公司辦公網絡都是內網。

特點:

  • 局域網IP地址(192.168.68.23),不同局域網中可重復使用。
  • 內網設備不會直接暴露在公網內,外網用戶無法根據內網地址訪問該設備。
  • 相比公網速度更快(如1Gbps)

那么內網中的設備是如何訪問到公網的資源的呢?如訪問百度,CSDN

這就是下面要提到的NAT網絡地址轉換技術

為什么會有公網和內網之分呢?

因為IPV4地址資源短缺,沒有辦法給每一臺聯網設備提供公網IP。

NAT網絡地址轉換

家庭網絡(路由器)通過光纖/DSL接入(單層NAT)

以下將詳細介紹內網設備是如何通過路由器來訪問外網的。

  • 首先我們從運營商中購買寬帶,會得到一個公網IP。
  • 再將路由器的網線連接到寬帶中,配置路由器管理頁面,使得內網設備連接。
  • 此時連接的內網設備可以得到一個路由器分配的局域網IP地址
  • 此時設備如果想要訪問百度
  • 設備的默認網關指向路由器的內網IP(如?192.168.1.1),所有非本地的數據包都會發送給路由器處理。

  • 設備通過路由器或運營商提供的DNS服務器(如?8.8.8.8)將域名(如?www.baidu.com)解析為公網IP地址。

  • DNS解析后發現目標的IP地址不在本地局域網中,將數據包發送到默認網關(路由器),路由器啟用NAT網絡地址轉換

  • NAT網絡地址轉換:將設備的內網IP地址替換為路由器的公網IP,并分配給一個隨機的端口,并記錄NAT映射表(包含內網設備的IP和端口,路由器公網IP和端口,目標服務器(百度)IP和端口)

  • 通過網絡訪問百度服務器

  • 服務器數據傳回內網設備:百度服務器會根據NAT映射表來將相應的數據發送給表中的有公網ip的路由器。

  • 路由器響應:路由器根據NAT映射表中的內網設備ip和端口,將數據傳回內網設備。

移動網絡(手機)依賴基站和蜂窩核心(多層NAT)

  • 手機在開啟移動網絡后,會搜索附近基站信號(如5G頻段n78),建立無線連接(RRC連接)。
  • 手機向核心網發起PDN連接請求
  • 運營商網關會給手機分配一個內網ip地址,若支持IPv6,手機可呢會直接得到ipv6地址
  • 手機在瀏覽器中訪問百度時,生成http數據包,他將通過附近的基站傳輸到核心網(5GC)
  • 核心網再將數據發送至運營商的網關
  • CGNAT(運營商NAT,多層)會將手機的內網IP轉換為公網ip(該公網IP屬于?移動網絡運營商(如中國移動、中國聯通、中國電信),是運營商從國際組織(如APNIC)申請獲得的IP地址資源池中的一部分,是有限的),并記錄內網IP,公網IP,目標IP組成的映射表
手機(內網IP:10.100.100.100)  ↓  
運營商第一層NAT(映射到運營商內網IP:100.64.1.1)  ↓  
運營商第二層NAT(映射到公網IP:120.230.45.67)  ↓  公網互聯網
  • 最后再將數據包通過運營商網絡發送給百度服務器。
  • 傳回手機同上。

DNS/DDNS/域名

DNS定義

DNS(Domain Name System)是將人類可讀的域名(如?www.example.com)轉換為機器可識別的IP地址(如?93.184.216.34)的分布式數據庫系統。

DNS核心功能

????????域名解析:將域名轉換為IP地址(正向解析)。

????????反向解析:通過IP地址查詢域名(反向解析)。

DNS工作流程(以訪問?www.baidu.com?為例):

????????瀏覽器緩存:檢查本地緩存是否有域名對應的IP。

????????系統緩存:查詢操作系統(如Windows的hosts文件)。

????????根域名服務器:返回頂級域(如?.com)的服務器地址。

????????頂級域服務器:返回權威DNS服務器(如?baidu.com的NS記錄)。

????????結果緩存:將IP地址緩存到本地供后續使用。

DDNS定義

????????DDNS(Dynamic DNS)是DNS的擴展,用于在設備IP地址頻繁變化時(如家庭寬帶動態IP),自動更新域名與IP的綁定關系.例如國內花生殼的DDNS服務。

域名定義

域名是用戶訪問網站或服務的易記名稱,由多級標簽組成(如?mail.google.com),通過層級結構(根域→頂級域→二級域→子域)管理。

通俗的來講:就是將難記的IPv4地址轉換為容易記憶的字符,換句話說就是用你的名字來代替你的身份證號一樣。

域名的注冊:國內如阿里云、騰訊云

根域名:.(通常省略)

一級域名(頂級域名):.com(?.com(商業)、.org(非營利組織)、.net(網絡服務)

二級域名:example.com

三級域名:cn.example.com

四級域名:blog.cn.example.com

上述如果有誤,請大佬指正批評!?如有幫助可以支持下老弟嗎

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

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

相關文章

18、深拷貝與淺拷貝的區別【中高頻】

淺拷貝 淺拷貝只是拷貝了一個指針,并沒有開辟一塊新的內存。拷貝的指針和原來的指針 指向同一塊地址。當一個對象修改了資源,另一個對象也會受到影響,因此淺拷貝是有風險的:當兩個對象都銷毀 并調用析構函數時,會造成…

【Linux】從入門到精通:Make與Makefile完全指南

歡迎來到 CILMY23 的博客 🏆本篇主題為:從入門到精通:Make與Makefile完全指南 🏆個人主頁:CILMY23-CSDN博客 🏆系列專欄:C | C語言 | Linux | Python | 數據結構和算法 | 算法專題 &#x1…

利用PyQt簡單的實現一個機器人的關節JOG界面

在上一篇文章中如何在Python用Plot畫出一個簡單的機器人模型,我們介紹了如何在Python中畫出一個簡單的機器人3D模型,但是有的時候我們需要通過界面去控制機器人每一個軸的轉動,并實時的顯示出當前機器人的關節位置和末端笛卡爾位姿。 那么要實…

iOS 使用消息轉發機制實現多代理功能

在iOS開發中,我們有時候會用到多代理功能,比如我們列表的埋點事件,需要我們在列表的某個特定的時機進行埋點上報,我們當然可以用最常見的做法,就是設置代理實現代理方法,然后在對應的代理方法里面進行上報&…

XGBoost和LightGBM機器學習算法對比及實戰

文章目錄 1. XGBoost 原理核心思想關鍵技術點2. LightGBM 原理核心思想關鍵技術點3. XGBoost vs LightGBM 對比4. 適用場景選擇5. 總結1. 數據準備2. XGBoost 示例安裝庫代碼實現3. LightGBM 示例安裝庫代碼實現4. 關鍵參數對比5. 注意事項6. 輸出示例XGBoost 和 LightGBM 是兩…

局域網自動識別機器名和MAC并生成文件的命令

更新版本:添加了MAC 地址 確定了設備唯一性 V1.1 局域網自動識別機器名和MAC并生成文件的批處理命令 echo off setlocal enabledelayedexpansionREM 設置輸出文件 set outputFilenetwork_info.txtREM 清空或創建輸出文件 echo Scanning network from 192.168.20.1…

基于Python+Vue開發的體育用品商城管理系統源碼+開發文檔+課程作業

項目簡介 該項目是基于PythonVue開發的體育用品商城管理系統(前后端分離),這是一項為大學生課程設計作業而開發的項目。該系統旨在幫助大學生學習并掌握Python編程技能,同時鍛煉他們的項目設計與開發能力。通過學習基于Python的體…

pyQT5簡易教程(一):制作一個可以選擇本地圖片并顯示的桌面應用

可以參考之前的教程安裝 PyQt 和 PyQt Designer https://blog.csdn.net/smx6666668/article/details/145909326?spm=1011.2415.3001.10575&sharefrom=mp_manage_link 一、打開pycharm中的QTdesigner 二、設計界面 和之前一樣,使用 PyQt Designer 來設計界面并保存為 .u…

LeetCode 解題思路 6(Hot 100)

解題思路: 初始化窗口元素: 遍歷前 k 個元素,構建初始單調隊列。若當前索引對應值大于等于隊尾索引對應值,移除隊尾索引,將當前索引加入隊尾。遍歷結束時當前隊頭索引即為當前窗口最大值,將其存入結果數組…

基于redis的位圖實現簽到功能

基于Redis位圖實現簽到功能是一種高效且節省內存的方法。以下是分步實現的詳細方案&#xff1a; 1. 鍵設計策略 采用 sign:<userId>:<YYYYMM> 格式存儲每月簽到數據 # 示例&#xff1a;用戶1001在2023年8月的簽到數據 sign_key "sign:1001:202308"2.…

C++ Qt OpenGL渲染FFmpeg解碼后的視頻

本篇博客介紹使用OpenGL渲染FFmpeg解碼后的視頻,涉及到QOpenGLWidget、QOpenGLFunctions、OpenGL shader以及紋理相關,播放效果如下: 開發環境:Win11 C++ Qt6.8.1、FFmpeg4.0、x64 ??注意:Qt版本不同時,Qt OpenGL API及用法可能差別比較大,FFmpeg版本不同時API調用可能…

deepseek部署:ELK + Filebeat + Zookeeper + Kafka

## 1. 概述 本文檔旨在指導如何在7臺機器上部署ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;堆棧、Filebeat、Zookeeper和Kafka。該部署方案適用于日志收集、處理和可視化場景。 ## 2. 環境準備 ### 2.1 機器分配 | 機器編號 | 主機名 | IP地址 | 部署組件 |-…

2.數據結構:1.Tire 字符串統計

1.Tire 字符串統計 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010; int son[N][26];//至多 N 層&#xff0c;每一層至多 26 個節點&#xff08;字母&#xff09; int cnt[N];//字符串至多 N 個&#xff…

算法(四)——位運算與位圖

文章目錄 位運算、位圖位運算基本位運算異或運算交換兩個數無比較返回最大值缺失的數字唯一出現奇數次的數唯二出現奇數次的數唯一出現次數少于m次的數 位運算進階判斷一個整數是不是2的冪判斷一個整數是不是3的冪大于等于n的最小的2的冪[left, right]內所有數字&的結果反轉…

本地部署deepseek大模型后使用c# winform調用(可離線)

介于最近deepseek的大火&#xff0c;我就在想能不能用winform也玩一玩本地部署&#xff0c;于是經過查閱資料&#xff0c;然后了解到ollama部署deepseek,最后用ollama sharp NUGet包來實現winform調用ollama 部署的deepseek。 本項目使用Vs2022和.net 8.0開發&#xff0c;ollam…

SpringBoot原理-02.自動配置-概述

一.自動配置 所謂自動配置&#xff0c;就是Spring容器啟動后&#xff0c;一些配置類、bean對象就自動存入了IOC容器當中&#xff0c;而不需要我們手動聲明&#xff0c;直接從IOC容器中引入即可。省去了繁瑣的配置操作。 我們可以首先將spring項目啟動起來&#xff0c;里面有一…

P10265 [GESP樣題 七級] 迷宮統計

題目描述 在神秘的幻想?陸中&#xff0c;存在著 n 個古老而神奇的迷宮&#xff0c;迷宮編號從 1 到 n。有的迷宮之間可以直接往返&#xff0c;有的可以?到別的迷宮&#xff0c;但是不能?回來。玩家小楊想挑戰?下不同的迷宮&#xff0c;他決定從 m 號迷宮出發。現在&#x…

Spring框架中的工廠模式

在Spring框架里&#xff0c;工廠模式的運用十分廣泛&#xff0c;它主要幫助我們創建和管理對象&#xff0c;讓對象的創建和使用分離&#xff0c;提高代碼的可維護性和可擴展性。下面為你詳細介紹Spring框架中工廠模式的具體體現和示例&#xff1a; 1. BeanFactory 作為工廠模式…

音視頻-WAV格式

1. WAV格式說明&#xff1a; 2. 格式說明&#xff1a; chunkId&#xff1a;通常是 “RIFF” 四個字節&#xff0c;用于標識文件類型。&#xff08;wav文件格式表示&#xff09;chunkSize&#xff1a;表示整個文件除了chunkId和chunkSize這 8 個字節外的其余部分的大小。Forma…

SQL Server Management Studio的使用

之前在https://blog.csdn.net//article/details/140961550介紹了在Windows10上安裝SQL Server 2022 Express和SSMS&#xff0c;這里整理下SSMS的簡單使用&#xff1a; SQL Server Management Studio(SSMS)是一種集成環境&#xff0c;提供用于配置、監視和管理SQL Server和數據…