TCP和UDP概念及区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34715587/article/details/88847435

一、TCP、UDP概念

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP(用户数据包协议)是同一层内另一个重要的传输协议。

在因特网协议族中,TCP所在层位于IP层之上、应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

UDP(User Datagram Protocol,用户数据报协议)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。

TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。 

TCP报文格式
UDP报文格式

二、TCP和UDP的优缺点

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:当对网络通讯质量有要求时,比如整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。在日常生活中,常见使用TCP协议的应用,比如浏览器使用HTTP,Outlook使用POP、SMTP,QQ文件传输等。

在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来。 

我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

TCP为了确保可靠性做了哪些工作?
校验和:是指传输位数的累加,当传输结束时,接收者可以根据这个数值判断是否接到了所有的数据。如果数值匹配,那么说明传送已经完成。
序列号:发送方将数据进行排序然后发送
确认应答:响应方完整接收到消息后返回给对方一个确认号(下一个数据的编号)
连接管理:三次握手和四次挥手
超时重传:当数据丢包,发送方在一定时间内没有收到确认号就将该内容重新发送
流量控制:根据接收方接受能力的大小决定发送多少数据。
拥塞控制:使用拥塞窗口,表示发送数据的大小。 
     拥塞窗口初始为1,每收到一个ACK,拥塞窗口加1。 
     这样,第一次发一个,收到一个确认后拥塞窗口变为2。 
     然后拥塞窗口依次变为8,16……呈指数增长。 
     当拥塞窗口大小超过阈值(阈值为窗口的最大值)时采用线性增长。且一旦产生超时重传,就将阈值减半。
TCP为了保障性能做了哪些工作?
滑动窗口:接收方还有多大的缓冲区可以用于接收数据
快速重传:当数据丢包,发送方收到接收方三次相同确认序号,就将该内容重新发送
延迟应答:接收到N个包或一定时间才给对方确认
捎带应答:将确认报文粘在下一个要发送的报文上

基于套接字的TCP协议编程。不同于UDP的是,客户端需和服务端建立连接,才能相互进行收发消息。使用线程处理多个用户的请求,使其收发数据。

UDP:当对网络通讯质量要求不高时,要求网络通讯速度能尽量快,这时就可以使用UDP。在日常生活中,常见使用UDP协议的应用,比如QQ语音、QQ视频、TFTP等。

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。 

使用套接字基于UDP协议,服务端先bind一个ip和port,然后进行收消息并把消息返还给客户端。而客户端无需bind连接服务器,只需知道它的ip和port就可以给它发消息。​​​​​​​UDP没有发送缓冲区,上层交付数据会调用sendto函数直接交给内核,由内核将数据进行网络协议传输。 但有接收缓冲区,但不能保证报文的顺序性和一致性。如果缓冲区满了,再到达的数据就会被丢弃。

我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。 

这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

UDP应用场景:
  1.面向数据报方式
  2.网络数据大多为短消息 
  3.拥有大量Client
  4.对数据安全性无特殊要求
  5.网络负担非常重,但对响应速度要求高

四、TCP和UDP的区别(总结)

第一:TCP和UDP最大的区别就是:TCP是面向连接的,UDP是非面向连接的。通俗一点说就是:TCP管发管到,UDP管发不管到。因此,在安全性方面来说,TCP更具有优越性。

第二:TCP偏重的是点对点的通信,使用时服务器和客户端的区别显而易见,而UDP则可以使用组播实现一对多,通信时更像一个群聊系统,几乎没有客户端和服务器的区别,在时间和空间上具有更高的节约性。使用组播时,确定一个D类地址作为组的地址,将本机加入组中,向组内发送消息,从组中接收消息。

第三:在具体编写的代码结构上,TCP是通过创建Socket对象进行连接,从连接对象上得到输入输出流,在流中读写从而通信。而UDP则是在本机创建DatagramSocket对象,将数据包装成DatagramPacket包来发送,其中包里有要发送到的地址。

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保   证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
  UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少; 
3.UDP程序结构较简单 
4.流模式(TCP)与数据报模式(UDP); 
5.TCP保证数据正确性,UDP可能丢包 
6.TCP保证数据顺序,UDP不保证 

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
UDP补充

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDO也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采用UDP的应用程序去处理。换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。
TCP补充

TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

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对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

1.TCP提供的是面向连接的、可靠的数据流传输; UDP提供的是非面向连接的、不可靠的数据流传输。

2.TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失,不重复,按序到达; UDP尽最大努力交付,即不保证可靠交付。

3.TCP面向字节流; UDP面向报文。

4.TCP连接只能是点到点的; UDP支持一对一、一对多、多对一和多对多的交互通信。

5.TCP首部开销20字节; UDP的首部开销小,只有8个字节。

6.TCP的逻辑通信信道是可靠信道; UDP的逻辑通信信道是不可靠信道。

猜你喜欢

转载自blog.csdn.net/sinat_34715587/article/details/88847435