計算機網絡總結:
1.OSI七層模型
1.應用層
2.表示層
3.會話層
4.傳輸層
5.網絡層
6.數據鏈路層
7.物理層
有的模型則分爲5層,前三層統一稱爲應用層。
1.2 層於協議
每一層之間之間,爲了完成相應的功能,都遵守一定的協議,
這些協議統稱爲互聯網協議。
- 物理層
- 物理層就是通過光纜,電纜將電腦連接起來。
- 規定了網絡的電氣特性,主要負責傳輸0和1
- 數據鏈路層
- 單純的0和1並沒有意義,我們必須需要知道多要個信號爲一組,每個信號爲所代表的意義。
- 所以,爲了給電信號分組,便有了以太網協議(Ethernet),以太網協議規定了一組數據包稱爲幀。每一幀包含標頭(head) 和數據(Data)
- 標頭包含數據的發送者和接收者等信息,Data則包含了具體的數據
- 標頭固定18個字節,數據最短46個字節,最長1500個字節。如果數據超過1500則必須分成多個幀發送。
- mac地址,標頭所包含的發送者和接收者的信息,正是發送者和接收者的mac的字,以太網規定,連入網絡的設備必須具有網卡。而數據包的發送,就是從一塊網卡到另一塊網卡。而網卡的地址,就是mac地址。
- 世界上每一塊網卡的地址都是獨一無二的。
- 廣播
- 一個網卡如何直到另一個網卡的mac地址?(ARP協議)
- 即便知道了另一塊網卡的地址,如何將數據發送給它。
以太網的解決方式是向子網內的所有計算機發送數據包,標頭包含接收機的mac地址,每一臺接受到數據包的計算機都會根據自己的mac地址判斷自己是不是接收者,如果不是,就會自動忽略這條信息。
這樣,有了數據包,網卡,以及廣播,計算機就能夠在鏈路層通信了。
- 網絡層
- 網絡層的由來
以上廣播的方式解決了子網內的通信,但我如果我們想要與世界上的一臺計算機通信,我們肯定不能給世界上每一臺計算機都發送一個數據包,讓他去確認是不是我們的目的主機。於是就有了網絡層。
因此我們要解決的是如果判斷兩臺主機是否在同一個子網內,如果在同一個子網內的話我們就通過廣播的方式發送,不是的話我們就通過路由轉發。
判斷子網的方法,也很簡單,就是用ip地址and上子網掩碼看得到的結果是否一致。
有了ip地址之後,我們將數據包送到目的子網,然後再通過mac地址送到目的主機。
-
- ip協議
簡單的總結:ip協議的作用就是爲每一臺計算機分配ip地址,確定那些地址在同一個子網。
-
- ip數據包
ip數據包包含head 和data兩部分,頭部主要包含ip地址等信息,data就是要傳輸的數據。 ip 數據包被包裹在 以太數據包的data字段。
-
- ARP協議
通常情況下目的主機的ip地址是已知的,因爲通過域名,DNS服務器可以解析出目的主機的ip地址。
那麼我們的問題就轉化爲,如何由ip地址得到mac地址?
- 首先判斷於目的主機是否在同一子網,如果是我們可以通過ARP協議得到目的主機的mac地址。(通過廣播的方式)
- 如果不是,就交由子網連接處的網關(gateway)去處理。
- 傳輸層
- 爲什麼要有傳輸層?
還記得之前總是記不住,網絡層實現了主機到主機的通信,傳輸層實現了端口到端口的通信。
當我們的數據包發送到目的主機,我們必須要知道發送給那個端口,即發送給哪個應用程序。總不能發送的QQ消息被微信收到了吧。所以說傳輸層實現了端口到端口的通信。
端口是0-65535之間的整數,0-1023被系統佔用,其他可以使用。
-
- UDP協議
有了端口之後就需要在數據包中加入端口信息,於是就有了傳輸層的協議,UDP和TCP,這樣個協議已經見過很多次了,但我還是感覺到陌生,如果想要真正的理解還是去讀一下TCP/IP協議詳解吧。目前準備寒假的時候讀一下。
同樣UDP協議也包含head和Data兩部分,頭部包含了發送端口和接收端口。data包含數據信息。UDP數據包被放在ip數據包的數據字段。而ip數據包又被放在以太網的數據包中。發送信息的時候就是這樣一層一層的嵌套,而接收信息的時候也是一層一層的剝開。 哈哈。
-
- TCP協議
TCP協議太重要了,也不可能用一段話來總結清楚,所以就放在下面總結吧。
TCP協議是面向連接的,UDP是無連接的,所以UDP無法保證數據的安全,也無法保證數據能夠送達。而TCP是保證數據不會丟失的(即使丟了也會重傳)。
- 應用層協議
常見的有
HTTP 超文本傳輸協議
SMTP 簡單郵件傳輸服務
FTP 文件傳輸服務
每一種應用層協議都有自己的端口號但是不太好記。
好吧 最近記住了 MySQL的端口號是3306
- 後記
曾經面試官問我,當我們在瀏覽器中輸入百度的網址後所經歷的過程。當時,是我第一次電話面,距離學完計網已經1年QAQ。但憑藉着當時的理解,還是大致說出來了。但是,說的太籠統了。
- 當我們在瀏覽器中輸入域名時,我們就像DNS服務器發送了一個數據包,來得到目的主機的ip地址。
- 瀏覽器與服務器之間建立TCP鏈接。
- 然後瀏覽器發送一個http請求報文,經過傳輸層,網絡層,數據鏈路層,每通過一層都加上相應的首部,然後送達目的主機。
- 然後目的主機就一層一層的扒,這裏是逆過程,把信息傳送到應用層。
- 然後服務器返回信息。
- 瀏覽器將拿到的信息渲染。
至於http請求報文的格式
大致分爲
請求行,請求頭,和請求體
響應報文的格式
響應狀態行
響應頭
響應體
其中請求頭會包含:
- 本機可接受的信息格式 Accept:
- 優先接受的編碼 Accept-Encoding
- cookie
- host:目的主機
- user-agent:客戶端程序信息(瀏覽器版本)
當然需要知道的還有很多,當真正的理解了他的作用,不用記也就知道了。
8 . TCP和UDP的差異
- TCP是面向鏈接的,UDP無連接
- TCP提供可靠的數據傳輸服務,UDP是進最大努力交付
- TCP面向字節流,UDP面向報文
- TCP保證數據的傳輸是有序的,UDP是無序的。
TCP建立鏈接的三次握手
- 客戶端發出鏈接請求
- 服務器端接受鏈接,並向客戶端發出鏈接請求
- 客戶端接收鏈接。
斷開連接的四次揮手
- 客戶端發送一個FIN,用來關閉數據傳輸,進入終止等待狀態
- 服務器端收到FIN後,回覆一個ACK報文應答
- 服務器端發送一個FIN
- 客戶端收到請求後,發送一個確認數據,關閉連接。
TCP內部的很多算法機制保證了TCP的可靠傳輸:
擁塞控制,超時重傳,錯誤重傳等。。。。
應用場景:
實時會議,如果使用TCP,當網絡不好會發生重傳,畫面會有延遲。udp允許丟包,
即使一些數據丟失,整體上也不會有什麼影響。
當然計算機網絡一本書也總結不完,暫時就先總結這麼多吧。
總結參考了jackjiang的網絡編程入門TP