網絡技術摘抄(入門需知)

關於IP地址

你知道怎麼查看 IP 地址嗎?
Windows 上是 ipconfig,在 Linux 上ipconfigipipconfig是 ifconfig。大部分的網卡都會有一個 IP 地址,當然,這不是必須的。在後面的分享中,我們會遇到沒有 IP 地址的情況。IP 地址是一個網卡在網絡世界的通訊地址,相當於我們現實世界的門牌號碼。

10.100.122.2 就是一個 IP 地址。這個地址被點分隔爲四個部分,每個部分 8 個 bit,所以 IP 地址總共是 32 位。這樣產生的 IP 地址的數量很快就不夠用了。

因爲當時設計 IP 地址的時候,哪知道今天會有這麼多的計算機啊!因爲不夠用,於是就有了 IPv6,這個有 128 位,現在看來是夠了,但是未來的事情誰知道呢?

無類型域間選路(CIDR)
於是有了一個折中的方式叫作無類型域間選路,簡稱CIDR。這種方式打破了原來設計的幾類地址的做
法,將 32 位的 IP 地址一分爲二,前面是網絡號,後面是主機號。從哪裏分呢?你如果注意觀察的話

可以看到,10.100.122.2/24,這個 IP 地址中有一個斜槓,斜槓後面有個數字 24。這種地址表示形式,就是 CIDR。後面 24 的意思是,32 位中,前 24 位是網絡號,後 8 位是主機號。

伴隨着 CIDR 存在的,一個是廣播地址,10.100.122.255。如果發送這個地址,所有 10.100.122 網絡裏面的機器都可以收到。另一個是子網掩碼,255.255.255.0。

將子網掩碼和 IP 地址進行 AND 計算。前面三個 255,轉成二進制都是 1。1 和任何數值取 AND,都是原來數值,因而前三個數不變,爲 10.100.122。後面一個 0,轉換成二進制是 0,0 和任何數值取
AND,都是 0,因而最後一個數變爲 0,合起來就是 10.100.122.0。這就是網絡號。將子網掩碼和 IP地址按位計算 AND,就可得到網絡號。

表格中的 192.168.0.x 是最常用的私有 IP 地址。你家裏有 Wi-Fi,對應就會有一個 IP 地址。一般你家裏地上網設備不會超過 256 個,所以 /24 基本就夠了。有時候我們也能見到 /16 的 CIDR,這兩種是最常見的,也是最容易理解的。

不需要將十進制轉換爲二進制 32 位,就能明顯看出 192.168.0 是網絡號,後面是主機號。而整個網絡裏面的第一個地址 192.168.0.1,往往就是你這個私有網絡的出口地址。例如,你家裏的電腦連接 WiFi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是廣播地址。一旦發送這個地址,整個192.168.0 網絡裏面的所有機器都能收到。

MAC 地址

網卡的物理地址,用十六進制,6 個 byte 表示。

一個網絡包要從一個地方傳到另一個地方,除了要有確定的地址,還需要有定位功能。而有門牌號碼屬性的 IP 地址,纔是有遠程定位功能的。

MAC 地址更像是身份證,是一個唯一的標識。它的唯一性設計是爲了組網的時候,不同的網卡放在一個
網絡裏面的時候,可以不用擔心衝突。從硬件角度,保證不同的網卡有不同的標識。

IP 是地址,有定位功能;MAC 是身份證,無定位功能;
CIDR 可以用來判斷是不是本地人
IP 分公有的 IP 和私有的 IP。

三個波段(band)的優先級也不相同。band 0 的優先級最高,band 2 的最低。如果 band 0 裏面有數據包,系統就不會處理 band 1 裏面的數據包,band 1 和 band 2 之間也是一樣。

數據包是按照服務類型(Type of Service,TOS)被分配多三個波段(band)裏面的。TOS 是 IP 頭裏面的一個字段,代表了當前的包是高優先級的,還是低優先級的。

關於網絡分成

網絡爲什麼要分層?因爲,是個複雜的程序都要分層,這是程序設計的要求,比如,複雜的電商還會分數據庫層、緩存層、Compose 層、Controller 層和接入層,每一層專注做本層的事情。

揭祕層與層之間的關係

知道了這個過程之後,我們再來看一下原來困惑的問題。
首先是分層的比喻。所有不能表示出層層封裝含義的比喻,都是不恰當的。總經理握手,不需要員工在吧,總經理之間談什麼,不需要員工參與吧,但是網絡世界不是這樣的。正確的應該是,總經理之間溝通的時候,經理將總經理放在自己兜裏,然後組長把經理放自己兜裏,員工把組長放自己兜裏,像套娃娃一樣。那員工直接溝通,不帶上總經理,就不恰當了。

現實生活中,往往是員工說一句,組長補充兩句,然後經理補充兩句,最後總經理再補充兩句。但是在網絡世界,應該是總經理說話,經理補充兩句,組長補充兩句,員工再補充兩句。

