TCP和UDP的區別和優缺點

2021-10-25 06:30:29 字數 3107 閱讀 5453

1、 tcp面向連線 (如打**要先撥號建立連線); udp是無連線 的,即傳送資料之前不需要建立連線

2、tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達;udp盡最大努力交付,即不保證可靠交付

tcp通過校驗和,重傳控制,序號標識,滑動視窗、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。

3、udp具有較好的實時性,工作效率比tcp高,適用於對高速傳輸和實時性有較高的通訊或廣播通訊。

4.每一條tcp連線只能是點到點的;udp支援一對一,一對多,多對一和多對多的互動通訊

5、tcp對系統資源要求較多,udp對系統資源要求較少。

udp以其簡單、傳輸快的優勢,在越來越多場景下取代了tcp,如實時遊戲。

(1)網速的提公升給udp的穩定性提供可靠網路保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。

(2)tcp為了實現網路通訊的可靠性,使用了複雜的擁塞控制演算法,建立了繁瑣的握手過程,由於tcp內建的系統協議棧中,極難對其進行改進。

採用tcp,一旦發生丟包,tcp會將後續的包快取起來,等前面的包重傳並接收到後再繼續傳送,延時會越來越大,基於udp對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網路問題對遊戲性造成影響。

tcp:

tcp程式設計的伺服器端一般步驟是: 

1、建立乙個socket,用函式socket();     socket socketlisten =socket(af_inet,sock_stream, ipproto_tcp);

2、設定socket屬性,用函式setsockopt(); * 可選 

3、繫結ip位址、埠等資訊到socket上,用函式bind(); socket_error = bind(socketlisten,(const sockaddr*)&addr,sizeof(addr))

4、開啟監聽,用函式listen();                 socket_error == listen(socketlisten,2)

5、接收客戶端上來的連線,用函式accept();    socket socketwaiter = accept(socketlisten,

_out_    struct sockaddr *addr

tcp程式設計的客戶端一般步驟是: 

1、建立乙個socket,用函式socket(); 

2、設定socket屬性,用函式setsockopt();* 可選 

3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選 

4、設定要連線的對方的ip位址和埠等屬性; 

5、連線伺服器,用函式connect(); 

6、收發資料,用函式send()和recv(),或者read()和write(); 

7、關閉網路連線;

int send(

_in_  socket s, //向哪個socket傳送,accept返回的socket。

_in_  const char *buf,

_in_  int len,

_in_  int flags

); 由於

send(socketclient,(const char *)&fh,sizeof(fh),0); 

recv(socketclient,szbuf,sizeof(szbuf),0);

udp:

與之對應的udp程式設計步驟要簡單許多,分別如下: 

udp程式設計的伺服器端一般步驟是: 

1、建立乙個socket,用函式socket(); 

2、設定socket屬性,用函式setsockopt();* 可選 

3、繫結ip位址、埠等資訊到socket上,用函式bind(); 

4、迴圈接收資料,用函式recvfrom(); 

5、關閉網路連線; 

udp程式設計的客戶端一般步驟是: 

1、建立乙個socket,用函式socket(); 

2、設定socket屬性,用函式setsockopt();* 可選 

3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選 

4、設定對方的ip位址和埠等屬性; 

5、傳送資料,用函式sendto(); 

6、關閉網路連線;

int recvfrom(

_in_         socket s, //繫結的socket

_out_        char *buf,

_in_         int len,

_in_         int flags,

_out_        struct sockaddr *from, //用來接收對方的

_inout_opt_  int *fromlen

);

int nres= recvfrom (pthis->m_socketlisten,szbuf,sizeof(szbuf),0,(sockaddr*)&addrclient,&nsize);//0處標誌位

sendto(m_socketlisten,szbuffer,nsize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))

tcp和udp是osi模型中的運輸層中的協議。tcp提供可靠的通訊傳輸,而udp則常被用於讓廣播和細節控制交給應用的通訊傳輸。

TCP和UDP的區別和優缺點

1 tcp與udp區別總結 1 tcp面向連線 如打 要先撥號建立連線 udp是無連線 的,即傳送資料之前不需要建立連線 2 tcp提供可靠的服務 也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達 udp盡最大努力交付,即不保證可靠交付 tcp通過校驗和,重傳控制,序號標識,滑...

TCP和UDP的區別和優缺點

1 tcp與udp區別總結 1 tcp面向連線 如打 要先撥號建立連線 udp是無連線 的,即傳送資料之前不需要建立連線 2 tcp提供可靠的服務 也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達 udp盡最大努力交付,即不保證可靠交付 tcp通過校驗和,重傳控制,序號標識,滑...

TCP和UDP的區別和優缺點

1 tcp與udp區別總結 1 tcp面向連線 如打 要先撥號建立連線 udp是無連線 的,即傳送資料之前不需要建立連線 2 tcp提供可靠的服務 也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達 udp盡最大努力交付,即不保證可靠交付 tcp通過校驗和,重傳控制,序號標識,滑...