首先我們要知道網路是幹嘛的?
就好比我和我朋友發訊息,我希望發出去的資訊是可靠和安全的,但是呢,我們倆手頭上的物理的線路是不可靠不安全的
那麼網路解決的問題就是建立乙個可靠安全的渠道在這個不可靠不安全的線路上
我們都知道網路有七層結構,那麼操作就是搭了乙個資料鏈路層,在不可靠不安全的線路上劃分出最小的傳輸單位(資料報),這個資料報可以通過校驗的方式來確認這個包的正確性,這樣就可以在完成了傳遞的同時也讓接受的節點知道這個包是對還是錯的,這種節點之間的傳輸適合在同乙個區域內的傳遞,像是我把資料發給我們鄰床
但是要想向別的遠的地方傳遞,比如我要傳檔案到我家裡,這個時候單單是乙個資料鏈路層就不夠了,還需要網路層,網路層中有路由,我首先把包發到宿舍的路由器中,然後路由器再發給路由器,一路傳遞,最後到家裡,為了標示網路中的各個節點,還使用ip協議,這樣每個節點就都有乙個ip位址
雖然資料鏈路層可以保證可以判斷這個包是正確還是錯誤,但是並不能保證這個路徑是可靠得,就是說,希望有同乙個方法可以確定我這個包到底有沒有發到我想發的人的手上,這樣就有了傳輸層,傳輸層中有tcp協議和udp協議,tcp協議是基於連線的,在我和收件人之間建立乙個可靠的連線,在這個連線上去傳輸資料
這樣一來我們就可以傳輸可靠的資料了,但是這樣就有乙個問題,傳出去的資料是為了什麼應用服務的呢?或者說,是為了哪乙個應用呢?使用的是什麼協議呢?送東西終歸得有點目標方法用處,這樣就引入了應用層
這樣就將不可靠不安全的變成了可靠安全的,不可靠不安全的叫做物理層,這樣就將這五層的關係說明了出來,七層關係中的另外兩層在其中的作用會被淡化,所以就不列舉了
雖然看起來很有道理沒問題也可以通過這樣的方法得到解決,但是這是解決這個問題的最優方案嗎?憑感覺,五層協議太多複雜,所以這很可能,不是!但是為什麼這一層一層協議堆疊形成的方法用到了現在?
可以說,網路發展到現在並不是一次性解決所有問題的,所以很多情況都是一點一點解決的,這就形成了這種一層一層的情況,像是在看網路協議的時候我們也要用這種方法,不能從理論的角度直接看待,從現在的問題的本質去出發解決,而是要從歷史的發展出發,對應的情況是負責解決當時的什麼問題,整個計算機的發展也是相似的,不斷地迭代進化才形成了今天,而不是一次就出現了完美
不可靠的網路傳輸到底是怎麼個不可靠不安全?
像是不可靠就是指在傳輸的時候會出現,丟包,重複包,出錯或者是亂序的情況,而在不安全的時候,就可能會出現中間人攻擊,竊取個人資訊或者是篡改個人的資訊
滑動視窗協議是在tcp協議中使用的,是用來維持傳送方/接收方緩衝區,這個緩衝區的作用就是解決不可靠問題,在tcp協議中,通過雙方的各自維護各自的緩衝區,互相商定包的重傳機制來解決不可靠問題
那麼,在沒有滑動視窗協議的時候我們是要如何保證傳送方和接收方的包能夠接受並且按照次序呢?我們可以在傳送乙個包以後讓接收方傳送乙個確認包過來,傳送乙個包1,就返回乙個確認包1,傳送乙個包2,就返回乙個確認包2,這樣就可以解決亂序丟包等出錯情況
使用這種方法的問題也很明顯,就是吞吐量很低,只有在得到上乙個傳送包的確認包以後才能發下乙個包,那麼自然就會想到改進方法就是一次多發幾個包,然後一起確認,那麼問題就來了,一次發幾個包?確認得到幾個包的時候發下一批?
這樣就產生了滑動視窗
這裡一共有十六個包,我希望發出去的十六個包都可以得到確認,這就是ack,灰色是已經傳送的,黃色是傳送出去沒有去確認的,綠色是準備傳送的,白色是沒有傳送的
正常情況下,在四號收到了確認以後,變成灰色,然後將視窗向右邊移動,在只保證有七個包處在已傳送和待傳送狀態的時候,視窗移動一格,就會將十一號讀進快取中,將八和九發出去了,但是還沒有確認
丟包的情況也是可能的,在沒有得到ack時,就會使用超時重傳機制,需要注意的是,這個ack是按照順序傳送的,比如我拿到了五和六的ack,但是沒有四的,那麼我就不會發五和六的,只有在四也到達以後,才會將這幾個一起發回去,在使用超時重傳機制的時候,就可能出現一下子好幾個包都收到了ack,然後視窗直接移動好幾個位置
需要注意的一些關於滑動視窗的知識
滑動視窗的大小並不是一直不變的,是會進行調整的
滑動視窗並不只是用於流量控制,還參與了擁塞控制
滑動視窗大小為0是合法的
python入門相關筆記
除錯 的時候,免不了要批量注釋 取消 注釋,很多ide都有快捷鍵將你選中的 塊批量注釋 取消注釋的功能,那麼在vim裡面如何完成這個功能呢?方法一 塊選擇模式 批量注釋 先按esc,ctrl v windows下按 ctrl q 進入塊選擇模式,然後移動游標選中你要注釋的行,再按大寫的i進入行首插入...
網路訪問相關知識(入門)
一 基礎知識 web訪問應用 靜態介面 html 檔案 jsp技術的出現 前後端互動的可能性 http請求 響應 返回檔案內容 web伺服器 web容器 python falsk具有相應web容器,8080埠,需要安裝在伺服器上,http服務 dns對映 網域名稱與ip位址 網域名稱管理 二級 網域...
網路安全相關筆記
對稱加密 在安全要求不高的情況下,資料通訊以明文傳輸,即被擷取就可檢視。為提高資料的保密性,就需要通訊雙方協商乙個金鑰來對資料進行加解密,為此引入了對稱加密演算法,其傳輸過程如下圖所示。要點 1 對稱加密演算法在加密和解密時使用的是同乙個金鑰 2 金鑰作為演算法的輸入,演算法進行加密操作取決於這個金...