沐鸣娱乐官方平台下载-沐鸣娱乐官方平台手机下载

工业路由器
您(nin)当前位置: 首页 >> 服务与支持 >> 产品百科 >> 工业路由器

一文搞懂TCP与UDP有什么区别

发布时间:2020-07-20浏览:1921

引言



网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别。




一、TCP/IP网络模型



计算(suan)机与(yu)网络设(she)备要相互(hu)通(tong)信,双方(fang)就必须基于相同的方(fang)法。比如,如何(he)探测到通(tong)信目标、由哪一(yi)边先(xian)(xian)发起通(tong)信、使用哪种(zhong)语言(yan)进(jin)行通(tong)信、怎样结束通(tong)信等规则(ze)都需要事先(xian)(xian)确(que)定。不同的硬(ying)件、操作系(xi)统之(zhi)间的通(tong)信,所有的这一(yi)切都需要一(yi)种(zhong)规则(ze)。而我(wo)们就把这种(zhong)规则(ze)称为(wei)协议(yi)(protocol)。




TCP/IP 是互联网(wang)相关的(de)(de)各类协议族(zu)的(de)(de)总称,比(bi)如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等(deng)都属于(yu) TCP/IP 族(zu)内(nei)的(de)(de)协议。




TCP/IP模型是互联网(wang)的基础,它是一系列网(wang)络(luo)协(xie)议的总称。这些协(xie)议可以划(hua)分为四层(ceng)(ceng),分别为链路层(ceng)(ceng)、网(wang)络(luo)层(ceng)(ceng)、传输层(ceng)(ceng)和应(ying)用层(ceng)(ceng)。



  • 链路层:负责封装和解封装IP报文(wen),发送和接受ARP/RARP报文(wen)等。

  • 网络(luo)层:负责路由以及把分组(zu)报文发送给目标网络(luo)或主机。

  • 传输层:负责对报文进行(xing)分(fen)组和重组,并(bing)以TCP或UDP协议(yi)格式封装报文。

  • 应用层:负责向用户提供应用程序,比如(ru)HTTP、FTP、Telnet、DNS、SMTP等。


在(zai)网络(luo)体系结构中网络(luo)通(tong)信(xin)(xin)的建(jian)立(li)必须(xu)是(shi)在(zai)通(tong)信(xin)(xin)双方的对(dui)等层(ceng)(ceng)进(jin)行(xing)(xing),不(bu)能交错。 在(zai)整个数(shu)据(ju)(ju)传(chuan)输(shu)过(guo)程中,数(shu)据(ju)(ju)在(zai)发送端时(shi)(shi)经过(guo)各层(ceng)(ceng)时(shi)(shi)都(dou)要(yao)附加上(shang)相应层(ceng)(ceng)的协(xie)(xie)议头和协(xie)(xie)议尾(仅(jin)数(shu)据(ju)(ju)链路层(ceng)(ceng)需要(yao)封(feng)装(zhuang)(zhuang)协(xie)(xie)议尾)部分,也就是(shi)要(yao)对(dui)数(shu)据(ju)(ju)进(jin)行(xing)(xing)协(xie)(xie)议封(feng)装(zhuang)(zhuang),以标识对(dui)应层(ceng)(ceng)所(suo)用的通(tong)信(xin)(xin)协(xie)(xie)议。接下去(qu)介绍TCP/IP 中有两个具有代(dai)表性的传(chuan)输(shu)层(ceng)(ceng)协(xie)(xie)议----TCP 和 UDP。



二、UDP



UDP协(xie)(xie)议全称是(shi)用(yong)(yong)户数(shu)(shu)(shu)据(ju)报协(xie)(xie)议,在网络中它与TCP协(xie)(xie)议一样用(yong)(yong)于处理数(shu)(shu)(shu)据(ju)包(bao),是(shi)一种无(wu)连(lian)接的(de)协(xie)(xie)议。在OSI模(mo)型(xing)中,在第(di)四(si)层(ceng)(ceng)——传输层(ceng)(ceng),处于IP协(xie)(xie)议的(de)上一层(ceng)(ceng)。UDP有(you)不(bu)提(ti)供数(shu)(shu)(shu)据(ju)包(bao)分组、组装和不(bu)能(neng)对数(shu)(shu)(shu)据(ju)包(bao)进行排(pai)序的(de)缺点,也就是(shi)说(shuo),当报文发送之后,是(shi)无(wu)法得知(zhi)其(qi)是(shi)否安(an)全完(wan)整到达(da)的(de)。




