TCP握手/挥手的过程分析
TCP连接建立
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
服务器必须准备好接受外来的连接。这通过调用socket、 bind和listen函数来完成,称为被动打开(passive open)。
第一次握手:客户通过调用connect进行主动打开(active open)。这引起客户TCP发送一个SYN(表示同步)分节(SYN=J),它告诉服务器客户将在连接中发送到数据的初始序列号。并进入SYN_SEND状态,等待服务器的确认。
第二次握手:服务器必须确认客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器以单个字节向客户发送SYN和对客户SYN的ACK(表示确认),此时服务器进入SYN_RECV状态。
第三次握手:客户收到服务器的SYN+ACK。向服务器发送确认分节,此分节发送完毕,客户服务器进入ESTABLISHED状态,完成三次握手。
客户端的初始序列号为J,而服务器的初始序列号为K。在ACK里的确认号为发送这个ACK的一端所期待的下一个序列号。因为SYN只占一个字节的序列号空间,所以每一个SYN的ACK中的确认号都是相应的初始序列号加1,类似地,每一个FIN(表示结束)的ACK中的确认号为FIN的序列号加1。
完成三次握手,客户端与服务器开始传送数据,在上述过程中还有一些重要概念。
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户端确认包。这些条目所标识的连接在服务器处于SYN_RECV状态,当服务器收到客户端确认包时,删除该条目,服务器进入ESTABLISHED状态。
TCP连接终止
TCP连接终止需四个分节。
第一次握手:某个应用进程首先调用close,我们称这一端执行主动关闭。这一端的TCP于是发送一个FIN分节,表示数据发送完毕。
第二次握手:接收到FIN的另一端执行被动关闭(passive close)。这个FIN由TCP确认。它的接收也作为文件结束符传递给接收端应用进程(放在已排队等候应用进程接收到任何其他数据之后)。
第三次握手:一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口。这导致它的TCP也发送一个FIN。
第四次握手:接收到这个FIN的原发送端TCP对它进行确认。
面向字节的数据传送流(如TCP字节流、Unix管道等)也使用EOF表示在某个方向上不再有数据待传送。在TCP字节流中,EOF的读或写通过收发一个特殊的FIN分节来实现。
如果您喜欢这篇文章,可以加华清远见老师为好友,单击以下链接即可:
TCP握手/挥手的过程分析相关推荐
- 【计算机网络】 0、各网络命令 + tcpdump + Wireshark、抓包实战、TCP 握手挥手、防火墙、保活、MTU
文章目录 一.各层网络工具 应用层 找到服务器的 IP 查接口.对象的耗时 删除指定网站的Cookie 表示层.会话层 tcpdump.wireshard 传输层 telnet: 路径可达性测试 nc ...
- TCP握手挥手/UPD杂记
TCP报文 标志位 含义 SEQ 随机序号 ack 确认序号,上一次SEQ+1 ACK 确认标志位 1位 SYN 发起新连接标志位 FIN 断开连接标志位 三次握手 四次挥手 TCP与UDP的区别 T ...
- 【Sofice小司笔记】5 计算机网络,包含数据传输原理、网络各层协议详细说明、TCP/IP协议栈各常用协议说明、TCP握手挥手、可靠传输、网络加密技术
❓ 在浏览器地址栏输入一个 URL 后回车,背后发生了什么 解析 URL 浏览器封装 HTTP 请求报文 DNS 域名解析获取 IP 地址 建立 TCP 连接(长链接) 浏览器发送请求 负责传输的 I ...
- TCP 握手和挥手图解(有限状态机)
1.引言 TCP 这段看过好几遍,老是记不住,没办法找工作涉及到网络编程这块,各种问 TCP .今天好好整理一下握手和挥手过程.献给跟我一样忙碌,找工作的童鞋,欢迎大神批评指正. 2.TCP 的连接建 ...
- 抓包分析 TCP 握手和挥手
前言 首先需要明确的是 TCP 是一个可靠传输协议,它的所有特点最终都是为了这个可靠传输服务.在网上看到过很多文章讲 TCP 连接的三次握手和断开连接的四次挥手,但是都太过于理论,看完感觉总是似懂非懂 ...
- TCP握手与挥手详解(附有图)
为什么不是4次握手 首先我们知道TCP是3次握手与4次挥手,为什么不是4次握手呢,因为其中握手请求同步过程中并不需要数据传输因此将两次合并为一次了. 我们需要掌握哪些标志量 SYN:请求同步标志,为1 ...
- HTTPS 工作原理和 TCP 握手机制
1.HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息.TLS/SSL协议不仅仅是一套加密传输的协议,更是 ...
- 当连接一个 IP 不存在的主机时,TCP握手过程是怎样的?
最近前同事去字节跳动面试,被问到了下面这个问题: 连接一个 IP 不存在的主机时,握手过程是怎样的? 连接一个 IP 地址存在但端口号不存在的主机时,握手过程又是怎样的呢? 这让我回想起曾经也被面试官 ...
- 【SRE笔记 2022.9.21 网络及TCP握手】
SRE笔记 2022.9.21 TCP握手 AAA ARP协议 功能 网络发展历程 中继器 集线器(hub) 工作模式 冲突域 网桥 广播风暴 交换机的特点和作用 路由器 路由软件 经典三类网络拓扑 ...
最新文章
- 低潮过后,未来医疗可穿戴市场将如何发展?
- 【linux】——ubuntu12.04 下安装wine和wine乱码解决方案
- 前端一HTML:六:标签的关系,分类
- navicat 怎么调试存储过程_Navicat 执行存储过程
- Access context of data source and work center view do not match
- 查看依赖树_如何在基于 Ubuntu 或 Debian 的 Linux 发行版中查看一个软件包的依赖...
- webmin升级php,Webmin php-lib.pl修改
- uninitialized_copy测试代码示例
- postman 使用_Postman使用方法
- jdbc ?占位符不起作用_JDBC高级(二):DbUtils
- 第二课 每天努力一点点【Linux培训实录】
- 微星刀锋 无法进入bios_只需一键!内存性能免费提升150%!微星AMDB550超频
- 凸优化有关的数值线性代数知识三:LU Cholesky和LDL因式分解
- Java_学生信息管理系统——数组版——尝试将main函数单独放了一个类,并加了文件...
- 重装系统都杀不掉的十大病毒
- 优雅编程之项目开发中的22点编码小建议(三十七)
- R语言 Hurst指数计算
- 呵呵,GET2017教育科技大会VIP门票,你要不要啊?
- UltraEdit mac版破解方法
- mysql between and 日期
热门文章
- 一文读懂哈希和一致性哈希算法
- 小米开招.NET,20~40k*16薪,点名要求WPF+自动化!
- 【视频回放】Best of Build Tour in China 暨 Watching Party - 大湾区专场
- ASP.NET Core文件上传IFormFile于Request.Body的羁绊
- 通过 GitHub Actions 自动创建 Github Release
- 阿星Plus:基于abp vNext开源一个博客网站
- 别在.NET死忠粉面前黑.NET5,它未来可期!
- 使用BeetleX构建基础的SSL网络通讯
- .NET Core 又一杀器! Web Blazor框架横空出世!
- 福爆 | 博客升级 .NET Core 3.0 又踩一坑