1、協議1.1.初識協議
首先”協議” 是一種約定。計算機協議就是計算機之間的約定,是為了減少通信成本、溝通成本等。
計算機之間的傳輸媒介是光信號和電信號. 通過 “頻率” 和 “強弱” 來表示 0 和 1 這樣的信息。 要想傳遞各種不同的信息, 就需要約定好雙方的數據格式。所以,完善的協議,需要更多更細致的規定,并讓參與的人都要遵守。
1.2.協議分層
協議本質也是軟件,在設計上為了更好的進行模塊化,解耦合,也是被設計成為層狀結構的。

日常通信的例子:
張三和李四通過電話來進行通信,張三會把語言協議的信息傳給電話,電話再通過電話通信協議將信息傳給李四的電話,李四通過語言協議理解張三的信息。這就是實現了物理意義的分層:
張三 -> 電話 -> 電話 -> 李四
這樣就是良好的解耦,張三李四不需要考慮電話之間是如何進行通信的,只需要向電話中傳入信息或者獲取信息!電話不需要管張三李四之間是如何通信的,只需要做到信息的傳遞就可以。
這樣我們就理解了層和層之間是松耦合的,可以隨時替換或者方便維護。
在這個例子中, 我們的”協議”只有兩層:語言層、通信設備層。但是實際的網絡通信協議,設計的會更加復雜, 需要分更多的層。但是通過上面的簡單例子,我們是能理解,分層可以實現解耦合,讓軟件維護的成本更低1.3.OSI 七層模型OSI(Open System Interconnection,開放系統互連)七層網絡模型稱為開放式系統互聯參考模型,是一個邏輯上的定義和規范;把網絡從邏輯上分為了7層. 每一層都有相關、相對應的物理設備,比如路由器,交換機;OSI 七層模型是一種框架性的設計方法,其最主要的功能使就是幫助不同類型的主機實現數據傳輸;它的最大優點是將服務、接口和協議這三個概念明確地區分開來,概念清楚,理論也比較完整. 通過七個層次化的結構模型使不同的系統不同的網絡之間實現可靠的通訊;但是, 它既復雜又不實用; 所以我們按照TCP/IP四層模型來講解.


1.4.TCP/IP五層(或四層)模型
TCP/IP的五層協議其實是將七層協議的會話層、表示層和應用層合成為了一層應用層。
TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇.
在四層協議中,網絡層和傳輸層是最重要的,統稱為TCP/IP協議。既然TCP/IP協議是整個協議的核心,所以我們直接將這4層統一稱為TCP/IP協議。
TCP/IP通訊協議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求.
物理層: 負責光/電信號的傳遞方式. 比如現在以太網通用的網線(雙絞線)、早期以太網采用的的同軸電纜(現在主要用于有線電視)、光纖, 現在的wifi無線網使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等. 集線器(Hub)工作在物理層.數據鏈路層: 負責設備之間的數據幀的傳送和識別. 例如網卡設備的驅動、幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、數據差錯校驗等工作. 有以太網、令牌環網, 無線LAN等標準. 交換機(switch)工作在數據鏈路層.網絡層: 負責地址管理和路由選擇. 例如在IP協議中, 通過IP地址來標識一臺主機, 并通過路由表的方式規劃出兩臺主機之間的數據傳輸的線路(路由). 路由器(router)工作在網路層.傳輸層: 負責兩臺主機之間的數據傳輸. 如傳輸控制協議 (TCP), 能夠確保數據可靠的從源主機發送到目標主機.應用層: 負責應用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等. 我們的網絡編程主要就是針對應用層.
物理層我們考慮的比較少. 因此很多時候也可以稱為 TCP/IP四層模型.
1.5.OS和網絡之間的關系

傳輸層和網絡層,都是在OS內部實現的,網絡也屬于操作系統源代碼的一部分。
這里的系統調用就是網絡層面的系統調用。
1.6.協議的本質
在多主機情況下繼續理解:
世界上所有的OS只要想入網,就必須遵守TCP/IP協議,保證不同主機之間的數據通信!
站在語言角度重新理解協議,協議就是雙方都能識別的結構體數據類型。
雙方必須使用同樣的數據類型,所以,經過網絡傳輸,對方一定認識每個字段的大小、含義!

