前言
來自極客時間上的講師劉超的關于網絡協定的課程,品質非常高,強烈推薦。
一、概念
- 協定三要素
- 文法
- 語義
- 順序
-
以太網 Ethernet
當今區域網路采用的最通用的通信協定标準,處于資料鍊路層。它規定了包括
實體層 的連線、電子信号和 媒體通路層 協定 的内容。 -
網關gateway,路由器router,交換機switch,集線器hub,網橋bridge
hub: broadcast to every port, one-line
switch: better hub, intelligent
they are both used to exchange data within a local network
hub->switch。bridge已淡出
router: routes data from one network to another, base on ip address
gateway: 離開區域網路就要經過一個網關,網關是路由器的一個網口
參考1 參考2tips:
- 想象自己是一個處理網絡包的程式,如何拿到網絡包,如何處理,如何發出去
- 網絡上跑的包都是完整的,可以有下層沒上層(例如:Ping),而不可能有上層沒下層
二、分層結構
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMTOiFDOwYGOkVWZkVWY3UWZldzYiNmYiVGO5QWZwEzMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
二層定義了本地區域網路的傳輸行為,ip層定義了端到端的傳輸行為。網絡傳輸以包為機關,二層叫幀,網絡層叫包,傳輸層叫段。
- 二層裝置 三層裝置
- 二層裝置: 工作在鍊路層的裝置,摘下mac頭,判斷丢棄、轉發或留着,轉發出去前要把mac頭再填上
- 三層裝置: 工作在ip層的裝置,把mac頭、ip頭都摘下來,然後同上
三、ip位址
- ipv6=128位
- mac位址=6byte=48位,無定位功能
- 無類型域間選路CIDR:将32位ip位址一份為二,前面網絡号,後面主機号
思考題
1.網絡包到達網關時,可以通過路由表得到下一個網關的ip,直接通過ip就可以了,為何還要通過本地的mac位址呢?
摘評論裡@芒果的發言:ip位址不是固定的。為何不直接用mac呢?因為ip選址+mac定位效率更高
2.網絡分層協定的類比,比總經理&員工的比喻更恰當的?
評論裡的快遞比喻個人更認同
3.STP協定缺點
- 拓撲發生變化,新的配置消息需要一定時延才能傳播到整個網絡,期間會導緻網絡不穩定
- 網絡規模大時,鍊路阻塞将不承擔任何流量,造成帶寬浪費
4.ICMP差錯封包也出問題了呢?
差錯封包不會産生差錯封包
5.回複的包,公網ip NAT成内網ip時,怎麼知道發給誰的?
是ip+端口(TCP、UDP)或ID(ICMP)哈希比對算法
6.路由協定交換的資訊本身,還要走路由嗎,不是死鎖了嗎
OSPF直接基于IP協定,隻發給鄰居,隻有一跳,不經過中間裝置。BGP基于TCP, 在BGP peer之間交換資訊
7. 計算機看來,怎樣才算一個連接配接呢?
接收端和發送端為維護連接配接所保持的資料結構,即socket,就是連接配接
8. 如何在某個系統中檢視TCP連接配接的狀态?
netstat,lsof,ss等
9. bbr如何達到最優點的?
進入緩存并等待,會增加額外的時延
10. epoll是linux的函數,windows對應的機制是什麼呢?如何寫一個跨平台的程式呢
windows是IOCP,事件發生時,IOCP機制将資料直接copy到緩沖區,應用可以直接使用。而epoll的異步通知,應用需要調用IO函數擷取資料。跨平台可以使用libevent庫,這是一個事件通知庫,适用于linux、win、bsd等。
11. 哪些手段可以提高https的效率?
從https設計的流程考慮:DNS查詢(httpdns),tcp三次握手(改用基于udp的quic),交換3個key(共享密鑰)
12. RTMP視訊流傳輸機制存在什麼問題?如何優化
基于TCP,不适合實時場景。使用基于udp的quic。
13.如何做跨機房的高可用?
- 同城雙活
趣談網絡協定-筆記(1) - 異地災備
趣談網絡協定-筆記(1)