那 TCP 在三次握手的時候,IP 層和 MAC 層在做什麼呢?當然是 TCP 發送每一個消息,都會帶着 IP 層和 MAC 層了。因爲,TCP 每發送一個消息,IP 層和 MAC 層的所有機制都要運行一遍。

TCP 三次握手了,其實,IP 層和 MAC 層爲此也忙活好久了。
這裏要記住一點:只要是在網絡上跑的包,都是完整的。可以有下層沒上層,絕對不可能有上層沒下層。所以,對 TCP 協議來說,三次握手也好,重試也好,只要想發出去包,就要有 IP 層和 MAC 層,不然是發不出去的。

程序是如何工作的?

如果你是一個網絡包處理程序,你不需要process_http(buffer),而是應該交給應用去處理。交給哪個應用呢?**在四層的頭裏面有端口號,不同的應用監聽不同的端口號。**如果發現瀏覽器應用在監聽這個端口,那你發給瀏覽器就行了。至於瀏覽器怎麼處理,和你沒有關係。

瀏覽器自然是解析 HTML,顯示出頁面來。電腦的主人看到頁面很開心,就點了鼠標。點擊鼠標的動作被瀏覽器捕獲。瀏覽器知道,又要發起另一個 HTTP 請求了,於是使用端口號,將請求發給了你。

你應該調用send_tcp(buffer)。不用說,Buffer 裏面就是 HTTP 請求的內容。這個函數裏面加一個 TCP的頭,記錄下源端口號。瀏覽器會給你目的端口號,一般爲 80 端口。

然後調用send_layer3(buffer)。Buffer 裏面已經有了 HTTP 的頭和內容,以及 TCP 的頭,在這個函數裏面加一個 IP 的頭,記錄下源 IP 的地址和目標 IP 的地址。然後調用send_layer2(buffer)。Buffer 裏面已經有了 HTTP 的頭和內容、TCP 的頭,以及 IP 的頭。**這個函數裏面要加一下 MAC 的頭,記錄下源 MAC 地址,得到的就是本機器的 MAC 地址和目標的 MAC地址。**不過,這個還要看當前知道不知道,知道就直接加上;不知道的話,就要通過一定的協議處理過程,找到 MAC 地址。反正要填一個,不能空着。

萬事俱備,只要 Buffer 裏面的內容完整,就可以從網口發出去了,你作爲一個程序的任務就算告一段落了。

第一,MAC 層是用來解決多路訪問的堵車問題的;
第二,ARP 是通過吼的方式來尋找目標 MAC 地址的,吼完之後記住一段時間,這個叫作緩存;
第三,交換機是有 MAC 地址學習能力的,學完了它就知道誰在哪兒了,不用廣播了。

從物理層到MAC:

第一層(物理層)
第二層(數據連接層)
接下來要解決第一個問題:發給誰,誰接收?這裏用到一個物理地址,叫作鏈路層地址。但是因爲第二
層主要解決媒體接入控制的問題,所以它常被稱爲MAC 地址。
解決第一個問題就牽扯到第二層的網絡包格式。對於以太網,第二層的最開始,就是目標的 MAC 地址和源的 MAC 地址。一個廣播的網絡裏面接入了 N 臺機器,我怎麼知道每個 MAC 地址是誰呢?這就是ARP 協議,也就是已知 IP 地址,求 MAC 地址的協議。

協議:

語法,語義,順序

語法,就是這一段內容要符合一定的規則和格式。例如,括號要成對,結束要使用分號等。

語義,就是這一段內容要代表某種意義。例如數字減去數字是有意義的,數字減去文本一般來說就沒有意義。

順序,就是先幹啥,後幹啥。例如,可以先加上某個數值,然後再減去某個數值。

要想打造互聯網世界的通天塔,只教給一臺機器做什麼是不夠的,你需要學會教給一大片機器做什麼。這就需要網絡協議。只有通過網絡協議,才能使一大片機器互相協作、共同完成一件事。

你先在瀏覽器裏面輸入 https://www.kaola.com ,這是一個URL。瀏覽器只知道名字是“www.kaola.com”,但是不知道具體的地點,所以不知道應該如何訪問。於是,它打開地址簿去查找。可以使用一般的地址簿協議DNS去查找,還可以使用另一種更加精準的地址簿查找協議
HTTPDNS。

無論用哪一種方法查找,最終都會得到這個地址:106.114.138.24。這個是IP地址,是互聯網世界的“門牌號”。

知道了目標地址,瀏覽器就開始打包它的請求。對於普通的瀏覽請求,往往會使用HTTP協議;但是對於購物的請求,往往需要進行加密傳輸,因而會使用HTTPS協議。無論是什麼協議,裏面都會寫明“你要買什麼和買多少”。

