TCP协议的特点
1、面向连接的传输层协议;在数据传输之前发送方和接收方先建立连接,三次握手就是建立连接的过程,四次挥手时销毁连接的一个过程。 2、可靠性传输;数据传输无差错,不重复,不丢失,按序到达。 3、每一条tcp连接只能有两个端点(socket套接字),即点到点。 4、全双工通信;通信双方的应用进程随时都可以向对方发送数据,因为两端都设有发送和接收缓存。 (全双工:同一时刻A可以发给B,B也可以发给A;半双工:A发给B的时候,B不能发给A,B发给A时同理)。 5、面向字节流;发送方发送的数据块和接收方接收到的数据块大小个数可能不等。发送方可以一次发送100字节,而接收方一次可以一次接收10字节,分十次接收;发送方也可以发送十次,一次发送10字节,而接收方一次接收完100字节。(但是发送的数据量不能超过接收方的接收缓存,否则会丢弃)
UDP是面向报文的,接收方一次只能接收一个报文,报文不能拆分不能合并。这个区别和两者的通信方式有关,对于TCP来说,通信前建立了连接,所以通信过程中可以知道是同一个发送方发送的数据,那每次读取多少数据都可以,只要保证有序就行;而UDP是无连接的,同时可以有多台主机发送数据,如果一次可以读取超过一个的报文,那这些报文可能来自不同的主机,那这些数据就是无意义的。
TCP可靠性的原理(慢开始,避免拥塞,快重传,快恢复)
1、通信双方建立连接,传输信道无差错,保证数据的准确性 2、接收方总能及时处理接收到的数据
解释:首先,通信双方通过三次握手建立连接,四次挥手断开连接,保证了传输信道的可靠;采用ARQ协议(超时重传协议)保证了传输数据的正确性。其次,采用了滑动窗口协议来进行流量控制,避免拥塞,确保接收方能够及时处理接受到的消息。
滑动窗口协议:窗口有固定的数据块个数,左边是已发送已ACK确认的,窗口里是已发送未ACK的和待发送的,窗口右边是未发送的,窗口里最左边开始按序,收到ACK确认窗口就向右滑动,个数固定,所以确认几个就滑动几个,如果最左边一直未收到确认,发送方就一直等待,最多发送完窗口内的所有待发送数据块,一直等到收到ACK确认,再向右滑动。这中间又有超时重传协议来解决丢包问题。
UDP协议的特点
1、无连接的传输层协议; 2、可靠性差,速度快(尽最大努力交付,不保证可靠交付) 3、面向报文,对应用层交下来的报文,不拆分,不合并,保留报文边界; 4、支持一对一,一对多,多对多通信; 5、没有拥塞控制,即使出现拥塞也不会降低发送速率; 6、首部开销小,只有8字节;
TCP和UDP的区别
1、TCP面向连接,UDP无连接; 2、TCP面向字节流,UDP面向报文; 3、TCP是可靠传输,UDP传输不可靠; 4、UDP传输速度比TCP更快; 5、TCP不保留报文边界,UDP保留报文边界; 6、TCP首部大,有20字节,UDP首部只有8字节; 7、TCP有流量控制和拥塞控制,UDP没有; 8、TCP是重量级协议,UDP是轻量级协议;
基于TCP的协议:Http,Https,FTP,SMTP(简单邮件传输协议),Telnet 基于UDP的协议:DNS,DHCP,TFTP,SNTP(简单网络管理协议)
QQ采用TCP和UDP,qq通话和视频通话,发视频都采用UDP
|