1. 程式人生 > >關於面試中的TCP和UDP怎麼用自己的話給面試官說

關於面試中的TCP和UDP怎麼用自己的話給面試官說

        從春招也就是2.19開始面試,到現在的9.27簽了騰訊三方,終於可以休息下了,也算是對自己15年的讀書生涯有了一個交代。這一篇的話我就講講如何給面試官說TCP和UDP,而且也會讓面試官感覺你對這一塊有自己的理解,而不是直接背網上的TCP和UDP的區別,希望對大家有所幫助。

   一般面試官都會問TCP和UDP的區別,這個很好回答啊,TCP面向連線,可靠,基於位元組流,而UDP不面向連線,不可靠,基於資料報。對於連線而言呢,其實真正的就不存在,TCP面向連線只不過三次握手在客戶端和服務端之間初始化好了序列號。只要滿足TCP的四元組+序列號,那客戶端和服務端之間傳送的訊息就有效,可以正常接收。雖然說TCP可靠,但是可靠的背後卻是lol無盡之刃的複雜和痛苦,滑動視窗,擁塞避免,四個超時定時器,還有什麼慢啟動啊,快恢復,快重傳啊這裡推薦大家看看(圖解TCP/IP,這個簡單容易,TCP卷123,大量的文字描述真是煩),所以什麼都是相對呢,可靠性的實現也讓TCP變的複雜,在網路的狀況很差的時候,TCP的優勢會變成。基於位元組流什麼意思呢?

一句話就可以說明白,對於讀寫沒有相對應的次數。UDP基於資料報就是每對應一個發,就要對應一個收。而TCP無所謂啊,現在應該懂了吧。對於UDP而言,不面向連線,不可靠,沒有三次握手,我給你傳送資料之前,不需要知道你在不在,不要你的同意,我只管把資料傳送出去至於你收到不收到,從來和我沒有半毛錢的關係。

   對於可靠不可靠而言,沒有絕對的說法,TCP可靠僅僅是在傳輸層實現了可靠,我也可以讓UDP可靠啊,那麼就要向上封裝,在應該層實現可靠性。因此很多公司都不是直接用TCP和UDP,都是經過封裝,滿足業務的需要而已。說到這裡的話,那就在提一下心跳包,在linux下有keep-alive系統自帶的,但是預設時間很長,如果讓想使用話可以setsockopt設定,我也可以在應用層實現一個簡單心跳包,上次自己多開了一個執行緒來處理,還是包頭解決。


   上面解釋完這個之後面試官可能問,那什麼時候用TCP,什麼時候用UDP呢?就是問應用場景,所以簡歷上的知識點自己應該提前做好準備應用場景,知識就是要用在顯示場景中,廢話真多。不管用TCP和UDP,應用只要看需求,對於TCP更加註重的是可靠性,而不是實時性,如果我傳送的資料很重要一點也不能出錯,有延遲無所謂的話,那就TCP啊。UDP更加註重是速度快,也就是實時性,對於可靠性要求不那麼高,所以像鬥魚,熊貓這些線上直播網站應該在UDP基礎是封裝了其他協議,比如視訊實時傳輸協議。而且UDP的支援多播,那就很符合這些直播網站了,有時候看直播視訊卡頓,人飄逸那可能就是丟包了,但是你也只能往下看。

   最後的話上圖,給一波福利。

  


   

如果以上有什麼問題,歡迎指正,很希望技術交流。