主頁 >  其他 > 帶你探索網路里的那些秘密

帶你探索網路里的那些秘密

2020-10-26 06:40:36 其他

背景


網路,網路...

雖然只是一個簡單的名詞,但是她的背后卻掩藏著太多太多的故事以及知識,

窮其編程的一生,或許也只能探索出那冰山一角,嗨...

小時雖知,學海無涯,卻毫不知意,玩乃天性,卻空流時光,憾...

so,矯情之余,我們來探索一下網路究竟是怎么傳輸的,

概述


1

探索網路的范圍,都在上圖有所展示(另存為看大圖),

正文


一. 生成HTTP請求訊息

2

打開一個網站,都是從瀏覽器中輸入網址開始,我們的探索也是從這里開始,

https: 是協議,告訴瀏覽器我們要訪問的目標,而https: 代表的就是訪問Web服務器,當然也有其他的協議,比如ftp:訪問的就是FTP服務器等,

sexyphoenix.github.io 是Web服務器域名,可以告訴我們在哪里可以找到Web服務器,

about/ 是Web服務器里面的檔案路徑名,這里的about是目錄名,全路徑可能是about/index.md,而index.md應該被github掩藏了,

瀏覽器首先要做的就是對URL進行決議,知道我們要訪問的是sexyphoenix.github.io這個Web服務器上檔案路徑為about目錄下的默認檔案,

知道了要訪問的目標,接下來瀏覽器就要生成HTTP的請求資訊,介紹到這,就要聊一聊HTTP協議了,

HTTP協議規定了客戶端和服務器通信的內容和步驟,簡單來說,就是兩個部分“對什么”“怎樣的操作”

“對什么”上面已經決議過了,“怎樣的操作”就是HTTP主要的方法:POST、GET、DELETE、PUT等,HTTP格式看下圖,

3

二、查詢Web服務器的IP地址

生成HTTP資訊之后,接下來,我們就要發送資訊給Web服務器了,但此時我們突然發現我們只有Web服務器的域名,并不知道服務器究竟在哪里,

那么我們應該如何像現實中送快遞一樣,快速的定位到哪一幢哪一室,講到這里,想必大家都有所意會了,IP,

IP地址

IP地址實際就是4個位元組,32位元的數字,每8個位元為1組,具體看下圖十進制表示,

4

我們發送的資訊,就是通過子網的集成器找到最近的路由器,再通過路由器(基于IP設計)找到最優抵達Web服務器的路由器,這樣不斷的查找網路中的路由器節點,最終抵達Web服務器,

注意,我們的Web服務器的IP是最終的目的地,它是貫穿路由器---N---路由器---Web服務器整個環節的,是判斷整個網路走向的依據,存在控制資訊中,

路由器都有自己的IP,路由器到路由器就是根據Web服務器的IP(走向),通過本身的IP來移動,

到這里,我們也就了解清楚了通過IP,發送的資訊最終可以抵達Web服務器,

那么,我們現在的問題就是如何通過Web服務器的域名找到它的IP? 講到這里,想必大家又都有所意會了,DNS,

域名決議

簡單的來說,DNS服務器維持了一系列關系表,也就是域名和IP對于的關系表,瀏覽器向最近的DNS服務器詢問“sexyphoenix.github.io”的IP地址是多少,DNS服務器會回答Web服務器IP為xxx,這一步也叫域名決議

講到這里,我們就要深究一下,瀏覽器究竟是怎樣向DNS服務器發送查詢的?

首先,我們要清楚一點,瀏覽器等應用程式本身是不能發送資訊的,而是委托給作業系統來發送的,

而作業系統有一個超級出名的庫,Socket庫,它是呼叫網路功能的程式組件集合,

Socket庫里面有一個函式,

IP資訊 = gethostbyname("sexyphoenix.github.io") # 看,應用程式查詢IP很簡單,呼叫一個函式即可

發送資料有兩種協議,UDP和TCP,域名查詢用的是UDP,資料短速度快,

介紹了域名決議,下面來了解一下DNS服務器的作業,

DNS服務器

5

在上面已經提到過了,DNS服務器維護了一個關系表,上圖的型別A表示域名對應IP地址,MX表示域名對應的郵箱服務器,不同的型別,回傳的資訊有所不同,

DNS服務器的作業就是根據域名和型別,查找相關的記錄,并向應用程式回傳回應資訊,

DNS服務器查找

全球共有13臺根域名服務器,根域名用“.”表示,其次才是下面的一級域名“com.”、“net.”等,我們平時訪問的域名“sexyphoenix.github.io.”后面有一個點,平時被省略,

