当前位置: 首页 > news >正文

HTTP 的三次握手

​​​​​        HTTP 的三次握手是指在建立 TCP 连接时,客户端和服务器之间进行的三步握手过程。这个过程确保了双方都能够互相通信,并且同步了彼此的序列号和确认号。

概念:

  1. 第一次握手:客户端发送一个 SYN(同步)报文段到服务器,并且指定初始序列号(ISN)。
  2. 第二次握手:服务器收到 SYN 报文段后,回复一个 SYN-ACK 报文段作为确认,并且指定自己的 ISN。
  3. 第三次握手:客户端收到服务器的 SYN-ACK 后,发送一个确认报文段 ACK,确认收到了服务器的确认。此时连接建立成功,可以开始传输数据。

使用

  1. 三次握手是 TCP 连接的建立过程,是在客户端和服务器之间进行的。
  2. 在 HTTP 协议中,通常是在客户端发起请求时建立 TCP 连接,然后发送 HTTP 请求,服务器收到请求后进行处理并返回响应,最后关闭连接。

注意事项

  1. 三次握手确保了客户端和服务器之间的通信正常进行,但并不能保证数据的完整性和安全性,因此在 HTTP 中通常还需要使用其他机制来保证数据的完整性和安全性,比如 TLS/SSL。
  2. 握手过程中可能会因为网络延迟、丢包等原因导致连接建立失败,因此在实际应用中需要考虑到这些情况并做好处理。
  3. 三次握手消耗了一定的时间和资源,特别是在大规模连接的情况下可能会对服务器性能造成影响,因此需要合理调整 TCP 参数和优化网络配置来提高性能。
  4. HTTP 协议是建立在 TCP 协议之上的,而 TCP 的三次握手是在 TCP 层面进行的,不是在 HTTP 协议本身。因此,要查看 TCP 三次握手的过程,我们需要通过网络抓包工具来观察。常用的网络抓包工具包括 Wireshark、tcpdump、Fiddler 等。

 附录:

        ​​​​​​​七层协议参考模型:

| 层次           | 名称                    | 功能                                                         |
|----------------|-------------------------|--------------------------------------------------------------|
| 物理层         | Physical Layer          | 负责传输比特流,以及物理连接的建立和维护。                  |
| 数据链路层     | Data Link Layer         | 提供直接的点对点数据传输,负责物理地址寻址、错误检测和纠正。|
| 网络层         | Network Layer           | 实现了数据包在网络中的路由和转发,包括 IP 地址分配、路由选择等。|
| 传输层         | Transport Layer         | 提供端到端的数据传输服务,包括数据分段、流量控制、错误恢复等。|
| 会话层         | Session Layer           | 负责建立、管理和终止会话连接,提供会话控制和同步。            |
| 表示层         | Presentation Layer      | 负责数据的格式化、加密和压缩等处理,确保数据的可读性和可解释性。|
| 应用层         | Application Layer       | 提供用户与网络服务之间的接口,包括各种网络应用协议,比如 HTTP、FTP、SMTP 等。|

相关文章:

  • 【MATLAB高级编程】入门篇 | 向量化编程
  • 【并发程序设计】11.进程间通信
  • 如何利用CXL技术突破内存墙?-2
  • 打造你的专属Vue组件:超实用“Descriptions展示组件开发”实战
  • Python知识点20---池
  • C++ 宏定义中的##
  • 【JavaEE】Servlet
  • MFC:初步理解序列化与反序列化(含代码实现)
  • 【机器学习】之 K-最近邻(KNN)算法原理及实现
  • 【JAVA WEB实用与优化技巧】如何使用本地.bat/.sh脚本快速将服务发布到测试环境?
  • NVIDIA发布重磅AI创新,黄仁勋在COMPUTEX大会预示计算未来
  • 面向对象程序设计之从C到C++的初步了解
  • 奶茶店、女装店、餐饮店是高危创业方向,原因如下:
  • 一个知识问答系统,用户的选择决定接下来出现的问题,且下一个问题的呈现取决于前面几个问题的回答
  • 工业4.0利器:MES系统
  • 10个确保微服务与容器安全的最佳实践
  • Angular6错误 Service: No provider for Renderer2
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • LeetCode算法系列_0891_子序列宽度之和
  • ng6--错误信息小结(持续更新)
  • Python_网络编程
  • Spring声明式事务管理之一:五大属性分析
  • Swift 中的尾递归和蹦床
  • 大型网站性能监测、分析与优化常见问题QA
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 复杂数据处理
  • 关于Java中分层中遇到的一些问题
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 力扣(LeetCode)21
  • 漂亮刷新控件-iOS
  • MPAndroidChart 教程:Y轴 YAxis
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​如何防止网络攻击?
  • #QT(QCharts绘制曲线)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (35)远程识别(又称无人机识别)(二)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (第61天)多租户架构(CDB/PDB)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (蓝桥杯每日一题)love
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读40-45)图像描述1
  • (十六)一篇文章学会Java的常用API
  • (四)opengl函数加载和错误处理
  • (一)SvelteKit教程:hello world
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net FrameWork总结
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 直连SAP HANA数据库
  • .NetCore实践篇:分布式监控Zipkin持久化之殇