tcp為什麼安全可靠
1、序列號與確認號
當傳送錯誤的時候,會發生:
a、超時重傳機制
傳送方傳送的報文中含有序列號,每當傳送乙個報文後,就啟動乙個計時器(rto),該計時器的時間一般是有當前網路來決定的,乙個rtt指的是當乙個報文從傳送到接收到對應的ack標誌的時間,rto的決定一般是傳送方嘗試傳送幾個報文,然後取平均rtt時間來決定計時器的值。 當傳送乙個報文以後,傳送方在計時範圍以內,如果沒有接收到相應的ack確認報文,那麼傳送方就會重傳該報文。
b、快速重傳機制
該機制指的是,傳送方一直傳送報文,不會每發一次報文就都要等待到這個報文的ack標誌才傳送下個報文。 當接收方傳送接受的序列號不對的時候,傳送連續的3個ack標誌,告訴傳送方,這個報文在傳輸過程中出現了丟包。傳送方如果接收到某個相同序列號的三個ack報文,那麼此時立馬重發該報文,不用等待計時器的時間結束。
2、流量控制(滑動視窗)
傳送方通過維持乙個傳送滑動視窗來確保不會發生由於傳送方報文傳送太快接收方無法及時處理的問題。此時傳送方的報文分為四類, 第一類是已經傳送並且得到接收方確認的報文,第二類是已經傳送但是沒有接收到確認的報文,第三類是傳送方還沒傳送,但是滑動視窗還足夠巨大,允許被傳送的報文, 第四類是還沒傳送並且視窗已經被佔滿,不允許傳送的報文。 一般來說,滑動視窗的最左端都是介於第一類跟第二類報文的分界線,最右端是第三類跟第四類報文的分界線。
滑動視窗的流量控制可以包括那麼幾個協議:
a、停等協議。滑動視窗的大小為1, 每個傳送報文都要等到被確認以後,傳送方才繼續傳送下乙個報文。
b、後退n步協議。該協議下,滑動視窗大於1,傳送方可以一直傳送報文,但是當接收到接收方傳送的三個連續的同一序列號的ack報文時,說明該序列號的報文是已經丟失的,那麼此時重發該丟失報文以及該報文以後的報文(包括那些已經傳送的)。
c、選擇重傳。在後退n步協議當中,如果某個報文丟失。那麼將要重新傳送這個丟失報文及以後的所有報文(包括已經傳送的),選擇重傳協議不用做此要求,只要重新傳送丟失的報文即可。
.....................(其實還有幾種協議,我這裡就不繼續說了)
3、擁塞控制
首先要明白擁塞控制與流量控制有什麼不同,流量控制考慮的是單純的傳送方與接收方,這兩個在全部網路過程中的兩個端點。而擁塞控制考慮的是整個網路。可以想象一下,在流量控制當中,接收方跟傳送方考慮的只是自己的報文有沒有傳送並且被接收的問題,假設現在網路阻塞,在超時重傳機制當中,傳送方沒有傳送後在計時器時間內沒有接收到確認報文,就立馬重新傳送報文,這時候對已經擁塞的網路來說,無異於雪上加霜。同樣實在擁塞的網路情況下,考慮下快速重傳機制,同樣是這個道理。所以,針對以上問題,tcp應該要有乙個擁塞控制機制,不然,後果不堪設想。
在擁塞控制機制當中,傳送方會維護乙個滑動傳送視窗,該視窗與擁塞控制視窗一般是一樣大的,除非受到物理限制,假設網路的承載量是無線的,那麼擁塞視窗理論上就可以無線增大,但受現在電腦技術限制,我們可能無法將傳送視窗與擁塞視窗變得一樣大。
下面說明下幾個符號說明:
cwnd:擁塞視窗大小
ssthreshold: 擁塞閾值 (該閾值是對網路狀況的乙個預估,決定在擁塞視窗多大的時候採取怎樣的策略,它的初始化一般是乙個估計,一般都會給出)
現在可以看下這個擁塞控制機制包括哪幾個策略
a、慢啟動
此時一般是(記住是一般情況)cwndb、擁塞避免
此時一般cwnd>ssthreshold,此時cwnd呈線性增長,32、33、34、35...這種增長趨勢
c、擁塞解決
此時一般是遇到了網路擁塞的狀況,解決方法是擁塞閾值乘性減即ssthreshold=cwnd/2,cwnd=1,或者ssthreshold=cwnd/2,cwnd=ssthreshold,這兩種情況在後面說明
d、快速恢復
一般是啟用擁塞結局策略之後,根據不同的情況,進入慢啟動或者擁塞避免階段。
下面我們模擬一下傳送方傳送報文:假設ssthreshold=8
首先肯定是慢啟動階段,cwnd增長,1、2、4、8,到8的時候,cwnd達到了ssthreshold的值,於是進入擁塞避免階段,cwnd繼續增長8、9、10,假設到10的時候,發生了網路擁塞,這時候擁塞分為兩種情況:
第一種,傳送方接收到同一序列號的報文的連續三個ack確認報文,說明出現了丟包,但是接收到接收方傳送的丟包訊號,說明網路情況還是相對較好的,於是此時傳送方做出反應,將ssthreshold=cwnd/2=5,cwnd=ssthreshold=5,然後進入擁塞避免階段,cwnd繼續以5、6、7....這種情況增長。
第二種,傳送方接收到同一序列號的報文連續兩個ack確認報文,這時候,就說明網路擁塞情況就比較嚴重了,連線收方傳送的丟包訊號都不完整了,這個時候得採取更加嚴厲的措施了,於是ssthreshold=cwnd/2,cwnd=1,然後重新進入慢啟動過程。
為什麼說TCP協議是可靠的
由於ip 資料報的 mtu 有長度限制,tcp報文段過大時,需要切割。切割之後傳送出去,由於網路鏈路的不確定性,接收端接收到包的次序和傳送次序很大概率是不一致的。接收端如何把接收到的 同一批 tcp報文段資料拼接成預期的二進位制資料?傳送方傳送了乙個tcp報文,怎麼樣確認接收方接收到了這個報文?傳送...
為什麼說TCP協議是可靠的?
我們都知道 ip 協議是 不太靠譜 因為 ip 協議是不可靠的,所以 ip 資料報可能在傳輸過程中發生錯誤或者丟失。這就意味著,tcp 協議不得不面對以下三個問題。1 每個資料報有可能傳送不成功 2 資料報在傳輸過程中有可能被丟棄 3 接收端有可能接受不到資料報 tcp 為了解決這丟包問題,提出兩個...
什麼是TCP的可靠傳輸
1 何為tcp的可靠性 tcp的可靠傳輸主要來自兩個方面 第一 tcp的可靠傳輸主要是說資料在物理介質中傳輸。比如網線,路由器,交換機等傳輸的時候,難免會受到其他物體的干擾造成資料bit產生翻轉,從而導致資料錯誤。乙個資料比如從北京傳送到深圳,中間會經歷無數個交換機,路由器等等,資料產生問題很正常,...