TCP和UDP协议区别+应用场景+优缺点+常用协议

文章目录

1. TCP协议
特点
应用场景
优点
缺点
运行于TCP协议之上的协议
2. UDP协议
特点
应用场景
优点
缺点
运行于UDP协议之上的协议

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的传输层协议,它们在网络通信中扮演不同的角色,各有优缺点。
1. TCP协议

特点

提供面向连接的、可靠的数据传输服务。
使用三次握手建立连接,四次挥手断开连接。
提供流量控制、拥塞控制和错误恢复机制,确保数据的可靠性和完整性。
采用有序的数据传输,数据包按顺序传送,不会出现数据乱序。
适用于对数据可靠性要求高、顺序要求严格的应用场景。
应用场景

网页浏览:HTTP协议通常使用TCP作为传输层协议,确保网页内容的完整性和可靠性。
电子邮件:SMTP、POP3和IMAP等邮件协议使用TCP协议进行可靠的邮件传输。
文件传输:FTP协议使用TCP进行文件的可靠传输。
实时通信:如语音通话、视频通话等应用需要保证数据的完整性和顺序,通常选择TCP协议。
优点

可靠性高,能够保证数据的完整性和可靠传输。
支持流量控制和拥塞控制,避免网络拥堵和丢包。
缺点

数据传输速度相对较慢,因为每个数据包都需要进行确认和重传。
在某些情况下,TCP的连接建立和维护可能会增加网络开销。
运行于TCP协议之上的协议

许多协议都是建立在TCP(Transmission Control Protocol,传输控制协议)之上的,以实现可靠的数据传输。以下是一些常见的运行于TCP协议之上的协议:

HTTP(Hypertext Transfer Protocol,超文本传输协议):用于在Web服务器和Web浏览器之间传输超文本文档,例如网页内容。

FTP(File Transfer Protocol,文件传输协议):用于在网络上进行文件传输。

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议):用于发送电子邮件。

POP3(Post Office Protocol version 3,邮局协议第3版) 和 IMAP(Internet Message Access Protocol,因特网消息访问协议):这两个协议用于从邮件服务器上接收电子邮件。

Telnet:用于远程登录到计算机系统。

SSH(Secure Shell,安全外壳协议):与Telnet类似,但提供了加密的安全连接。

DNS(Domain Name System,域名系统):用于将域名解析为对应的IP地址。

HTTPS(Hypertext Transfer Protocol Secure,安全超文本传输协议):是HTTP的安全版本,通过使用SSL/TLS协议提供数据加密和身份验证。

这些协议都依赖于TCP协议的可靠数据传输特性,以确保数据在网络上的稳定和可靠传输。

2. UDP协议

特点

无连接的、不可靠的数据传输服务。
不提供数据重传、流量控制和拥塞控制等机制。
数据包传输速度快,适用于实时性要求高的应用场景。
数据包传输不保证顺序,可能出现乱序或丢失。
应用场景

实时多媒体应用:如实时音频、视频流传输,游戏数据传输等,需要低延迟和高实时性。
DNS解析:UDP常用于DNS查询和响应,通常要求快速的域名解析。
NTP时间同步:UDP常用于进行网络时间同步。
优点

传输速度快,适用于实时性要求高的应用场景。
不会增加额外的连接和维护开销。
缺点

不可靠性高,数据包可能会丢失或乱序。
不支持流量控制和拥塞控制,容易导致网络拥堵和丢包问题。
综上所述,TCP适用于对数据可靠性要求高、顺序要求严格的应用场景,而UDP适用于对传输速度和实时性要求高的应用场景。选择合适的协议取决于具体的应用需求和性能要求。

运行于UDP协议之上的协议

一些运行于UDP(User Datagram Protocol,用户数据报协议)之上的常见协议包括:

DNS(Domain Name System,域名系统):UDP常用于DNS查询和响应。DNS用于将域名解析为对应的IP地址。

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):DHCP用于动态分配IP地址、子网掩码、默认网关等网络配置信息给客户端设备。

TFTP(Trivial File Transfer Protocol,简单文件传输协议):TFTP用于在网络上进行简单的文件传输,通常用于在局域网内部进行系统引导或配置文件传输。

SNMP(Simple Network Management Protocol,简单网络管理协议):SNMP用于管理和监控网络设备,UDP用于传输SNMP消息。

NTP(Network Time Protocol,网络时间协议):NTP用于在计算机网络中同步各个节点的时间。

RIP(Routing Information Protocol,路由信息协议):RIP是一种用于动态路由的协议,用于在路由器之间交换路由信息。

Syslog:Syslog是一种用于系统日志消息传输的协议,UDP常用于传输Syslog消息。

这些协议通常选择UDP作为传输层协议,因为UDP相比TCP更加轻量级,传输速度更快,并且适用于一些实时性要求较高的应用场景。然而,UDP不提供像TCP那样的可靠的数据传输和错误处理机制,因此在一些应用中,可能需要额外的逻辑来处理数据包的丢失或重复。

TCP和UDP的区别和优缺点以及应用实例

