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连接通道(三次握手)

  • 传输数据(超时重传、快速重传、流量控制、拥塞控制)

  • 断开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

posted @ 2021-08-25 14:47  默行于世  阅读(349)  评论(0编辑  收藏  举报