从wiresharp看tcp三次握手
我们知道,传输层是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三次握手的更多相关文章
- TCP三次握手及关闭时的2MSL分析
TCP/IP三次握手四次挥手,是非常重要的,这个链接与关闭过程也是非常easy的.但为什么是三次握手?以及为什么要等待2MSL的状态?大部分人或许听到这个问题就蒙了.这篇博客就综合<TCP/IP ...
- 小白都能看懂的tcp三次握手
众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...
- wireshark抓包工具简介以及tcp三次握手的一些含义
wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了.为了安全考虑, ...
- TCP ,UDP概念和TCP三次握手连接 的知识点总结
OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...
- Wireshark基本介绍和学习TCP三次握手
wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- TCP三次握手原理详解
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层. TCP协议:即传输控制 ...
- TCP三次握手四次挥手详解
转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
随机推荐
- 【转】 JavaScript:history.go() 的妙用(转) 处理post回发后返回
在Web开发中,会遇到从一页(父页)导向另一页(子页),并且要求“返回”父页的情况,在这里如果用ASP.NET提供的 Response.Redirect()方法,往往不会达到理想的效果,例如:返回后, ...
- umilit 修改 linux 最多可打开文件数
ulimit -n 修改 临时修改: ulimit -SHn 65535 永久修改: echo '* - nofile 65535' >> /etc/security/li ...
- Linux 文件与目录管理,Linux系统用户组的管理
一.Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...
- JavaScript中的call、apply、bind是怎么回事?
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...
- 015PHP基础知识——流程控制(三)
<?php /** *流程控制(三) */ /* 循环结构: while(){ } */ //设置脚本最长执行时间:100秒 //set_time_limit(100); $lantian = ...
- Java复习4.数组初始化.
Java复习4.Java中的数组声明方式 20131004 1.数组声明和初始化, 数组元素和变量一样,可以在定义的时候i进行初始化.数组元素的初始化工作实在编译阶段完成的,可以减少运行时间. 在初 ...
- 禁用iPhone手机浏览器上给电话号码自动加上的link样式(苹果手机自动给手机号加样式)
原文地址:http://blog.csdn.net/atec2000/article/details/44631633 iPhone手机上的浏览器(如Safari),在解析网页的时候会自动给 像是电话 ...
- Prism 4 文档 ---第6章 高级MVVM场景
在上一章中描述了如何通过将UI,表现逻辑,业务逻辑分别放到三个单独的类中(View,View Model,Model),实现这些类之间的交互(通过数据绑定,命令以及数据验证接口)以及实现一个策 ...
- QUnit 学习笔记 使用说明(一)
一.单元测试前言 什么是单元测试? 如果是新接触单元测试的童鞋,简要的解释:就是一个JS函数/功能/模块的测试. 单元测试的工具:这里介绍QUnit Qunit原本是jqury家的,不过现在已经独立了 ...
- 建造者模式(Builder和Director)
一.建造者模式介绍 建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 假如一个对象的构建很复杂,需要很多步骤.则可以使用建造者模式 ...