网络协议-TCP的四次挥手

本文正在参与 “网络协议必知必会

山有峰顶,海有彼岸,漫漫长路,终有回转,余味苦涩,终会有回甘。别被眼前的磨难打败了,或许光明就在你放弃前的那一刻。带着愉快的心情做一个愉快的梦,醒来后,又是新的一天。

世界上任何的书籍都不能带给你好运,但是它们能让你悄悄的成为你自己的

前言

TCP位于传输层,是一个可靠的连接服务,为了准确的传输数据,TCP采用了三次握手,四次挥手策略. 这里讲的是四次挥手(也叫四次握手)

TCP首部格式

TCP首部数据格式,通常是20个字节再加可变字段,其中有6个特殊的标识bit,分别是URG,ACK,PSH,RST,SYN,FIN等,位置见下图

image.png

标识位 含义
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,seqack.

第一次握手(客户端): 发送请求,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时间之后再次关闭.

图如下

image.png

示例如下 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
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复制代码

猜你喜欢

转载自juejin.im/post/7035984305893408805