TCP和UDP的對比
1.面向連接可靠 / 無連接的不可靠
2.面向字節(jié)流的晚唇,無邊界的巫财,每次發(fā)送后可以分包發(fā)送,最后進(jìn)行數(shù)據(jù)合并(透明的保證了數(shù)據(jù)的依次哩陕,可靠) / 面向報文的翁涤,有邊界的桥言,每次發(fā)送一個報文,不能合并(效率更高但是需要自己保證數(shù)據(jù)的依次可靠)
3.有流量控制和擁塞控制 / 無
4.全雙工 / 一對一葵礼,一對多号阿,多對一,多對多
5.慢 / 快
TCP的慢啟動
由于TCP連接會隨著時間進(jìn)行自我調(diào)諧鸳粉,起初會限制連接的最大速度扔涧,如果數(shù)據(jù)傳輸成功,會隨著時間的推移提高傳輸速度届谈,這就是TCP的慢啟動枯夜,所以http性能的優(yōu)化關(guān)鍵并不在于高帶寬而是低延遲,多路復(fù)用就是讓所有的數(shù)據(jù)流通用一個TCP連接艰山,讓高帶寬真正的服務(wù)于http性能的提升湖雹。2.0中解決了這個問題。
HTTP Pipelining其實是把多個HTTP請求放到一個TCP連接中一一發(fā)送曙搬,而在發(fā)送過程中不需要等待服務(wù)器對前一個請求的響應(yīng)摔吏;只不過,客戶端還是要按照發(fā)送請求的順序來接收響應(yīng)纵装!而在2.0中通過二進(jìn)制流標(biāo)識而不需要按照順序來接受響應(yīng)
https://www.ucloud.cn/yun/76567.html
TCP的擁塞機(jī)制
更多:https://www.cnblogs.com/liangyc/p/11628757.html
1征讲、慢開始:設(shè)置一個“擁塞窗口cwnd”,該變量和接受窗口共同決定了發(fā)送者的發(fā)送窗口橡娄,開始從1開始指數(shù)2遞增诗箍,當(dāng)達(dá)到了設(shè)置的“慢開始門限ssthresh”,則可以根據(jù)情況來執(zhí)行擁塞避免算法——每次經(jīng)過一個往返時間RTT就給擁塞窗口+1挽唉,線性增長
2滤祖、快重傳,快恢復(fù):
每次發(fā)出一個包都設(shè)置一個定時器瓶籽,在定時器結(jié)束還沒有收到確認(rèn)則表示該包丟失氨距,需要進(jìn)行重傳,當(dāng)然定時器是后置的手段棘劣,快重傳是當(dāng)發(fā)送方收到了三個一樣的確認(rèn)俏让,就知道該包出現(xiàn)了錯誤,立即重傳該包茬暇,這時也會設(shè)置一個重傳定時器首昔,如果收到確認(rèn)則執(zhí)行擁塞避免算法(此時執(zhí)行快恢復(fù),慢開始門限減半糙俗,cwnd設(shè)置為此時的門限值勒奇,高起點,線性增長)巧骚,如果仍然超時則執(zhí)行慢開始算法(慢開始門限設(shè)置為原來的一半赊颠,將cwnd設(shè)置為1格二,執(zhí)行慢開始算法,低起點竣蹦,指數(shù)增長))
超時重傳是TCP協(xié)議保證數(shù)據(jù)可靠性的一個重要機(jī)制顶猜,其原理是在發(fā)送一個數(shù)據(jù)以后就開啟一個計時器RTO,在一定時間內(nèi)如果沒有得到發(fā)送數(shù)據(jù)報的ACK報文痘括,那么就重新發(fā)送數(shù)據(jù)长窄,直到發(fā)送成功為止。這是數(shù)據(jù)包丟失的情況下給出的一種修補(bǔ)機(jī)制纲菌。一般來說挠日,重傳發(fā)生在超時之后,但是如果發(fā)送端接收到3個以上的重復(fù)ACK翰舌,就應(yīng)該意識到嚣潜,數(shù)據(jù)丟了,需要重新傳遞椅贱。這個機(jī)制不需要等到重傳定時器溢出懂算,所以叫做快速重傳,而快速重傳以后夜涕,因為走的不是慢啟動而是擁塞避免算法,所以這又叫做快速恢復(fù)算法属愤。
- 收到三個重復(fù)的ACK是因為數(shù)據(jù)是傳遞是按序的女器,如果M1之后的M2丟失,服務(wù)端接受到M3M4M5都會返回M2的ACK
快速重傳和快速恢復(fù)旨在:快速恢復(fù)丟失的數(shù)據(jù)包住诸。沒有快速重傳和快速恢復(fù)驾胆,TCP將會使用定時器來要求傳輸暫停。在暫停這段時間內(nèi)贱呐,沒有新的數(shù)據(jù)包被發(fā)送
TCP滑動窗口
滑動窗口進(jìn)行流量控制丧诺,為了數(shù)據(jù)的不丟失,平衡不同設(shè)備之間的性能奄薇,需要接受方告知發(fā)送端它所擁有的緩存區(qū)大小驳阎,發(fā)送方根據(jù)這個數(shù)據(jù)來計算自己最多能發(fā)送的數(shù)據(jù)量,A發(fā)給B馁蒂,為了防止B窗口的反饋信息空間rwnd丟失呵晚,會造成死鎖,為了處理這種情況給A設(shè)置一個定時器沫屡,當(dāng)時間到了則發(fā)送一個1字節(jié)的探測報文饵隙。