TCP與UDP特點與區別

TCP/IP協議

IP地址(IP Address)
計算機分布在世界各地,要想和它們通信,必須要知道確切的位置。確定計算機位置的方式有多種,IP 地址是最常用的,例如,114.114.114.114 是國內第一個、全球第三個開放的 DNS 服務地址,127.0.0.1 是本機地址。

其實,我們的計算機并不知道 IP 地址對應的地理位置,當要通信時,只是將 IP 地址封裝到要發送的數據包中,交給路由器去處理。路由器有非常智能和高效的算法,很快就會找到目標計算機,并將數據包傳遞給它,完成一次單向通信。

目前大部分軟件使用 IPv4 地址,但 IPv6 也正在被人們接受,尤其是在教育網中,已經大量使用。

端口(Port)
有了 IP 地址,雖然可以找到目標計算機,但仍然不能進行通信。一臺計算機可以同時提供多種網絡服務,例如Web服務、FTP服務(文件傳輸服務)、SMTP服務(郵箱服務)等,僅有 IP 地址,計算機雖然可以正確接收到數據包,但是卻不知道要將數據包交給哪個網絡程序來處理,所以通信失敗。

為了區分不同的網絡程序,計算機會為每個網絡程序分配一個獨一無二的端口號(Port Number),例如,Web服務的端口號是 80,FTP 服務的端口號是 21,SMTP 服務的端口號是 25。

端口(Port)是一個虛擬的、邏輯上的概念。可以將端口理解為一道門,數據通過這道門流入流出,每道門有不同的編號,就是端口號。

協議(Protocol)
協議(Protocol)就是網絡通信的約定,通信的雙方必須都遵守才能正常收發數據。協議有很多種,例如 TCP、UDP、IP 等,通信的雙方必須使用同一協議才能通信。協議是一種規范,由計算機組織制定,規定了很多細節,例如,如何建立連接,如何相互識別等。
協議僅僅是一種規范,必須由計算機軟件來實現。例如 IP 協議規定了如何找到目標計算機,那么各個開發商在開發自己的軟件時就必須遵守該協議,不能另起爐灶。

所謂協議族(Protocol Family),就是一組協議(多個協議)的統稱。最常用的是 TCP/IP 協議族,它包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百個互為關聯的協議,由于 TCP、IP 是兩種常用的底層協議,所以把它們統稱為 TCP/IP 協議族。

TCP UDP 介紹

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

UDP(User Datagram Protocol,用戶數據報協議):,是 OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。

TCP UDP 特點

TCP特點:
  1、tcp是面向連接的,通信之前需要建立連接,通信結束之后還需釋放連接(三次握手,四次揮手)
  2、tcp提供了很可靠的支付服務,可靠也就是說:tcp的數據沒有重復、沒有丟失、沒有錯誤、并且和發送端的數據是一致的。
  3、tcp是面向字節流的。也就是tcp是以字節為單位,雖然傳輸的過程中數據被劃分為了一個一個數據報文,但是這只是為了方便傳輸,接收端最終接受到的數據和發送端接收到的數據是一樣的。
  4、tcp提供全雙工通信:就是tcp的兩端即可以作為發送端,也可以作為接收端。
  5、最重要的一點就是一個tcp的連接只能有兩個端點,支持一對一通信。
  6、tcp首部含有20個字節。

UDP特點:
  1、首先udp是無連接的,通信結束也不需要釋放連接。
  2、upd是一種不可靠的協議,發出去就不管了。
  3、udp是一種面向報文的鏈接;udp數據傳輸的單位是報文,而且不會對數據做任何的拆分和拼接操作。在發送端,應用程序給傳輸層的udp什么樣的數據,udp不會對數據進行拆分,最會增加一個udp頭并且交給網絡層。在接收端,udp收到網絡層的數據之后,除去ip(網絡層協議)數據報頭部后便交給應用層,不會做任何的拼接操作。
  4、udp是不存在擁塞控制的,并且始終就是用恒定的速率發送數據,并不會根據網絡擁塞情況對發送速率做調整。這個狀況下就會存在優勢和弊端;弊端就是:網絡擁塞時有些報文就會丟失,所以才說udp是不可靠的協議;他的優點就是有些使用場景允許報文丟失,比如:直播,語音通話,但是對實時性要求比較高。
  5、udp支持一對一,一對多,多對多,多對一通信。
  6、udp首部的開銷比較小,只有8個字節。相對于tcp來說,效率還是很高的。

