山有峰顶,海有彼岸,漫漫长路,终有回转,余味苦涩,终会有回甘。别被眼前的磨难打败了,或许光明就在你放弃前的那一刻。带着愉快的心情做一个愉快的梦,醒来后,又是新的一天。
世界上任何的书籍都不能带给你好运,但是它们能让你悄悄的成为你自己的
前言
TCP位于传输层,是一个可靠的连接服务,为了准确的传输数据,TCP采用了三次握手,四次挥手策略. 这里讲的是四次挥手(也叫四次握手)
TCP首部格式
TCP首部数据格式,通常是20个字节再加可变字段,其中有6个特殊的标识bit,分别是URG
,ACK
,PSH
,RST
,SYN
,FIN
等,位置见下图
标识位 | 含义 |
---|---|
URG | 紧急指针有效 |
ACK | 确认序号有效 |
PSH | 接收方应该尽快将这个报文段交给应用层 |
RST | 重建连接 |
SYN | 同步序号用来发起一个连接 |
FIN | 发端完成发送任务 |
... |
本文中用到的标识位是 ACK
FIN
, 使用的时候bit位设置为1,否则默认为0. 也用到了32位序号
(Sequence number
)和32位确认序号
(Acknowledgment number
),这里是用来存放双发的初始序列号(ISN
)的.
大写的ACK
FIN
代表标志位, 小写的seq
代表Sequence number
, 小写的ack
代表Acknowledgment number
,
四次挥手
通俗的说
以客户端先断开的话
客户端: 我数据发送完了,可以关闭连接了.
服务端: 收到了,等我发送完数据.
服务端: 我数据发送完了,我也可以关闭连接了.
客户端: 收到了.
随后服务端关闭连接, 客户端等指定时间后也关闭了连接.
正常的说
以客户端先断开为例:
在四次挥的过程中,会使用ACK
FIN
,seq
和ack
.
第一次握手(客户端): 发送请求,TCP中设置FIN
=1 ,seq
设置为本机的ISN
.
第二次握手(服务端): 收到客户端的数据之后,发送请求,TCP中设置ACK
=1 ,seq
设置为本机的ISN
,并将ack
设置为客户端的ISN
+1
第三次握手(服务端): 等服务端数据传送完成之后, 发送请求, TCP中设置ACK
=1 FIN
=1, seq
设置为本机的另一个ISN
(叫ISN2
) ,ack
设置为客户端的ISN
+1
第四次握手(客户端): 客户端收到返回信息后, 发送请求, TCP中设置ACK
=1 , seq
设置为本机的ISN
+1 ,ack
设置为服务器的ISN2
+1
服务端关闭连接,客户端等待2MSL时间之后再次关闭.
图如下
示例如下 20.1.0.1是我的电脑,20.1.0.128电脑上的一个虚拟机
在128上使用tcpdump监听ens33(虚拟机网卡)的80(nginx)端口
tcpdump -i ens33 port 80 and host 20.1.0.1 -S -n
复制代码
在1电脑上使用telnet请求20.1.0.128的80端口
telnet 20.1.0.128 80
复制代码
之后Ctrl+C
之后
tcpdump监听日志如下
Ctrl+C
的数据
10:33:19.377458 IP 20.1.0.1.58633 > 20.1.0.128.http: Flags [P.], seq 2066280967:2066280968, ack 3607501457, win 2053, length 1: HTTP
10:33:19.377573 IP 20.1.0.128.http > 20.1.0.1.58633: Flags [.], ack 2066280968, win 229, length 0
10:33:19.377855 IP 20.1.0.128.http > 20.1.0.1.58633: Flags [P.], seq 3607501457:3607501766, ack 2066280968, win 229, length 309: HTTP: HTTP/1.1 400 Bad Request
复制代码
四次挥手的数据
10:33:19.378017 IP 20.1.0.128.http > 20.1.0.1.58633: Flags [F.], seq 3607501766, ack 2066280968, win 229, length 0
10:33:19.378079 IP 20.1.0.1.58633 > 20.1.0.128.http: Flags [.], ack 3607501767, win 2051, length 0
10:33:19.382138 IP 20.1.0.1.58633 > 20.1.0.128.http: Flags [F.], seq 2066280968, ack 3607501767, win 2051, length 0
10:33:19.382234 IP 20.1.0.128.http > 20.1.0.1.58633: Flags [.], ack 2066280969, win 229, length 0
复制代码
针对四次挥手的攻击
FIN Flood
RST Flood
...
结束语
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
如果您喜欢我的文章,可以[关注]+[点赞]+[评论],您的三连是我前进的动力,期待与您共同成长~
作者:ZOUZDC
链接:https://juejin.cn/post/7028963866063306760
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码