DNS、HTTP、HTTPS 所在的層我們稱爲應用層。經過應用層封裝後,瀏覽器會將應用層的包交給下一層去完成,通過 socket 編程來實現。下一層是傳輸層。

傳輸層有兩種協議,一種是無連接的協議UDP,一種是面向連接的協議TCP。對於支付來講,往往使用 TCP 協議。所謂的面向連接就是,TCP 會保證這個包能夠到達目的地。如果不能到達,就會重新發送,直至到達。

TCP 協議裏面會有兩個端口,一個是瀏覽器監聽的端口,一個是電商的服務器監聽的端口。操作系統往往通過端口來判斷,它得到的包應該給哪個進程。

傳輸層封裝完畢後,瀏覽器會將包交給操作系統的網絡層。網絡層的協議是 IP 協議。在 IP 協議裏面會有源 IP 地址,即瀏覽器所在機器的 IP 地址和目標 IP 地址,也即電商網站所在服務器的 IP 地址。

操作系統既然知道了目標 IP 地址,就開始想如何根據這個門牌號找到目標機器。操作系統往往會判斷,這個目標 IP 地址是本地人,還是外地人。如果是本地人,從門牌號就能看出來,但是顯然電商網站不在本地,而在遙遠的地方。

操作系統知道要離開本地去遠方。雖然不知道遠方在何處,但是可以這樣類比一下:如果去國外要去海關,去外地就要去網關。而操作系統啓動的時候,就會被 DHCP 協議配置 IP 地址,以及默認的網關的IP 地址 192.168.1.1。

操作系統如何將 IP 地址發給網關呢?在本地通信基本靠吼,於是操作系統大吼一聲,誰是 192.168.1.1啊?網關會回答它,我就是,我的本地地址在村東頭。這個本地地址就是MAC地址,而大吼的那一聲是ARP協議

通訊變化

2g,模擬信號(電話網絡)
3G網絡:到了3G時代,主要是無線通信技術有了改進,大大增加了無線的帶寬。

移動網絡的發展歷程從2G到3G,再到4G,逐漸從打電話的功能爲主,向上網的功能爲主轉變;

請記住4G網絡的結構,有eNodeB、MME、SGW、PGW等,分控制面協議和數據面協議,你可以對照着結構,試着說出手機上網的流程;即便你在國外的運營商下上網,也是要通過國內運營商控制的,因而也上不了臉書。

每一條規則至少包含這三項信息。
目的網絡:這個包想去哪兒?
出口設備:將包從哪個口扔出去?
下一跳網關:下一個路由器的地址。
通過 route 命令和 ip route 命令都可以進行查詢或者配置。

路由

路由分靜態路由和動態路由
靜態路由可以配置複雜的策略路由,控制轉發策略;

動態路由主流算法有兩種,距離矢量算法和鏈路狀態算法。基於兩種算法產生兩種協議,BGP 協議和OSPF 協議。

www構成:

客戶機和服務器
HTTP,URL,DNS
web語言

client:主要是瀏覽器
server:主要提供web服務

常見web服務器軟件
IIS(windows)
Apache(開源),
Tomcat(jsp),
nainx(佔有內存少,併發能力強)

TCP、IP,port

五層協議:

應用層(FTP,HTTP,SSH,POP3)

傳輸層(TCP,UDP)

網絡層(IP)

數據鏈路層(wifi協定,以太網協定)

物理層(設備線纜)

IP,32位地址碼
TCP傳輸控制協議
多路複用(多個程序使用一個IP地址)
通過port實現

TCP端口 服務
21 FTP
22 SSH
23 telent
25,110 email(SMTP,POP3)
80 WEB(HTTP)

DSN,域名系統
URL,統一資源定位器
每個文件都有唯一的url

http://www.baidu.com/info
protool host path

http://ctec.xjtu.edu.cn:8080#a1
port anchor

HTTP:超文本傳輸協定
get :下載
post:表單提交到服務器
put:上傳文件到服務器

相關組織:
IETF(協定)
W3C(web標準制定)
ICANN(頂級域名分配)

ISO,網絡標準化組織。

網絡資源的表示
網絡管理信息的表示
系統的結構

算法:“是否會編程序”(有窮規則)
本質是能否想出解決問題的算法
有窮性,確定性,輸入輸出,能行性(機器執行)

比特幣(區塊鏈)
去中心化
數據公開
自治性:共識
匿名(地址關聯)

木馬(具有隱蔽性)

操作系統,常見威脅:
機密性 (軍事,企業核心)
竊聽,主機系統,數據
後門,天窗,系統訪問權(木馬)
間諜軟件
隱蔽通道

完整性威脅:

計算機病毒:“熊貓燒香”
計算機欺騙:“釣魚網站”,“僞基站”

可用性威脅:
拒絕服務器攻擊Dos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章