它(ta)有(you)以下几个特点:



1. 面向无连接(jie)

首先 UDP 是(shi)不(bu)需要(yao)和 TCP一(yi)样在发(fa)送(song)数(shu)据(ju)(ju)(ju)前进(jin)行(xing)三次握(wo)手建立连接的(de),想发(fa)数(shu)据(ju)(ju)(ju)就可以开始发(fa)送(song)了。并(bing)且(qie)也只是(shi)数(shu)据(ju)(ju)(ju)报文的(de)搬运(yun)工,不(bu)会(hui)对数(shu)据(ju)(ju)(ju)报文进(jin)行(xing)任何拆分和拼(pin)接操作(zuo)。

具体来说(shuo)就是:


  • 在(zai)发送端,应用(yong)层将(jiang)数据(ju)传(chuan)(chuan)递(di)给传(chuan)(chuan)输层的 UDP 协议(yi),UDP 只会给数据(ju)增加一(yi)个 UDP 头(tou)标识(shi)下(xia)是 UDP 协议(yi),然后就传(chuan)(chuan)递(di)给网络(luo)层了

  • 在(zai)接收端(duan),网络层(ceng)将数据传(chuan)递给(ji)传(chuan)输(shu)层(ceng),UDP 只去除 IP 报(bao)文(wen)头就传(chuan)递给(ji)应用层(ceng),不会(hui)任(ren)何拼(pin)接操作



2. 有单播(bo),多播(bo),广播(bo)的(de)功(gong)能


UDP 不止支(zhi)持一对一的传输(shu)方(fang)式,同样(yang)支(zhi)持一对多(duo),多(duo)对多(duo),多(duo)对一的方(fang)式,也就是说 UDP 提(ti)供了单播,多(duo)播,广播的功(gong)能。



3. UDP是(shi)面向报文的


发送方的(de)UDP对应用(yong)程(cheng)序交下(xia)来的(de)报文,在添加(jia)首部(bu)后就向(xiang)下(xia)交付IP层(ceng)。UDP对应用(yong)层(ceng)交下(xia)来的(de)报文,既不合并,也(ye)不拆分,而是保留这些(xie)报文的(de)边(bian)界(jie)。因(yin)此(ci),应用(yong)程(cheng)序必(bi)须(xu)选(xuan)择合适大小(xiao)的(de)报文



4. 不(bu)可靠性


首先不可(ke)靠性体现在无连接上,通(tong)信都不需要(yao)建立连接,想(xiang)发就发,这样的情况(kuang)肯定(ding)不可(ke)靠。




并且收到什么数(shu)(shu)据就传递什么数(shu)(shu)据,并且也不会备份数(shu)(shu)据,发送数(shu)(shu)据也不会关心对方是否已经正确接收到数(shu)(shu)据了。




再(zai)者网(wang)络环境时(shi)(shi)好时(shi)(shi)坏(huai),但(dan)是(shi) UDP 因为没有拥塞控制,一直会(hui)以恒(heng)定的(de)速度发送数(shu)据(ju)。即使(shi)网(wang)络条(tiao)件(jian)不(bu)好,也不(bu)会(hui)对发送速率进(jin)行调整。这(zhei)样实现的(de)弊端就是(shi)在网(wang)络条(tiao)件(jian)不(bu)好的(de)情况(kuang)下(xia)可能会(hui)导致(zhi)丢(diu)包(bao),但(dan)是(shi)优点也很明显,在某些(xie)实时(shi)(shi)性要求高的(de)场景(jing)(比如电话会(hui)议)就需要使(shi)用 UDP 而不(bu)是(shi) TCP。







