从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程序设计>和< ...
随机推荐
- js中的执行环境及作用域
最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执 ...
- Git 从了解到放弃
1. 简单介绍 1.1. git起源 在1991年linus创建了Linux从此linux成为服务器领域的佼佼者,大部分web服务器.邮件.数据库各种服务器端程序都安装在了linux上面运行,主要是因 ...
- DIV+ul+LI实现表格效果以及div带滑动条
写这个是为了给自己一个好好的笔记,以免下次需要的时候又到处找,费神费事费时费力.开始吧! 1.先看看效果 2.网页代码 <!DOCTYPE html PUBLIC "-//W3C//D ...
- eclipse背景设置什么颜色缓解眼睛疲劳之一
Eclipse操作界面默认颜色为白色.对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,如果把颜色改成绿色的颜色就会缓解眼睛的疲劳. 设置方法如下: 1.打开window->Prefere ...
- 【Seajs源码分析】2. 工具方法1
Sea.js: var seajs = global.seajs = { // The current version of Sea.js being used version: "@VER ...
- Git远程操作详解(新手必备)
Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...
- Jxl的API概述(转)
一.Jxl的API Jxl的API主要有三个包,jxl,jxl.format,jxl.write.如果单独的分析API,可能对于更明确的了解此API没有太多的帮助,我们还是从Excel文件的层次来剥离 ...
- c# 处理js序列化时 datetime返回UTC格式的问题
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using Syst ...
- (转)MapReduce Design Patterns(chapter 1)(一)
翻译的是这本书: Chapter 1.Design Patterns and MapReduce MapReduce 是一种运行于成百上千台机器上的处理数据的框架,目前被google,Hadoop等多 ...
- CentOS常用命令汇总
将新创建的数据分配某个用户访问 grant all privileges on zhouzdb.* to 'zhouz'@'%' identified by '1234'; flush privile ...