码迷,mamicode.com
首页 > 其他好文 > 详细

TCP/IP 三次握手 四次断开

时间:2015-10-19 02:06:37      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:tcp/ip   syn   握手   挥手   

    所谓的三次握手,就是指客户端和服务器端建立 TCP 连接。访问过程中会发送三个包来确认,并建立连接。

技术分享


    第一步:客户端会发送请求包,包内包含 SYN 信号,SYN 标记位置为1(还可以是其他的位置),并且随机产生一个随机值 seq(用来后面的检验),将这些发送给服务端。

    第二步:服务端收到 SYN 信号后,会发送一个确认信息给客户端,包内包含 SYN 的标志位 SYN=1 ,以及确认标志位 ACK=1 ,检验位 ack=J+1(客户端发送的随机数+1),本机生成的随机数

seq=K。

    第三步:客户端在收到服务端的确认信息后,开始发送建立连接的信息,包内包含,确认标志位ACK=1,检验位 ack=K+1 。


    经过以上这三步,服务端与客户端就建立了连接。

(同时由于服务器端只要收到 SYN 信号,就会处理并发送建立连接的信息,所以有些人会不停的发送 SYN 请求信息,但是不接收服务器端发送来的确定建立信息,也就是说只执行三次握手的第一步,那么服务器端就会一直接受接受,然后导致服务器资源耗尽。这就是 SYN 攻击。解决办法我在网上找了,大致有两种:1、硬件防护。2、软件防护。

硬件防护不用说,就是买硬件防火墙。

软件防护方法有多种:

1、做 SYN 网关,当用户发送 SYN 请求时,由网关代理转发至后端服务器,这样后端服务器能与网关之间完成一整套TCP连接,SYN 攻击被阻挡在 SYN 网关那里。

2、做 SYN 连接超时设置,再短时间内如果一个连接没有完成,则不会继续等待,会自动断开。

3、做 SYN 中继,当用户发送 SYN 请求时,中继器会等待知道收到客户端发送的 ACK 检验后再讲请求发送到后端服务器上,否则丢弃。)


    建立连接后,自然就需要断开连接。

    TCP/IP 四次挥手

技术分享

    第一步:客户端主动发出断开请求 FIN M 给服务器。

    第二步:服务器端在收到客户端发送的 FIN M 后,返回确认信息 ack M+1 。

    第三步:服务器端发送完确认信息后会再次发送 FIN N ,用来关闭向客户端发送的数据。

    第四步:客户端在收到服务器端发送来的确认信息后,会返回一个标志信息 ACK=1(这个 1 就是之前建立连接的标志信息),然后返回确认信息 ack=K+1。

    

    至此,TCP连接彻底断开。

(注:文中图片来自http://blog.csdn.net/mxgsgtc/article/details/12718905  )

    以上只是我个人的语言组织理解,如果有错误的地方,还望能指正出来,良辰在此谢过技术分享




本文出自 “菜鸟的Linux历程” 博客,请务必保留此出处http://jackdady.blog.51cto.com/8965949/1704004

TCP/IP 三次握手 四次断开

标签:tcp/ip   syn   握手   挥手   

原文地址:http://jackdady.blog.51cto.com/8965949/1704004

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!