从上面的(de)动态图可以得知,UDP只(zhi)会把想(xiang)发(fa)的(de)数(shu)据(ju)报文一股脑(nao)的(de)丢(diu)给(ji)对方,并不在意数(shu)据(ju)有无安全(quan)完(wan)整到达。



5. 头(tou)部开(kai)销小(xiao),传输(shu)数据报(bao)文时是很高效的。


UDP 头部包(bao)含了以下几个数据:

  • 两个十(shi)六位的(de)端口(kou)号,分(fen)别(bie)为(wei)源端口(kou)(可选字段)和(he)目标(biao)端口(kou)

  • 整个数(shu)据报文的长度(du)

  • 整个数据(ju)报(bao)文的检(jian)验(yan)和(IPv4 可选 字段),该(gai)字段用于(yu)发(fa)现头部信息和数据(ju)中的错误


因此 UDP 的头(tou)部开销小,只(zhi)有八字(zi)(zi)节,相(xiang)比 TCP 的至少二十字(zi)(zi)节要少得多,在传输数据报文时是很高效(xiao)的



三、TCP


当(dang)一(yi)(yi)(yi)台(tai)(tai)计(ji)算(suan)机想要与另一(yi)(yi)(yi)台(tai)(tai)计(ji)算(suan)机通(tong)讯时(shi)(shi)(shi),两台(tai)(tai)计(ji)算(suan)机之间的(de)(de)通(tong)信需要畅通(tong)且可靠,这样才(cai)能保证正(zheng)确收发数据。例如,当(dang)你想查(cha)看(kan)网页(ye)或(huo)查(cha)看(kan)电子(zi)邮件(jian)时(shi)(shi)(shi),希(xi)望完(wan)(wan)整(zheng)且按(an)顺(shun)序查(cha)看(kan)网页(ye),而不丢失任(ren)何内容。当(dang)你下(xia)载文(wen)件(jian)时(shi)(shi)(shi),希(xi)望获得的(de)(de)是(shi)完(wan)(wan)整(zheng)的(de)(de)文(wen)件(jian),而不仅(jin)(jin)仅(jin)(jin)是(shi)文(wen)件(jian)的(de)(de)一(yi)(yi)(yi)部分(fen),因为(wei)如果数据丢失或(huo)乱(luan)序,都不是(shi)你希(xi)望得到的(de)(de)结果,于(yu)是(shi)就用到了(le)TCP。


TCP协(xie)议(yi)全称是(shi)(shi)传(chuan)输控制协(xie)议(yi)是(shi)(shi)一种面向(xiang)(xiang)连(lian)接(jie)的、可(ke)靠的、基(ji)于字节流(liu)(liu)的传(chuan)输层通信协(xie)议(yi),由(you) IETF 的RFC 793定义(yi)。TCP 是(shi)(shi)面向(xiang)(xiang)连(lian)接(jie)的、可(ke)靠的流(liu)(liu)协(xie)议(yi)。流(liu)(liu)就(jiu)是(shi)(shi)指不(bu)间断的数据(ju)结(jie)构,你可(ke)以把它(ta)想象成排水管中的水流(liu)(liu)。



1. TCP连(lian)接过程

如下图所示,可以看到建立一个TCP连接的过(guo)程为(wei)(三次握手的过(guo)程):

第一次握(wo)手

客户端(duan)(duan)向服务端(duan)(duan)发送(song)连接请求报(bao)文段。该报(bao)文段中包含自(zi)身的数据通讯初始序号。请求发送(song)后,客户端(duan)(duan)便进(jin)入 SYN-SENT 状(zhuang)态(tai)。

第二次握手


服(fu)务端收到(dao)连接(jie)请求报文段后(hou),如果同(tong)意(yi)连接(jie),则会发送一(yi)个应答,该应答中也会包含自身的数据通(tong)讯初始序号(hao),发送完成后(hou)便进(jin)入 SYN-RECEIVED 状态。




第三(san)次握手




