三次握手

下图就是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. 【转】iOS开发24:使用SQLite3存储和读取数据

    转自:http://my.oschina.net/plumsoft/blog/57626 SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效.SQLite3使得不必将每个对象都加 ...

  2. Javascript的块级作用域

      一.块级作用域的说明 在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c. ...

  3. 1 Intellij IDEA 个人常用快捷方式

    个人常用快捷方式 alt+enter    万能键                                          inn if(xxx!=null) iter foreach ct ...

  4. QML添加右键菜单

    MouseArea { id: mouseRegion anchors.fill: parent; acceptedButtons: Qt.LeftButton | Qt.RightButton // ...

  5. angularjs如何在ng-repeat过程中控制字符串长度超过指定长度后面内容以省略号显示

    angular.module('ng').filter('cut', function () { return function (value, wordwise, max, tail) { if ( ...

  6. 对面向对象程序设计(OOP)的认识

    前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释: 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发 ...

  7. Mysql学习(慕课学习笔记6)修改数据表(上)

    添加单列 Alter table tb1_name ADD[column] col_name column_definition [first | after col_name] 列名称       ...

  8. Gora快速入门

    概述 Gora是apache的一个开源项目. The Apache Gora open source framework provides an in-memory data model and pe ...

  9. 微信JS-SDK 接口调用与 php 遇到的坑

    问题:config:invalid signature一直爆这个错误 解决: 看我把这些坑都总结了一下:要命的invalid signature. https://segmentfault.com/q ...

  10. Makefile的几个赋值运算符(转:笔记)

    http://www.cnblogs.com/pengdonglin137/p/3801060.html 在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢? ...