国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何通過命令行工具去理解網絡協議

I_Am / 1000人閱讀

摘要:收發兩端的對等層通過協議進行通信。以查詢的網卡信息為例網絡診斷助手命令工具命令采用的協議允許主機或路由器報告差錯情況和提供有關異常情況的報告。

TCP/IP網絡分層模型

TCP/IP五層模型將網絡功能五層。

每一層實現各自的功能。

應用層:為應用程序提供服務。

傳輸輸層:解決進程間的通信。

網絡層:解決跨網絡的主機通信問題。

數據鏈路層:解決相鄰網絡節點通信問題。

物理層:透明地傳輸比特流。

每一層都有對應的具體協議。

每一層通過接口為上層提供服務。

收發兩端的對等層通過協議進行通信。


基本概念

IP地址

在Internet上的給主機統一編址的地址格式,也稱為網絡協議(IP協議)地址。它為互聯網上的每一個網絡和每一臺主機分配一個邏輯地址,常見的IP地址,分為IPv4與IPv6兩大類。

子網

IP地址是以網絡號和主機號來標示網絡上的主機的,比如172.16.10.0/24所表示的一個子網前24個bits表示網絡號,后8bits表示主機號,該子網的IP地址的范圍是172.16.10.0-172.16.10.255。網絡號為相同子網,同子網的主機可以直接相互通信;不同子網須通過本地網關(Gateway)經由路由器來轉發數據。

MAC地址

稱為物理地址,也叫硬件地址,用來定義網絡設備的位置,MAC地址是網卡出廠時設定的。采用十六進制數表示,長度是6個字節(48位)。

路由器

工作在網絡層,根據IP地址,將數據包從一個子網傳遞轉發到另外一個子網上。

交換機

工作在數據鏈路層,根據MAC地址,將一個數據幀從一個節點傳送到相同鏈路的另一個節點上。


測試場景

以上ECS網卡的IP地址以及MAC地址可以通過ifconfig命令查詢到。以查詢ecs1的網卡信息為例:


網絡診斷助手
命令工具

ping

ping命令采用的協議ICMP

ICMP 允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP 工作在IP層,報文作為 IP 層數據報的數據,加上IP數據報的首部,組成 IP 數據報發送出去。

ping命令的基本作用

目的主機是否可達

報文往返主機的時延

ping命令選項

-c 限定發包的個數

-i 控制發包的時間間隔

-s 設定包的大小,通常用于驗證大包是否可以正常傳輸


解析主機間通信過程
命令工具

arp arp相關操作

route 路由相關操作

通過route命令區分通信的類型

通過route -n查看ecs1的路由信息:

? ecs2的IP為172.16.10.20,匹配最后一條路由信息,屬于172.16.10.0/24網段,說明兩者同屬一個子網。同屬于一個子網的主機間通信通過二層交換機即可完成,屬于子網通內通信。

? ecs3的ip 172.16.30.30會匹配第一條路由,從ecs1發給ecs3的報文會從網卡eth0發送到網關172.16.10.1,該網關配置的路由器的一個端口上。凡是需要通過子網網關轉發到目的主機的通信過程都屬于子網間通信。

子網內通信

ecs1和ecs2同屬一個子網,我們通過從ecs1去ping ecs2來觀察子網內的通信過程。

子網內通信發送數據幀過程:

接下來我們通過命令行觀察通信過程是如何完成的。

? 在子網內通信中,數據幀是通過MAC地址去找到目標主機然后完成傳輸。首先我們通過arp -n命令查看ecs1的arp緩存表:

可以看到網關172.16.10.1的MAC地址是fa:16:3e:12:00:7d,但是ecs1并沒有esc2的MAC地址,需要ARP協議去獲得目標主機ecs2的MAC地址。

? 通過抓包發現,在正式進行通信之前,ecs1會先發送ARP廣播,在ecs2收到報文之后,因為自身的IP是arp請求的IP,所以會回復自己的MAC地址,這樣ecs1就獲得ecs2的MAC地址。同時ecs2也會學習到ecs1的MAC地址。

