day11(停止等待、超時重傳、流水線傳輸、視窗、擁塞控制、三報文握手)
ip層提供的是最大努力服務,所以tcp下面的網路是不可靠的傳輸,所以要使用一些協議來使兩個運輸層的通訊變得可靠。
停止等待協議,超時重傳。每次傳送完乙個分組就 設定乙個超時計時器,如果收到對方的確認,就撤銷已設定的超時計時器。
流水線傳輸,相比於停止等待協議提高了通道的利用率,可以連續的傳送分組。使用流水線傳輸就需要 連續arq協議和滑動視窗協議。
連續arq規定,每收到乙個確認就把傳送視窗向前滑動乙個分組位置。接收方一般都是累積確認,對按序到達的最後乙個分組傳送確認。
若確認號=n,則表示序列號到n-1之為止的所有資料都已正確收到。
資料偏移,佔四位,四位最大就是15,所以tcp最大首部就是15*4=60位元組。(即選項長度不能超過40位元組)
視窗,視窗字段明確的指出了現在允許對方傳送的資料量,該值經常是動態的。
超時重傳的時間,採用加權平均往返時間。只要重傳了,就不用本次的往返時間做樣本,且每重傳一次,就把當前的重傳時間增倍。
如果使用選擇確認,就要在tcp的首部加上「允許sack」的選項。
tcp的實現中,廣泛的使用nagle演算法。就是先發乙個位元組,收到確認再傳送快取的資料報。且當到達的資料已達到傳送視窗大小的一半或已達到報文段的最大長度,就立即傳送資料報,可以有效的提高吞吐量。
tcp的擁塞控制,擁塞控制就是防止過多的資料被注入到網路,可以使得路由或鏈路不超載。判斷擁塞的依據就是超時。
tcp擁塞控制有四種方法:慢開始、擁塞避免、快重傳、快恢復。
慢開始:主機開始傳送資料時,不清楚網路負荷沒所以由小到大逐漸增大傳送視窗。初始設定為1,每收到乙個新報文段的確認就擁塞視窗加1,。所以每經過乙個傳輸輪次,擁塞視窗就加倍。設定乙個慢開始門限,當視窗小於門限使用慢開始演算法,當視窗大於門限時停止慢開始演算法使用擁塞避免演算法,當等於門限時兩個演算法都可以使用。
擁塞避免:擁塞避免是讓擁塞視窗緩慢的增大,沒進過乙個往返時間rtt就把傳送方的擁塞視窗加1,而不是像慢開始那樣加倍。
快重傳:快重傳演算法要求接收方不要等待自己傳送資料時才進行捎帶確認,二是要立即傳送確認,即使收到失序的報文段也要立即發出對已接受到的報文段的重複確認。當一連收到3個重複確認的時候,就知道接收方確實沒收到報文段,因而立即進行重傳。這樣就不會出現超時,傳送方也就不會誤認為出現了網路擁塞,提高了吞吐量。
快恢復:一旦收到三個重複確認,門限值馬上減半!同時設定擁塞視窗等於減半的門限值,並開始執行擁塞避免演算法!
8. 為了避免全域性同步的情況,提出了 主動佇列管理aqm。
9. 三報文握手方法,防止傳送方的報文滯留後到達接收方,接收方誤以為是乙個新的連線請求。
秋招C 開發學習之路day2
day2 類模板 建構函式和析構函式製成順序 繼承 虛函式 純虛函式 多型 類模板,同樣的類只是型別不同就可以使用乙個模板來定義類,然後呼叫時加入型別 在類的宣告之前加入 template 建構函式和析構函式的執行順序,通產來說是 先構造的函式最後執行析構函式。意思就是執行析構函式的順序與建構函式順...
秋招C 開發學習之路day4
day4 map 迭代器 set tcp tcp頭部 map,其內部的資料都是有序的,預設排序是按照key的大小進行的排序。使用例子 mapmapstudent 一一對應的key value。key可以任意型別,但是必須支援 操作符。根據key可以快速查詢,複雜度為logn。map的標頭檔案,inc...
秋招C 開發學習之路day27
day32 字元儲存漢字 乙個字元是乙個位元組,乙個漢字是兩個位元組。所以單純的乙個字元儲存是會截斷的!用字元陣列,或者字元指標可以儲存多個漢字!即漢字字串!淺拷貝和深拷貝 編譯系統在我們自己沒有自定義拷貝建構函式時,會在拷貝物件時候呼叫預設拷貝建構函式,進行淺拷貝,即對指標name拷貝後出現兩個指...