目录
1.tcp三次握手
2.tcp四次挥手
3.思考问题(面试常考)
3.1 三次握手时可能出现什么攻击?
3.2 为什么是三次握手,可不可以是两次,为什么?
编辑3.3 四次挥手的过程可以用三次完成吗?
4.抓包演示三次握手四次挥手
1.tcp三次握手
tcp协议特点:面向连接的,可靠的,流式服务,
udp协议特点:无连接的,不可靠的,数据报服务
TCP协议提供的是:面向连接的,可靠的,字节流服务.使用TCP协议通信的双方必须先建立连接,才能开始数据的读写.双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输.TCP连接是全双工的,双方的数据可以通过一个连接进行读写,完成数据交换之后,通信双方都必须断开连接以释放系统资源.
三次握手发生在发起链接 connect 的时候:
tcp协议报头:
6位标志位包含如下几项:
URG标志:表示紧急指针(urgent pointer)是否有效,
ACK标志:表示确认号是否有效.我们称携带ACK标志的TCP报文段为确认报文段
PSH标志:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在TCP接收缓冲区中).
RST标志:表示要求对方重新建立连接,我们称携带RST标志的TCP报文段为复位报文段
SYN标志:表示请求建立一个连接.我门称携带SYN标志的TCP报文段为同步报文段
FIN标志:表示通知对方本端要关闭连接了.我们称携带FIN标志的TCP报文段为结束报文段
2.tcp四次挥手
什么时候开始挥手?服务器或者客户端执行close的时候;
刚好被动断开方收到要关闭的报文的时候也执行了close;也就是双方同时close,那么此时四次挥手也就演变为了三次挥手.否则,一定是需要四次挥手的.
3.思考问题(面试常考)
3.1 三次握手时可能出现什么攻击?
1.SYN洪泛攻击(SYN Flood Attack)客户端不断向服务器端发送连接请求,而不执行三次握手的第三步操作,就是只完成了三次握手的前两步操作,存在大量的半开连接,消耗服务器的连接资源。
防御:服务器端在分配资源时检查一下客户端是否是合法用户
2.DDOS攻击(分布式拒绝服务)
随着技术的进步,服务器端分配资源的时候会判断是否合法,以防止洪泛攻击,DDOS攻击是伪造合法用户。
3.2 为什么是三次握手,可不可以是两次,为什么?
不可以,原因1:因为容易受到攻击,参考第一问;如果不考虑攻击的话,原因:为了防止已经失效的连接请求报文段突然又传到了服务器端,具体如下:
3.3 四次挥手的过程可以用三次完成吗?
可以,第二步和第三步合在一起(没有时间差)。刚好被动断开方收到要关闭的报文的时候也执行了close;也就是双方同时close,那么此时四次挥手也就演变为了三次挥手.否则,一定是需要四次挥手的.
4.挥手时,可能受到什么攻击?
第三步容易受到攻击,第三步发FIN的时候,是被动断开,主动断开方最先发送结束报文想要断开链接,发送后主动方进入到TIME_WAIT状态(持续大概两分钟),在此期间,被动方不同意断开连接,不停的发FIN。主动方就认为,被动方没有收到ACK,这个连接就一直存在,无法断开。但是这种情况需要封装底层报文,一般不会这么做,除非是专门做攻击。
4.抓包演示三次握手四次挥手
使用tcpdump可以抓包观察TCP连接的建立与关闭.该命令需要管理员权限,格式如下:
(假设两个测试用的主机IP地址为192.168.6.104和192.168.6.146)
sudo tcpdump -i ens33 -nt '(src 192.168.6.104 and dst 192.168.6.146) or (src 192.168.6.146 and dst 192.168.6.104 )'
ens33表示是虚拟机
注意:这里如果是用回环地址测试,可以这样写:sudo tcpdump -i lo
三次握手抓包过程:
四次挥手抓包过程:
抓包数据的Flag含义:
S:SYN;同步;表示开始会话请求
F:FIN ;结束; 结束会话
R:RST;复位;中断一个连接
P:PUSH;推送: 数据包立即发送
U:URG;紧急
E:ECE;显式拥塞提醒回应
W:CWR;拥塞窗口减少
. :没有Flag(除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)