TCP为什么需要三次握手、四次挥手
1、三次握手的主要目的是为了保证连接双工的,可靠更多的是通过重传机制来保证。
2、因为连接是双工的,对方必须收到Fin包以及确认才可以关闭。
syn包 --》[S]
ack包 --》[.]
数据包 --》[P]
Fin包 --》[F]
三次握手
第一次握手
客户端给服务器发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP 数据包), 该段中也包含客户端的初始序列号(Sequence number = J)。
SYN是同步的缩写,SYN 段是发送到另一台计算机的 TCP 数据包,请求在它们之间建立连接
第二次握手
服务器返回客户端 SYN +ACK 段(在 TCP 标头中SYN和ACK位字段都为 1 的 TCP/IP 数据包), 该段中包含服务器的初始序列号(Sequence number = K);同时使 Acknowledgment number = J + 1来表示确认已收到客户端的 SYN段(Sequence number = J)。
第三次握手
客户端给服务器响应一个ACK段(在 TCP 标头中 ACK 位字段为 1 的 TCP/IP 数据包), 该段中使 Acknowledgment number = K + 1来表示确认已收到服务器的 SYN段(Sequence number = K)。
三次握手
客户端 发送一个SYN (j) --->服务端
服务端 ACK(j+1)+ SYN(K) --> 客户端
客户端 ACK(K+1) ---> 服务端
四次挥手
客户端 发送fin包请求 ----> 服务端
服务端 发送 ack 确认收到请求------> 客户端
服务端 发送fin包到------> 客户端
客户端 发送 ack包确认关闭 ------> 服务端
SYN flood攻击
攻击方的客户端只发送SYN分节给服务器,然后对服务器发回来的SYN+ACK什么也不做,直接忽略掉,
不发送ACK给服务器;这样就可以占据着服务器的半连接队列的资源,导致正常的客户端连接无法连接上服务器。-----[维基百科]
(SYN flood攻击的方式其实也分两种,第一种,攻击方的客户端一直发送SYN,对于服务器回应的SYN+ACK什么也不做,不回应ACK, 第二种,攻击方的客户端发送SYN时,将源IP改为一个虚假的IP, 然后服务器将SYN+ACK发送到虚假的IP, 这样当然永远也得不到ACK的回应。)
# 抓取百度报文
tcpdump -n -s 0 -i any host www.baidu.com -w bd.cap
root@zzx:~# tcpdump -r bd.cap
reading from file bd.cap, link-type LINUX_SLL (Linux cooked v1)
09:17:21.118239 IP bogon.37650 > 110.242.68.3.https: Flags [S], seq 1803453215, win 64240, options [mss 1460,sackOK,TS val 4144603410 ecr 0,nop,wscale 7], length 0
09:17:21.125425 IP bogon.37652 > 110.242.68.3.https: Flags [S], seq 2881082421, win 64240, options [mss 1460,sackOK,TS val 4144603417 ecr 0,nop,wscale 7], length 0
09:17:21.129660 IP 110.242.68.3.https > bogon.37650: Flags [S.], seq 155810531, ack 1803453216, win 64240, options [mss 1460], length 0
09:17:21.129721 IP bogon.37650 > 110.242.68.3.https: Flags [.], ack 1, win 64240, length 0
09:17:21.131060 IP bogon.37650 > 110.242.68.3.https: Flags [P.], seq 1:518, ack 1, win 64240, length 517
09:17:21.131901 IP 110.242.68.3.https > bogon.37650: Flags [.], ack 518, win 64240, length 0
09:17:21.139084 IP 110.242.68.3.https > bogon.37652: Flags [S.], seq 106200244, ack 2881082422, win 64240, options [mss 1460], length 0