我们知道,传输层是OSI模型中用户进行数据传输的分层,目前仅有TCP和UDP两种协议可用。TCP为了进行传输控制,引入了三次握手机制,以确保通信连接的建立。道理很简单,我们跟别人打电话聊天时,对方拿起电话接听后第一句话肯定是“喂”,而我们听到这句话,就能确定电话接通了。同样的道理,TCP建立连接时客户端先发起一个SYN包作为确认连接的请求,服务端收到后回复一个肯定的确认应答(ACK)来实现可靠的数据传输。如果客户端过一段时间仍未收到确认应答,就可断定连接失败,再次发起重连。下面看下这三次握手的过程:

  第一次握手:客户端发送SYN包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;在建立连接的同时,也可以确定发送数据包的长度单位,即“最大消息长度”(MSS:Maximum Segment Size);这时侯的客户端、服务端都不知道连接是否能否建立成功;

  第二次握手:服务器收到SYN包,必须确认客户的SYN请求(ack=x+1),同时自己也发送一个SYN包(seq=y),合起来即SYN+ACK包,此时服务器进入SYN_RECV状态;返回服务器的最大消息长度MSS,后续所有客户端请求数据将按服务器的MSS进行传输;当客户端收到服务端的消息后,它心里清楚自己到服务端(第一次握手)、服务端到自己(第二次握手)的两条连接都是OK的;但服务端只知道客户端 -> 服务端这一条连接是OK的,但自己往客户端的连接是否能建立,它自己心里是没底的,所以需要做进一步确认,给客户端发消息;

  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送到达服务端后,服务端已经明白服务端 -> 客户端也是OK的了,客户端和服务器进入ESTABLISHED状态,完成三次握手。

  我本机ip地址是10.73.158.209,再看我们要访问博客园的ip地址:

C:\Users\wulf>ping www.cnblogs.com

正在 Ping www.cnblogs.com [42.121.252.58] 具有  字节的数据:
来自 42.121.252.58 的回复: 字节= 时间=11ms TTL=
来自 42.121.252.58 的回复: 字节= 时间=11ms TTL=
来自 42.121.252.58 的回复: 字节= 时间=11ms TTL=
来自 42.121.252.58 的回复: 字节= 时间=11ms TTL= 42.121.252.58 的 Ping 统计信息:
数据包: 已发送 = ,已接收 = ,丢失 = (% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 11ms,最长 = 11ms,平均 = 11ms

  接着我们按host 42.121.252.58这个规则过滤出访问博客园的抓包:

  第一次握手:10.73.158.209 Seq=0 -> 42.121.252.58

  从标志位看出,同步位有值,在做请求(SYN):Syn 同步位为1;最大消息长度客户端发了1460字节试探一下。

  第二次握手:42.121.252.58 Seq=0 Ack=1 -> 10.73.158.209

  从标志位看出,确认位、同步位有值,在做应答(SYN+ACK):Syn 同步位为 1 、Acknowledgment 确认位为 1;服务端告诉客户端,我的最大消息长度只能支持1444字节,你就按这个来传输数据吧。

  第三次握手:10.73.158.209 Seq=1 Ack=1 -> 42.121.252.58

  从标志位看出,只有确认位有值,在做再次确认(SYN):Acknowledgment 确认位为 1,Seq=Seq+1(1)。

  这三次握手过程中传送的包里没有数据,等三次握手完毕、建立通信后,客户端与服务器才正式开始传送数据。而且TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

从wiresharp看tcp三次握手的更多相关文章

  1. TCP三次握手及关闭时的2MSL分析

    TCP/IP三次握手四次挥手,是非常重要的,这个链接与关闭过程也是非常easy的.但为什么是三次握手?以及为什么要等待2MSL的状态?大部分人或许听到这个问题就蒙了.这篇博客就综合<TCP/IP ...

  2. 小白都能看懂的tcp三次握手

    众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...

  3. wireshark抓包工具简介以及tcp三次握手的一些含义

    wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了.为了安全考虑, ...

  4. TCP ,UDP概念和TCP三次握手连接 的知识点总结

    OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...

  5. Wireshark基本介绍和学习TCP三次握手

    wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...

  6. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  7. TCP三次握手原理详解

    TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层. TCP协议:即传输控制 ...

  8. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  9. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

随机推荐

  1. RabbitMQ其他(八)

    1 RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer) 什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序 ...

  2. 弄懂flex布局

    目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了.什么是flex布局以及它的好处,这里就不再赘述. 在这篇文章里,想说说flex布局的属性语法及其细节.那么网上也 ...

  3. commons-fileupload实现上传进度条的显示

    本文将使用   apache fileupload   ,spring MVC   jquery 实现一个带进度条的多文件上传, 由于fileupload 的局限,暂不能实现每个上传文件都显示进度条, ...

  4. C++进阶4.C++知识整理

    C++知识整理(多益笔试) 20131012 前言: 还是关于笔试知识的整理,主要是面向对象的知识还有一些常见的语法知识. 1.还是C++内存管理的知识 C++中程序的内存分布如下: 栈:向下增长,可 ...

  5. HDU 3473 Minimum Sum 划分树,数据结构 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=3473 划分树模板题目,需要注意的是划分树的k是由1开始的 划分树: 参考:http://blog.csdn.ne ...

  6. yum的搭建

    搭建本地yum仓库的步骤 . 创建光盘目录,挂载光盘 . 进入/etc/yum/repos.d目录下,备份所有配置文件 . 利用一个含有大写M的配置文件作为配置文件的模板 . 在模板里将enabled ...

  7. New Concept English three (22)

    34w 54 Some plays are so successful that they run for years on end. In many ways, this is unfortunat ...

  8. 两个init方法的区别

    容器创建了Servlet实例后,它将调用实例的init(ServletConfig)方法初始化Servlet.该方法的参数ServletConfig对象包含了在WEB应用程序的部署描述文件中指定的初始 ...

  9. mysql动态扩容调研

    MySQL动态扩容方案 目前可用方案 MySQL的复制: 一个Master数据库,多个Salve,然后利用MySQL的异步复制能力实现读写分离,这个方案目前应用比较广泛,这种技术对于以读为主的应用很有 ...

  10. crm 03--->销售页面及逻辑

    基本思路 销售  ------->使用的是customer表来操作 有两个页面: 未成交的客户 公共客户页面  ---  什么属于?  --> 三天未跟进,及十五天内未成交 url    ...