UDP和TCP 面試問題重點

2021-07-16 03:55:46 字數 3394 閱讀 1248

一、udp(使用者資料報協議)

其特點:

(1)udp是無連線

(2)udp使用盡最大努力交付,即不保證可靠性

(3)udp是面向報文的

(4)udp 沒有擁塞控制,所以即使網路出現擁塞,也不會使源主機的傳送速率降低。

(5)udp 支援一對

一、一對多、多對

一、多對多的互動通訊。

(6)udp的首部開銷小,只有8個位元組,比tcp20個位元組要短。

使用沒有擁塞控制功能的udp有可能會引起更嚴重的擁塞問題。

有時候需要保證udp的可靠性,應用程序可以在不影響應用的前提下,增加一些可靠性措施,如採用前向糾錯或重傳已丟失的報文。可以在應用層實現

應用層協議使用udp協議的有  dns(網域名稱系統)、tftp(簡單檔案傳送協議)、rip(路由資訊協議)、dhcp(動態主機配置協議)、snmp(簡單網路管理協議)、nfs(網路檔案系統)

二、tcp(傳輸控制協議)

1、其特點:

(1)tcp是面向連線的傳輸層協議

(2)tcp提供可靠的服務

(3)tcp是面向位元組流的

(4)tcp 提供雙全工通訊

(5)tcp 連線智慧型有兩個端點,即使點對點(一對一)

(6)tcp的首部開銷小,只有8個位元組,比tcp20個位元組要短。

應用層協議使用tcp協議的有 smtp(簡單郵件傳送協議)、telent(遠端終端協議)、http(超文字傳送協議)、ftp(檔案傳送協議)

2、tcp運輸連線管理

tcp的運輸連線包括三部分:連線建立、資料傳輸、連線釋放

tcp在連線時需要解決一下是哪個問題

(1)要使每一方能夠確知對方的存在

(2)要允許雙方協商一些引數(如最大視窗值、是否私用視窗擴**項和時間戳選項以及服務質量)

(3)要能夠對運輸實體資源進行分配(如快取大小、連線表中的專案)

tcp的連線建立   三次握手

b的tcp服務程序先建立傳輸控制模組tcb,準備接受客戶的連線請求。然後伺服器程序就處於listen狀態,等待客戶的連線請求。

第一次   a 的tcp客戶程序也是首先建立傳輸模組tcb,然後向b發出連線請求報文段,這時候首部的同步位syn=1,同時選擇乙個初始序號seq=x 。tcp 規定 syn段報文不帶資料,單要消耗乙個序號,同時客戶端進入syn-sent狀態

第二次   b 收到連線請求報文後,如果同意連線則向a傳送確認,在確認報文中把syn  ack都置1 ,確認號是ack=x+1 ,同時也為自己選擇乙個初始序號seq=y ,   同樣這個報文段不能攜帶資料,但是要消耗乙個序號,這時候伺服器進入syn-recd 狀態。

第三次    客戶端接受到伺服器的確認後,還要向伺服器再確認一次,確認報文段的ack=1 確認號為ack=y+1 ,序號為seq=x+1 ,這時候已經建立連線,客戶端進入established狀態,當伺服器接受到客戶端的確認後也進入established狀態

三次握手 最後客戶端在向伺服器確認的原因:為了防止已經失效的連線請求報文突然傳送到伺服器,因而產生錯誤。

失效的連線請求報文 是這樣產生的,考慮一種正常情況。a客戶端傳送的連線請求,單因連線請求報文丟失而未得到確認。於是a客戶端再次傳送連線請求,後來得到了確認,建立連線。資料傳輸完畢後就釋放連線。a客戶端工傳送了兩個連線請求的報文段,其中第乙個丟失,第二個到達伺服器,  沒有「已失效的連線請求報文段」

另外一種異常情況,即a客戶端傳送的第乙個連線請求報文段並沒有丟失,而是因為在網路某乙個節點長時間滯留了,以至於延誤到連線釋放以後的某個時間才到達伺服器,這本是乙個早已經失效的鏈結請求,但是伺服器接受到以後以為是a客戶端再次傳送的連線請求。於是想a傳送確認報文,同意建立連線,加入不採用三次握手的話,那麼只要b伺服器發出確認報文,新的連線就建立了。

