【网络协议】精讲TCP通信原理!

前言

 TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字,例如,若 IP 地址为 192.3.4.16 而端口号为 80,那么得到的套接字为`192.3.4.16:80`。IP 协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才是应用进程之间的通信。TCP 报文是 TCP 层传输的数据单元,也叫报文段。TCP 报文的格式如下图所示:

在这里插入图片描述

我们从 TCP 的报文格式中能看到 6 个**标志位**:URG ACK PSH RST SYN FIN,每一个标志位表示一个控制功能。
  • **URG:**紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。

  • **ACK:**确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

  • **PSH:**push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

  • **RST:**重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

  • **SYN:**同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

  • **FIN:**finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

TCP 的连接和断开的过程和这几个标志位有关。

1. 建立连接

TCP 的三次握手,意思就是建立连接的时候客户端与服务器之间需要三次数据包的交流

  1. 客户端发送给服务器一个请求连接数据包,即发送了一个指向服务器目标端口的一个 SYN 位为 1 的TCP 报文。

  2. 服务器接收到客户端的连接请求之后,会回应一个 SYN 位为 1 的TCP 报文,表示同意连接。并且,会把 ACK 位也置 1 表示确认收到上次消息。

  3. 客户端接收到服务器的同意连接的数据包之后,还要回复一个 ACK 为 1 的 TCP 报文,表示确认收到。

如下图所示,这就是 TCP 的三次握手:

在这里插入图片描述

2. 数据传输

TCP 以段为单位发送数据

  • 在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS:Maximum Segment Size)。最理想的情况是,最大消息长度正好是 IP 中不会被分片处理的最大数据长度。

  • TCP 在传输大量数据时,是以 MSS 的大小将数据进行分割发送的。进行重发时也是以 MSS 为单位。

  • MSS 是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小(为附加 MSS 选项,TCP首部将不再是20字节,而是 4 字节的整数倍)。然后会在两者之间选择一个较小的值投入使用(在建立连接时,如果某一方的 MSS 选项被省略,可以选为 IP 包的长度不超过 576 字节的值(IP 首部 20 字节,TCP 首部 20 字节,MSS 536 字节))。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如客户端发送一段 3500 长度的数据到服务端,假设确定的 MSS 长度为1000,数据传输的过程如下所示:

在这里插入图片描述

3. 断开连接

TCP 的四次挥手,意思就是释放连接的时候客户端与服务器之间需要四次数据包的交流。

  1. 客户端发送给服务器一个请求释放连接的数据包,即发送了一个指向服务器目标端口的一个 FIN 位为 1 的TCP 报文,表示客户端没有数据要发送了,但是仍然可以接收数据;并且 ACK 位也为 1,表示对上次传输数据结果的确认。并且之后处去等待状态,等待服务器的两次回应。

  2. 服务器接收到客户端的释放连接请求之后,会先回应一个 ACK 位为 1 的报文,表示确认收到。但是,这时服务器可能还有数据没有发送完成,继续发送数据。

  3. 服务器发送完数据之后,发送一个 FIN 为 1 的 TCP 报文,表示我也没有要发送的数据了,你可以释放连接了。当然 ACK 位仍然为 1 。

  4. 客户端接收到服务器的同意释放连接的数据包之后,回复一个 ACK 为 1 的 TCP 报文,表示确认收到。

如下图所示,这就是 TCP 的四次挥手:

在这里插入图片描述

4. 抓包分析

利用 wireshark 工具抓包分析可以很清晰的看到这两个流程。

  1. 打开 wireshark 软件 开启抓包,过滤规则设置为 tcp 。

  2. 开发板连接上网络后,运行 samples 里面的 tcp client 例程,

这样就可以很方便的看到 TCP 的三次握手与四次挥手的全过程,如下图所示:

数据传输的过程需要在以后用到 http client 传输较大数据的时候才能更好的看出来。

题外话

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击领取】网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/400864.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS设置文本超出显示省略号

一、单行文本显示省略号 <div class"box"><p>测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本测试文本…

C# 静态方法和实例方法

一、静态成员&#xff0c;实例成员&#xff0c;静态方法&#xff0c;实例方法 静态成员就是用static修饰的字段&#xff1b; 实例成员就是没有被static修饰的字段&#xff1b; 静态方法就是用static修饰的方法&#xff1b; 实例方法就是没有被static修饰的方法&#xff1b;…

无人机之如何避免飞行错误篇

在无人机飞行中&#xff0c;飞手可能会遇到各种问题&#xff0c;这些问题不仅会影响飞行效果&#xff0c;还可以带来安全隐患。以下是一些常见的错误及避免方法&#xff0c;帮助飞手提高飞行稳定性和安全性&#xff1a; 一、校准传感器 IMU&#xff08;惯性测量单位&#xff0…

HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求

引言 在现代Web开发中&#xff0c;HTTP请求的高效性和可靠性对于应用的整体性能至关重要。ASP.NET Core提供了HttpClient类&#xff0c;它是一个强大且灵活的工具&#xff0c;可以用来发送HTTP请求并处理响应。然而&#xff0c;如何在ASP.NET Core中实现高效的HTTP请求&#x…

【Linux】手把手教你从零上手Vim编辑器

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 &#x1f4cc;写在前面 &#x1f4cc;Vim是什么 &#x1f4cc;手把手教你开始使用Vim &#x1f38f;使用Vim编辑第一个程序 &#x1f38f;Normal(命令模…