2.局域網通信2.1.什么是局域網?
局域網(Local Area Network,LAN)是一種覆蓋有限地理范圍(如辦公室、建筑物或校園)的計算機網絡。
我們需要明確兩臺計算機在一個局域網中,是可以進行直接通信的。就比如在我的世界里的局域網聯機,這就允許在同一個局域網中玩家之間可以直接進行通信!
我們使用在教室上課的例子來方便理解:
一個封閉的教室就是局域網,宋浩老師和其他同學相當于局域網下的不同主機。
所以在局域網中,不同主機是可以互相通信的。任何時刻,只允許任何一臺主機在局域網中發送消息。局域網中,當然是主機越少越好
為了可以在局域網中判斷信息是否是發送給自己的,就需要一個唯一的標識信息來進行判斷:每臺主機都要有一個MAC地址!這是唯一的!所以局域網通信的過程中,主機對收到的報文確認是否是發給自己的,是通過目標mac地址判定的!
2.2.關于報文相關基礎知識
報文 = 協議報頭 + 有效載荷
我們平時買快遞,收到快遞的同時,肯定還會收到一張快遞單,那么快遞單就是我們的協議報頭,我們買的快遞就是有效載荷
報文和協議的關系:
報文和協議是網絡通信中不可或缺的兩個要素。報文是傳輸的信息載體,而協議則是確保這些信息能夠正確傳輸和理解的規則和標準。

2.3.數據包的封裝和使用封裝:
報文不斷被自頂向下交付的過程,要添加每一層的協議報頭,叫做封裝。

解包和分用:
解包就是將報頭和有效載荷進行分離;分用是將自己的有效載荷交付給上一層的那一個協議

在網絡傳輸的過程中,數據不是直接發送給對方主機的,而是先要自定向下將數據交付給下層協議,最后由底層發送,然后由對方主機的底層來進行接受,在自底向上進行向上交付。
但是在邏輯上,同層協議,都可以認為自己在和對方直接通信。
從今天開始,我們學習任何協議,都要先宏觀上建立這樣的認識: 1. 要學習的協議,是如何做到解包的?只有明確了解包,封包也就能理解 2. 要學習的協議,是如何做到將自己的有效載荷,交付給上層協議的?
3.跨網絡通信
如果要進行跨網絡通信,就需要IP地址來進行標識!
3.1.IP地址
IP 協議有兩個版本, IPv4 和 IPv6,默認都是指 IPv4。
IP 地址是在 IP 協議中, 用來標識網絡中不同主機的地址。我們通常也使用 “點分十進制” 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用點分割的每一個數字表示一個字節, 范圍是 0 – 255;
3.2.跨網絡通信流程圖

3.3.IP 地址和 Mac 地址的區別IP 地址在整個路由過程中,一直不變(目前,我們只能這樣說明,后面在修正)Mac 地址一直在變目的 IP 是一種長遠目標,Mac 是下一階段目標,目的 IP 是路徑選擇的重要依據,mac 地址是局域網轉發的重要依據我們用唐僧向西天取經的故事方便我們理解。唐僧每到一個地方都會說,我從東土大唐而來,要去西天面見佛祖。所以東土大唐是源IP地址,而西天是目的IP地址,這是亙古不變的!但是上一站從哪來,下一站到哪,都是會變的,這就對應我們的源mac地址和目標mac地址!

3.4.跨網絡通信總結網絡層(就是IP層)向上(包括網絡層)看到的所有的報文的都是一樣的,至少是IP報文。IP可以屏蔽底層網絡的差異所以的網絡都是IP網絡,所以手機,電腦和平板都可以互相通信!給同一局域網的主機,直接通過MAC地址找到目標給不同局域網的主機,就推送數據包給路由器進行搜索對應IP地址,然后再次封裝數據包進行通信,最后通過MAC地址找到對應主機。