TCP UDP 優缺點

TCP優點:可靠,穩定。tcp的可靠體現在tcp在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認,窗口,重傳,擁塞控制機制,在數據傳完后,還會斷開連接用來節約系統資源。

TCP缺點:速度慢,效率低,占用系統資源高,易被攻擊。TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制,重傳機制,擁塞機制等都會消耗大量的時間,而且要在每臺設備上維護所有的傳輸連接,事實上,每個連接都會占用系統的CPU,內存等硬件資源。而且,因為TCP有確認機制,三次握手機制,這些也導致TCP容易被人利用,實現DOS,DDOS,CC等攻擊。

UDP優點:速度快,比TCP稍安全。UDP沒有TCP的握手,確認,窗口,重傳,擁塞控制等機制。UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的。比如:UDP Flood攻擊。

UDP缺點:不可靠,不穩定。因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網絡質量不好,就會容易丟包。

TCP UDP 區別

TCP基于連接,需要經過三次握手建立可靠連接,可簡單類比打電話過程:A打給B(1),B接通電話并向A問好(2),A聽到B的問好后向B問好(3),之后開始聊正事,且聊天過程式實時同步有序的。

UDP不基于連接,類似于線上聊天,給對方發消息不經過對方同意,發送的消息對方可能未收到,也可能收到亂序的消息。

UDPTCP
是否連接無連接連接
是否可靠不可靠傳輸,不使用流量控制和擁塞控制可靠傳輸,使用流量控制和擁塞控制
占用資源
連接對象個數支持一對一,一對多,多對一和多對多交互通信只能是一對一通信
傳輸方式面向報文面向字節流
首部開銷首部開銷小,僅8字節首部最小20字節,最大60字節
適用場景適用于實時應用(IP電話、視頻會議、直播等)適用于要求可靠傳輸的應用,例如文件傳輸

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444199.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode613. 直線上的最近距離(SQL)

表 point 保存了一些點在 x 軸上的坐標,這些坐標都是整數。 寫一個查詢語句,找到這些點中最近兩個點之間的距離。 | x | |-----| | -1 | | 0 | | 2 | 最近距離顯然是 1 ,是點 -1 和 0 之間的距離。所以輸出應該如下: | …

三次握手與四次揮手

三次握手 三次握手是指在建立TCP連接時,需要client端和server端共進行三次信息確認。 第一次握手:建立連接。client發送連接請求報文段(SYN位置為1,Sequence Number為x),然后,client端進入SYN…

leetcode619. 只出現一次的最大數字(SQL)

表 my_numbers 的 num 字段包含很多數字,其中包括很多重復的數字。 你能寫一個 SQL 查詢語句,找到只出現過一次的數字中,最大的一個數字嗎? --- |num| --- | 8 | | 8 | | 3 | | 3 | | 1 | | 4 | | 5 | | 6 | 對于上面給出的樣例…

socket入門

socket 簡介 Socket即套接字,就是對網絡中不同主機上的應用進程之間進行雙向通信的端點的抽象。一個套接字就是網絡上進程通信的一端,提供了應用層進程利用網絡協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網絡…

leetcode614. 二級關注者(SQL)

在 facebook 中,表 follow 會有 2 個字段: followee, follower ,分別表示被關注者和關注者。 請寫一個 sql 查詢語句,對每一個關注者,查詢他的關注者數目。 比方說: ------------------------- | follow…

SPI、I2C、UART 三種串行總線對比介紹

轉載自https://blog.csdn.net/oqqHuTu12345678/article/details/65445338 參考博客 https://blog.csdn.net/xiaodingqq/article/details/80342459 https://blog.csdn.net/weiqifa0/article/details/8845281 https://www.zhihu.com/question/22632011 http://www.360doc.cn/…

leetcode1045. 買下所有產品的客戶(SQL)

Customer 表: ---------------------- | Column Name | Type | ---------------------- | customer_id | int | | product_key | int | ---------------------- product_key 是 Product 表的外鍵。 Product 表: ---------------------- | C…

