前言

TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方。TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手),双方不再继续通信时,会将连接释放(正常情况下四次挥手)。下面就抓包分析TCP三次握手和四次挥手的过程。

建立连接——三次握手

第一次握手

客户端192.168.1.148发送一个建立TCP连接的请求包给服务器端174.143.213.184。可以从数据包中得出,建立连接源端口为57678,目标端口为80,确认编号为0。同步标志位SYN被置为1,表示请求连接建立。TCP首部长度大于20字节,说明选项中也附带了一些内容,给出最大段长度为1460字节,允许使用选择确认等。

第二次握手

服务器端收到请求后,发送给客户端确认包。该数据包中包含服务器的初始序列号为0,以及对请求包的确认,所以确认号为1也是期望下一个收到的包的字节流编号是从2开始的。

第三次握手

客户端向服务器端发出确认包,序号是从1开始,确认号为1,标志位只有ACK被置为1,说明这是一个确认包。于是便完成TCP连接建立。在这个包发送后,客户端就已将可以向服务器端请求数据,正常通信了。

关闭连接——三次挥手

四次挥手过程

放一张以前做的图介绍TCP四次挥手的过程:

当客户端向服务器端发起连接关闭请求时,因为服务器端还有数据发送给客户端所以不能立马将连接关闭,于是先回复客户端ACK表示你的请求我已经收到。然后将剩下的数据继续发送给客户端,数据发送完毕后,在回复给客户端的ACK包中将FIN标志置为1,请求连接关闭。最后,客户端回复ACK包表示收到服务器端的FIN。服务器端收到此ACK包后立马就关闭连接。客户端继续等待2MSL(因为发送给客户端的ACK包可能会丢失),服务器端没有重传包回来就关闭连接。到此,整个连接算是完全结束。

以上过程是标准的释放过程,但是在实际通信当中,可能只会有三次挥手。当客户端发送FIN包给服务器端,服务器端因为没有数据再传给客户端,于是就会在回复给客户端的FIN的ACK包中将FIN字段置位1,发送给客户端的包就为ACK+FIN,表示我也要求连接关闭。然后,客户端回复一个ACK确认收到FIN+ACK包,服务器端就关闭连接,客户端等待2MSL后也关闭连接。

上图就是三次挥手的数据包截图

第一次挥手

客户端192.168.1.140向服务器端172.143.213.184请求断开连接。

第二次挥手

因为服务器端没有数据传给客户端于是将回复给客户端的ACK包中FIN置为1,表示也请求连接断开。

第三次挥手

客户端对服务器端的FIN+ACK进行回复。服务器端收到该ACK包就关闭连接。

小结

回头想一想TCP为什么是三次握手呢,两次好像也是可以的。但是,这里存在一个问题,网络中的包是会延迟的,如果有一个很久以前的连接请求发送到了服务器端(实际上客户端已经发送了新的连接请求给服务器端,完成了数据请求并且连接已经关闭),服务器端并不知道这是以前的连接请求,于是也会回复一个ACK并且等待客户端的回复。客户收到该ACK不会回复,就会造换成服务器端一直等待并且超时重发ACK包。所以,两次握手是不可以的,四次握手也是显得多余的。三次握手最后一次客户端回复ACK给服务器端,服务器端收到后,才分配资源等待客户端的正式请求。
总结一句话需要三次握手的原因是:为了防止以前的连接请求即失效连接请求发送到服务器而造成错误。

网络协议抓包分析——TCP传输控制协议(连接建立、释放)的更多相关文章

  1. 网络协议抓包分析——IP互联网协议

    前言 IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信.在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议. 什么是IP数据报 TCP/IP协议定义了一个在因 ...

  2. 网络协议抓包分析——ARP地址解析协议

    前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...

  3. wireshark抓包分析——TCP/IP协议

    本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...

  4. Wireshark抓包分析TCP 3次握手、4次挥手过程

    Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...

  5. 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移

    目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...

  6. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  7. Wireshark抓包分析TCP“三次握手,四次挥手”

    1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...

  8. Java网络编程学习A轮_02_抓包分析TCP三次握手过程

    参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...

  9. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

随机推荐

  1. kodexplorer免费网盘安装教程

    KodExplorer是什么? KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统. 用户只需通过简单环境搭建,即可使用KodExplorer快速完成私有云/私有网盘 ...

  2. C. Neko does Maths

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  3. oracle的知识点总结

    体系结构:数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制.体系结构包括:实例(instence),数据库文件(database),用户进程(user proces ...

  4. 记一次<iframe>的使用

    将jsp拆分frame框架,因为采用了第一种方式,一直在考虑用jquery异步请求获取数据,总是但不到效果, 终于在js写吐的时候选择了第二种方式. //参考网上的使用,大多是下面这个样子,如果涉及静 ...

  5. Oracle expdp数据泵导出,并在文件上附加上日期格式

    一.导出操作的计算机要安装Oracle Client(建议管理员版本) 二.在服务端创建目录 create directory dpdir as '目录'; 三.给目录赋权限 grant read,w ...

  6. 【安富莱专题教程第2期】uC/Probe简易使用说明,含MDK和IAR,支持F103,F407和F429开发板

    说明:1. 在uCOS工程调试时,这个软件还是非常给力的,方便查看各种信息,可以认为是MDK或者IAR调试功能的图形化版本,使用JLINK连接可以随时连接查看,无需目标端代码.2. 当前教程中,我们使 ...

  7. Python 远程开机

    用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机. 本文目标 远程开机原理 Python 远程开机代码实现 Python ...

  8. [Swift]LeetCode92. 反转链表 II | Reverse Linked List II

    Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ...

  9. Vmware安装Ubuntu ==> 连网成功

    由于工作需要,得把NS3安装到内网服务器中,大家知道这个是不能连接外网的,学校又没有Ubuntu高校源.NS3要先安装一大堆的依赖,让人头痛的是在内网里有没发以终端指令形式安装,针对这种麻烦,找到两个 ...

  10. 英语笔记3(git)

    备注 一: Staging Modified Files Let’s change a file that was already tracked. (tracked 表示该文件已经被git管理过,再 ...