摘要:收發(fā)兩端的對等層通過協(xié)議進(jìn)行通信。以查詢的網(wǎng)卡信息為例網(wǎng)絡(luò)診斷助手命令工具命令采用的協(xié)議允許主機(jī)或路由器報告差錯情況和提供有關(guān)異常情況的報告。
TCP/IP網(wǎng)絡(luò)分層模型
TCP/IP五層模型將網(wǎng)絡(luò)功能五層。
每一層實現(xiàn)各自的功能。
應(yīng)用層:為應(yīng)用程序提供服務(wù)。
傳輸輸層:解決進(jìn)程間的通信。
網(wǎng)絡(luò)層:解決跨網(wǎng)絡(luò)的主機(jī)通信問題。
數(shù)據(jù)鏈路層:解決相鄰網(wǎng)絡(luò)節(jié)點(diǎn)通信問題。
物理層:透明地傳輸比特流。
每一層都有對應(yīng)的具體協(xié)議。
每一層通過接口為上層提供服務(wù)。
收發(fā)兩端的對等層通過協(xié)議進(jìn)行通信。
IP地址
在Internet上的給主機(jī)統(tǒng)一編址的地址格式,也稱為網(wǎng)絡(luò)協(xié)議(IP協(xié)議)地址。它為互聯(lián)網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺主機(jī)分配一個邏輯地址,常見的IP地址,分為IPv4與IPv6兩大類。
子網(wǎng)
IP地址是以網(wǎng)絡(luò)號和主機(jī)號來標(biāo)示網(wǎng)絡(luò)上的主機(jī)的,比如172.16.10.0/24所表示的一個子網(wǎng)前24個bits表示網(wǎng)絡(luò)號,后8bits表示主機(jī)號,該子網(wǎng)的IP地址的范圍是172.16.10.0-172.16.10.255。網(wǎng)絡(luò)號為相同子網(wǎng),同子網(wǎng)的主機(jī)可以直接相互通信;不同子網(wǎng)須通過本地網(wǎng)關(guān)(Gateway)經(jīng)由路由器來轉(zhuǎn)發(fā)數(shù)據(jù)。
MAC地址
稱為物理地址,也叫硬件地址,用來定義網(wǎng)絡(luò)設(shè)備的位置,MAC地址是網(wǎng)卡出廠時設(shè)定的。采用十六進(jìn)制數(shù)表示,長度是6個字節(jié)(48位)。
路由器
工作在網(wǎng)絡(luò)層,根據(jù)IP地址,將數(shù)據(jù)包從一個子網(wǎng)傳遞轉(zhuǎn)發(fā)到另外一個子網(wǎng)上。
交換機(jī)
工作在數(shù)據(jù)鏈路層,根據(jù)MAC地址,將一個數(shù)據(jù)幀從一個節(jié)點(diǎn)傳送到相同鏈路的另一個節(jié)點(diǎn)上。
以上ECS網(wǎng)卡的IP地址以及MAC地址可以通過ifconfig命令查詢到。以查詢ecs1的網(wǎng)卡信息為例:
ping
ICMP 允許主機(jī)或路由器報告差錯情況和提供有關(guān)異常情況的報告。ICMP 工作在IP層,報文作為 IP 層數(shù)據(jù)報的數(shù)據(jù),加上IP數(shù)據(jù)報的首部,組成 IP 數(shù)據(jù)報發(fā)送出去。
目的主機(jī)是否可達(dá)
報文往返主機(jī)的時延
-c 限定發(fā)包的個數(shù)
-i 控制發(fā)包的時間間隔
-s 設(shè)定包的大小,通常用于驗證大包是否可以正常傳輸
arp arp相關(guān)操作
route 路由相關(guān)操作
通過route -n查看ecs1的路由信息:
? ecs2的IP為172.16.10.20,匹配最后一條路由信息,屬于172.16.10.0/24網(wǎng)段,說明兩者同屬一個子網(wǎng)。同屬于一個子網(wǎng)的主機(jī)間通信通過二層交換機(jī)即可完成,屬于子網(wǎng)通內(nèi)通信。
? ecs3的ip 172.16.30.30會匹配第一條路由,從ecs1發(fā)給ecs3的報文會從網(wǎng)卡eth0發(fā)送到網(wǎng)關(guān)172.16.10.1,該網(wǎng)關(guān)配置的路由器的一個端口上。凡是需要通過子網(wǎng)網(wǎng)關(guān)轉(zhuǎn)發(fā)到目的主機(jī)的通信過程都屬于子網(wǎng)間通信。
ecs1和ecs2同屬一個子網(wǎng),我們通過從ecs1去ping ecs2來觀察子網(wǎng)內(nèi)的通信過程。
子網(wǎng)內(nèi)通信發(fā)送數(shù)據(jù)幀過程:
接下來我們通過命令行觀察通信過程是如何完成的。
? 在子網(wǎng)內(nèi)通信中,數(shù)據(jù)幀是通過MAC地址去找到目標(biāo)主機(jī)然后完成傳輸。首先我們通過arp -n命令查看ecs1的arp緩存表:
可以看到網(wǎng)關(guān)172.16.10.1的MAC地址是fa:16:3e:12:00:7d,但是ecs1并沒有esc2的MAC地址,需要ARP協(xié)議去獲得目標(biāo)主機(jī)ecs2的MAC地址。
? 通過抓包發(fā)現(xiàn),在正式進(jìn)行通信之前,ecs1會先發(fā)送ARP廣播,在ecs2收到報文之后,因為自身的IP是arp請求的IP,所以會回復(fù)自己的MAC地址,這樣ecs1就獲得ecs2的MAC地址。同時ecs2也會學(xué)習(xí)到ecs1的MAC地址。
這個過程之后再分別查看ecs1和ecs2的arp緩存表,收發(fā)兩端都獲取到了對端主機(jī)的MAC信息:
在接下來的過程中,兩者可以拿著學(xué)習(xí)到的MAC地址完成通信。
ecs1和ecs3屬于不同子網(wǎng),我們通過從ecs1去ping ecs3來觀察跨子網(wǎng)的通信過程。
三層報文的數(shù)據(jù)轉(zhuǎn)發(fā)路徑:
? 報文首先會從ecs1發(fā)送到網(wǎng)關(guān)172.16.10.0/24網(wǎng)關(guān)172.16.10.1,然后路由器會查詢路由表從子網(wǎng)172.16.30.0/24網(wǎng)關(guān)172.16.30.1接口發(fā)出去達(dá)到ecs3。
結(jié)束ping之后查看ecs1和ecs3的arp緩存,發(fā)現(xiàn)并沒有對端IP的arp緩存記錄。
在ecs1抓包,可以發(fā)現(xiàn)ecs1發(fā)送給ecs3的報文的目的MAC地址正是172.16.10.0/24網(wǎng)關(guān)172.16.10.1的MAC地址。
在ecs3上抓包,ecs1發(fā)送給ecs3的報文的可以發(fā)現(xiàn)源MAC地址是子網(wǎng)172.16.30.0/24網(wǎng)關(guān)172.16.30.1的MAC地址。
? 目前各大公有云廠商基本都提供了虛擬私有云(Virtual Private Cloud,簡稱VPC)這個網(wǎng)絡(luò)產(chǎn)品,為用戶提供了一個安全隔離,管理配置便捷的虛擬網(wǎng)絡(luò)環(huán)境。前面的講解的通信模型可以構(gòu)成一個最簡單的VPC,每個VPC由一個虛擬路由器和一個或多個虛擬交換機(jī)組成,每個虛擬交換機(jī)對應(yīng)了一個子網(wǎng),用戶可以在不同的子網(wǎng)去創(chuàng)建虛擬機(jī)。子網(wǎng)內(nèi)主機(jī)的通信通過對應(yīng)的交換機(jī)去完成,跨子網(wǎng)的主機(jī)通信需要通過路由器路跳轉(zhuǎn)到目的子網(wǎng)再到目的主機(jī)。
? 阿里云的經(jīng)典網(wǎng)絡(luò)也同樣可以理解為是一個獨(dú)立的網(wǎng)絡(luò)平面,但是與VPC不同的是,VPC里的IP地址是每個租戶多帶帶使用的,租戶可以使用一整段的IP地址進(jìn)行網(wǎng)絡(luò)規(guī)劃,并配置相應(yīng)的安全規(guī)則和路由規(guī)則。而經(jīng)典網(wǎng)絡(luò)的IP資源是所有用戶共享的,分配到的IP也是隨機(jī)獲取的,這樣就會造成每個租戶的IP是離散的,就無法靈活地去配置安全規(guī)則和路由規(guī)則。另外,每個經(jīng)典網(wǎng)絡(luò)的虛擬機(jī)都需要一個IP獲得公網(wǎng)訪問能力,而在VPC中只要給一個VPC配置一個NAT網(wǎng)關(guān)讓VPC內(nèi)所有虛擬機(jī)都獲得公網(wǎng)訪問能力。以上是VPC優(yōu)于經(jīng)典網(wǎng)絡(luò)的地方。
虛擬私有云這個名稱容易對剛接觸云計算的同學(xué)造成困擾,可能會與公有云、私有云等概念造成混淆,實際上虛擬私有云就是一個隔離的虛擬網(wǎng)絡(luò)環(huán)境,這樣了理解會更加清晰點(diǎn)。
? 當(dāng)源主機(jī)的信息通過網(wǎng)絡(luò)層傳送到目的主機(jī)的網(wǎng)卡之后,傳輸層通過端口將報文信息送到對應(yīng)的端口。傳輸層實現(xiàn)了應(yīng)用進(jìn)程間的端到端(end-to-end)通信 。
netstat 查看本地端口連接狀態(tài)
telnet 判斷目的主機(jī)端口是否可以訪問
? 通過python的SimpleHTTPServer命令在ecs3的8000端口上起一個http服務(wù) python -m SimpleHTTPServer ,然后通過命令netstat -nat可以查看ecs3上所有tcp的端口連接狀態(tài)??梢钥吹?000端口處于LISTEN狀態(tài)。
? 在ecs1上telnet ecs3的8000端口 telnet 172.16.30.30 8000,可以看到ecs3的8000端口與ecs1de 57498端口建立了連接,進(jìn)入了TCP連接中的ESTABLISHED狀態(tài)。
? 最后在ecs1終止telnet,再次觀察ecs3的8000端口的端口連接狀態(tài),可以發(fā)現(xiàn)收發(fā)兩端的連接狀態(tài)進(jìn)入了TIME_WAIT的狀態(tài)。
再經(jīng)過一段時間,TIME_WAIT狀態(tài)的連接會消失,回到只有一個LISTEN狀態(tài)的網(wǎng)絡(luò)端口狀態(tài)信息。
? 在ecs1上對ecs3的8000端口進(jìn)行端口探測,如果可以正常的進(jìn)行連接ecs1是如下圖的結(jié)果:
? 如果此時,停掉ecs3上對應(yīng)的進(jìn)程,使其不再對8000端口進(jìn)行監(jiān)聽,可以發(fā)現(xiàn)telnet的結(jié)果是直接反饋Connection refused。
還有種情況是,對8000端口進(jìn)行探測一直處于trying狀態(tài),這種情況一般是發(fā)起請求的報文未到達(dá)目的端,請求報文在傳輸過程中被drop掉,源端一直會等待到超時。
-a 顯示所有連線中的Socket
-n 直接使用ip地址,而不通過域名服務(wù)器
-t 顯示TCP傳輸協(xié)議的連線狀況
-u 顯示UDP傳輸協(xié)議的連線狀況
-p 顯示正在使用Socket的程序識別碼和程序名稱
-l 顯示監(jiān)控中的服務(wù)器的Socket
curl 利用URL語法在命令行下工作的文件傳輸工具
在ecs1上通過curl命令訪問ecs3在8000端口的服務(wù),可以返回ecs3上的網(wǎng)頁資源:
通過抓包發(fā)現(xiàn)可以清楚地看到發(fā)起請求過程中TCP三次握手的報文以及HTTP請求報文
同樣的在完成請求后,會有HTTP響應(yīng)報文以及TCP四次揮手的報文
-v/--verbose 用于打印更多信息,包括發(fā)送的請求信息
-m/--max-time
-H/--header
-s/--slient 減少輸出的信息,比如進(jìn)度
-o/--output
-d/--data/--data-ascii 指定POST的內(nèi)容
-I/--head 僅返回頭部信息,使用HEAD請求
tcpdump 采用命令行方式對接口的數(shù)據(jù)包進(jìn)行篩選抓取
-c 指定要抓取的包數(shù)量。
-i 指定tcpdump需要監(jiān)聽的接口。可以使用"any"關(guān)鍵字表示所有網(wǎng)絡(luò)接口。
-n 對地址以數(shù)字方式顯式,否則顯式為主機(jī)名。
-nn 除了-n的作用外,還把端口顯示為數(shù)值,否則顯示端口服務(wù)名。
-e 輸出的每行中都將包括數(shù)據(jù)鏈路層頭部信息,例如源MAC和目標(biāo)MAC。
-w 將抓包數(shù)據(jù)輸出到文件中而不是標(biāo)準(zhǔn)輸出
抓取經(jīng)過eth0的ecs1與ecs3在8000端口的tcp報文,抓取數(shù)量為1000,并存到文件中。
tcpdump -i eth0 host 172.16.10.10 and 172.16.30.30 and tcp port 8000 -nne -w packet.pcap
如果抓包要存入到文件中,最好指定抓取報文的數(shù)量,否則持續(xù)抓包而忘記停止會導(dǎo)致文件一直增大,擠爆服務(wù)器的存儲空間,導(dǎo)致影響業(yè)務(wù)。
OSI七層模型與TCP/IP五層模型
IP地址和子網(wǎng)劃分學(xué)習(xí)筆記
netstat 命令詳解
Linux之curl命令詳解
抓包工具tcpdump用法說明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25400.html
摘要:二來,給大家新開坑的項目一個參考。因此,本系列以主要以官方文檔為基礎(chǔ),將盡可能多的特性融入本項目,并標(biāo)注官網(wǎng)原文出處,有興趣的小伙伴可點(diǎn)擊深入了解??梢酝ㄟ^一些特殊協(xié)議例如將消息作為統(tǒng)一消息服務(wù)導(dǎo)出。下載完成后自行修改和。 開坑前言 我給這個專欄的名氣取名叫做小項目,聽名字就知道,這個專題最終的目的是帶領(lǐng)大家完成一個項目。為什么要開這么大一個坑呢,一來,雖然網(wǎng)上講IT知識點(diǎn)的書籍鋪天蓋...
摘要:第一節(jié)課程概述本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個基于以太坊的完整去中心化應(yīng)用區(qū)塊鏈投票系統(tǒng)。第七節(jié)以太坊世界計算機(jī)以太坊是一種區(qū)塊鏈的實現(xiàn)。交易數(shù)據(jù)以太坊中每筆交易都存儲在區(qū)塊鏈上。 第一節(jié) 課程概述 本課程面向初學(xué)者,內(nèi)容涵蓋以太坊開發(fā)相關(guān)的基本概念,并將手把手地教大家如何構(gòu)建一個 基于以太坊的完整去中心化應(yīng)用 —— 區(qū)塊鏈投票系統(tǒng)。 ...
閱讀 3653·2021-11-15 11:38
閱讀 2827·2021-11-11 16:55
閱讀 2588·2021-11-08 13:22
閱讀 2660·2021-11-02 14:45
閱讀 1354·2021-09-28 09:35
閱讀 2677·2021-09-10 10:50
閱讀 509·2019-08-30 15:44
閱讀 2810·2019-08-29 17:06