Oracle利用序列實現自動增長列

在SQL Server以及MySql中都有相應的自動增長列類型,而Oracle中則沒有此類型,那如果要實現自動增長列需要怎么辦呢. 我們可以利用序列來實現.插入數據時候,可以像sql以及mysql一樣,不用顯示指定需要自動增長的列的值. 代碼實現如下: CREATE TABLE SYS_ROLES ( ID integer NOT NU…

C++ new和malloc的區別

這里先對new和delete簡單進行一下總結,然后再細說new和malloc的區別。 一、new和delete C語言提供了malloc和free兩個系統函數,完成對堆內存的申請和釋放。而C則提供了兩個關鍵字new和delete; 1.1 規則 new/delete是關鍵字,效率…

leetcode620. 有趣的電影(SQL)

某城市開了一家新的電影院,吸引了很多人過來看電影。該電影院特別注意用戶體驗,專門有個 LED顯示板做電影推薦,上面公布著影評和相關電影描述。 作為該電影院的信息部主管,您需要編寫一個 SQL查詢,找出所有影片描述為…

leetcode1050. 合作過至少三次的演員和導演(SQL)

ActorDirector 表: ---------------------- | Column Name | Type | ---------------------- | actor_id | int | | director_id | int | | timestamp | int | ---------------------- timestamp 是這張表的主鍵. 寫一條SQL查詢語句獲取合作…

linux內核相關知識

參考https://www.cnblogs.com/xdyixia/p/9248240.html linux內核啟動過程 一個嵌入式 Linux 系統從軟件角度看可以分為四個部分:引導加載程序(Bootloader),Linux 內核,文件系統,應用程序。其中 Bootloade…

棧與堆的區別(內存分配與數據結構)

參考自https://blog.csdn.net/K346K346/article/details/80849966/ 堆(Heap)與棧(Stack)包含兩層含義: 程序內存布局場景下的內存管理方式數據結構中的兩種常見的數據結構 1. 程序內存分配中的堆與棧 1.1 棧介紹 …

leetcode10. 正則表達式匹配 一道沒有解釋的字符串dp困難題

給你一個字符串 s 和一個字符規律 p,請你來實現一個支持 . 和 * 的正則表達式匹配。 . 匹配任意單個字符 * 匹配零個或多個前面的那一個元素 所謂匹配,是要涵蓋 整個 字符串 s的,而不是部分字符串。 說明: s 可能為空,且只包含…

string相關庫函數

char *strcat(char *dest, const char *src) 功能 把 src 所指向的字符串追加到 dest 所指向的字符串的結尾。 參數: dest – 指向目標數組,該數組包含了一個 C 字符串,且足夠容納追加后的字符串。 src – 指向要追加的字符串,該…

leetcode44. 通配符匹配 又是一道沒有解釋的字符串dp困難題

給定一個字符串 (s) 和一個字符模式 (p) ,實現一個支持 ? 和 * 的通配符匹配。 ? 可以匹配任何單個字符。 * 可以匹配任意字符串(包括空字符串)。 兩個字符串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小寫…

深入學習卷積神經網絡(CNN)的原理知識

轉載自https://www.cnblogs.com/wj-1314/p/9754072.html 在深度學習領域中,已經經過驗證的成熟算法,目前主要有深度卷積網絡(DNN)和遞歸網絡(RNN),在圖像識別,視頻識別,語…

java中如何生成隨機數?

java中如何生成隨機數? package com.test.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; public class CharacterUtils {/*** 第一種方法;length為產生的位數*/public static String getRandomString(int…

leetcode132. 分割回文串 II

給定一個字符串 s,將 s 分割成一些子串,使每個子串都是回文串。 返回符合要求的最少分割次數。 示例: 輸入: "aab" 輸出: 1 解釋: 進行一次分割就可將 s 分割成 ["aa","b"] 這樣兩個回文子串。 思路:dp[i]…

為什么需要智能指針

參考自https://www.cnblogs.com/round1/p/12906648.html 主要為了避免以下Bug: 內存泄露 :對象無法被釋放,最常見的問題。野指針 : 指針指向未知。重復釋放 : 顧名思義。 (一)內存泄露 : 1. 拋出異常&…