我們用一張圖來看下查找順序,更清楚些,

6

先找最近的DNS服務器(一般是本機設定的),沒有再從根域找,然后不斷的向下找,直到找到我們Web服務器IP所在的DNS服務器,

三、TCP/IP傳輸資料

通過DNS服務器查詢,我們已經得到的Web服務器的IP,接下來就要開始發送資料了,而這部分也是比較難寫的一部分,因為我們要深入協議堆疊的內部,去了解它的結構,

我們都知道資料的傳輸,都是由上層委托給下層作業的,應用程式將發送的資訊的行為委派給了作業系統,而作業系統內部就是通過協議堆疊來作業的,

來看下作業系統協議堆疊圖,

7

上部分是TCP協議和UDP協議,都是負責資料的收發部分,區別在于TCP是面向連接的,是一種可靠的協議,而UDP只負責發送,不保證準確到達,

下部分是IP協議,負責發送網路包,其中還包括ICMP協議(檢查發送程序是否存在錯誤)和ARP協議(查詢MAC地址),

資料收發

在查詢IP地址的時候,我們用到了Socket庫,這里同樣也需要用到它,

不過我們這里需要呼叫多個組件,才能實作資料的收發,從功能上可以分為四個部分,

  1. 創建套接字 (new Socket)

  2. 連接服務器的套接字 (connection)

  3. 收發資料 (write、read)

  4. 洗掉套接字 (close)

在講之前,我們先了解下套接字,

套接字在資料收發中是相當重要的,它是一塊記憶體空間,里面存放著很重要的的控制資訊

這些控制資訊存放著通信物件的IP地址、埠、連接狀態、回應時間、資料收發情況等等,只有這些存在,才能知道資料發送到哪里,又發送了多少,有沒有錯誤等等,

創建套接字

創建套接字還是非常簡單的,直接呼叫Socket庫中的socket組件即可,創建完成之后會回傳一個識別符號,識別符號的主要作用就是為了區別不同的套接字,

連接服務器的套接字

連接服務器用到的是connect組件,引數有識別符號、服務器的IP、埠等,相當于和服務器之間連接了一條資料管道,后期資料在其中流通,

同時在這里也會發生著名的“三次握手”,

在剛發生連接階段,管道里面是沒有資料的,但是會有控制資訊,這些控制資訊包括TCP頭部,以太網頭部、IP頭部,

控制資訊

根據層級來,我們會先生成TCP頭部,TCP頭部格式有很多欄位,其中重要的就是雙方的埠,序號,ACK號,控制位,視窗等,稍微了解一下這些欄位的作用,

埠和IP是一同存在的,在互聯網早期的時候,公司聯網都是直接用公網IP的,但隨著互聯網的發展,公網IP越來越少,于是就出現了公網和內網的區別,

內網IP范圍

  1. 10.0.0.0 ~ 10.255.255.255

  2. 172.16.0.0 ~ 172.31.255.255

  3. 192.168.0.0 ~ 192.168.255.255

每個公司的內部都使用這些內網IP,再通過唯一的一個公網IP訪問互聯網,這樣就可以節省大量的公網IP,

那么公司的這些設定內網IP的電腦是如何通過唯一的公網IP訪問互聯網呢? 互聯網回傳的資訊又是怎么通過唯一的公網IP,定位到公司的某一臺電腦上的?

地址轉換(NAT),這個技術就解決了上面的問題,它的原理就是在轉發網路包時對IP頭部地址和埠進行改寫,

而埠在其中的作用至關重要,它可以讓路由器(公網IP)知道是那一臺內網的電腦與互聯網通信,具體看下圖,

8

公司IP為192.168.23.183的電腦,通過49158埠向互聯網發送連接,當到達公司的公網路由器的時候,路由器的IP模塊會對控制資訊進行改寫,最后變成IP為121.225.19.59,埠為1001和通信物件通信,

同時將這條記錄保存在路由器上,當通信物件回傳資訊時,會通過表格中的資訊找到對應的內網電腦IP,

序號

發送方告訴接收方該網路包在所有發送的資料的第幾個位元組,序號的初始值是在連接階段隨機生成的(防止攻擊者猜到),在下面的收發資料階段,就是以這個序號為基數,

ACK號

接收方告訴發送發已經收到所有資料的第幾個位元組,相當于序號+發送的資料長度,

控制位

每一個位元代表不同的控制資訊,看下圖,

9

圖中解釋了比較重要的控制位,

視窗

