三次握手

下图就是wireshark抓包工具抓获的TCP连接建立的三次握手过程:

http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html

相对于SOCKET开发人员,TCP创建过程和链接折除过程是由TCP/IP协议栈自己主动创建的.因此开发人员并不须要控制这个过程.可是对于理解TCP底层运作机制,相当有帮助.

 
   并且对于有网络协议project师之类笔试,差点儿是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并反复讲一次,下午差点儿每个人都被问到这个问题。
 
因此在这里详解一下这两个过程。
 
TCP三次握手
 
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,须要client和server总共发送3个包。
 
三次握手的目的是连接server指定port,建立TCP连接,并同步连接两方的序列号和确认号并交换 TCP 窗体大小信息.在socket编程中,client运行connect()时。将触发三次握手。
 
 
 
 
  • 第一次握手:

    client发送一个TCP的SYN标志位置1的包指明客户打算连接的server的port,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
  • 第二次握手:

    server发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同一时候,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

  • 第三次握手.

    client再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.而且把server发来ACK的序号字段+1,放在确定字段中发送给对方.而且在数据段放写ISN的+1

SYN攻击

在三次握手过程中,server发送SYN-ACK之后,收到client的ACK之前的TCP连接称为半连接(half-open connect).此时server处于Syn_RECV状态.当收到ACK后,server转入ESTABLISHED状态.

Syn攻击就是 攻击client 在短时间内伪造大量不存在的IP地址,向server不断地发送syn包,server回复确认包,并等待客户的确认,因为源地址是不存在的,server须要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统执行缓慢,严重者引起网络阻塞甚至系统瘫痪。

Syn攻击是一个典型的DDOS攻击。检測SYN攻击很的方便,当你在server上看到大量的半连接状态时,特别是源IP地址是随机的,基本上能够断定这是一次SYN攻击.在Linux下能够例如以下命令检測是否被Syn攻击

netstat -n -p TCP | grep SYN_RECV

一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,改动tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、添加最大半连接和缩短超时时间等.

可是不能全然防范syn攻击。

TCP 四次挥手

TCP的连接的拆除须要发送四个包,因此称为四次挥手(four-way handshake)。client或server均可主动发起挥手动作,在socket编程中,不论什么一方运行close()操作就可以产生挥手操作。

 

參见wireshark抓包,实測的抓包结果并没有严格按挥手时序。我预计是时间间隔太短造成。

source url:http://bluedrum.cublog.cn

TCP三次握手的过程的更多相关文章

  1. TCP三次握手的过程,accept发生在三次握手的哪一个阶段?

    答案是:accept过程发生在三次握手之后,三次握手完成后,客户端和服务器就建立了tcp连接并可以进行数据交互了.这时可以调用accept函数获得此连接. TCP Accept总结 TCP Accep ...

  2. 一文彻底搞懂 TCP三次握手、四次挥手过程及原理

    原创文章出自公众号:「码农富哥」,欢迎收藏和关注,如转载请注明出处! TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接. 无论哪 ...

  3. 详解TCP三次握手(建立TCP连接过程)

    在讲述TCP三次握手,即建立TCP连接的过程之前,需要先介绍一下TCP协议的包结构. 这里只对涉及到三次握手过程的字段做解释 (1) 序号(Sequence number) 我们通过 TCP 协议将数 ...

  4. 让你彻底明白TCP三次握手,四次挥手

    今天我们来讲一下TCP的三次握手和四次挥手,先来张思维导图.  一.TCP是什么 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流 ...

  5. 面试官问我TCP三次握手和四次挥手,我真的是

    候选者:面试官你好,请问面试可以开始了吗 面试官:嗯,开始吧 面试官:今天来聊聊TCP吧,TCP的各个状态还有印象吗? 候选者:还有些许印象的,要不我就来简单说下TCP的三次握手和四次挥手的流程吧 候 ...

  6. TCP三次握手和连接关闭过程详解

    1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和S ...

  7. 【转】TCP三次握手过程

    写的非常明白:http://www.cnblogs.com/rootq/articles/1377355.html TCP协议三次握手过程分析 TCP(Transmission Control Pro ...

  8. HTTP请求过程-域名解析和TCP三次握手建立链接

    我们在浏览器输入http://www.baidu.com想要进入百度首页,但是这是个域名,没法准确定位到服务器的位置,所以需要通过域名解析,把域名解析成对应的ip地址,然后通过ip地址查找目的主机.整 ...

  9. TCP三次握手与Tcpdump抓包分析过程

    一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A ...

随机推荐

  1. 如何实现带照片缩略图的Listview

    ackage com.demo; import java.util.ArrayList; import android.app.Activity; import android.content.Con ...

  2. WndPric的使用方法

    protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOS ...

  3. C#中new和override的区别

    override是指“覆盖”,是指子类覆盖了父类的方法.子类的对象无法再访问父类中的该方法.(签名必须相同) new是指“隐藏”,是指子类隐藏了父类的方法,当然,通过一定的转换,可以在子类的对象中访问 ...

  4. SQL中常用的时间格式

    一些常用的时间格式 先讲一下一些基本的格式模式 格式模式      说明 d                   月中的某一天.一位数的日期没有前导零. dd                 月中的某 ...

  5. C#在局域网中连接Liunx上的MySql数据库

    前期准备工作: 我所用的平台是VS2010和Ubuntu 14.04.3  LTS 一.由于MySql并没有集成在VS2010中所以要先安装MySQL Connector Net 6.9.8连接工具, ...

  6. iOS中发送xml给服务器

    转载自:http://www.cocoachina.com/bbs/read.php?tid-456019.html 一.用URLSession请求 NSString *soapStr = [NSSt ...

  7. MFC 多线程

    MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息   队列和消息循环. 工作者线程没有消息机制,通 ...

  8. centos中的配置文件

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  9. phantomjs初入门

    对DOM操作,而调试过程必不可少,对于那些微乎其微的方法,总显得余力不足.在这里PhantomJS就就行了很好的实现. PhantomJS是一个拥有JavaScript API的无界面WebKit 正 ...

  10. nginx对于Yii2的前后台的配置

    虽然是个基础问题,但也折腾了不少时间,记录下来,希望对新手有所帮助.例如我的前台地址yooao.cc,后台地址back.yooao.cc  back.yooao.cc是yooao.cc的一个子域名. ...