TCP和UDP区别总结:

  1. TCP面向连接,UDP是无连接的
    TCP在开始数据传输之前要经过三次握手,UDP却不需要任何准备即可进行数据传输,因此UDP不会引入建立连接的时延
  2. TCP提供可靠的服务,UDP尽最大努力交付,即不保证可靠交付
    TCP传输数据具有重传机制,如果在传输数据的过程中发生丢包事件,发送方会重传丢失的分组,所以TCP保证发送的分组一定能到达接收方,因此是可靠的。
    UDP在应用层得到数据后,附加上用于多路复用/多路分解服务的源端口号和目的端口号字段后,直接将形成的报文段传输给网络,而网络层是不可靠的,因而不能保证数据传输的可靠性。(可以在应用层实现UDP数据传输的可靠性)
  3. UDP具有较好的实时性,工作效率比TCP高
    UDP在传输数据前不需要建立连接,没有繁琐的握手过程,没有复杂的拥塞控制算法和重传机制,所以UDP相对于TCP具有较高的效率。
  4. 每一条TCP连接只能是点到点,UDP支持一对一、一对多、多对多
  5. TCP对系统资源要求较多,UDP对系统资源要求较少
    TCP建立连接后,会为连接分配发送缓存和接受缓存,维护拥塞控制变量以及序号和确认号的参数,因此需要占用较多的系统资源。而UDP是无连接的,对系统资源要求较少

为什么UDP有时比TCP更有优势?

  1. 网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使应用层重传,能够确保传输的可靠性
  2. TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制机制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。
  3. 基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络对进程造成影响

UDP实现可靠数据传输的实例

TCP和UDP应用的例子

TCP应用:

  1. FTP:文件传输协议
  2. SSH:安全登录、文件传送(SCP)和端口重定向
  3. Telnet:不安全文本传送
  4. SMTP:简单邮件传输协议
  5. HTTP:超文本传输协议

UDP应用:

  1. 流媒体

    如果采用TCP,一旦发生丢包,TCP会将后续包缓存起来,等前面的包重传并接收到后再继续发送,延迟会越来越大。基于UDP的协议入WebRTC使极佳的选择。

  2. 实时游戏

    对实时要求较为严格的情况下,采用自定义的可靠UDP协议,自定义重传策略,能哦把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。

  3. 物联网

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: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 ………… 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……

有些应用场景对可靠性要求不高会用到UPD,比如长视频,要求速率

小结TCP与UDP的区别:

1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;

5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

tcp协议和udp协议的差别 
TCP UDP 
是否连接 面向连接 面向非连接 
传输可靠性 可靠 不可靠 
应用场合 传输大量数据 少量数据 
速度 慢 快

TCP与UDP区别总结:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

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

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

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

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

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

TCP与UDP的技术面试考点

面试时回答此类问题,先介绍两者的概念,再阐述两者的区别

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

1.TCP(Transmission Control Protocol)的概念

 TCP是一种面向连接的,提供可靠交付服务和全双工通信的,基于字节流的端到端的传输层通信协议。
TCP在传输数据之前必须先建立连接(TCP连接过程参见:TCP的三次握手与四次挥手理解及面试题(很全面)-CSDN博客),数据传输结束后要释放连接。
每一条TCP连接只能有2个端点,故TCP不提供广播或多播服务。
TCP提供可靠交付,通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。
TCP是面向字节流的。虽然应用进程和TCP的交互是一次一个数据块(大小不等),但TCP把英语程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP并不知道所传输的字节流的含义。


   2 . UDP(User Data Protocol,用户数据报协议)
(1)UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

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

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

TCP和UDP的区别

 (1)同步:端口下如果同是来了两个客户端请求,第一个连接得到响应,与服务端建立通讯,而第二个请求就会被一直阻塞直到第一个请求完成操作,各请求之间排队,顺序执行。
 (2)异步呢,就是同时来两个或者多个请求,服务端就同时响应多个客户端,同时给他们连接。各个客户端与服务器的通讯是并行的,一个客户端不必等另一个客户端完成操作。通常用这两个方法来接收一个客户端请求。
 (3)阻塞 调用是指调用结果返回之前,当前线程会被挂起。比如:Console.ReadLine(),如果你不向控制台输入数据,这个方法就会一直等待,知道你输入数据后才会向下执行。这个时候当前线程被挂起来了,让CPU去做其他事情。
 (4)非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

syn攻击

在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击
netstat -n -p TCP | grep SYN_RECV
一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.
但是不能完全防范syn攻击。

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于广播提供面向无连接的通信服务

握手

“我想给你发数据,可以吗?” (请提供序列号作为起始数据段)SYN:同步序列编号(Synchronize Sequence Numbers)
“可以,你什么时候发?” (已提供序列号)SYN+ACK应答
“我现在就发,你接着吧!”  ACK消息响应

挥手 (A为主动关闭方,可以是SERVICE也可以是CLIENT)

SERVER:传输好了,我要关了   1 ) 当主机A完成数据传输后,发送FIN,提出停止TCP连接的请求,进入FIN_WAIT1状态
CLIENT:我看一下                       2 ) 主机B收到FIN后,将发送ACK,进入CLOSE_WAIT状态
CLIENT:OK ,可以关                 3 ) 由B 端再提出反方向的关闭请求,将发送FIN,并进入LAST_ACK状态
SERVER: 嗯,我关了                 4 ) 主机A对主机B的请求进行确认收到FIN,将发送ACK,双方向的关闭结束.进入TIME_WAIT状态,经过2MSL时间后关闭


 

UDP(User Data Protocol,用户数据报协议)
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
UDP应用场景: 1.面向数据报方式  2.网络数据大多为短消息   3.拥有大量Client  4.对数据安全性无特殊要求  5.网络负担非常重,但对响应速度要求高

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

TCP: 
TCP编程的服务器端一般步骤是: TCP包头的最小长度,为20字节。
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt(); * 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind(); 
  4、开启监听,用函数listen(); 
  5、接收客户端上来的连接,用函数accept(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接; 
  8、关闭监听; 
TCP编程的客户端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
  4、设置要连接的对方的IP地址和端口等属性; 
  5、连接服务器,用函数connect(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接;

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、关闭网络连接;

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值