接收方告訴發送方的視窗大小,如果接收方接受的速度比較慢,一起傳送的資料量就會變小相當于控制了我們傳送資料的快慢,

介紹了TCP頭部的關鍵欄位,接下來我們開始進入連接,

首先,我們會將客戶端的控制位的SYN(1)、生成隨機序號M、視窗大小等,再通過其他層,到達服務器端(第一次握手),

服務器收到SYN為1的資訊,知道客戶端要和我連接,生成ACK號(M+1)、服務器隨機序號N(通信是雙向的,這時的服務器也相當于發送方)、控制位SYN(1)、視窗等發送(第二次握手),

客戶端收到服務器端的資訊,得到ACK號,知道連接正常,發送ACK號(N+1,服務器端的序號)、控制位SYN(1),告訴服務器已建立連接(第三次握手),

收發資料

管道連接建立成功后,就進入了資料收發階段,

我們發送的資訊一般都是比較大的,不可能一次性發送完畢,所以在TCP模塊,就會將應用資料切分成資料塊,切分的每個資料塊(MSS,最大資料長度)加上TCP頭部,IP頭部不能超過MTU大小(MTU,最大傳輸單元),

接下來,交給IP模塊,生成IP頭部和MAC頭部資訊,再通過網卡驅動,網卡設備將數字資訊轉變成電信號,傳輸到接收方,接收方收到資訊,會回傳ACK號,重復以上步驟,直到接收方收到所有資料,

接收方收到全部資料后,同樣會向發送方發送資料,下面的步驟都和上面差不多了,這里不再贅述,

10

洗掉套接字

和接收方通信完成之后,套接字不會再使用,這時就可以洗掉套接字了,

套接字洗掉可以由任何一方發起,這里假設服務器端發起,下面就來講講著名的“四次揮手”,

接收方收到全部資料后,等待一會就會洗掉套接字,

  1. 服務器生成斷開資訊,即將TCP的頭部控制位的FIN設定為1,發送給客戶端,

  2. 客戶端回傳ACK號,表示發送的資訊無誤,

  3. 客戶端所有資料處理完成后,向服務器發送FIN為1的斷開資訊,

  4. 服務器回傳ACK號,表示發送的資訊無誤,等待一會,客戶端和服務器端都洗掉套接字,

講到這里,資料收發的絕大數內容就講完了,接下來我們聊一聊IP模塊,

IP模塊

前面提到過,在IP模塊會生成IP頭部和以太網頭部,那么這兩個頭部究竟有什么作用?

為了便于理解,我們這里就講的簡單一些,

發送的資料到達子網的集線器或者交換機,通過MAC表,找到下一個轉發設備的MAC地址,以“以太網協議”傳輸到下一個轉發設備,

轉發設備根據目標地址的IP和“IP協議”判斷下一個轉發設備的IP,再通過MAC地址,傳輸到下一個轉發設備,

就這樣,經過多個轉發設備的接力后,網路包最終到達接收方的網路設備,

總結:IP協議根據目標地址判斷下一個IP轉發設備的位置,再通過以太網協議將網路包輸出到下一個轉發設備

四、到達Web服務器

其實在到達Web服務器之前,我們也應該講講數字信號是如何轉化為電子信號的? 資料又是如何通過運營商到達Web服務器的?

只是這部分實在過于復雜,也多數跟硬體以及運維方向有關,這里就不講了,

首先,我們來講一講Web服務器的部署,

Web服務器的部署有三種方式

  1. 直接部署在公司的內網,

  2. 公司的內網和Web服務器分開部署,在接入網之后,部署統一防火墻,再分別進去內網和服務器,

  3. web服務器部署在運營商的資料中心,

三種方式自上而下,性能和安全上會越來越好,只是管理上可能會麻煩些,

為了安全和分擔負載,Web服務器前面會部署防火墻,可能還會有負載均衡器、快取服務器、內容分發等等,

資料在經過層層過濾后,最終到達Web服務器,服務器的程式和上面創建連接的步驟稍有不同,

  1. 首先是創建套接字(socket),

  2. 系結套接字和埠號(bind),

  3. 等待連接(listen),

  4. 接受連接(accept),

服務器的程式會一直等待客戶端的連接,

在接收到客戶端的請求后,Web服務器根據URI轉換為實際的檔案名,并作出回應,格式如下,

11

到這里,我們所有的內容就到這里了,

最后,祝大家每天身體健康,開心編程,看的開心,嘿...

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/191492.html

標籤:其他

上一篇:2020年1024程式員節,成為CSDN博客專家

下一篇:使用Pandas DataFrame輸出報告

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more