當面試被問到到TCP/UDP

相信絕大部分的都能回到出來

1、TCP面向連接,UDP面向無連接。
2、TCP是可靠的,UDP不可靠。
3、TCP面向字節流的,UDP面向數據報。
4、TCP保證順序,UDP不保證順序
5、TCP保證正確性,UDP可能丟包

回到到這裏,在面試官來看已經暴露給他太多的問題點了。
什麼是面向連接?
TCP爲什麼可靠?(保證順序性和不丟包是可靠性的具體體現了)

問題一 什麼是面向連接?
這裏的回答點就是三次握手機制。UDP在發送數據報文的時候不需要建立連接直接發送。TCP建立連接之前必須經歷三次握手,主要目的讓對方知道相互的初始序號值,如果是兩次握手只能確認發起方的序列號值被對方接受到。

問題二 TCP爲什麼是可靠?
這個問題可以進行拆分,可靠性的表現爲累計確認、流量控制和擁塞控制。

累計確認: 發送方會有一個發送的緩存,當收到響應方的ACK之後將緩存裏面的數據清掉。例如C向S發送四條數據 M1 、M2、M3、M4,其中M1和M2已經發送並且也收到ACK迴應,此時C的緩存裏將會清空M1和M2數據,S端 M3數據丟失,M4正常收到,此時S端不會發送M4這個數據包的ACK,而是等待M3數據RTO時間超時重傳(超時重試即對每一個發送的消息都會給出一個超時時間,如果在這個時間段之內仍未收到ACK回覆,則觸發重試),當然RTO時長會被重新計算,使其等待時間更長。等M3數據收到之後,M3和M4一起發送ACK給C端,這就是累計確認。可以看出這解決了包的丟失問題和亂序的問題。

由於等待的時間間隔比較長,可以採用一個快速確認方案,連續發三個M2的ACK,發送端則會重新發M3消息。

流量控制
發送端發送數據會收到接收端ACK的迴應,裏面就會帶接收端窗口的大小,表示接受端最大能接收的數據量,發送端可以根據自己實際情況來對數據發送的流量進行控制(例如超出接受端窗口的數據不發送)。針對的是端到端的。解決的問題是接收端沒有足夠的接收空間從而導致丟包問題。

擁塞控制
阻塞控制是針對網絡上的,慢增長,首先擁塞窗口的大小設置位1,如果能夠收到數據第二次窗口大小增加到2,第三次仍能收到數據窗口大小增加到4,第四次仍能收到ACK數據此時可以設置窗口大小爲8,之後緩慢增長,進入擁塞算法,每一次窗口大小增加1,一直到發生丟包,此時擁塞窗口的閥值設爲當前的一般,擁塞窗口設置爲1。重複上面的操作。
擁塞控制主要是爲了控制發送的數據太快,網絡處理不及時而導致的丟包。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章