TCP和UDP详解

TCP和UDP的优缺点

两者都是通信协议,TCP和UDP都是传输层协议,但是他们的通信机制和应用场景不同。
TCP(Transmission Control Protocol)又叫传输控制协议。TCP面向字节流。
优点:
它是面向连接的,可靠的协议。基于TCP进行通信时,通信双方需要建立TCP连接,建立连接需要经过三次握手,握手成功才可以通信。并且在数据传递时,有确认窗口,重传,拥塞控制机制,数据传完之后四次握手,断开连接来节省系统资源。
缺点:
效率低,占用系统资源,容易被攻击。

UDP(User Datagram Protocol)用户数据报协议。它是一种面向无连接,不可靠的协议。UDP是面向报文的。
优点:
在传递数据时非常快,漏洞少一些,但还是无法避免攻击,比如UDP Flood。黑客们通过僵尸网络向目标服务器发起快速、大量的UDP报文(通常是大包),消耗带宽资源,造成链路阻塞。
缺点:
不可靠。如果网络质量不好,就会很容易丢包。

TCP攻击分类

  1. flood类攻击:发送海量syn,ack等报文,从而将server的半连接队列占满,占用服务器资源,使服务器无法接受合法客户的连接请求。【拒绝服务攻击DOS】

防御:带宽资源要充足;服务器的硬件配置(cpu和内存);规范自身操作;在骨干节点配置防火墙
2. 连接耗尽类攻击:完成三次握手后,不再发送报文,一直维持连接,或者发送FIN报文、断开后立即迅速再次连接,消耗连接资源。
3. 利用协议特性攻击。比如,连接成功后,将窗口大小设置为0,则服务器就会一直等待窗口开放,造成资源不可用。或者发送异常报文,可能造成被攻击目标崩溃。

tcp和udp可以一起使用吗?使用场景区别?

Tcp 当对网络通信质量有要求时使用
邮件:POP,SMTP
浏览器使用的:HTTP
QQ文件传输

Udp 对当前网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就使用UDP
QQ语音、QQ视频

三次握手和四次挥手

SYN:标志位用来建立连接
ACK:确认标志位
FIN:表示发送端已经没有数据要求传输了,希望释放连接

三次握手
在这里插入图片描述

四次挥手
在这里插入图片描述

第三次握手失败了怎么办?

server在等待client回复ACK的过程中超时了,那么server会向client发送一个RTS报文段并进入关闭状态。这样做的目的是为了防止SYN洪泛攻击。

当关闭连接时最后一个ACK丢失怎么办?

TCP就会认为它的FIN丢失,进行重发FIN。在客户端收到FIN后,会设置一个计时器,等待2MSL( Maximum Segment Life,最大存活时间),等待下一个FIN到来。如果到了,客户端就再回复一个新的ACK报文,并重新设置2MSL计时器。但是如果重传FIN到达客户端时候超时了,客户端已经进入了CLOSED状态,那服务器无法关闭连接。但是不会一直不关,服务器会不断发送10个75s间隔的探查,如果都没有响应就终止连接。

如果已经建立了连接,但是客户端突然出现故障了怎么办?

服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器会不断发送10个75s间隔的探查,如果都没有响应就终止连接。

拥塞控制常用算法

拥塞窗口:表示发送端下一次最多可以发送的数据分包的个数。
拥塞控制常用算法:

  1. 慢开始
  2. 拥塞避免
  3. 快重传
  4. 快恢复

开始执行慢开始的时候,拥塞窗口cwnd=1,之后以指数形式增长。
增长到慢开始门限ssthresh时,改为拥塞避免算法,按照线性增长。
只要发送方判断网络出现拥塞,TCP马上把拥塞窗口 cwnd 减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半。
当发送方连续收到三个重复ack后,断定分组丢失,不必等待重传计时器超时,TCP进入快重传和快恢复。
快重传:1.把ssthresh设置为cwnd一半2. 由于发送方现在认为网络很可能没有发生拥塞,把cwnd值设置为慢开始门限ssthresh减半后的数值(或者ssthresh + 3 X MSS【Maxitum Segment Size 最大分段大小】),重传丢失的报文段。然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

在这里插入图片描述