ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅谈TCP的三次握手

2019-07-14 22:42:50  阅读:268  来源: 互联网

标签:浅谈 握手 SYN TCP Server 服务器 连接


上一篇文章《浅谈TCP/IP协议栈模型》https://mp.csdn.net/postedit/95853735简单介绍了标准TCP/IP协议栈的四层网络结构,主要对每一层协议做了简单的描述和网络协议抓包,基于上篇文章的传输层,本篇文章主要对TCP协议的三次握手及四次挥手做一个简单学习总结。

TCP的三次握手(Three-way Handshake)

三次握手顾名思义就是在TCP建立连接时,需要客户端和服务器总共发送三个包,三次握手的目的就是连接服务器指定的端口,并同步连接双方的序列号和确认号,并交换TCP窗口大小等信息

                    

第一次握手:

客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里,此时客户端进入SYN_SEND状态,等待服务器B确认。

                    

第二次握手:

服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。并设置发送序号为Y,此时服务端进入SYN_RECV状态

                     

第三次握手.

客户端再次发送确认包ACK为1,此时的SYN标志位为0. 并且把服务器发来的序号字段+1,即Y+1,放在确定字段中发送给对方.并且将发送序号的ISN的+1,客户端和服务端进入ESTABLISHED状态,完成三次握手

                     

为什么需要三次握手?

答:三次握手完成了两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

    现在假设把三次握手改成仅需要两次握手,计算机Client和Server之间的通信,Client给Server发送一个连接请求分组,Server收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,Server认为连接已经成功地建立了,可以开始发送数据分组。可是,Client在Server的应答分组在传输中被丢失的情况下,将不知道Server是否已准备好,不知道Server建立什么样的序列号,Client甚至怀疑Server是否收到自己的连接请求分组。在这种情况下,Client认为连接还未建立成功,将忽略Server发来的任何数据分 组,只等待连接确认应答分组。而Server在发出的分组超时后,重复发送同样的分组。这样就形成了死循环。

三次握手有什么缺点?

答:在三次握手过程中,服务器发送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攻击。

三次握手抓包入下:

 


标签:浅谈,握手,SYN,TCP,Server,服务器,连接
来源: https://blog.csdn.net/muchong123/article/details/95923506

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有