點擊上方“Coder編程”,選擇“置頂公衆號”
技術文章第一時間送達!
TCP
TCP是
Transfer Control Protocol
(傳輸控制協議)的簡稱,是一種面向連接的保證可靠傳輸的協議。在TCP/IP協議中,IP層主要負責網絡主機的定位,數據傳輸的路由,由IP地址可以唯一確定Internet上的一臺主機。
TCP層則提供面向應用的可靠的或非可靠的數據傳輸機制,這是網絡編程的主要對象,一般不需要關心IP層是如何處理數據的。
通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。
發送方和接收方的成對的兩個socket之間必須建立連接,以便在TCP協議的基礎上進行通信。
當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸,雙方都可以進行發送或接收操作。
TCP是一個基於連接的協議,它能夠提供兩臺計算機之間的可靠的數據流。
HTTP、FTP、Telnet等應用都需要這種可靠的通信通道。
UDP
UDP是
User Datagram Protocol
的簡稱,是一種無連接的協議。UDP是從一臺計算機向另一臺計算機發送稱爲數據報的獨立數據包的協議,該協議並不保證數據報是否能正確地到達目的地,它是一個非面向連接的協議。
每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達時間以及內容的正確性都是不能保證的。
TCP與UDP區別
(1)TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
(2)TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
Tcp通過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。
(3)UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信。
(4)每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
(5)TCP對系統資源要求較多,UDP對系統資源要求較少。
(6)TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
tcp協議和udp協議的差別
區別 | TCP | UDP |
---|---|---|
是否連接 | 面向連接 | 面向非連接 |
傳輸可靠性 | 可靠 | 不可靠 |
應用場合 | 少量數據 | 傳輸大量數據 |
速度 | 慢 | 快 |
補充
TCP編程步驟
服務器端一般步驟:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt(); * 可選
3、綁定IP地址、端口等信息到socket上,用函數bind();
4、開啓監聽,用函數listen();
5、接收客戶端上來的連接,用函數accept();
6、收發數據,用函數send()和recv(),或者read()和write();
7、關閉網絡連接;
8、關閉監聽;
客戶端一般步驟:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt();* 可選
3、綁定IP地址、端口等信息到socket上,用函數bind();* 可選
4、設置要連接的對方的IP地址和端口等屬性;
5、連接服務器,用函數connect();
6、收發數據,用函數send()和recv(),或者read()和write();
7、關閉網絡連接;
UDP
服務器端一般步驟:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt();* 可選
3、綁定IP地址、端口等信息到socket上,用函數bind();
4、循環接收數據,用函數recvfrom();
5、關閉網絡連接;
客戶端一般步驟:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt();* 可選
3、綁定IP地址、端口等信息到socket上,用函數bind();* 可選
4、設置對方的IP地址和端口等屬性;
5、發送數據,用函數sendto();
6、關閉網絡連接;
爲什麼UDP有時比TCP更有優勢?
UDP以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP,如實時遊戲。
(1)網速的提升給UDP的穩定性提供可靠網絡保障,丟包率很低,如果使用應用層重傳,能夠確保傳輸的可靠性。
(2)TCP爲了實現網絡通信的可靠性,使用了複雜的擁塞控制算法,建立了繁瑣的握手過程,由於TCP內置的系統協議棧中,極難對其進行改進。
採用TCP,一旦發生丟包,TCP會將後續的包緩存起來,等前面的包重傳並接收到後再繼續發送,延時會越來越大,基於UDP對實時性要求較爲嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網絡問題對遊戲性造成影響。
推薦
文末
歡迎關注個人微信公衆號:Coder編程
歡迎關注Coder編程公衆號,主要分享數據結構與算法、Java相關知識體系、框架知識及原理、Spring全家桶、微服務項目實戰、DevOps實踐之路、每日一篇互聯網大廠面試或筆試題以及PMP項目管理知識等。更多精彩內容正在路上~
新建了一個qq羣:315211365,歡迎大家進羣交流一起學習。謝謝了!也可以介紹給身邊有需要的朋友。文章收錄至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
歡迎關注並star~微信公衆號
我知道你 “在看”