Ilya Sutskever 2023年伯克利大学演讲回顾:无监督学习与GPT的数学基础

引言 在2023年&#xff0c;OpenAI联合创始人之一的Ilya Sutskever在伯克利大学进行了一次极具影响力的演讲。这场演讲虽然内容复杂晦涩&#xff0c;但却被认为是人工智能发展历史上的一个重要里程碑。在演讲中&#xff0c;Sutskever深入探讨了无监督学习的数学依据&#xff0c…

CocoaPods 官宣进入维护模式,不在积极开发新功能,未来将是 Swift Package Manager 的时代

昨天 CocoaPods 官宣现在项目**处于维护模式 **&#xff0c;简单来说&#xff0c;就是 CocoaPods 不会再像以前一样积极投入资源进行开发&#xff0c;所谓维护模式&#xff0c;就是让项目处于「可用」的状态&#xff0c;而此时距离 CocoaPods 的出现&#xff0c;也过去了有 13 …

树莓派4 AV没有视频输出

使用AV接口输出&#xff0c;没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite&#xff1a; dtoverlayvc4-kms-v3d,composite默认情况下&#xff0c;输出 NTSC 复合视频。要选择不同的模式&#xff0c;请在…

Bug定义及生命周期(七)

BUG 定义 软件的bug&#xff0c;软件程序的漏洞或缺陷 – 常见&#xff0c;首先发现 软件可改进的细节&#xff0c;或与需求文档存在差异的功能实现等 测试工程师&#xff1a;发现bug&#xff0c;定位bug&#xff0c;提交bug&#xff0c;回归bug 类型 确定bug类型&#xff…

【中国数据库前世今生】数据存储管理的起源与现代数据库发展启蒙

记录开启本篇的目的: 作为1名练习时长2年半的DBA&#xff0c;工作大部分时间都在和数据库打交道&#xff0c;包括Oracle,Mysql,Postgresql,Opengauss等国内外数据库。但是对数据库的发展史却知之甚少。 正好腾讯云开发者社区正在热播:【纪录片】中国数据库前世今生,借此机会了解…

【云备份】学习Json

文章目录 1.Json数据类型基础数据类型复合数据类型JSON数据类型的应用 2.学习jsoncpp库利用json实现序列化利用json实现反序列化 1.Json数据类型 json 是一种数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。json数据交换格式是将多种数据对象组织…

MATLAB中lsqr函数用法

目录 语法 说明 示例 线性系统的迭代解 使用指定了预条件子的 lsqr 提供初始估计值 使用函数句柄代替数值矩阵 lsqr函数的功能是求解线性系统 - 最小二乘法。 语法 x lsqr(A,b) x lsqr(A,b,tol) x lsqr(A,b,tol,maxit) x lsqr(A,b,tol,maxit,M) x lsqr(A,b,tol,m…

【Qt】QWidget的windowIcon属性

QWidget的windowIcon属性 windowIcon表示窗口的图标 当我们使用默认的windowIcon的时候&#xff0c;其窗口的图标如下&#xff1a; API说明 windowIcon() 获取到控件的窗⼝图标. 返回 QIcon 对象. setWindowIcon(const QIcon& icon) 设置控件的窗⼝图标. 在Qt中&…

【STM32 FreeRTOS】任务

使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行&#xff0c;不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点&#xff0c;应用程序中只能执行一个任务&#xff0c;实时 RTOS 调度器负责决定所要执行的任务。因此&#xff0c; R…

react中使用nextjs框架,前端调后端接口跨域解决方式

前端在项目目录中next.config.js文件中添加以下代码 async rewrites() {return [{source: "/api/:path*",destination: ${process.env.NEXT_PUBLIC_API_DOMAIN}/api/:path*,basePath: false}]} 截图&#xff1a; source: "/api/:path*": 定义了一个 URL …

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

&#x1f4da; 本文主要总结了一些常见的C面试题&#xff0c;主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能&#xff0c;掌握这些内容&#xff0c;基本上就满足C的岗位技能&#xff08;红色标记为重点内容&#xff09;&#xff0c;欢迎大家前来学习指正&…

【MySQL 03】库的操作 (带思维导图)

文章目录 &#x1f308; 一、创建数据库&#x1f308; 二、查看数据库&#x1f308; 三、使用数据库&#x1f308; 四、修改数据库&#x1f308; 五、删除数据库&#x1f308; 六、备份数据库&#x1f308; 七、恢复数据库&#x1f308; 八、字符集和校验规则⭐ 1. 查看系统默认…

HAProxy 效能飞跃先锋队

目录 一 负载均衡 1.1 四层负载 1.2 七层负载 1.3 四层负载和七层负载的区别 二 Haproxy简介 2.1 概念和内容 2.2 haproxy的基本配置信息 2.2.1 global 配置 2.2.2 proxies 配置 三 Haproxy的算法 3.1 静态算法 3.2 动态算法 3.3 其他算法 四 高级功能及配置 4.…

Mysql原理与调优-索引原理及使用

目录 1.绪论 2.索引原理 2.1 索引采用的数据结构 2.1.1 B树 1.什么是B树 2.B树的优缺点 2.1.2 B树 1.什么是B树 3.B树的优缺点 2.2.3 hash 2.2.4 总结 2.2 InnoDB数据存储结构(聚簇索引) 2.2.1 自底向上探寻索引 3.2.2 查询一条数据的完整流程 3.2.3 聚簇索引 2…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满&#xff0c;几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代&#xff0c;AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现&#xff0c;同样值得业界关注&…