【注】:文章中的內容主要收集來自網上或者書籍中。
1、網絡協議分層
按照分層的思想把網絡協議棧進行分層主要有以下好處:
1.促進標准化工作,允許各個供應商進行開發
2.各層間相互獨立,把網絡操作分成低復雜單元
3.靈活性好,某一層變化不會影響到其它層
4.各層間通過一個接口在相鄰層上下通信
OSI七層模型和TCP/IP五層模型的對比如下,我們現在用的是五層協議模型:

2、PDU、封裝和解封裝
- PDU(protocol data unit):每一層使用自己層的協議和別的系統的對應層相互通信,協議層的協議在對等層之間交換的信息叫協議數據單元
- 上層:message
- 傳輸層:segment
- 網絡層:packet
- 數據鏈路層:frame
- 物理層:bit
- 封裝:數據要通過網絡進行傳輸,要從高層一層一層的向下傳送,如果一個主機要傳送數據到別的主機,先把數據裝到一個特殊協議報頭中,這個過程叫封裝
- 封裝分為:切片和加控制信息
- 解封裝:上述的逆向過程
數據進入TCP/IP協議棧時的封裝過程如下:

數據進入TCP/IP協議棧時的解封裝過程如下:

3、以太幀和常見的報文格式
(1)以太網幀(Ethernet II Frame)

- D-MAC:目的MAC地址
- S-MAC:源MAC地址
- 類型域:表示幀里面上層協議數據的類型,0x0800代表IP協議幀,0x0806代表ARP協議幀
- CRC:幀校驗

(2)IP數據報

- 版本號:4代表IPv4,
- 頭長度:報頭的長度,值為4字節的倍數,故首部長度最大為60字節
- 服務類型:暫未使用
- 總長度:IP數據報的長度(報頭區+數據區),單位為字節,故總長度最大為65535字節,但總長度不能超過最大傳輸單元MTU
- 標識:一個計數器,用來產生數據報的標識
- 標志:占3位,最低位MF,為1表示還有分片,中間為DF,為0,表示允許分片
- 片偏移:較長的分組在分片后,某片在原分組中的相對位置,單位為8字節
- TTL:生存時間,數據報可以經過的最大路由器數
- 上層協議標識:1:ICMP,2:IGMP、6:TCP、17:UDP等;
分片舉例:

IP數據報解析:

(3)TCP數據報

- 協議、源IP、源端口、目的IP、目的端口確定一個TCP連接
- 順序號:TCP段所發送的數據部分第一個字節的序號
- 確認號:期望收到對方下次發送的數據的第一個字節的序號
- 頭部長度:單位為4字節,因此TCP首部的最大長度為60字節
- 窗口大小:窗口通告值,發送方根據接收方的窗口告值調整窗口大小
- 緊急指針:指示緊急數據在報文段中的結束位置此時URG置位
- URG:表示緊急指針字段有效
- ACK:表示確認號字段有效
- PSH:表示當前報文需要推操作
- RST:置位表示復位TCP連接
- SYN:用於建立TCP連接時同步序列號
- FIN:用於釋放TCP連接時標識發送方比特流結束
TCP報文解析:

(4)UDP數據包

常見協議對應的端口號:
UDP DHCP服務器端:67,DHCP客戶端:68,DNS服務:53
TCP POP3(郵件接收協議):110,SMTP(郵件傳輸協議):25,HTTP服務:80
TCP FTP:數據傳輸為20,控制命令傳輸為21,Telnet:23
端口號范圍為:1~65535,1~1024為熟知端口號,1025~65535稱為動態端口
(5)ARP協議
- ARP(Address Resolution Protocol)地址解析協議,是根據 IP 地址獲取物理 MAC 地址的一個 TCP/IP 協議。
- ARP 高速緩沖表:用來記錄 IP 和 主機 MAC 地址的對應關系。會不斷更新。
- 功能:通過目標設備的 IP 地址,查詢目標設備的 MAC 地址,同時維護 ARP 高速緩沖表,以保證通信的順利進行。
ARP分組格式

- 硬件類型:以太網為1
- 協議類型:網絡層協議類型,IP協議為0x0800
- OP:操作碼,ARP請求為1,ARP應答為2

(6)ICMP協議
- ICMP 是 "Internet Control Message Protocol"(網絡控制報文協議)的縮寫,用於在 IP 主機、路由器之間傳遞控制消息。
- 控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。
- ICMP 層區分不是很明顯,一般划分在 IP 層中,通過 IP 包來封裝ICMP數據 ,在實際傳輸中數據包的格式一般都是 IP 包 + ICMP包的格式
ICMP包格式:

代碼:用來表示ICMP報文類型的少數參數,
例如:代碼值為0,表示網絡不可達;代碼值為1,表示主機不可達


(7)DNS協議簡介
- DNS(Domain Name System):域名系統,將域名和IP地址相互映射的一個分布式數據庫
- 采用Client/Sever工作模式
- DNS 協議運行在 UDP 協議之上,使用端口號 53
- 過程圖解

(8)DHCP協議簡介
- DHCP(Dynamic Host Configuration Protocol):動態主機配置協議
- 采用Client/Sever工作模式
- 為主機提供配置參數、自動分配可重復利用的網絡地址
- DHCP 協議運行在 UDP 協議之上,服務器端口號 67,客戶端口號68
4、ping演示
Ping命令是為了檢查網絡的連接狀況而使用的網絡工具之一,用來檢測數據包到達目的主機的可能性。
原理:使用ICMP協議的回送請求、回送應答。客戶端發送回送請求給服務器,服務器返回一個ICMP回應應答。
Ping過程圖解:
- 首先開發板要解析百度的域名,獲取到百度主機的 IP 地址,涉及到 DNS 協議,傳輸層用的是 UDP 協議
- DNS 主機利用 UDP 協議,回復百度的 IP 地址給開發板。
- 現在開發板要發送 Ping 請求包給百度主機,但是發現百度主機 IP 地址與自己不在同一網段,因此要發送 Ping 請求包給默認網關。
- 要發送給默認網關的時候,忽然發現並沒有默認網關對應的 MAC 地址,因此發送一個 ARP 廣播包,如果交換機存儲了默認網關的 MAC 地址,就直接告訴開發板默認網關的 MAC 地址,否則就會向所有端口發送ARP廣播,直到路由1收到了報文后,立即響應,單播自己的 MAC 地址給開發板。
- 這樣開發板就可以把 Ping 包發送給默認網關(路由1)了。
- 然后路由1 經過路由協議,經過一個個路由的轉發,最后發送到了百度的主機上。百度主機檢測到 IP 是自己的 IP,接收並處理 Ping 請求,接着百度主機發送一個 Ping 回應報文給開發板。
5、TCP客戶端服務器通信演示
TCP(傳輸控制協議):提供一種面向連接的、可靠的傳輸層協議(即數據無誤、數據無丟失、數據無失序、數據無重復到達的通信)。
TCP三次握手過程:

TCP四次揮手過程:

