TCP三次握手和四次挥手及wireshark抓取
TCP的三次握手与四次挥手的详细介绍:
三次握手:
第一次握手(SYN=1, seq=x):
客户端发送客户端发送一个 TCP 的 SYN 标志位置1的,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(sequence Number)字段里。
第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。
第三次握手(ACK=1,ACKnum=y+1):
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

三次握手
Wireshark抓取三次握手过程;
在浏览器中输入www.golang.com,通过 ping www.golang.com知道golang的ip是 216.239.37.1, 在wireshark filter中输入ip.src == 216.239.37.1 or ip.dst == 216.239.37.1 用于过滤出所有跟216.239.37相关的报文。

可以看到,访问网站时,客户端(浏览器)会建立起三次握手。
第一次握手,由客户端发出。

SYN=1,seq的值为 f5 75 60 37。
第二次握手,服务器发出。

ACK=1,seq为 61 d0 be 42, ACKnumber是f5 75 60 38,它是第一次握手的seq(f5 75 60 37)值加1。
第三次握手,客户端发出。

ACK=1。ACKnumber是61 d0 be 43, 是上一次的seq值加1,第二次握手的seq值是61 d0 be 42.
四次挥手:
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手(FIN=1,seq=x):
假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。发送完毕后,客户端进入 FIN_WAIT_1 状态。
第二次挥手(ACK=1,ACKnum=x+1):
服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。
第三次挥手(FIN=1,seq=y):
服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。
第四次挥手(ACK=1,ACKnum=y+1):
客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待可能出现的要求重传的 ACK 包。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。
客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。
四次挥手
Wireshark抓取三次挥手过程:

第一次挥手,客户端发出。这次断开连接时客户端发出的,但实际上,客户端和服务器都可以主动发出断开连接。

seq值为f5 75 6a b4。
第二次挥手,服务端发出。

seq值为61 d3 6c 82, ACKnumber为f5 75 6a b5, 是第一次挥手的seq值加1。
第三次挥手,服务端发出。

seq值为61 d3 6c 82, ACKnumber为f5 75 6a b5, 是第一次挥手的seq值加1。
第四次挥手,客户端发出。

ACKnumber为f5 75 6a b5, 是第2/3次挥手的seq值加1。
补充:为什么建立连接协议要三次握手,而关闭连接却是四次握手?
因为服务端的LISTEN状态下的SOCKET收到SYN报文的建立连接请求后,主机A可以把ACK和SYN(ACK起应答作用,SYN起同步作用)放在一个报文里来发送。但是关闭连接时,当收到主机B的FIN报文通知时,它仅仅表示对方没有数据发送了;但主机B未必将所有的数据都全部发送给主机A了,所以主机B未必会马上会关闭SOCKET,也即主机B可能还需要发送一些数据给对方之后,再发送FIN报文给主机A来表示同意现在可以关闭连接,所以这里的ACK报文和FIN报文多数可以分开发送的。
参考:https://hit-alibaba.github.io/interview/basic/network/TCP.html
TCP三次握手和四次挥手及wireshark抓取的更多相关文章
- TCP三次握手及四次挥手详细图解
TCP三次握手及四次挥手详细图解 Andrew Huangbluedrum@163.com 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不 ...
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
- 应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题
重要性:必考 一.TCP与UDP的优缺点 ①TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供 ...
- 【HTTP协议】---TCP三次握手和四次挥手
TCP三次握手和四次挥手 首先我们知道HTTP协议通常承载于TCP协议之上,HTTPS承载于TLS或SSL协议层之上 通过上面这张图我们能够知道. 在Http工作之前,Web浏览器通过网络和W ...
- 网络通信 --> TCP三次握手和四次挥手
TCP三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 一.TCP报文格式 如下图: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发 ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
- TCP‘三次握手’和‘四次挥手’(通俗易懂)
概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通 ...
- 【转】TCP三次握手和四次挥手全过程及为什么要三次握手解答
TCP三次握手和四次挥手的全过程 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种表示: SYN(synchronous建立连接) ...
- [ 转载 ] Tcp三次握手和四次挥手详解
#TCP的报头: 源端口号:表示发送端端口号,字段长为16位.目标端口号:表示接收端口号,字段长为16位.序列号:表示发送数据的位置,字段长为32位.每发送一次数据,就累加一次该数据字节数的大小.注意 ...
随机推荐
- dubbo+zookeeper示例记录
提示:要直接看搭建例子的可以跳到 三 一.项目架构的发展 传统的mvc架构项目将整个系统功能实现全部写在一个项目中,部署在一个机器上,随着用户量的增涨,单个项目服务器无法承受暴增的用户请求时需要增加服 ...
- Mac之Sublime Text使用Go
安装Golang build 包 点击 Preferences > Package control 菜单(MAC快捷键 shift + command + p) 在弹出的输入框输入 instal ...
- ArcGIS超级工具SPTOOLS1.7升级说明
ArcGIS超级工具1.7升级说明:多了:5个工具,总87工具. 5.11 数据打包 44 5.11.1. mxd批量打包MPK:对一个文件夹所有MXD打包MPK 5.11.2. mxd文档发 ...
- Leetcode: Sum of Two Integers && Summary: Bit Manipulation
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- 002-创建型-02-抽象工厂模式(Abstract Factory)
一.概述 抽象工厂模式提供同一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一 ...
- 23 Flutter官方推荐的状态管理库provider的使用
加群452892873 下载对应21可文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^ flutter_swiper: ...
- 123457123456#0#-----com.threeapp.BabyLeaningEnglish01----精品儿童学英语
com.threeapp.BabyLeaningEnglish01----精品儿童学英语
- 修改root密码
Linux 密码的修改,使用passwd 命令修改 命令如下图:sudo passwd root 即可修改成功
- tornado之自定义form表单验证
直接上链接吧:银角的地址 源码下载链接:点我点我点我...
- javascript从网络下载随机笑话
/*** * 讲笑话函数(调试用) * @param callback 回调函数 */ function randomText(callback) { var result =''; $.ajax({ ...