一、tcp和udp區別
UDP | TCP | |
---|---|---|
是否連接 | 無連接 | 面向連接 |
是否可靠 | 不可靠傳輸,不使用流量控制和擁塞控制 | 可靠傳輸,使用流量控制和擁塞控制 |
連接對象個數 | 支持一對一,一對多,多對一和多對多交互通信 | 只能是一對一通信 |
傳輸方式 | 面向報文 | 面向字節流 |
首部開銷 | 首部開銷小,僅8字節 | 首部最小20字節,最大60字節 |
適用場景 | 適用於實時應用(IP電話、視頻會議、直播等) | 適用於要求可靠傳輸的應用,例如文件傳輸 |
二、tcp安全可靠的實現基礎
1、停止等待協議:是tcp傳輸可靠的重要途經,意思就是再發送一個分組之后,必須等待對方確認之后才能發送下一個分組,優點是簡單,缺點是信道利用率太低,一次只能發送一個消息,信道大部分事件都是空閑的。
2、超時重傳三種情況:
(1)、分組丟失:發送方已經發送分組,接收方沒有收到;
(2)、確認丟失:接收方收到分組,發送確認分組,但確認分組丟失;
(3)、確認延時:確認分組沒有丟失,由於傳輸太慢,發送方在規定時間內沒有收到接收方發的確認分組;
3.下面兩個協議就是解決信道效率太低和增大吞吐量,以及流量控制:
1)連續ARQ協議:它是指發送方維護着一個窗口,這個窗口中不止有一個分組,而是有好幾個分組。窗口的大小是由接收方返回的win值決定的。所以窗口大小 是動態變化的。只要在窗口中的分組都可以被發送,這就使得TCP一次不是只發送一個分組了。從而大大提高了信道利用率。並且它采用累積確認的方式,對於按序到達的最后一個分組進行確認。
2)滑動窗口協議:因為窗口不斷往前走。該協議允許發送方在停止並等待確認前發送多個數據分組。不需要每發送一個就分組就停下來等待確認。所以可以加速數據的傳輸,還可以控制流量。
3)累積確認:如果發送方發送了5個分組,接收端只收到了1 2 4 5 ,沒有收到3,那么我的確認信息會是說明我期望下一個收到的組是第三個,此時發送方會將3 4 5都重發一遍。
比如上面的例子,應該是右邊發送數據給左邊。左邊進行確認。窗口往右移動。
接收方通告的窗口稱為提出的窗口(offered window):上面的4 – 9
說明接收方已經收到了3字節的數據,且通告窗口大小為6.
當接收方確認數據后,這個滑動窗口不斷的向右移動。下面用三個術語來描述窗口左右邊沿的運動:
1) 稱窗口左邊沿向右邊沿靠近為窗口合攏。這種現象發生在數據被發送和確認時。
2) 當窗口右邊沿向右移動時將允許發送更多的數據,我們稱之為窗口張開。這種現象發生在另一端的接收進程讀取已經確認的數據,並釋放了TCP的接收緩存時。(就是接收方讀取了緩沖區里面的數據的時候)
3) 當右邊沿向左移動,稱為窗口收縮。
如果左邊沿到達右邊沿,則稱其為一個零窗口。此時發送方不能發送任何數據。