TCP與UDP協議的比較

2021-08-04 07:48:03 字數 3601 閱讀 3409

1 udp的特點

udp提供不可靠的交付,但也有優點:

1) 傳送資料前不需要建立連線,減少開銷與傳送資料的延遲。

2) udp不使用擁塞控制,不保證交付,減少了複雜的連線狀態表,網路的擁塞不會使源主機的傳送速率降低。

3) 資料報首部位元組比tcp少,節約開銷。

所以udp適用於實時應用,網路擁塞時允許丟失一點資料。

2 tcp的特點

tcp是面向連線的運輸層協議,它提供雙工和可靠交付的服務。

tcp與udp的最大區別是:tcp是面向連線的,而udp是無連線的

tcp的的可靠性基於:

1) 基於確認請求機制的網路協議,經過確認的報文,可保證可靠性,最新發出的報文無法保證。

2) 保證資料按序到達。

3) 丟包重傳。

4) 經歷面向連線保證可靠性。

5) 進行流量控制。

6) 提供定時器(超時重傳定時器)。

7) 邏輯上實現網路擁塞。

3 對以上幾點的解釋

1) tcp的確認是對接收到的資料的最高序號(即收到的資料流中的最後乙個序號)表示確認。但接收端返回的確認號是己收到的資料的最高序號加1也就是說,確認號表示接收端期望下次收到的資料中的第乙個資料位元組的序號。

tcp傳輸的可靠是由於使用了序號和確認。當tcp傳送一報文段時,它同時也在自己的重傳佇列中存放乙個副本。若收到確認,則刪除此副本。若在計時器時間到之前沒有收到確認,則重傳此報文段的副本。tcp的確認並不保證資料己由應用層交付給了端使用者,而只是表明在接收端的tcp收到了對方所傳送的報文段。

2) 流量控制(點對點通訊的控制),tcp採用大小可變的滑動視窗進行流量控制。流量控制就是控制傳送端的資料,使得來得及接受。傳送端傳送大小大於接收端接收時,丟失。也就是我,接受端向告訴傳送端自己所能接收的位元組大小,傳送端可以分批傳送,但不可超過允許傳送端傳送資料的大小。

3) 擁塞控制,防止過多的資料注入到網路中,使網路中的路由器或鏈路不致過載。擁塞的產生:

當網路的吞吐量明顯地小於理想的吞吐量時,網路就進入了輕度擁塞的狀態。當提供的負載達到某一數值時,網路的吞吐量反而隨提供的負載的增大而下降,這時網路就進入了擁塞狀態。當提供的負載繼續增大到某一數值時,網路的吞吐量就下降到零,網路已無法工作。這就是所謂的死鎖。

擁塞控制方法:1> 慢開始:從小增大擁塞視窗控制(倍數增加)。 2> 擁塞避免:從小增大擁塞視窗控制(常數增加)

3> 快重傳:傳送端連續收到三個重複的ack,斷定分組丟失,此時重傳丟失的報文,不等待定時器的超時。 4> 快恢復:與快重傳配合使用。

4) tcp每傳送乙個報文段,就對這個報文段設定一次定時器,如果重傳時間到但沒收到確認,重傳這一報文。

4 tcp三次握手,四次揮手

tcp的flags的五中狀態:syn表示建立連線,fin表示關閉連線,ack表示響應,psh表示有 data資料傳輸,rst表示連線重置。

設客戶進執行在主機a中。它先向其tcp發出主動開啟命令,表明要向某個ip位址的某個端囗建立運輸連線。

主機a的tcp向主機b的tcp發出連線請求報文段,其首部中的同步位元syn應置為l,同時選擇乙個序號x,表明在後面傳送資料時的第乙個資料位元組的序號是x+1。

主機b的tcp收到連線請求報文段後,如同意,則發回確認。在確認報文段中應將syn和ack置為1,確認號應為x+1,同時也為自己選抒乙個序號y。

主機a的tcp收到此報文段後,還要向b給出確認,其ack置1,確認號為y+1。

執行客戶程序的主機a的tcp通知上層應用程序,連線已經建立(或開啟)。

當執行伺服器程序的主機b的tcp收到主機a的確認後.也通知其上層應用程序,連線己經建立。

揮手與此類似。

5 tcp與udp通訊協議程式

單程序**:

tcp_server

#include 

#include

#include

#include

#include

#include

#include

static

void useage(const

char* proc)

int startup(const

char* ip, int port)

struct sockaddr_in local;

local.sin_family = af_inet;

local.sin_port = htons(port);

local.sin_addr.s_addr = inet_addr(ip);

if(bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0)

if(listen(sock, 10) < 0)

return sock;

}int main(int argc, char *argv)

int sock = startup(argv[1], atoi(argv[2]));

while(1)

char buf[1024];

while(1)

else

if(s == 0)

else}}

return

0;}

tcp_client

#include 

#include

#include

#include

#include

#include

#include

static

void useage(const

char* proc)

int main(int argc, char *argv)

int sock = socket(af_inet, sock_stream,0);

if(sock < 0)

struct sockaddr_in peer;

peer.sin_family = af_inet;

peer.sin_port = htons(atoi(argv[2]));

peer.sin_addr.s_addr = inet_addr(argv[1]);

if(connect(sock, (struct sockaddr*)&peer, sizeof(peer)) < 0)

char buf[1024];

while(1)

else

if(_s == 0)

else}}

close(sock);

return

0;}

TCP協議與UDP協議

tcp協議,全稱傳輸控制協議,處在傳輸層之中,下層為網路層,上層為應用層。udp協議,全稱使用者資料報協議,所處位置與tcp相同。而談到傳輸層,則必須談到埠號,埠號的名稱可能沒有ip位址那麼響亮,但是它仍然非常重要,在tcp ip協議中,用 源ip 源埠號 目的ip 目的埠號 協議號 這樣乙個五元組...

TCP協議與UDP協議

1 提供ip環境下的資料可靠傳輸,有效流控,全雙工操作 資料在兩個方向上能同時傳遞 多路復用服務,是面向連線,端到端的傳輸 2 面向連線 正式通訊前必須要與對方建立連線。3 tcp支援的應用協議 telnet 遠端登入 ftp 檔案傳輸協議 smtp 簡單郵件傳輸協議 tcp用於傳輸資料量大,可靠性...

UDP與TCP的比較

趁週末有時間,看了會兒書,看到網路傳輸協議這塊,對udp與tcp這兩種資料傳輸協議有了一定的認識,因此記錄下來,下次有些遺忘的時候可以翻出來看看。udp是tcp的替代品,有時將它和ip一起稱為udp ip。和tcp一樣,udp也使用ip在計算機之間進行真正的資料報傳輸。然而,udp不提供將資訊分組,...