TCP和UDP知識點總結

UDP是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,其是面向報文的。

UDP報文格式:


1)源端口:源端口號。在需要對方回信時選用。不需要時可用全0。
2)目的端口:目的端口號。這在終點交付報文時必須要使用到。
3)長度: UDP用戶數據報的長度,其最小值是8(僅有首部)。
4)校驗和:檢測UDP用戶數據報在傳輸中是否有錯。有錯就丟棄。




TCP(Transmission Control Protocol)傳輸控制協議是一種面向連接的、可靠的、基於字節流的傳輸層協議。

TCP報文格式:



1、端口號:用來標識同一臺計算機的不同的應用進程。
1)源端口:源端口和IP地址的作用是標識報文的返回地址。
2)目的端口:端口指明接收方計算機上的應用程序接口。
TCP報頭中的源端口號和目的端口號同IP數據報中的源IP與目的IP唯一確定一條TCP連接。

2、序號和確認號:是TCP可靠傳輸的關鍵部分。
序號是本報文段發送的數據組的第一個字節的序號。在TCP傳送的流中,每一個字節一個序號。e.g.一個報文段的序號爲300,此報文段數據部分共有100字節,則下一個報文段的序號爲400。所以序號確保了TCP傳輸的有序性。
確認號,即ACK,指明下一個期待收到的字節序號,表明該序號之前的所有數據已經正確無誤的收到。確認號只有當ACK標誌爲1時纔有效。比如建立連接時,SYN報文的ACK標誌位爲0。

3、數據偏移/首部長度:4bits。由於首部可能含有可選項內容,因此TCP報頭的長度是不確定的,報頭不包含任何任選字段則長度爲20字節,4位首部長度字段所能表示的最大值爲1111,轉化爲10進製爲15,15*32/8 = 60,故報頭最大長度爲60字節。首部長度也叫數據偏移,是因爲首部長度實際上指示了數據區在報文段中的起始偏移值。

4、保留:爲將來定義新的用途保留,現在一般置0。

5、控制位:URG  ACK  PSH  RST  SYN  FIN,共6個,每一個標誌位表示一個控制功能。
1)URG:緊急指針標誌,爲1時表示緊急指針有效,爲0則忽略緊急指針。
2)ACK:確認序號標誌,爲1時表示確認號有效,爲0表示報文中不含確認信息,忽略確認號字段。
3)PSH:push標誌,爲1表示是帶有push標誌的數據,指示接收方在接收到該報文段以後,應儘快將這個報文段交給應用程序,而不是在緩衝區排隊。
4)RST:重置連接標誌,用於重置由於主機崩潰或其他原因而出現錯誤的連接。或者用於拒絕非法的報文段和拒絕連接請求。
5)SYN:同步序號,用於建立連接過程,在連接請求中,SYN=1和ACK=0表示該數據段沒有使用捎帶的確認域,而連接應答捎帶一個確認,即SYN=1和ACK=1。
6)FIN:finish標誌,用於釋放連接,爲1時表示發送方已經沒有數據發送了,即關閉本方數據流。

6、窗口:滑動窗口大小,用來告知發送端接受端的緩存大小,以此控制發送端發送數據的速率,從而達到流量控制。窗口大小爲一個16bit字段,因而窗口大小最大爲65535。

7、校驗和:奇偶校驗,此校驗和是對整個的 TCP 報文段,包括 TCP 頭部和 TCP 數據,以 16 位字進行計算所得。由發送端計算和存儲,並由接收端進行驗證。

8、緊急指針:只有當 URG 標誌置 1 時緊急指針纔有效。緊急指針是一個正的偏移量,和順序號字段中的值相加表示緊急數據最後一個字節的序號。 TCP 的緊急方式是發送端向另一端發送緊急數據的一種方式。

9、選項和填充:最常見的可選字段是最長報文大小,又稱爲MSS(Maximum Segment Size),每個連接方通常都在通信的第一個報文段(爲建立連接而設置SYN標誌爲1的那個段)中指明這個選項,它表示本端所能接受的最大報文段的長度。選項長度不一定是32位的整數倍,所以要加填充位,即在這個字段中加入額外的零,以保證TCP頭是32的整數倍。

10、數據部分: TCP 報文段中的數據部分是可選的。在一個連接建立和一個連接終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多情況中,也會發送不帶任何數據的報文段。


TCP連接的三次握手和斷開連接的四次揮手

TCP連接
建立TCP連接中,最關鍵的地方就是TCP建立連接時三次握手,當然TCP協議中斷開連接設計到的四次揮手也很重要,但斷開連接是後話了。

三次握手示意圖



簡述三次握手

第一次握手
client發送一個SYN(J)包給server,然後等待server的ACK回覆,進入SYN-SENT狀態。p.s: SYN爲synchronize的縮寫,ACK爲acknowledgment的縮寫。

