引言
網絡學習的核心內容就是網絡協議的學習
- 網絡協議:網絡中進行數據交換而建立的規則、標準或者說是約定的集合
因為不同用戶的數據終端可能采取的字符集是不同的,兩者需要進行通信,必須要在一定的標準上進行 - 目前 TCP/IP 協議已經成為 Internet 中的「通用語言」
下圖為不同計算機群 之間利用 TCP/IP 進行通信的示意圖
網絡層次的劃分
為了使不同計算機廠家生產的計算機能夠相互通信,以便在更大的范圍內建立計算機網絡
- 國際標準化組織(ISO)在 1978 年提出了“開放系統互聯參考模型”
即著名的 OSI/RM 模型(Open System Interconnection/Reference Model)- 除了標準的 OSI 七層模型以外,常見的網絡層次劃分還有 TCP/IP 四層協議 以及 TCP/IP 五層協議
各個模型對比圖
一、應用層「Application Layer」
簡介
- 基本數據單位:報文
- 主要協議
FTP(文件傳送協議)、Telnet(遠程登錄協議)、DNS(域名解析協議)
SMTP(郵件傳送協議)、POP3協議(郵局協議)、HTTP協議(Hyper Text Transfer Protocol)
具體分類
-
會話層
管理主機之間的會話進程,即負責 建立、管理、終止進程之間的會話
通過在數據中插入校驗點來實現數據的同步 -
表示層
對上層數據或信息進行變換以保證一個主機應用層信息可以被另一個主機的應用程序理解
表示層的數據轉換包括:數據的加密、壓縮、格式轉換等 -
應用層
為操作系統 或 網絡應用程序 提供 訪問網絡服務的接口
1. HTTP「Hypertext Transfer Protocol」超文本傳輸協議
作用:規定客戶端和服務器之間的數據傳輸格式
特點:
- 簡單快速:HTTP協議簡單,HTTP服務器程序小,通信速度快
- 允許傳輸各種各樣的數據
- HTTP 0.9 和 1.0使用 非持續連接,限制每次連接只處理一個請求,請求做出響應后,馬上斷開,節省傳輸時間
1)發送請求的方法「不同的方法對資源有不同的操作方式」
- PUT:增,給服務器添加資源
- DELETE:刪,給服務器刪除資源
- POST:改,修改服務器資源
- GET:查,查找服務器資源
2)請求參數
傳遞給服務器的具體數據,比如:帳號、密碼
瀏覽器和服務器對URL的長度有限制,一般不超過 1K
GET請求參數
- 格式:URL +
?
+ 參數1=值1 +&
+ 參數2=值2「參數間用&
隔開」
多值參數,格式:URL +?
+ 參數1=值1 +&
+ 參數1=值2 - 安全性差「直接將請求暴露在 URL 里」
GET請求的URL一般會記錄在服務器的訪問日志里,服務器的訪問日志是黑客攻擊的重點對象之一 - 僅僅是查詢數據使用
POST請求參數
- 服務器參數全部放在 請求體 中
- 理論上,沒有大小限制。實際上,取決于服務器的處理能力
- 安全性好 即便是 POST也要加密后提交
- 增、刪、改服務器數據使用
3)HTTP 通信過程 - 請求
I. 請求頭:對客戶端環境,請求信息的描述
-
Host: 120.25.226.186:32812
格式:服務器主機地址: 端口 -
GET/minion.png HTTP/1.1
格式:請求方法/請求資源路徑 HTTP/協議版本 -
User-Agent: Mozilla/5.0
客戶端的類型,客戶端的軟件環境 -
Accept: text/html, */*
客戶端所能接收的數據類型 -
Accept-Language: zh-cn
客戶端的語言環境 -
Accept-Encoding: gzip
客戶端支持的數據壓縮格式
II. 請求體:客戶端發給服務器的具體數據,比如:文件數據「POST才會有」
4)HTTP 通信過程 - 響應
I. 響應頭:服務器的描述,返回數據的描述
-
HTTP/1.1 200 OK
格式:HTTP協議版本 狀態碼 狀態名稱 -
Server: Apache-Coyote/1.1
服務器的類型 -
Content-Type: image/jpeg
返回數據的類型 -
Content-Length: 56811
返回數據的長度 -
Date: Mon, 23 Jun 2014 12:54:52 GMT
響應的時間
II. 響應體:服務器返回客戶端的具體數據,比如:文件數據
III. 常見的響應狀態碼
狀態碼 | 英文名稱 | 中文描述 |
---|---|---|
200 | OK | 請求成功 |
400 | Bad Request | 客戶端請求語法錯誤,服務器無法解析 |
404 | NotFound | 根據客戶端的請求,找不到資源 |
500 | Internal Server Error | 服務器內部錯誤無法完成請求 |
2. DNS 「Domain Name System」域名系統協議
簡介
DNS 就是進行域名解析的服務器
DNS 命名用于 Internet 等 TCP/IP 網絡中,通過用戶友好的名稱查找計算機和服務
用于命名、組織到域層次結構中的計算機和網絡服務,可以簡單地理解為 將 URL 轉換為 IP 地址
域名:是由圓點分開一串單詞或縮寫組成的,域名與 IP 地址之間是一一對應的
3. DHCP「Dynamic Host Configuration Protocol」 動態主機設置協議
簡介
- 局域網的網絡協議,使用 UDP 協議工作
- 主要有兩個用途:
給內部網絡或網絡服務供應商自動分配 IP 地址
給用戶或者內部網絡管理員作為對所有計算機作中央管理的手段
4. URL「Uniform Resource Locator」統一資源定位符
一個 URL 對應網上一個資源
- 客戶端「Client」移動應用(iOS、android等應用)
- 服務器「Server」為客戶端提供服務、提供數據、提供資源的機器
- 請求「Request」客戶端向服務器索取數據的一種行為
- 響應「Response」服務器對客戶端的請求做出的反應,一般指返回數據給客戶端
基本格式:協議: // 主機地址 / 路徑
-
協議:資源的 查找/傳輸 方式
-
HTTP
超文本傳輸協議,訪問的是遠程的網絡資源。格式:http://
-
file
訪問本地計算機上的資源。格式:file://
不用加主機地址 -
mailto
訪問電子郵件。格式:mailto:
-
FTP
訪問的是共享主機的文件資源。格式:ftp://
-
主機地址:存放資源的主機「服務器」的 IP地址「域名」
路徑:資源在主機「服務器」中的 具體位置
二、傳輸層「Transport Layer」
簡介
- 基本數據單位:報文 或 段
- 主要協議:TCP協議「傳輸控制協議」、UDP 協議「用戶數據報協議」
- 重要設備:網關
功能
建立、維護和取消傳輸連接
將數據可靠地傳送到相應的端口
將上層數據分段,并提供端到端的可靠的或不可靠的傳輸 以及 端到端的 差錯控制 和 流量控制問題
端到端:連接是兩個終端主機之間的連接,這兩個終端系統的連接中要經過很多個設備「路由器」
點對點:連接是通信雙方直接通過電纜進行的連接,中間沒有經過其他任何設備
1. Socket「套接字」
簡介
- 網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的 一端 稱為一個 Socket
通過 Socket 這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據
- 通信的兩端都是 Socket
- 網絡通信其實就是 Socket 間的通信「數據在兩個 Socket 間通過 IO 傳輸」
- Socket 是 應用層 和 傳輸層 之間的橋梁
HTTP 與 Socket 的區別
- HTTP 是基于 Socket 的實現;HTTP 應用層協議,主要解決如何包裝數據
- HTTP 傳輸的數據格式是規定好的,Socket 實現數據傳輸是最原始,Socket 實現的數據傳輸格式可自定義
- Socket 是對 TCP/IP 協議的封裝,Socket 本身并不是協議,而是一個調用接口「API」
通過 Socket 我們才能使用 TCP/IP 協議
I. 網絡通信的要素
首先,定位到要通信的程序:使用 IP地址、端口;其次,確定如何傳輸數據:使用 協議、數據傳輸方式
有可能多種協議使用同一種數據傳輸方式,所以在 Socket 編程中,需要同時指明數據傳輸方式和協議
- IP 地址「網絡主機設備的 唯一標識」
- Port,端口號「定位程序」
作用:表示進程的邏輯地址,是不同進程的標識
有效端口:0~65535
,其中0~1024
由系統使用或者保留端口,開發中建議使用1024 以上
的端口
- Protocol,傳輸協議「網絡通訊的約定」
簡介:協議僅僅是一種規范,必須由計算機軟件來實現,由計算機組織制定。例如,如何建立連接,如何相互識別等
特點:通信的雙方必須使用同一協議才能通信
常見協議:TCP、UDP、IP
-
Socket 類型,數據傳輸方式
-
SOCK_STREAM
流式 Socket,表示面向連接的數據傳輸方式
數據可以準確無誤地到達另一臺計算機
如果損壞或丟失,可以重新發送,但效率相對較慢
常見的 http 協議就使用SOCK_STREAM
傳輸數據,因為要確保數據的正確性,否則網頁不能正常解析。 -
SOCK_DGRAM
數據報式 Socket,表示無連接的數據傳輸方式
計算機只管傳輸數據,不作數據校驗
如果數據在傳輸中損壞,或者沒有到達另一臺計算機,無法補救,無法重傳
因為SOCK_DGRAM
所做的校驗工作少,所以效率比 SOCK_STREAM 高
-
注意:
SOCK_DGRAM
沒有想象中的糟糕,不會頻繁的丟失數據,數據錯誤只是小概率事件
II. Socket 的連接過程
長連接:指在一個連接上可以連續發送多個數據包,在連接保持期間,如果沒有數據包發送,需要雙方發鏈路檢測包
短連接:指通訊雙方有數據交互時,就建立一個連接,數據發送完成后,則斷開此連接,即每次連接只完成一項業務的發送
- 服務器監聽
服務器端 Socket 并不定位具體的客戶端 Socket,而是處于等待連接的狀態,實時監控網絡狀態 - 客戶端請求
由客戶端的 Socket 提出連接請求,要連接的目標是服務器端的 Socket
為此,客戶端的 Socket 必須首先描述它要連接的服務器的 Socket
首先,指出服務器端 Socket 的 IP 和 Port Number
然后,向服務器端 Socket 提出連接請求 - 連接確認
是指當服務器端 Socket 監聽到或者說接收到客戶端 Socket 的連接請求
它就響應客戶端 Socket 的請求,建立一個新的線程,把服務器端 Socket 的描述發給客戶端,一旦客戶端確認了此描述,連接就建立好了
連接后,服務器端 Socket 繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求
Socket 連接圖解
2. TCP「Transmission Control Protocol」傳輸控制協議
簡介
- 面向連接的通信協議,通過三次握手建立連接,通訊完成時要拆除連接,四次揮手斷開連接
- TCP 負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地
- 使用 TCP 的協議
FTP(文件傳輸協議)、Telnet(遠程登錄協議)、SMTP(簡單郵件傳輸協議)
POP3(和 SMTP 相對,用于接收郵件)、HTTP 協議等
特點
- 每條傳輸連接只能有兩個端點,只能進行點對點的連接,不支持多播和廣播的傳輸方式
- 連接中可以進行大數據傳輸「數據不受限制」
- 通信雙方可以同時發數據和接收數據
- 每次發送請求使用 TCP 協議
必須建立連接「效率會稍低」,是可靠協議,送達安全
TCP 報文首部格式
- 序號:Seq「Sequence Number」序號占32位,用來標識從計算機 A 發送到計算機 B 的數據包的序號,計算機發送數據時對此進行標記
- 確認號:Ack 「Acknowledge Number」確認號占32位,客戶端和服務器端都可以發送,`Ack = Seq + 1 說明收到數據包
- 標志位:每個標志位占用 1 Bit
URG
:緊急指針「urgent pointer」有效
ACK
:確認序號有效
PSH
:接收方應該盡快將這個報文交給應用層
RST
:重置連接
SYN
:Synchronous,建立一個新的同步連接
FIN
:Finish,斷開一個連接
I. 建立連接-三次握手
建立連接非常重要,是數據正確傳輸的前提
模擬步驟
- [Shake 1] 套接字A:“你好,套接字 B,我這里有數據要傳送給你,建立連接吧。”
- [Shake 2] 套接字B:“好的,我這邊已準備就緒。”
- [Shake 3] 套接字A:“謝謝你受理我的請求。”
具體步驟
CLOSED
狀態:沒有建立連接,客戶端已經調用socket()
函數創建了套接字LISTEN
狀態:服務器端調用listen()
函數后,開始監聽客戶端請求
服務器沒有回傳 ACK 包,客戶端會重新發送,直到服務器回傳 ACK 包SYN-SEND
狀態:向服務器端發送過了數據包SYN-RECV
狀態:服務器已經將數據包發出ESTABLISED
狀態:連接已經成功建立
必要性
- 在「兩次握手」的情形下,假設 Client 想跟 Server 建立連接,但是卻因為中途連接請求的數據報丟失了,故Client端不得不重新發送一遍,這個時候 Server 端僅收到一個連接請求,因此可以正常的建立連接
- 有時候 Client 端重新發送請求不是因為數據報丟失了,而是有可能數據傳輸過程因為網絡并發量很大在某結點被阻塞了,這種情形下Server端將先后收到 2 次請求,并持續等待兩個 Client 請求向他發送數據...
- 問題就在這里,Cient端實際上只有一次請求,而 Server 端卻有 2 個響應,極端的情況可能由于 Client 端多次重新發送請求數據而導致 Server端最后建立了 N 多個響應在等待,因而造成極大的資源浪費!
II. 斷開連接-四次揮手
釋放不再使用的資源
不能正常斷開,會造成數據傳輸錯誤,套接字不能關閉,持續占用資源,如果并發量高,服務器壓力堪憂
模擬步驟
- [Shake 1] 套接字A:“任務處理完畢,我希望斷開連接。”
- [Shake 2] 套接字B:“哦,是嗎?請稍等,我準備一下。”
- 等待片刻后……
- [Shake 3] 套接字B:“我準備好了,可以斷開連接了。”
- [Shake 4] 套接字A:“好的,謝謝合作。”
具體步驟
-
FIN
狀態:Finish,表示斷開連接 -
TIME_WAIT
狀態:TIME_WAIT 要等待 2MSL 才會進入 CLOSED 狀態,如果 2MSL 后還未收到服務器重傳的 FIN 包,就說明服務器已經收到了 ACK 包
客戶端最后一次發送 ACK 包時,若服務器收不到,服務器會再次發送 FIN 包
如果這時客戶端完全關閉了連接,那么服務器無論如何也收不到 ACK 包了,所以客戶端需要等待片刻、確認后,才能進入CLOSED
狀態
報文最大生存時間(MSL,Maximum Segment Lifetime)
數據包在網絡中是有生存時間的,超過這個時間還未到達目標主機就會被丟棄,并通知源主機
-
CLOSED
狀態:斷開連接狀態
3. UDP「User Datagram Protocol」用戶數據協議
簡介
- 將數據及源和目的封裝成數據包中,不需要建立連接
- 使用 UDP協議包括:TFTP(簡單文件傳輸協議)、SNMP(簡單網絡管理協議)、DNS(域名解析協議)、NFS、BOOTP
特點
- 每個數據報的大小限制在
64K
之內 - 支持單播,組播,廣播等多種通信方式
- 每次發送請求使用 UDP 協議
無需建立連接,是不可靠協議「效率高」
三、網絡層「Network Layer」
簡介
基本數據單位:IP 數據報
重要的設備:路由器
為數據包選擇路由
作用路徑選擇、路由選擇、邏輯尋址
實現兩個主機系統之間的數據透明傳送
具體功能:尋址、路由選擇、建立連接、保持和終止連接等
網絡層負責對子網間的數據包進行路由選擇
網絡可以實現 擁塞控制、網際互連 等功能
包含的主要協議
IP 協議(Internet Protocol,因特網互聯協議)
簡介:僅僅提供不可靠、無連接的傳送服務「TCP/IP 的核心協議」
功能:無連接數據報傳輸、數據報路由選擇和差錯控制ICMP 協議(Internet Control Message Protocol,因特網控制報文協議)
ARP 協議(Address Resolution Protocol,地址解析協議)
RARP 協議(Reverse Address Resolution Protocol,逆地址解析協議)
1. IP 地址
簡介:一共 4 個字節的長度,32 位
1)網絡地址
- 構成:網絡號(包括子網號)+ 主機號
- 網絡地址的主機號為全 0,網絡地址代表著整個網絡
2)廣播地址
- 通常稱為直接廣播地址,是為了區分受限廣播地址
- 廣播地址的主機號為全 1
- 向 某個網絡的廣播地址發送消息,該網絡內的所有主機都能收到該廣播消息
3)IPv4 地址分類
A、B、C 類私有地址
私有地址「private address」也叫專用地址,它們不會在全球使用,只具有本地意義
- A 類私有地址:
10.0.0.0/8
,范圍是:10.0.0.0~10.255.255.255
- B 類私有地址:
172.16.0.0/12
,范圍是:172.16.0.0~172.31.255.255
- C 類私有地址:
192.168.0.0/16
,范圍是:192.168.0.0~192.168.255.255
地址的分類
- A 類地址以 0 開頭,前 1 個字節作為網絡號,地址范圍為:
0.0.0.0~127.255.255.255
- B 類地址以 10 開頭,前 2 個字節作為網絡號,地址范圍是:
128.0.0.0~191.255.255.255
- C 類地址以 110 開頭,前 3 個字節作為網絡號,地址范圍是:
192.0.0.0~223.255.255.255
- D 類地址以 1110 開頭,地址范圍是
224.0.0.0~239.255.255.255
,D 類地址作為組播地址「一對多的通信」 - E 類地址以 1111 開頭,地址范圍是
240.0.0.0~255.255.255.255
,E 類地址為保留地址,供以后使用
注:只有A、B、C 有網絡號和主機號之分,D 類地址和 E 類地址沒有劃分網絡號和主機號
4)特殊的 IP 地址解釋
本地網絡
- 全 1 的 IP 地址:
255.255.255.255
「受限的廣播地址」 - 受限廣播地址只能用于本地網絡,路由器不會轉發以受限廣播地址為目的地址的分組
- 一般廣播地址既可在本地廣播,也可跨網段廣播
注:一般的廣播地址「直接廣播地址」能夠通過某些路由器,而受限的廣播地址不能通過路由器
廣播地址
- 全 0 的 IP 地址:
0.0.0.0
- 常用于尋找自己的 IP 地址
- 例如在我們的 RARP,BOOTP 和 DHCP 協議中,若某個未知 IP 地址的無盤機想要知道自己的IP地址,它就以
255.255.255.255
為目的地址,向本地范圍(具體而言是被各個路由器屏蔽的范圍內)的服務器發送 IP 請求分組
127.0.0.0/8
回環地址
- 表示本機的地址,常用于對本機的測試,用的最多的是 127.0.0.1
-
/8
:表示 從前到后有 8 個 1 的網絡掩碼,即子網掩碼為 255.255.0.0
5)網絡劃分
簡介
網絡地址 = IP 地址 & 子網掩碼
- 通過子網掩碼來實現網絡劃分「
1
代表該位是網絡位,0
代表該位是主機位」 - 將原來的主機號借前幾位做子網號,主機號相應的減少了,網絡號不變
不劃分子網:IP 地址 = 網絡號 + 主機號
劃分子網:IP 地址 = 網絡號 + 子網號 + 主機號
注意:全為 0
或 1
的 IP 地址是不能被計算子網掩碼內的
利用子網數來計算子網掩碼
在求子網掩碼之前,先搞清楚要劃分的子網數目,以及每個子網內的所需主機數目
- 將子網數目轉化為二進制來表示;
如欲將B類IP地址 168.195.0.0 劃分成 27 個子網:27=11011
- 取得該二進制的位數,設為 N
該二進制為五位數,N = 5
- 取得該 IP 地址的類子網掩碼,將其主機地址部分的的前 N 位設為 1
將 B 類地址的子網掩碼 255.255.0.0 的主機地址從前向后前 5 位設為 1,得到子網掩碼 255.255.248.0
利用主機數來計算子網掩碼
如欲將 B 類 IP 地址 168.195.0.0 劃分成若干子網,每個子網內有主機 700 臺:
- 將主機數目轉化為二進制來表示
700=1010111100
- 如果主機數小于或等于 254(注意去掉保留的兩個 IP 地址),則取得該主機的二進制位數,為 N,這里肯定 N<8
如果大于 254,則 N>8,這就是說主機地址將占據不止 8 位,該二進制為十位數,N=10
- 使用 255.255.255.255 來將該類 IP 地址的主機地址位數全部置 1,然后從后向前的將 N 位全部置為 0
將該 B 類地址的子網掩碼 255.255.0.0 的主機地址全部置 1,得到 255.255.255.255,然后再從后向前將后 10位置 0
即為:11111111.11111111.11111100.00000000,即 255.255.252.0
這就是主機為 700 臺的 B 類 IP 地址 168.195.0.0 的子網掩碼
根據每個網絡的主機數量進行子網地址的規劃和計算子網掩碼
- 比如一個子網有 10 臺主機,那么對于這個子網需要的 IP 地址是
10+1+1+1=13 - 注意:加的第一個 1 是指這個網絡連接時所需的網關地址,接著的兩個 1 分別是指網絡地址和廣播地址
2. ARP/RARP 地址解析協議
ARP「Address Resolution Protocol」簡介
- 根據 IP 地址獲取物理地址的一個 TCP/IP 協議
- 可用于查詢本機 ARP 緩存中 IP 地址和 MAC 地址的對應關系、添加或刪除靜態對應關系等
ARP 欺騙
- 地址解析協議是建立在網絡中各個主機互相信任的基礎上的
主機可以自主發送 ARP 應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機 ARP 緩存 - 攻擊者可以向某一主機發送偽 ARP 應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機
ARP 工作流程
IP 數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)
RARP「Reverse Address Resolution Protocol」簡介
- 將局域網中某個主機的物理地址轉換為 IP 地址
比如:局域網中有一臺主機只知道物理地址而不知道 IP 地址
那么可以通過 RARP 協議發出征求自身 IP 地址的廣播請求,然后由 RARP 服務器負責回答。
3. RIP/OSPF 路由選擇協議
RIP協議
- 底層是貝爾曼福特算法
- 它選擇路由的度量標準「metric」是跳數,最大跳數是15 跳,如果大于15 跳,它就會丟棄數據包
OSPF協議
- Open Shortest Path First 開放式最短路徑優先,底層是迪杰斯特拉算法
- 是鏈路狀態路由選擇協議,它選擇路由的度量標準是帶寬
4. NAT「Network Address Translation」網絡地址轉換協議
簡介
- 屬接入廣域網「WAN」技術,是一種 將私有地址 轉化為 合法 IP 地址的轉換技術
- 解決了 lP 地址不足的問題,能夠有效地避免來自網絡外部的攻擊,隱藏并保護網絡內部的計算機
四、數據鏈路層「Data Link Layer」
簡介
- 功能:為網絡層提供可靠的數據傳輸
其最基本的服務是將源自網絡層來的數據可靠地傳輸到相鄰節點
- 基本數據單位:幀
- 主要的協議:以太網協議
- 重要設備:網橋 和 交換機
- 在不可靠的物理介質上提供可靠的傳輸
該層的作用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等
作用
- 將數據組合成數據塊
這種數據塊為幀「frame」 - 控制幀在物理信道上的傳輸,包括如何處理傳輸差錯
- 調節發送速率以使與接收方相匹配
- 在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理
五、物理層「Physical Layer」
簡介:激活、維持、關閉通信端點之間的機械特性、電氣特性、功能特性以及過程特性。
作用
- 該層為上層協議提供了一個傳輸數據的可靠的物理媒體
- 物理層確保原始的數據可在各種物理媒體上傳輸
- 物理層記住兩個重要的設備名稱,中繼器(Repeater,也叫放大器)和 集線器