1.TCP三次握手2.TCP四次挥手3.TCP报文格式(传输层)4.IP数据包格式(网络层)5.SYN攻击
A:我们在一起吧;B:那好吧,我答应你,我愿意和你在一起;A:好的,那我们就在一起了,要保持联系;
A:我们分手吧;B:真的吗?给我点时间让我考虑考虑吧;(此时A接收到消息后,处于等待的状态);B:我考虑好了,我们分手吧;A:我有点怀疑,你尽然那么爽快的就答应了,我还是再向你确认下,我们彻底分手了,不要再联系了;
总结:第一次:Client---->Server(发送SYN)第二次:Server----->Client(发送ACK+SYN)第三次:Client---->Server(发送SYN)
总结:第一次:Client---->Server(发送FIN)第二次:Server----->Client(发送ACK)第三次:Server----->Client(发送FIN)第四次:Client---->Server(发送ACK)
URG(urgent紧急)ACK(acknowledgement 确认)PSH(push传送)RST(reset重置)SYN(synchronous建立联机)FIN(finish结束)
ACK:为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段
PSH:为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满
RST:用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题
SYN:同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )
FIN:用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流
Window Size:窗口大小,2个字节,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535(2^16 - 1)
Checksum:校验和,2个字节,对整个的 TCP 报文段(包括 TCP 头部和 TCP 数据),以 16 位字进行计算所得。这是一个强制性的字段,要求由发送端计算和存储,并由接收端进行验证
Urgent Pointer:紧急指针,2个字节,是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。 只有当URG 标志置 1 时紧急指针才有效
Option and Pad:选项和填充,n*4字节,常见的可选字段是最长报文大小 MSS(Maximum Segment Size) 。每个连接方通常都在通信的第一个报文段(为建立连接而设置 SYN 标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是 32 位字的整数倍,所以要加填充位,使得报头长度成为整字数
Data:数据,不定长度,为上层协议封装好的数据
5.SYN攻击
在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击
netstat -n -p TCP | grep SYN_RECV
一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.
但是不能完全防范syn攻击;
联系客服