目錄程序員
本文主要目的雖然是爲了計網考試而準備的,可是以後會繼續更新修改,並且UDP/TCP對咱們遊戲程序員算是計算機網絡基礎知識最重要的一塊,
因此頗有必要記錄一下筆記。web
主要內容就是發送方發一分組數據包給接收方,並等待接收方的確認,收到確認包後,繼續按順序發送下一分組數據包給接收方...以此保證發送數據包的順序。算法
可是發送數據包可能遇到以下兩種出錯狀況:緩存
以上這些出錯狀況,B都不會發送任何信息來通知A。
而是讓A設置一個超時計時器,只要超過了一段時間仍然沒有收到確認,就認爲剛纔發送的分組丟失了,因此A會重傳剛剛的發送過的分組,也就是所謂的超時重傳。網絡
上面簡單使用中止等待ARQ協議的話,信道利用率會很是的低。tcp
連續ARQ協議是指發送方採用流水線傳輸分組:
發送方能夠連續發送多個分組,沒必要每發完一個分組就停下來等待對方確認。這樣能夠極大增大信道利用率。計算機網絡
滑動窗口協議是指發送方須要維持一個發送窗口,一般是結合來連續ARQ協議使用的:
位於發送窗口內的全部分組均可以連續發送出去,而不須要等待對方的確認, 發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。3d
例以下圖,當發送方收到第一個分組的確認,就把發送窗口向前移動一個分組的位置。若是原來已經發送了前5個分組,則如今能夠發送窗口內的第6個分組。blog
接收方通常都是採用累積確認的方式:
也就是說接收方沒必要對收到的分組逐個發送確認,而是在收到幾個分組後,對按序到達的最後一個分組發送確認。若是發送方收到了這個分組確認信息,則表示到這個分組爲止的全部分組都已經正確接收到了。遊戲
但累計確認的缺點是不能正確的向發送方反映出接收方已經正確收到的因此分組的信息。
例如發送方發送了前5個分組,而中間的第3個分組丟失了。這時候接收方只能對前2個發出確認,而不知道後面3個分組的下落,所以只能把後面的3個分組都重傳一次。
當主機開始發送數據時,由於還不清楚網絡負荷的狀況,若是當即把大量的數據字節注入網絡,那麼就有可能引發網絡擁塞。
慢開始算法:由小到大的逐漸增大發送窗口,也就是說從小到大增大擁塞窗口數值。
在慢開始時,將這個擁塞設置爲最大報文段MSS的數值,每收到一個對新的報文段的確認後,擁塞窗口的值就加1。以下圖所示:
這裏咱們首先將擁塞窗口cwnd置爲1,發送完一個報文段M1,並且收到接收方發來的確認時,將cwnd增大到2,而後發送M2,M3,再次接收到確認後,將cwnd增長到4。所以,每通過一個傳輸輪次,擁塞窗口就加倍。
擁塞避免算法:讓cwnd緩慢得增大,即每通過一個RTT往返時間就把發送方的擁塞窗口cwnd加1,而不是加倍。這樣,擁塞窗口cwnd按線性規律緩慢增加,比慢開始增加速率慢的多。
爲了防止擁塞窗口增加過大引發網絡阻塞,擁塞控制機制還設置了一個慢開始門限 ssthresh
不管在哪一個階段,只要發送方判斷網絡中出現擁塞(沒有按時收到確認),就要把慢開始門限ssthresh置爲出現擁塞時發送窗口的一半,而後將cwnd置1,從新執行慢開始算法。
這樣作就可使發生擁塞的路由器把緩存中積壓的分組處理完畢
舉個例子,如圖
一、在開始的時候將擁塞窗口置爲1,慢開始門限的初始值ssthresh設置爲16。
二、在執行慢開始算法時,擁塞窗口cwnd隨着傳輸輪次按指數增加,超過慢開始門限值時(cwnd=16),開始執行擁塞避免算法,擁塞窗口按照線性規律增加。
三、假設擁塞窗口增加到24時,網路出現超時,極可能擁塞,因此慢開始門限值變爲原來的一半(12),擁塞窗口置爲1,並執行慢開始算法,當擁塞窗口再次達到門限值時,改成擁塞避免算法。
TCP運輸鏈接有三個階段:鏈接創建,數據傳送,鏈接釋放。
TCP在鏈接創建過程當中要解決三個問題:
如下是創建鏈接的三次握手過程(以A主動鏈接爲例):
通訊的雙方均可主動釋放鏈接。
如下是釋放鏈接的四次揮手過程(以A主動釋放爲例):
這裏就順便提一些關於我所知道有關網絡多人遊戲的經驗: