前言
你現在的努力,是為了以後有更多的選擇。
在上一篇文章通過“表白”方式,讓我們快速瞭解網路七層協議 瞭解了網路七層協議。 接下來我們要把重心放在網路傳輸的可靠性上面。一起來看TCP協議,它是如何解決網路傳輸不可靠的問題。這其中有個很關鍵的部分,就是我們的滑動視窗協議。
從工程學角度上,我們來看一看滑動視窗協議,它到底解決了一個怎樣的問題?
滑動視窗協議:
- TCP協議的使用
- 維持傳送方/接收方緩衝區 緩衝區是 用來解決網路之間資料不可靠的問題,例如丟包,重複包,出錯,亂序
在TCP協議中,傳送方和接受方通過各自維護自己的緩衝區。通過商定包的重傳機制等一系列操作,來解決不可靠的問題。
問題一:如何保證次序?
提出問題:在我們滑動視窗協議之前,我們如何來保證傳送方與接收方之間,每個包都能被收到。並且是按次序的呢?

問題二:如何提高吞吐量?
提出問題:那麼我們就不能先連發幾個包等他一起確認嗎?這樣的話,我們的速度會不會更快,吞吐量更高些呢?

問題三:如何實現最優解?
問題:我們每次需要發多少個包過去呢?傳送多少包是最優解呢?
我們能不能把第一個和第二個包發過去後,收到第一個確認包就把第三個包發過去呢?而不是去等到第二個包的確認包才去發第三個包。這樣就很自然的產生了我們"滑動視窗"的實現。

正常情況

丟包情況
有可能我們包發過去,對方的Ack丟了。也有可能我們的包並沒有傳送過去。從傳送方角度看就是我們沒有收到Ack。

如果我們這個Ack始終不來怎麼辦呢?
超時重發
這時候我們有個解決方法:超時重傳
這裡有一點要說明:這個Ack是要按順序的。必須要等到5的Ack收到,才會把6-11的Ack傳送過去。這樣就保證了滑動視窗的一個順序。

文末
從我們為了增加網路的吞吐量,想講資料包一起傳送過去,這時候便產生了“滑動視窗”這種協議。有了“滑動視窗”這個概念,我們又解決了其中出現的一些問題。例如丟包,我們又通過重發的機制去解決了。以上來自ccmouse老師教學視訊,作為學習記錄整理。
如果文章對你有用的話,歡迎關注公眾號:Coder程式設計 獲取最新原創技術文章和相關免費學習資料,隨時隨地學習技術知識!
