前言:
學習計算機網絡不僅是軟件開發的基礎功,更是成為一名合格后端工程師、網絡工程師的重要門檻。本文將基于 TCP/IP 協議體系,系統梳理網絡層、數據鏈路層、以及相關協議的核心知識,并結合實際案例與代碼示例幫助理解。
一、網絡層:為數據尋找最佳路徑
網絡層的核心作用是在復雜的網絡環境中找到一條合適的路徑,把數據從源地址送到目標地址。
1. IP協議基礎
- 主機與路由器:主機有IP但不做路由控制,路由器既有IP又能進行路由轉發。
- 協議頭結構:包含版本號、頭部長度、TOS服務類型、總長度、標識與分片信息、TTL、生存時間、協議類型、校驗和、源/目標IP等字段。
示例:查看本機IP和路由信息
# 查看本機IP、MAC、MTU
ifconfig# 查看路由表
route -n
2. 網段劃分與子網掩碼
- 通過子網掩碼區分網絡號和主機號,解決傳統 A/B/C 類地址浪費問題。
- CIDR 提高了IP利用率,例如
192.168.1.1/24
表示高 24 位為網絡號。 - DHCP 自動分配IP,減少人工配置。
示例:計算網絡號
import ipaddressip = ipaddress.ip_interface("192.168.1.100/24")
print("IP地址:", ip.ip)
print("網絡號:", ip.network)
二、數據鏈路層:在相鄰節點之間可靠傳輸
數據鏈路層負責在同一鏈路上的兩個節點間傳遞數據。
1. 以太網與MAC地址
- 以太網是一種局域網技術標準,規定了拓撲結構、訪問控制、傳輸速率等。
- MAC地址是硬件唯一標識,長度48位,通常以16進制表示。
示例:查看本機MAC地址
ifconfig | grep ether
2. MTU與分片
- 以太網最大傳輸單元(MTU)為1500字節。
- 超過MTU的大包會被分片,UDP/TCP都會受其影響。
- TCP通過MSS協商避免不必要的分片。
示例:修改MTU
sudo ifconfig eth0 mtu 1400
三、ARP協議:IP與MAC之間的橋梁
ARP(地址解析協議)用于在已知IP的情況下,獲取對應MAC地址。
示例:查看ARP緩存表
arp -a
Python示例:發送ARP請求(需scapy庫)
from scapy.all import ARP, Ether, srptarget_ip = "192.168.1.1"
arp = ARP(pdst=target_ip)
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
packet = ether/arpresult = srp(packet, timeout=2, verbose=False)[0]
for sent, received in result:print(f"IP: {received.psrc}, MAC: {received.hwsrc}")
四、其他關鍵協議與技術
1. DNS域名解析
- 將域名映射到IP地址。
- 解析過程會先查本地hosts文件,再查詢DNS服務器。
示例:使用 dig
查看解析過程
dig www.baidu.com
Python示例:域名解析
import socket
print(socket.gethostbyname("www.baidu.com"))
2. ICMP協議
- 用于網絡診斷和錯誤報告,如
ping
、traceroute
。 - 注意:ICMP是網絡層協議,沒有端口號。
示例:測試網絡連通性
ping www.baidu.com
traceroute www.baidu.com
3. NAT與NAPT
- NAT將私有IP映射為公網IP。
- NAPT通過端口號映射支持多主機共享公網IP。
4. 代理服務器
- 正向代理:客戶端通過代理訪問外部資源。
- 反向代理:代理作為緩存或負載均衡中間層。
示例:Python設置HTTP代理
import requestsproxies = {"http": "http://127.0.0.1:8080","https": "http://127.0.0.1:8080"
}response = requests.get("http://httpbin.org/ip", proxies=proxies)
print(response.text)
五、總結
- 數據鏈路層:關注MAC地址、MTU、以太網標準、ARP。
- 網絡層:理解IP地址結構、路由機制、NAT原理、ICMP功能。
- 傳輸層:掌握端口號概念、TCP/UDP特性。
- 應用層:了解HTTP、DNS、代理等技術的工作流程。
掌握這些基礎知識,不僅能幫助理解互聯網的運作原理,也能為編程、網絡配置、排錯提供堅實的理論基礎。