当客户端(duan)收到连接同意的应(ying)答后(hou),还要向服务端(duan)发送(song)一个确认报(bao)文。客户端(duan)发完这(zhei)个报(bao)文段后(hou)便进(jin)入(ru) ESTABLISHED 状态(tai),服务端(duan)收到这(zhei)个应(ying)答后(hou)也(ye)进(jin)入(ru) ESTABLISHED 状态(tai),此(ci)时连接建立成功。




这(zhei)里可能大家会有(you)个(ge)疑惑:为什么 TCP 建立连接(jie)需要(yao)三(san)次握手(shou),而(er)不(bu)是两次?这(zhei)是因为这(zhei)是为了防止出现失(shi)效(xiao)的连接(jie)请(qing)求(qiu)报文段被服务端接(jie)收(shou)的情况(kuang),从而(er)产生(sheng)错误。






2. TCP断开(kai)链接(jie)



TCP 是(shi)全双工(gong)的(de),在断(duan)开连接(jie)时两端都需(xu)要发送 FIN 和(he) ACK。

第一次握手

若客户端(duan) A 认(ren)为数据发送完成,则它需要向服务端(duan) B 发送连接(jie)释放请求。

第(di)二次握手


B 收(shou)到连接释(shi)放(fang)请求后(hou),会告(gao)诉应用层要释(shi)放(fang) TCP 链(lian)接。然后(hou)会发送 ACK 包(bao),并进入 CLOSE_WAIT 状态,此(ci)时(shi)表明 A 到 B 的连接已经释(shi)放(fang),不再接收(shou) A 发的数据了。但是因为(wei) TCP 连接是双向的,所(suo)以(yi) B 仍旧(jiu)可以(yi)发送数据给 A。



第三次(ci)握手

B 如果此时还(hai)有没发完的数(shu)据会继(ji)续发送,完毕后会向 A 发送连接释放请求,然后 B 便进(jin)入 LAST-ACK 状态(tai)。

第四次(ci)握手

A 收到释放(fang)请(qing)求(qiu)后,向 B 发送确认应答(da),此时(shi)(shi) A 进入(ru) TIME-WAIT 状(zhuang)(zhuang)(zhuang)态(tai)。该状(zhuang)(zhuang)(zhuang)态(tai)会持续 2MSL(最大段生存(cun)期,指报文(wen)段在网(wang)络中生存(cun)的时(shi)(shi)间(jian),超时(shi)(shi)会被抛弃) 时(shi)(shi)间(jian),若(ruo)该时(shi)(shi)间(jian)段内没有(you) B 的重发请(qing)求(qiu)的话,就进入(ru) CLOSED 状(zhuang)(zhuang)(zhuang)态(tai)。当 B 收到确认应答(da)后,也便(bian)进入(ru) CLOSED 状(zhuang)(zhuang)(zhuang)态(tai)。

3. TCP协议的(de)特点

  • 面向连接(jie)

    面向连接,是指发送数据之前必(bi)须在两端建(jian)(jian)立(li)(li)连接。建(jian)(jian)立(li)(li)连接的(de)方法是“三次握手”,这样(yang)能建(jian)(jian)立(li)(li)可靠的(de)连接。建(jian)(jian)立(li)(li)连接,是为数据的(de)可靠传输打下了基础。

  • 仅支持单(dan)播(bo)传(chuan)输

每条TCP传输(shu)连接只能有两个端点,只能进(jin)行点对点的(de)数据(ju)传输(shu),不支持多(duo)播和广播传输(shu)方式。

  • 面向(xiang)字节流