這個過程之后再分別查看ecs1和ecs2的arp緩存表,收發兩端都獲取到了對端主機的MAC信息:

在接下來的過程中,兩者可以拿著學習到的MAC地址完成通信。

跨子網通信

ecs1和ecs3屬于不同子網,我們通過從ecs1去ping ecs3來觀察跨子網的通信過程。

三層報文的數據轉發路徑:

? 報文首先會從ecs1發送到網關172.16.10.0/24網關172.16.10.1,然后路由器會查詢路由表從子網172.16.30.0/24網關172.16.30.1接口發出去達到ecs3。

結束ping之后查看ecs1和ecs3的arp緩存,發現并沒有對端IP的arp緩存記錄。

在ecs1抓包,可以發現ecs1發送給ecs3的報文的目的MAC地址正是172.16.10.0/24網關172.16.10.1的MAC地址。

在ecs3上抓包,ecs1發送給ecs3的報文的可以發現源MAC地址是子網172.16.30.0/24網關172.16.30.1的MAC地址。

VPC網絡理解

? 目前各大公有云廠商基本都提供了虛擬私有云(Virtual Private Cloud,簡稱VPC)這個網絡產品,為用戶提供了一個安全隔離,管理配置便捷的虛擬網絡環境。前面的講解的通信模型可以構成一個最簡單的VPC,每個VPC由一個虛擬路由器和一個或多個虛擬交換機組成,每個虛擬交換機對應了一個子網,用戶可以在不同的子網去創建虛擬機。子網內主機的通信通過對應的交換機去完成,跨子網的主機通信需要通過路由器路跳轉到目的子網再到目的主機。

? 阿里云的經典網絡也同樣可以理解為是一個獨立的網絡平面,但是與VPC不同的是,VPC里的IP地址是每個租戶多帶帶使用的,租戶可以使用一整段的IP地址進行網絡規劃,并配置相應的安全規則和路由規則。而經典網絡的IP資源是所有用戶共享的,分配到的IP也是隨機獲取的,這樣就會造成每個租戶的IP是離散的,就無法靈活地去配置安全規則和路由規則。另外,每個經典網絡的虛擬機都需要一個IP獲得公網訪問能力,而在VPC中只要給一個VPC配置一個NAT網關讓VPC內所有虛擬機都獲得公網訪問能力。以上是VPC優于經典網絡的地方。

虛擬私有云這個名稱容易對剛接觸云計算的同學造成困擾,可能會與公有云、私有云等概念造成混淆,實際上虛擬私有云就是一個隔離的虛擬網絡環境,這樣了理解會更加清晰點。

傳輸層基本功能

? 當源主機的信息通過網絡層傳送到目的主機的網卡之后,傳輸層通過端口將報文信息送到對應的端口。傳輸層實現了應用進程間的端到端(end-to-end)通信 。

命令工具

netstat 查看本地端口連接狀態

telnet 判斷目的主機端口是否可以訪問

tcp連接中的連接釋放過程與狀態變化

傳輸層網絡狀態查看

? 通過python的SimpleHTTPServer命令在ecs3的8000端口上起一個http服務 python -m SimpleHTTPServer ,然后通過命令netstat -nat可以查看ecs3上所有tcp的端口連接狀態。可以看到8000端口處于LISTEN狀態。

? 在ecs1上telnet ecs3的8000端口 telnet 172.16.30.30 8000,可以看到ecs3的8000端口與ecs1de 57498端口建立了連接,進入了TCP連接中的ESTABLISHED狀態。

? 最后在ecs1終止telnet,再次觀察ecs3的8000端口的端口連接狀態,可以發現收發兩端的連接狀態進入了TIME_WAIT的狀態。

再經過一段時間,TIME_WAIT狀態的連接會消失,回到只有一個LISTEN狀態的網絡端口狀態信息。

telnet端口探測結果

? 在ecs1上對ecs3的8000端口進行端口探測,如果可以正常的進行連接ecs1是如下圖的結果:

