1. 程式人生 > >UDP和TCP 面試問題重點

UDP和TCP 面試問題重點

一、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後,就可以使本連結持續時間內所產生的所有報文段都從網路中消失。
 

相關推薦

UDPTCP 面試問題重點

一、UDP(使用者資料報協議)其特點: (1)UDP是無連線 (2)UDP使用盡最大努力交付,即不保證可靠性 (3)UDP是面向報文的 (4)UDP 沒有擁塞控制,所以即使網路出現擁塞,也不會使源主機的傳送速率降低。 (5)UDP 支援一對一、一對多、多對一、多對多的互動通

DNS分別在什麽情況下使用UDPTCP

分享 pos 發現 主域名 全部 prim data font tex DNS同一時候占用UDP和TCPport53是公認的,這樣的單個應用協議同一時候使用兩種傳輸協議的情況在TCP/IP棧也算是個另類。但非常少有人知道DNS分別在什麽情況下使用這

【iOS與EV3混合機器人編程系列之四】iOS_WiFi_EV3_Library 剖析之中的一個:WiFi UDPTCP

microsoft bsp lte lib async stop contex pop 分析 在上一篇文章中。我們通過編寫EV3 Port Viewer項目實現了iOS監測EV3的實時端口數據。程序最核心的部分就是我們的開源碼庫iOS_WiFi_EV3_Library。

UDPTCP的差異

ima 數據 而且 傳遞數據 通訊 情況下 bubuko 訪問 分享圖片 UDP和TCP傳遞數據的差異類似於電話和明信片之間的差異。  TCP就像電話,必須先驗證目標是否可以訪問後才開始通訊。  UDP就像明信片,信息量很小而且每次傳遞成功的可能性很高,但是不能完全保證傳遞

UDP TCP特點理解

報文 發展 數據 運輸層協議 目的 努力 什麽 大於 檢驗 UDP TCP 1 無連接的運輸層協議 面向連接的運輸層協議 2 支持一對一、一對多、多對一的交互通信 每條TCP連接只有點對點的即一對一通信 3 盡

java的UDPTCP詳解北京-賽車平臺出租源碼分析

ati 消息 byte ide 一段 pack catch 打包 println 1、需求分析北京-賽車平臺出租Q1446595067 最近在和硬件做網口的傳輸協議,一開始告訴我說用TCP的socket進行傳輸,我說沒問題,就寫了個socket的發送和接收方法。but過了沒

UDPTCP介紹

1、TCP與UDP區別總結: 1、TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線 2、TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付 Tcp通過校驗和,重

(3)傳輸層UDPTCP協議

傳輸層UDP和TCP協議 簡介 兩個主機進行通訊實際上就是兩個主機中的應用程序互相通訊。 應用程序之間的通訊又稱為端到端的通訊。 網路層是為主機之間提供邏輯通訊,而傳輸層為應用程序之間提供端到端的邏輯通訊。傳輸層還要對收到的報文進行差錯檢測。 傳輸層需要有兩種不同的傳輸協

基於 Socket 的 UDP TCP 程式設計介紹