TCP不像UDP一样(yang)那样(yang)一个个报文(wen)(wen)独立(li)地传(chuan)输(shu),而是在(zai)不保留报文(wen)(wen)边(bian)界的情况下以(yi)字节流方式进行传(chuan)输(shu)。

  • 可(ke)靠传输

    对(dui)于可(ke)靠传输(shu)(shu),判断丢(diu)包,误(wu)码靠的(de)(de)(de)是TCP的(de)(de)(de)段(duan)编号以(yi)及确(que)认(ren)号。TCP为了(le)保(bao)证(zheng)报文传输(shu)(shu)的(de)(de)(de)可(ke)靠,就给每个(ge)包一个(ge)序号,同(tong)时序号也保(bao)证(zheng)了(le)传送(song)到(dao)(dao)接(jie)收(shou)端(duan)实(shi)体的(de)(de)(de)包的(de)(de)(de)按(an)序接(jie)收(shou)。然后接(jie)收(shou)端(duan)实(shi)体对(dui)已(yi)成(cheng)功收(shou)到(dao)(dao)的(de)(de)(de)字节发回一个(ge)相应的(de)(de)(de)确(que)认(ren)(ACK);如果发送(song)端(duan)实(shi)体在(zai)合理的(de)(de)(de)往返时延(RTT)内未收(shou)到(dao)(dao)确(que)认(ren),那么对(dui)应的(de)(de)(de)数据(假设丢(diu)失(shi)了(le))将(jiang)会被重传。

  • 提供拥(yong)塞控制(zhi)

当网络(luo)出现拥(yong)塞的(de)时候,TCP能够减小(xiao)向网络(luo)注(zhu)入数(shu)据的(de)速率和(he)数(shu)量,缓解拥(yong)塞

  • TCP提供全双(shuang)工通信


TCP允许通信(xin)双方的应用程序在任何时候都能发送(song)(song)数(shu)据(ju)(ju),因为TCP连接的两(liang)端都设有缓存,用来临时存放(fang)双向通信(xin)的数(shu)据(ju)(ju)。当然,TCP可以(yi)立即发送(song)(song)一(yi)个(ge)数(shu)据(ju)(ju)段(duan),也可以(yi)缓存一(yi)段(duan)时间以(yi)便一(yi)次发送(song)(song)更多(duo)的数(shu)据(ju)(ju)段(duan)(最大(da)的数(shu)据(ju)(ju)段(duan)大(da)小取决于MSS)



四、TCP和UDP的比较


1. 对(dui)比

 UDPTCP
是否连接无(wu)连接面向连接
是否可靠(kao)不可(ke)靠传输(shu),不使用流量控制和拥(yong)塞(sai)控制可靠传输(shu),使用流(liu)量(liang)控制(zhi)和拥塞控制(zhi)
连接对象(xiang)个数支(zhi)持(chi)一对一,一对多,多对一和多对多交互(hu)通(tong)信只能是(shi)一对一通(tong)信
传输(shu)方式面(mian)向报文面向字节流
首部开(kai)销首部开销小,仅8字节首部最(zui)(zui)小20字节(jie)(jie),最(zui)(zui)大60字节(jie)(jie)
适用场(chang)景(jing)适用(yong)于实(shi)时(shi)应用(yong)(IP电话、视频(pin)会议、直播等)适(shi)用(yong)于(yu)要(yao)求可靠传输(shu)的应用(yong),例如文件(jian)传输(shu)



2. 总(zong)结



  • TCP向上层提(ti)供面向连接的(de)可靠服务 ,UDP向上层提(ti)供无连接不可靠服务。

  • 虽(sui)然 UDP 并(bing)没有 TCP 传输(shu)来(lai)的准确,但是也(ye)能在很多实时性要求(qiu)高的地方有所作为

  • 对数据准确性要求高,速度可以相(xiang)对较(jiao)慢(man)的(de),可以选用TCP


上一篇:什么是TCP心跳机制 下一篇:TCP和UDP的区别和优缺点
免费样机申请 样机免费试用,提前沟通确保沐鸣娱乐产品深度契合贵司业务需求
相关产品
产品百科
隐私政策网站地图 Copyright © 2015-2022 厦门沐鸣(ming)娱乐(le)通(tong)信(xin)科(ke)技有限(xian)公司 All Rights Reserved.  
拨(bo)打(da)电话
极悦娱乐-科技赋能场景,让娱乐更有趣。 极悦娱乐-科技注册场景,让平台更有趣。 鼎点耀世娱乐HEMO-拉菲2娱乐「一家靠谱的游戏平台」Facai-新博2官网登录入口「一家靠谱的游戏平台」Facai-摩臣平台是正规平台吗「一家走心的游戏平台」