TCP与UDP
问题来源
今天学习尚硅谷关于网络的视频的时候,并且发现现在很多网络编程基于TCP/UDP协议,在面试的时候也会被问题。所以,理解TCP/UDP协议,并且弄清楚它的使用场景是有意义的一件事情。
TCP协议的定义
TCP协议,全中文名为传输控制协议,它和UDP协议都属于TCP/IP协议簇,http就是基于TCP/IP协议的,且TCP/UDP协议都运行在数据的传输层。
UDP协议的定义
UDP协议,用户数据报协议
区别
连接性
TCP是面向连接的协议,收发数据前必须和对方建立可靠的连接,数据传输前建立连接的3次握手、数据传输后断开连接的4次挥手【这可以在后面做深入研究,代码层面】,为数据传输打下可靠基础,其会监听端口;
UDP是面向无连接的协议,数据传输前,源端和终端不建立连接,发送端尽可能快的将数据扔到网络上,接收端从队列中读取消息段。
可靠性
TCP提供了可靠交互的服务,传输过程中采用许多方法保证连接上提供可靠的传输服务,如编号确认、流量控制、计时器等,确保数据无差错,不丢失,不重复,且按序到达;
UDP提供尽可能最快的交付,但不保证可靠交付。
报文传输
TCP面向字节流,将应用层传过来的报文看成一串无结构的字节流,分解成多个TCP报文传输后,在目的站重新装配;
UDP协议面向报文,不拆分应用报文,只保留报文边界,一次发送一个报文,接收方除去报文头部后,原封不动将报文交给上层应用。
吞吐控制
TCP阻塞控制、流量控制、重传机制、滑动窗口等机制保证传输质量;
UDP没有
双工性
TCP只能点对点双工通信
UDP支持一对一、一对多、多对多交互通信
以下是TCP/UDP编程步骤
从TCP和UDP的编程步骤可以总结出以下:
UDP不需要调用监听(listen)和接收(accept)客户端连接,而客户端也不需要连接服务器端,UDP中任何一方只要建立socket就可以用sendto发送数据、用recvfrom接收数据,并不关心对方是否存在,是否发送了数据。
TCP/UDP的使用场景
TCP:万维网(www)、文件传输(FTP)、电子邮件(SMTP)
UDP:实时通信
PS:有一个问题,就是直播,用的是TCP还是UDP协议呢?查了一下资料,发现是使用基于TCP的框架包的,但是从原理来讲,好像UDP更加的适合