一、概述 TCP(傳輸控制協議)和UDP(使用者資料報協議是網路體系結構TCP/IP模型中傳輸層一層中的兩個不同的通訊協議。 TCP:傳輸控制協議,一種面向連線的協議,給使用者程序提供可靠的全雙工的位元組流,TCP套介面是位元組流套介面(stream socket)

第五章 運輸層(UDPTCP三次握手,四次揮手分析)

    序言         通過這章,可以知道其實三次握手和四次揮手其實真的好簡單,通過這章的學習,我相信你也會同樣的認為,以後在也不需要聽到別人問三次握手的過程而自己一臉懵逼了,覺得人家好屌,其實也就是他懂你不懂,僅此而已,不懂就去學。學了你就會覺得其實也就那樣,沒有什麼厲害的,這讓我回想以前剛學習程式設

Android程式設計師必知必會的網路通訊傳輸層協議——UDPTCP

1、點評 網際網路發展至今已經高度發達,而對於網際網路應用(尤其即時通訊技術這一塊)的開發者來說,網路程式設計是基礎中的基礎,只有更好地理解相關基礎知識,對於應用層的開發才能做到遊刃有餘。 對於Android程式設計師來說,如果您覺得本文內容稍顯枯燥,可以看看即時通訊網之前整理過的一篇類似文

網路傳輸協議(UDPTCP的一些理解)

網路通訊 UDP 1.1 網路通訊的概念 兩臺機器進行通訊 1.2 ip地址 1.1 什麼是地址 飛秋通訊能夠準確的給想要的人傳送訊息每個人都有一個唯一的ip地址 ip地址:目的用來標記網路上的一臺電腦 1.2 ip地址的作用

基於Socket的UDPTCP程式設計介紹

main(){     int sock_fd,client_fd; /*sock_fd:監聽socket;client_fd:資料傳輸socket */     struct sockaddr_in ser_addr; /* 本機地址資訊 */     struct sockaddr_in cli_a

用vlc搭建簡單流媒體伺服器(UDPTCP方式)

這段時間用到了流媒體資料傳輸的TCP和UDP方式,感覺vlc可以做這方面的demo,這裡總結下,也方便我以後查閱。 簡介 VLC不僅僅是個播放器,也可以作為流媒體伺服器使用。這個網上有相關的資料,我就不多說了。 宣告下本文用的VLC版本:2.0.3 用VLC搭建基於UDP的流媒體伺服器 流媒體伺服器大

RTSP請求詳解及RTP 基於UDPTCP協議傳輸資料的對比

最近一段時間一直在研究rtsp和rtp,現在寫部落格總結一下,也是對知識的一種鞏固吧。 下面是我用VLC播放器獲取海康NVR視訊的截圖(此次獲取是基於TCP的): 下面來看一下針對每一條訊息的詳細截圖: 客戶端傳送的OPTION訊息: 伺服器對OPTION回覆的200

用vlc搭建簡單流媒體伺服器(UDPTCP方式)-轉 rtsp很慢才能顯示

這段時間用到了流媒體資料傳輸的TCP和UDP方式,感覺vlc可以做這方面的demo,這裡總結下,也方便我以後查閱。 簡介 VLC不僅僅是個播放器,也可以作為流媒體伺服器使用。這個網上有相關的資料,我就不多說了。 宣告下本文用的VLC版本:2.0.3 用VLC搭建基於UDP的流媒體伺服器 流媒體伺服

記一次基於LR的UDPTCP效能測試

背景   最近專案要做效能測試,要出要一份效能報告,讓我出一個有關Tcp和Udp的功能模組的測試,流程大概是這樣,先走TCP協議協商一下會話,協商成功後走Udp收發資料。      有點簡單啊,自己寫個功能模組測一下,然後把結果展示出來就ok了。   然而想法很美好,現實有點殘酷。idea瞬間被pas

前端面試重點難點透析--TCP協議的三次握手四次分手

一.什麼是TCP 要了解TCP協議的三次握手和四次分手我們先來簡單介紹下TCP是什麼,TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線(連線導向)的、可靠的、 基於IP的傳輸層協議。TCP在IP報文的協議號是6。TCP是一個超級麻煩的協議,而它又是

TCPUDPHTTP

ng- net 可靠性 itl 簡單的 spa 圖片 版本號 mage 先來一個講TCP、UDP和HTTP關系的 1、TCP/IP是個協議組,可分為三個層次:網絡層、傳輸層和應用層。 在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層

第二章 傳輸層:TCPUDPSCTP

發送 主機 溢出 封裝 首部 序列號 設計 sig 錯誤 //1. IPv4 : 網際協議版本4。使用32位地址。IPv4給TCP、UDP、SCTP、ICMP、IGMP提供分組遞送服務。 IPv6 : 網際協議版本6。使用128位地址。IPv6給TCP、UDP、SCTP、