由於a客戶端並沒有傳送連線請求,因此不會理睬伺服器的確認,也不會像伺服器傳送資料,但是伺服器卻以為新的連線已經建立,並一直等待a客戶端發來資料,b伺服器的許多資源就這樣浪費了。

採用三次握手就可以避免上述情況發生。列如剛才的情況,a客戶端不會傳送確認,伺服器就知道a並沒有要求建立連線。

3、tcp的連線釋放

tcp的了連線釋放採用四次握手,資料傳輸結束後雙方都處於established狀態

第一次 a客戶端向伺服器傳送釋放連線請求,並停止傳送資料,主動關閉tcp連線,a把連線釋放報文段首部的中止控制位置fin值1 ,其許好為seq=u 等於前面已經傳送過來的資料的最後乙個位元組的序號加1,這時候a進入fin-wait-1狀態,等待b的確認。

第二次 b伺服器收到連線釋放報文後即發出確認,確認號是ack=u+1 ,自己的序號為seq=v 等於b前面已經傳送過來的資料的最後乙個位元組的序號加1 ,這時候b伺服器進入closed-wait狀態(等待關閉狀態),這時候tcp處於半關閉狀態,即a沒有資料可傳送了,

單b要傳送資料a仍要接受,也就是說a到b的連線斷了,b到a的沒有,這個狀態可能會持續一段時間。

第三次  a收到b的確認後,就進入fin-wait-2狀態(終止等待2狀態)等待b傳送連線釋放報文段。若b沒有資料向a傳送了,則通知tcp釋放,發出的連線釋放報文段使fin=1 ,現在假定b的序號為w(在半關閉狀態b可能又傳送了一些資料)。b還必須傳送上次的確認號ack=u+1

這時候b就進入last-ack (最後確認)狀態,等待a的確認。

第四次  a 收到b的連線釋放報文後必須對此進行確認,在確認報文中把ack置1,確認號ack=w+1 ,而自己的序號為seq=w+1 ,然後a進入time-wait(時間等待)狀態。主意 此時tcp的連線沒有斷掉,必須經過時間等待器設定的時間2msl後,a才進入closed狀態

為什麼在time-wait 狀態必須等待2msl的時間?

第一 保證a傳送的最後乙個ack報文段能夠到達b伺服器。這個報文段有可能會丟失,處在last-ack狀態的b收不到a傳送的確認報文,b超時後會重傳這個fin+ack報文段,a就會在2msl時間內接受報文,重新傳送確認報文,重啟2msl計時器,最後a和b都進入closed狀態。

如果a 傳送確認後不等待一段時間就釋放連線的話,則確認報文丟失後,a就接受不到b重傳的fin+ack報文,因而也不會在傳送一次確認報文,這樣b就無法進入closed狀態

第二 防止已失效的連線請求報文段出現在本連線中,a在傳送完最後乙個ack報文後,再經過2msl後,就可以使本鏈結持續時間內所產生的所有報文段都從網路中消失。

面試總結,TCP和UDP分析

分類 linux系統 2012 10 21 20 28 520人閱讀收藏 舉報還有就是謝老師寫的 計算機網路 第五版,tcp ip詳解 卷一,卷二 以及 unix網路程式設計 以及linux源 之外,rfc 一 概念 key tcp是一種面向連線的 可靠的 位元組流服務 2.可靠性 tcp提供端到端...

It面試問題

一般第一輪技術面都是來考察你最基本的技術功底。招聘季節,隨處可見抱著厚厚的 程式設計師面試寶典 啃的學生。偶爾也能看見 程式設計之美 劍指offer 的神書。這些經驗書確實有用。但是要想全面的掌握筆試面試的基礎考點,還是需要完整的複習。其實,筆試面試對計算機基礎的考察是萬變不離其宗的。其考點無非分為...

TCP和UDP 2020面試必看

tcp協議是面向連線的通訊協議,即在傳輸資料前先在傳送端和接收端建立邏輯連線,然後再傳輸資料,它提供了兩台計算機之間可靠無差錯的資料傳輸。在tcp連線中必須要明確客戶端與伺服器端,由客戶端向服務端發出連線請求,每次連線的建立都需要經過 三次握手 第一次握手,客戶端向伺服器端發出連線請求,等待伺服器確...