1.TCP与UDP协议有什么区别?
UDP协议头部:16位源端口号,16位目的端口号,16位UDP长度,16位UDP校验和
TCP协议头部:16位源端口,16位目的端口,数据偏移,保留字段,校验和,紧急指针,TCP选项,填充
序号,4个字节,TCP数据是字节流,标识每个字节的序号;起始序号是建立连接时设置的;序号表示报文段数据的第一个字节
确认号,表示期待收到对方下一个报文的第一个数据字节序号
控制位,ACK:确认位,ACK=1确认号生效;SYN:同步位,SYN=1表示连接请求报文;FIN:终止位,FIN=1表示释放连接
窗口,允许对方发送的数据量。
2.简述TCP协议三次握手过程
- 主动方发起连接,SYN=1发起连接请求报文,seq=x序号为x
- 被动方接收后返回,SYN=1,ACK=1确认号生效,seq=y序号为y,ack=x+1确认号(希望下次收到x+1)
- 主动方接收后回复,ACK=1,seq=x+1,ack=y+1
主动方在回复完之后就建立了连接,被动方在第二次接收请求后建立连接
3.三次握手可以简化成两次握手吗?为什么?
不可以。
假设第一次建立连接的报文丢失,主动方会再次发送建立连接的请求,这时被动方就有可能会收到两个建立连接的请求,当被动方对两条建立连接的请求回复确认之后,就成功建立了两条连接。两条连接不仅导致资源的损耗,也会影响应用的正常使用,所以需要主动方的第三次确认,仅保留一条连接通道既可。
4.简述TCP协议四次挥手的过程
- 主动方发起中断连接,FIN=1释放连接,seq=u(我是u)序号为u
- 被动方接收后返回,ACK=1确认号生效,seq=v,ack=u+1
- 被动方发送,FIN=1释放连接,ACK=1,seq=w(我是w),ack=u+1(希望下次收到u+1)
- 主动方接收后返回确认,ACK=1,seq=u+1(给你发u+1),ack=w+1(收到了,下次给我w+1)
5.简述什么是TIME_WAIT状态
TIME_WAIT状态是指第四次挥手后,主动中断连接方所处的状态,这个状态下,主动方尚未完全关闭TCP连接,端口不可复用。
MSL(Max Segment Lifetime)最长报文段寿命
主动方在TIME_WAIT状态下等待2MSL
- 最后一个报文还没有确认
- 确保最后一个ACK能到达对方
- 2MSL时间内,如果没有到达对方,对方会重新进行第三次挥手,确保连接正常释放
- 确保当前连接所有的报文都已经过期
6.简述TCP协议是如何保证可靠传输的
停止等待协议,超时重传机制来保证可靠的传输
提高信道利用率:
- 滑动窗口:发送窗口内的一连串字节
- 累计确认:只确认收到的最后一个字节,即表示该字节之前的都已经收到
7.简述TCP协议滑动窗口的工作过程
滑动窗口:
- 窗口指明允许对方发送的数据量
- TCP协议是传输数据流的协议,通过TCP协议头部序号、确认号以及窗口等字段的控制,可以在有限的缓冲资源下,接收几乎无限的数据
8.简述TCP协议常见的拥塞避免算法
拥塞窗口:TCP协议基于窗口的拥塞控制需要的一个变量配置
门限值:拥塞避免算法启动阈值
传输轮次:一次报文发送和确认的时间称为一次传输轮次,RTT定义的是一次传输轮次的往返时间
慢开始与拥塞避免
快重传与快恢复
快重传:让发送方尽早知道个别报文的丢失,并立即重传
快恢复:过程4,立即重传后,不会从慢开始,直接从初始值的一半开始执行拥塞避免算法(因为没有慢开始所以叫快恢复)
9.什么是TCP粘包?如何解决?
粘包就是两个报文被错误的进行解释,被错误进行拆分
为了避免粘包,应用层协议需要自行设计消息边界,以正确分离消息,避免消息粘连
分离消息的两个方法:基于长度的标识,基于特殊的分隔符
TCP协议是面向字节流的协议,它可能会组合或者拆分应用层协议的数据
粘包并不是TCP协议造成的,而是应用层协议设计缺陷导致的问题
Nagle算法:一种通过减少数据包的方式提高TCP传输性能的算法
因为网络带宽有限,它不会将小的数据块直接发送到目的主机,而是会在本地缓冲区中等待更多待发送的数据,这种批量发送数据的策略虽然会影响实时性和网络延迟,但是能够降低网络拥堵的可能性并减少额外开销。
10.VPN是什么?解决了什么问题?简述其原理
虚拟专用网,企业内部,校园网等
利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网 VPN
网络1的A主机和网络2的A主机通信,需要各自通过各自的具有全球IP的路由器,将数据加密后在“隧道”中传输
网络1,2内部的主机通信都不经过互联网
11.你了解哪些常见的针对TCP协议的安全攻击手段?简述其原理
资源耗尽类攻击:SYN flood攻击
防范策略
- 识别异常流量
- 分流异常流量
- 高可用服务部署
- 合理设置参数
- 实时监控告警
- 防火墙