Linux网络编程 之 网络协议概述(一)
目錄
1. 分層模型
2. 物理層
3. 鏈路層
4. 網絡層
5. 傳輸層
6. 應用層
1. 分層模型
越接近下面的層,越靠近硬件,越上面的層,越接近用戶。
網絡的每一層都定義了許多協議,有個協議的總稱,叫做“tcp/ip協議”,不僅僅包括TCP和IP協議,還包括了其他協議。
2. 物理層
物理層是將電腦連接起來的物理手段,作用就是負責傳送0/1的電信號。
3. 鏈接層
因為0/1信號是沒有意義的,必須規定他的解讀方式。鏈接層負責規定了0和1電信號的分組方式。
早期的時候,每家公司都有自己的電信號分組方式。逐漸地,一種叫做“以太網”(Ethernet)的協議,占據了主導地位。
以太網協議:以太網規定,一組電信號構成一個數據包,叫做“幀”(Frame)。每一幀分成兩個部分:標頭(Head)和數據(Data)。
- 標頭:包含數據包的一些說明項,如發送者,接受者,數據類型等。
- 數據:數據包的具體內容。
在這里,發送者和接受者是怎么標識的呢,是使用MAC地址來標識的,而MAC地址實際上就是網卡上的地址,這個地址是全球唯一的。
標頭的兩個MAC地址占了12字節,類型占了2個字節,FCS(幀校驗序列)占了4個字節,所以標頭固定占18字節,而數據為46-1500字節。
因此,如果兩個網卡要進行通信,那么發送方必須知道接收方的MAC地址,那么怎么才能知道另一個網卡的MAC地址呢?答案是APR協議,APR是網絡層協議,這里先不介紹,我們聊一下有了MAC地址如何把數據包準確送到接收方。
這里采用的是廣播的方式,A向子網絡發送一個數據包,子網絡中的每臺計算機都會受到這個包,計算機對比這個幀中的目標MAC地址是否一致,如果兩者相同,就接受這個包,做進一步處理,否則就丟棄這個包。
4. 網絡層
我們知道一個網卡知道另一個網卡的地址就可以進行通信,而且發送方是采用廣播的方式,因為不可能廣播到所有計算機,所以網絡層定義了子網絡,發送方只能發送到子網絡中。
IP協議:網絡層采用IP協議來定義網絡地址。
互聯網上的每一臺計算機,都會分配到一個 IP 地址。這個地址分成兩個部分,前一部分代表網絡,后一部分代表主機。
單單從 IP 地址,我們無法判斷網絡部分。以 172.16.254.1 為例,它的網絡部分,到底是前 24 位,還是前 16 位,甚至前 28 位,從 IP 地址上是看不出來的,要用到子網掩碼。
所謂“子網掩碼”,就是表示子網絡特征的一個參數。它在形式上等同于 IP 地址,也是一個 32 位二進制數字,它的網絡部分全部為1,主機部分全部為0,并且1和0分別連續。
比如,IP 地址 172.16.254.1,如果已知網絡部分是前 24 位,主機部分是后 8 位,那么子網絡掩碼就是 11111111.11111111.11111111.00000000,寫成十進制就是 255.255.255.0。
因此我們需要重新封裝一下幀,這里我們只需要把IP數據包直接放到以太網數據包的數據部分,再把IP和一些校驗信息放到以太網數據包的標頭部分就可以了。
ARP協議:之前留了一個懸念,ARP協議就是發送方找到接收方的mac地址的,它是怎么做到的呢?
首先每臺機器維持一個ARP高速緩存表,用來記錄IP和MAC地址的映射。
如果目的IP和自己在同一個網段:
當IP層的ARP高速緩存表中存在目的IP對應的MAC地址時,則調用網絡接口send函數(參數為IP Packet和目的MAC))將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,并發送出去;
- 當IP層的ARP高速緩存表中不存在目的IP對應的MAC地址時,發送ARP廣播請求目的IP的MAC,收到ARP應答答之后,將應答中的IP地址,對應的MAC對緩存在本地ARP高速緩存表中,然后調用網絡接口send函數(參數為IP Packet和目的MAC))將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,并發送出去;。
如果目的IP地址和自己不在同一個網段,就需要將包發送給默認網關,這需要知道默認網關的MAC地址:
- 當IP層的ARP高速緩存表中存在默認網關對應的MAC地址時,則調用網絡接口send函數(參數為IP Packet和默認網關的MAC)將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC
- 當IP層的ARP高速緩存表中不存在默認網關對應的MAC地址時,發送ARP廣播請求默認網關的MAC,收到ARP應答之后,將應答之中的<默認網關地址,對應的MAC>對緩存在本地ARP高速緩存表中,調用網絡接口send函數(參數為IP Packet和默認網關的MAC)將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC的封裝,并發送出去。
- 當IP層的ARP高速緩存表中存在默認網關對應的MAC地址時,則調用網絡接口send函數(參數為IP Packet和默認網關的MAC)將數據提交給網絡接口,網絡接口完成Ethernet Header + IP + CRC
5.傳輸層
為什么要有傳輸層這個東西呢?原因是數據包如果發送到了你的電腦,你怎么知道是網頁的內容還是qq音樂的內容?因此,我們需要一個參數,用來標識這個數據包屬于哪一個進程,這個參數就是端口。
端口是0-65535之間的一個整數,16個bit,其中0-1023被系統占用,所以可以把傳輸層理解成端口到端口的連接。
其中UDP協議和TCP協議都是傳輸層協議,其實就是在ip數據包中加入端口信息,UDP協議實現起來比較簡單,因為IP協議本來就是不可靠交付,一旦一個數據包發出,無法知道對方是否收到。
而TCP可以理解成有確認機制的UDP協議,每發出一個數據包都要求得到確認。如果有一個數據包遺失,但是收不到確認,就需要重傳了。
6.應用層
應用層的作用,就是規定應用程序的數據格式。
TCP 協議可以為各種各樣的程序傳遞數據,比如 Email、WWW、FTP 等等。那么,必須有不同協議規定電子郵件、網頁、FTP 數據的格式,這些應用程序協議就構成了“應用層”。
總結
以上是生活随笔為你收集整理的Linux网络编程 之 网络协议概述(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis学习之集群(五)
- 下一篇: Linux网络编程 之 无连接和有连接通