第二次握手
server接收到SYN(seq=J)包後就返回一個ACK(J+1)包以及一個自己的**SYN(K)**包,然後等待client的ACK回覆,server進入SYN-RECIVED狀態。

第三次握手
client接收到server發回的ACK(J+1)包後,進入ESTABLISHED狀態。然後根據server發來的SYN(K)包,返回給等待中的server一個ACK(K+1)包。等待中的server收到ACK回覆,也把自己的狀態設置爲ESTABLISHED。到此TCP三次握手完成,client與server可以正常進行通信了。


爲什麼要進行三次握手

謝希仁版《計算機網絡》中的例子是這樣的,“已失效的連接請求報文段”的產生在這樣一種情況下:client發出的第一個連接請求報文段並沒有丟失,而是在某個網絡結點長時間的滯留了,以致延誤到連接釋放以後的某個時間纔到達server。本來這是一個早已失效的報文段。但server收到此失效的連接請求報文段後,就誤認爲是client再次發出的一個新的連接請求。於是就向client發出確認報文段,同意建立連接。假設不採用“三次握手”,那麼只要server發出確認,新的連接就建立了。由於現在client並沒有發出建立連接的請求,因此不會理睬server的確認,也不會向server發送數據。但server卻以爲新的運輸連接已經建立,並一直等待client發來數據。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛纔那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連接。”




連接結束
這次過程中,最重要的是TCP連接斷開的四次揮手。




第一次揮手
client發送一個FIN(M)包,此時client進入FIN-WAIT-1狀態,這表明client已經沒有數據要發送了。

第二次揮手
server收到了client發來的FIN(M)包後,向client發回一個ACK(M+1)包,此時server進入CLOSE-WAIT狀態,client進入FIN-WAIT-2狀態。

第三次揮手
server向client發送FIN(N)包,請求關閉連接,同時server進入LAST-ACK狀態。

第四次揮手
client收到server發送的FIN(N)包,進入TIME-WAIT狀態。向server發送**ACK(N+1)**包,server收到client的ACK(N+1)包以後,進入CLOSE狀態;client等待一段時間還沒有得到回覆後判斷server已正式關閉,進入CLOSE狀態。


爲什麼TCP斷開連接是四次揮手
TCP有個半關閉狀態,假設A.B要釋放連接,那麼A發送一個釋放連接報文給B,B收到後發送確認,這個時候A不發數據,但是B如果發數據A還是要接受,這叫半關閉。也就是,第二次揮手後,進入半關閉狀態。這時候server還可以向client發送數據,所以如果要完全斷開連接,那麼server需要再向client發送關閉連接的請求。因此就有後面兩次揮手。




TCP和UDP面試常問知識點總結

UDP的優缺點
優點:①傳輸速率快。傳輸數據前,不需要像TCP一樣建立連接。傳輸數據時,沒有確認、窗口、重傳、擁塞控制等機制
②更安全。沒有了TCP的一些機制,被攻擊者利用的漏洞就少了。
缺點:不可靠,不穩定。沒有類似TCP的機制,在網絡情況不好時,可能會有數據丟失。

TCP優缺點
優點①可靠,穩定。傳遞數據前,會有三次握手建立連接。傳遞數據時,有確認、窗口、重傳、擁塞控制。傳遞數據後,會斷開連接節省系統資源。
缺點:①傳輸慢,效率低,佔用系統資源高。傳遞數據前,建立連接需要耗時。傳遞數據時,確認、重傳、擁塞等會消耗大量時間以及CPU和內存等硬件資源
②易被攻擊。因爲有確認機制,三次握手等機制,容易被人利用,實現DOS 、DDOS攻擊。


TCP如何保證接收的順序性
TCP協議使用SEQ和ACK機制保證了順序性 TCP的每個報文都是有序號的。確認應答信號ACK=收到的SEQ+1。


爲什麼UDP比TCP傳輸更快
TCP需要三次握手
TCP有擁塞控制,流量控制等機制


爲什麼TCP比UDP可靠
TCP是面向有連接的,建立連接之後才發送數據;而UDP則不管對方存不存在都會發送數據。
TCP有確認機制,接收端每收到一個正確包都會迴應給發送端。超時或者數據包不完整的話發送端會重傳。UDP沒有。因此可能丟包。


什麼時候使用TCP
當對網絡通訊質量有要求的時候,比如:整個數據要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件傳輸。

什麼時候使用UDP
當對網絡通訊質量要求不高的時候,要求網絡通訊速度能儘量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視頻 TFTP。


TCP無邊界
客戶端分多次發送數據給服務器,若服務器的緩衝區夠大,那麼服務器端會在客戶端發送完之後一次性接收過來,所以是無邊界的。


UDP有邊界
客戶端每發送一次,服務器端就會接收一次,也就是說發送多少次就會接收多少次,因此是有邊界的。




參考:

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