? 如果此時,停掉ecs3上對應的進程,使其不再對8000端口進行監聽,可以發現telnet的結果是直接反饋Connection refused。

還有種情況是,對8000端口進行探測一直處于trying狀態,這種情況一般是發起請求的報文未到達目的端,請求報文在傳輸過程中被drop掉,源端一直會等待到超時。

netstat命令常用選項

-a 顯示所有連線中的Socket

-n 直接使用ip地址,而不通過域名服務器

-t 顯示TCP傳輸協議的連線狀況

-u 顯示UDP傳輸協議的連線狀況

-p 顯示正在使用Socket的程序識別碼和程序名稱

-l 顯示監控中的服務器的Socket


應用層的報文
命令工具

curl 利用URL語法在命令行下工作的文件傳輸工具

在ecs1上通過curl命令訪問ecs3在8000端口的服務,可以返回ecs3上的網頁資源:

通過抓包發現可以清楚地看到發起請求過程中TCP三次握手的報文以及HTTP請求報文

同樣的在完成請求后,會有HTTP響應報文以及TCP四次揮手的報文

curl命令常用選項

-v/--verbose 用于打印更多信息,包括發送的請求信息

-m/--max-time 指定處理的最大時長

-H/--header

指定請求頭參數

-s/--slient 減少輸出的信息,比如進度

-o/--output 指定輸出文件名稱

-d/--data/--data-ascii 指定POST的內容

-I/--head 僅返回頭部信息,使用HEAD請求


抓包小貼士
命令工具

tcpdump 采用命令行方式對接口的數據包進行篩選抓取

抓包基本格式

重要抓包選項

-c 指定要抓取的包數量。
-i 指定tcpdump需要監聽的接口。可以使用"any"關鍵字表示所有網絡接口。
-n 對地址以數字方式顯式,否則顯式為主機名。
-nn 除了-n的作用外,還把端口顯示為數值,否則顯示端口服務名。
-e 輸出的每行中都將包括數據鏈路層頭部信息,例如源MAC和目標MAC。
-w 將抓包數據輸出到文件中而不是標準輸出

舉例

抓取經過eth0的ecs1與ecs3在8000端口的tcp報文,抓取數量為1000,并存到文件中。

tcpdump -i eth0  host 172.16.10.10 and 172.16.30.30 and tcp port 8000 -nne -w packet.pcap
如果抓包要存入到文件中,最好指定抓取報文的數量,否則持續抓包而忘記停止會導致文件一直增大,擠爆服務器的存儲空間,導致影響業務。

參考資料

OSI七層模型與TCP/IP五層模型

IP地址和子網劃分學習筆記

netstat 命令詳解

Linux之curl命令詳解

抓包工具tcpdump用法說明

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25400.html

相關文章

  • 【小項目】全棧開發培訓手冊 | 后端(1) vert.x框架理解

    摘要:二來,給大家新開坑的項目一個參考。因此,本系列以主要以官方文檔為基礎,將盡可能多的特性融入本項目,并標注官網原文出處,有興趣的小伙伴可點擊深入了解。可以通過一些特殊協議例如將消息作為統一消息服務導出。下載完成后自行修改和。 開坑前言 我給這個專欄的名氣取名叫做小項目,聽名字就知道,這個專題最終的目的是帶領大家完成一個項目。為什么要開這么大一個坑呢,一來,雖然網上講IT知識點的書籍鋪天蓋...

    hightopo 評論0 收藏0
  • 以太坊DApp開發入門教程——Node.js和truffle框架打造區塊鏈投票系統

    摘要:第一節課程概述本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,并將手把手地教大家如何構建一個基于以太坊的完整去中心化應用區塊鏈投票系統。第七節以太坊世界計算機以太坊是一種區塊鏈的實現。交易數據以太坊中每筆交易都存儲在區塊鏈上。 第一節 課程概述 本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,并將手把手地教大家如何構建一個 基于以太坊的完整去中心化應用 —— 區塊鏈投票系統。 ...

    zebrayoung 評論0 收藏0

發表評論

0條評論

I_Am

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<