TCP三次握手及TCP连接状态 TCP报文首部格式

建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图:

 

 

 

开个玩笑

 

ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1

SYN(SYNchronization同步):在连接建立用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使用SYN=1

ACK=1因此,SYN置1表示这是一个连接请求或连接接受报文

FIN(FINIS)即完,终结的意思,用来释放一个连接。当FIN=1时,表明此报文段发送方的数据已经发送完毕,并要求释放连接

 

TCP三次握手过程:

1. 首先由Client发出请求连接即SYN=1,声明自己的序号seq=X

2. 然后Server进行回复确认,即SYN=1 声明自己的序号seq=y,并设置ack=x+1

3 .最后Client再进行一次确认,设置seq=x+1 ack+y+1

注:seq 序列号范围:2^32-1 如果超过最大值,再从0开始

seq 序列号作用:依据这个序列号来组数据,如果发N个数据包,服务端会按序列号来重新组装数据

使用tcpdump抓取TCP三次握手

tcpdump 常用参数:

-c 指定包个数

-n ip,端口用数字方式显示

port 指定端口

Client:192.168.94.11

server:192.168.94.22

使用Client ssh Server

查看Server端

Flag[S]中的S表示为SYN包为1 。client主机返回ack=1 这个值为相对序号,如果想查看完整序号可以命令后面加-S

TCP连接状态 : 

服务器端:LISTEN:侦听来自远方的TCP端口的连接请求

客户端:SYN-SENT:再发送连接请求后等待匹配的连接请求

服务器端:SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认

客户端/服务器端:ESTABLISHED:代表一个打开的连接

客户端:FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

服务器端:CLOSE-WAIT:等待从本地用户发来的连接中断请求

客户端:FIN-WAIT-2:从远程TCP等待连接中断请求

服务器端:LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认

客户端:TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

服务器端:CLOSED:没有任何连接状态

 

在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包

这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超关闭时间,才能施放内存

如果恶意者通过通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程

posted @ 2018-08-28 23:49  damowang~  阅读(...)  评论(...编辑  收藏