TCP/UDP:协议适用场景、TCP握手和拥塞控制原理
TCP UDP优缺点对比
1 TCP优点
可靠,稳定
可靠性体现在传输数据之前,三次握手建立连接(四次挥手断开连接),并且在数据传递时,有确认,窗口,重传,拥塞控制机制,数据传完之后断开连接来节省系统资源
2 TCP缺点
慢,效率比较低,占用系统资源,容易被攻击
传输数据之前建立连接,会消耗时间;消息传递时,确认、重传和拥塞机制都会消耗大量的时间;
而且要在每台设备上维护所有的传输连接,每一个连接都会占用系统的CPU,内存等硬、软件资源;
并且TCP的确认机制,三次握手机制导致TCP容易被人利用,实现DOS,DDOS攻击
3 UDP优点
快,比TCP安全
UDP没有TCP的握手,确认窗口,重传,拥塞机制
UDP是一个无状态的传输机制,所以在传输数据时非常快
UDP没有TCP这些机制,相应被利用的漏洞就少一点
但是UDP的攻击也是存在的,比如:UDP 的flood攻击
4 UDP缺点
不可靠,不稳定
因为UDP没有TCP的那些可靠机制,在网络质量不好的时候容易发生丢包
TCP应用场景
当对网络通信质量有要求时,比如:整个数据要准确无误的传递给对方,这往往对于一些要求可靠的应用,比如HTTP,HTTPS,FTP等传输文件的协议,POP,SMTP等邮件的传输协议。
常见使用TCP协议的应用:
1.浏览器使用的:HTTP
2.FlashFXP:FTP
3.Outlook:POP,SMTP
4.文件传输
UDP 文件传输协议
对当前网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就使用UDP
日常生活中常见使用UDP协议:
1.QQ语音
2.QQ视频
3.TFTP
TCP通信过程有三个步骤:
• 建立TCP连接通道(三次握手)
• 传输数据(超时重传、快速重传、流量控制、拥塞控制)
• 断开TCP连接通道(四次握手)
1 三次握手
• 第一次:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认
• 第二次:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RCVD状态
• 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态
• 注:握手过程中传送的包里不含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
2 传输数据过程
• 超时重传:来保证TCP传输的可靠性
○ 每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq 号数据已收到。发送方在发送了某个seq包后,等待一段时间,如没有收到对应的ack回复,认为报文丢失,会重传这个数据包
○ 场景:发送端在傻等超时,触发重传
• 快速重传
○ 接受数据一方发现有数据包丢掉了,就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传
○ 场景:接收端主动告诉发送端数据没收到,触发发送方重传
• 流量控制:TCP滑动窗流量控制
○ TCP头里有一个字段叫Window,又叫Advertised-Window,该字段是接收端告诉发送端自己还有多少缓冲区可以接收数据
○ 于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来
○ 滑动窗可以是提高TCP传输效率的一种机制
○ 注:流量控制只关注发送端和接受端自身的状况,而没有考虑整个网络的通信情况
3 拥塞控制
○ 流量控制只关注发送端和接受端自身的状况
○ 拥塞控制,则是基于整个网络来考虑的
○ 场景:某一时刻网络上的延时突然增加,那TCP的应对只有重传数据,但、重传会导致网络的负担更重,导致更大的延迟以及更多的丢包,恶性循环
○ 为避免上述场景,TCP引入了拥塞控制策略
○ 拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复
4 四次挥手断开连接
• 第一次:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据
• 第二次:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)
• 第三次:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
• 第四次:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1