你如今的努力,是爲了之後有更多的選擇。編程
在上一篇文章經過「表白」方式,讓咱們快速瞭解網絡七層協議 瞭解了網絡七層協議。 接下來咱們要把重心放在網絡傳輸的可靠性上面。一塊兒來看TCP協議,它是如何解決網絡傳輸不可靠的問題。這其中有個很關鍵的部分,就是咱們的滑動窗口協議。緩存
從工程學角度上,咱們來看一看滑動窗口協議,它到底解決了一個怎樣的問題?網絡
在TCP協議中,發送方和接受方經過各自維護本身的緩衝區。經過商定包的重傳機制等一系列操做,來解決不可靠的問題。學習
提出問題:在咱們滑動窗口協議以前,咱們如何來保證發送方與接收方之間,每一個包都能被收到。而且是按次序的呢?code
提出問題:那麼咱們就不能先連發幾個包等他一塊兒確認嗎?這樣的話,咱們的速度會不會更快,吞吐量更高些呢?cdn
問題:咱們每次須要發多少個包過去呢?發送多少包是最優解呢?視頻
咱們能不能把第一個和第二個包發過去後,收到第一個確認包就把第三個包發過去呢?而不是去等到第二個包的確認包纔去發第三個包。這樣就很天然的產生了咱們"滑動窗口"的實現。 blog
有可能咱們包發過去,對方的Ack丟了。也有可能咱們的包並無發送過去。從發送方角度看就是咱們沒有收到Ack。 token
若是咱們這個Ack始終不來怎麼辦呢?圖片
這時候咱們有個解決方法:超時重傳
這裏有一點要說明:這個Ack是要按順序的。必需要等到5的Ack收到,纔會把6-11的Ack發送過去。這樣就保證了滑動窗口的一個順序。
從咱們爲了增長網絡的吞吐量,想講數據包一塊兒發送過去,這時候便產生了「滑動窗口」這種協議。有了「滑動窗口」這個概念,咱們又解決了其中出現的一些問題。例如丟包,咱們又經過重發的機制去解決了。以上來自ccmouse老師教學視頻,做爲學習記錄整理。
若是文章對你有用的話,歡迎關注公衆號:Coder編程 獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!