TCP和UDP都是运输层协议
参考链接:https://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html
TCP:
Transmission Control Protocol,传输控制协议,是面向连接的协议,也就是说,在收发数据之前,必须和对象建立可靠的连接,一个TCP连接必须通过三次"会话"才能建立起来,其中的过程非常复杂
TCP三次握手过程:
1 主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主机B两件事:我想要和你通信,你可以用哪个序列号作为起始数据段来回应我
2 主机B收到主机A的请求后,用一个带有确认回答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我
3 主机A收到这个数据段后,再发一个确认应答,确认已经收到主机B的数据:我已经收到回复,我现在要开始传输实际数据了
3次握手的特点:
没有应用层的数据
SYN这个标志位只有在建立TCP连接时才会被置1
握手完成后SYN标志位被置0
TCP建立连接要进行3次握手,而断开连接需要4次握手
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方关闭连接
由TCP3次握手4次挥手可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可能性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
UDP:
User Data Protocol,用户数据报协议
是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单的去抓取来自应用程序的数据,并尽可能快的把它扔到网络上;在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度,计算机的能力和传输带宽的限制,在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读取一个消息段
由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态,因此一台服务机可同时向多个客户机传递相同的消息
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表
UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小
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则是不可靠信道