【计算机网络】——TCP协议

news2024/9/24 21:21:33

📑前言

本文主要是【计算机网络】——传输层TCP协议的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是青衿🥇
☁️博客首页:CSDN主页放风讲故事
🌄每日一句:努力一点,优秀一点

在这里插入图片描述

目录

文章目录

  • 📑前言
  • **目录**
    • TCP首部格式?
      • TCP 和 UDP 的区别
      • 三次握手
      • 为什么是三次握手,而不是其他的握手次数呢?
      • 为什么要三次握手,难道四次或更多次不可以吗?
      • 四次挥手
  • 📑文章末尾


TCP首部格式?

字段的含义

源端口:16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。
目的端口: 占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。
序号:32比特,取值范围[0,2^32-1],序号增加到最后一个后,下一个序号就又回到0。指出本TCP报文段数据载荷的第一个字节的序号。
确认号: 占32比特,取值范围[0,2^32-1],确认号增加到最后一个后,下一个确认号就又回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。
确认标志位ACK: 取值为1时确认号字段才有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。
校验和: 占16比特,检查范围包括TCP报文段的首部和数据载荷两部分。在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针: 占16比特,以字节为单位,用来指明紧急数据的长度。
填充: 由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,也就是首部长度字段,是以4字节为单位的)

ACK:

  • 报文中的ACK标志设置为1,表示该报文可以对接收到的报文进行确认。
  • 一般除了第一个请求连接的报文没有设置ACK外,其余报文基本上都设置了ACK,因为携带了ACK的报文需要对接收到的报文进行确认。

SYN:

  • 报文当中的SYN被设置为1,表明该报文是一个连接建立的请求报文。
  • 只有在连接建立阶段,SYN才被设置,正常通信时SYN不会被设置。

FIN:

  • 报文当中的FIN被设置为1,表明该报文是一个连接断开的请求报文。
  • 只有在断开连接阶段,FIN才被设置,正常通信时FIN不会被设置

TCP 和 UDP 的区别

在这里插入图片描述

三次握手

客户端与服务端建立连接的过程称为三次握手。
在这里插入图片描述
三次握手是 TCP 连接的建立过程。在握手之前,主动打开连接的客户端结束 CLOSE(关闭) 阶段,被动打开的服务器也结束 CLOSE(关闭) 阶段,并进入 LISTEN(监听) 阶段。随后进入三次握手阶段:
1.首先客户端向服务器发送TCP连接请求报文段,并等待服务器确认,其中:
●同步位SYN被设置为1, 表明这是一个TCP连接请求报文段。
●序号字段seq被设置了一个初始值x作为TCP客户进程所选择的初始序号。(x 一般取随机数);
●随后客户端进入 SYN-SENT 阶段。
2.服务器接收到客户端发来的 TCP连接请求报文段后,进行确认后结束 LISTEN 阶段,并返回TCP连接请求确认报文段,其中:
●该报文段首部中的同步位SYN和确认位ACK 都设置为1,表明这是一个TCP连接请求确认报文段;
●序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号;
●确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号seq的确认,随后服务器端进入 SYN-RCVD 阶段。
3.客户端接收到发送的 TCP连接请求确认报文段后,明确了从客户端到服务器的数据传输是正常的,最后还要向TCP服务器进程发送一个普通的TCP 确认报文段,其中:
●该报文段首部中的确认位ACK被设置为1,表明这是一个普通的TCP确认报文段 。
●序号字段seq 被设置为x+1,这是因为TCP客户进程发送的第一个TCP报文段的序号为x,并且不携带数据,因此第二个报文段的序号为x +1。
●确认号字段ack被设置为y + 1,这是对TCP服务器进程所选择的初始序号的确认。
●随后客户端进入 ESTABLISHED。
4.当服务器端收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束 SYN-RCVD 阶段,进入 ESTABLISHED 阶段,从而完成三次握手。

为什么是三次握手,而不是其他的握手次数呢?

1.防止已失效的连接请求报文段突然又传送到了TCP服务器进程因而导致错误和资源浪费。
●假设采用两报文握手,TCP客户进程发出一个TCP连接请求报文段,但是该报文段由于网络原因滞留了,这必然会造成该报文段的超时重传。
●假设重传的报文段被TCP服务器进程正常接收,TCP服务器进程给TCP客户进程发送一个TCP连接请求确认报文段,并进入连接已建立状态。他们可以相互传输数据,之后可以通过四报文挥手来释放连接,TCP双方都进入了关闭状态。
●一段时间后,失效的TCP连接请求报文段到达了TCP服务器进程,TCP服务器进程随即给TCP客户进程发送TCP连接请求确认报文段并进入连接已建立状态。
●但由于TCP客户进程并没有发起新的TCP连接请求,并且处于关闭状态,因此不会理会该报文段。而TCP服务器进程一直等待TCP客户进程发来数据,这将白白浪费TCP服务器进程所在主机的很多资源。
2.三次握手才能让双方均确认自己和对方的发送和接收能力都正常。
●第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常;
●第二次握手:客户端可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;
● 第三次握手:服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;
●可见三次握手才能让双方都确认自己和对方的发送和接收能力全部正常,这样就可以愉快地进行通信了。
3.告知对方自己的初始序号值,并确认收到对方的初始序号值。
●TCP 实现了可靠的数据传输,原因之一就是 TCP 报文段中维护了序号字段和确认序号字段,通过这两个字段双方都可以知道在自己发出的数据中,哪些是已经被对方确认接收的。
●这两个字段的值会在初始序号值的基础上递增,如果是两次握手,只有发起方的初始序号可以得到确认,而另一方的初始序号则得不到确认。

为什么要三次握手,难道四次或更多次不可以吗?

因为三次握手已经可以确认双方的发送接收能力正常,双方都知道彼此已经准备好,而且也可以完成对双方初始序号值的确认,也就无需再第四次握手了。
●第一次握手:服务端确认“自己收、客户端发”报文功能正常。
●第二次握手:客户端确认“自己发、自己收、服务端收、客户端发”报文功能正常,客户端认为连接已建立。
●第三次握手:服务端确认“自己发、客户端收”报文功能正常,此时双方均建立连接,可以正常通信

四次挥手

当双方结束通信,断开连接的过程称为四次挥手。
在这里插入图片描述

四次挥手即 TCP 连接的释放,这里假设客户端主动释放连接。在挥手之前主动释放连接的客户端结束ESTABLISHED 阶段,随后开始四次挥手:
1、首先客户端向服务器发送一段 TCP 报文表明其想要释放 TCP 连接,其中:
●终止位FIN和确认为ACK的值都被设置为1,表示请求释放连接;
●序号为 Seq = u;
●确认号ack = v;
●随后客户端进入 FIN-WAIT-1 阶段,即半关闭阶段,并且停止向服务端发送通信数据。
2、服务器接收到客户端请求断开连接的 FIN 报文后,结束 ESTABLISHED 阶段,进入 CLOSE-WAIT 阶段并返回一段 TCP 报文,其中:
● 标记位为 ACK = 1,表示接收到客户端释放连接的请求;
● 序号为 Seq = v;
●确认号ack字段的值设置为u+1,这是对TCP连接释放报文段的确认。
●随后服务器开始准备释放服务器端到客户端方向上的连接。
客户端收到服务器发送过来的 TCP 报文后,确认服务器已经收到了客户端连接释放的请求,随后客户端结束 FIN-WAIT-1 阶段,进入 FIN-WAIT-2 阶段。
3、服务器端在发出 ACK 确认报文后,服务器端会将遗留的待传数据传送给客户端,待传输完成后即经过 CLOSE-WAIT 阶段,便做好了释放服务器端到客户端的连接准备,再次向客户端发出一段 TCP 报文, 其中:
● 标记位为 FIN = 1 和 ACK = 1,表示已经准备好释放连接了;
●序号为 Seq = w;
● 确认号 ack = u + 1,这是对之前收到的TCP连接释放报文段的重复确认。
随后服务器端结束 CLOSE-WAIT 阶段,进入 LAST-ACK 阶段。并且停止向客户端发送数据。
4、客户端收到从服务器发来的 TCP 报文,确认了服务器已经做好释放连接的准备,于是结束 FIN-WAIT-2 阶段,进入 TIME-WAIT 阶段,并向服务器发送一段报文,其中:
●标记位为 ACK = 1,表示接收到服务器准备好释放连接的信号;
● 序号为 Seq= u + 1,表示是在已收到服务器报文的基础上,将其确认号 ack 值作为本段序号的值;
● 确认号为 ack= w + 1,这是对所收到的TCP连接释放报文段的确认。
随后客户端开始在 TIME-WAIT 阶段等待 2 MSL。服务器端收到从客户端发出的 TCP 报文之后结束LAST-ACK 阶段,进入 CLOSED 阶段。由此正式确认关闭服务器端到客户端方向上的连接。客户端等待完 2 MSL 之后,结束 TIME-WAIT 阶段,进入 CLOSED 阶段,由此完成「四次挥手」。

📑文章末尾

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习-常用API-ArrayList

ArrayList的遍历并删除元素(案例)ArrayList的常用apiArrayList是一种泛型集合ArrayList是什么?有何特点?作用? importjava.util.ArrayList; importjava.util.List; publicclassapiArrayListDemo1{ publicstaticvoidmai…

44 漏洞发现-APP应用之漏洞探针类型利用修复

目录 文章思路说明案例演示:抓包工具WEB协议面使用说明抓包工具非WEB协议面使用说明安卓逆向便捷APK一键提取URL演示利用Burp筛选及联动功能打出军体拳模拟器四个违法案例APP安全分析测试 涉及资源: 逆向只会涉及到相关工具的使用,不会涉及到原理&#x…

【论文阅读】Long-Tailed Recognition via Weight Balancing(CVPR2022)附MaxNorm的代码

目录 论文使用方法weight decayMaxNorm 如果使用原来的代码报错的可以看下面这个 论文 问题:真实世界中普遍存在长尾识别问题,朴素训练产生的模型在更高准确率方面偏向于普通类,导致稀有的类别准确率偏低。 key:解决LTR的关键是平衡各方面&a…

AutoMQ Kafka 云上十倍成本节约的奥秘(一): SPOT 实例

近年来,无论是海外还是国内,虽然受疫情影响,公有云的市场规模增速有所放缓,但是云的市场总规模仍然是持续增长的。公有云作为一个各个国家重点布局的战略方向和其本身万亿级市场的定位[1],我们学习用好云是非常有必要的…

彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题

最近在编译一个比较老的项目,git clone 之后使用 async 之后出现一下现象: 首先确定是我网络本身是没有问题的,尝试几次重新 async 之后还是出现问题,网上找了一些方法解决了本问题,以此来记录一下问题是如何解决的。 …

网络地址相关函数一网打尽

这块的函数又多又乱,今天写篇日志,以后慢慢补充 1. 网络地址介绍 1.1 ipv4 1.1.1 点、分十进制的ipv4 你对这个地址熟悉吗? 192.168.10.100,这可以当做一个字符串。被十进制数字、 “ . ”分开。IP地址的知识就不再多讲…

关于MyBatis和JVM的最常见的十道面试题

ORM项目中类属性名和数据库字段名不一致会导致什么问题?它的解决方案有哪些? 在ORM项目中,如果类的属性名称和数据库字段名不一致会场导致插入、修改时设置的这个不一致字段为null,查询的时候即使数据库有数据,但是查…

Jenkins如何从GIT下拉项目并启动Tomcat

一、先添加服务器 二、添加视图 点击控制台输出,滑到最下面,出现这个就说明构建成功了,如果没有出现,说明构建有问题,需要解决好问题才能启动哦~

Python 九九乘法表的7种实现方式

Python 九九乘法表的7种实现方式 九九乘法表是初学者学习编程的必要练手题目之一,因此各种语言都有对应的实现方式,而 Python 也不例外。在 Python 中,我们可以使用多种方式来生成一个简单的九九乘法表。 实现方式一:双重循环 f…

使用 Node.js 和 Cheerio 爬取网站图片

写一个关于图片爬取的小案例 爬取效果 使用插件如下: {"dependencies": {"axios": "^1.6.0","cheerio": "^1.0.0-rc.12","request": "^2.88.2"} }新建一个config.js配置文件 // 爬取图片…

Android T 远程动画显示流程(更新中)

序 本地动画和远程动画区别是什么? 本地动画:自给自足。对自身SurfaceControl矢量动画进行控制。 远程动画:拿来吧你!一个app A对另一个app B通过binder跨进程通信,控制app B的SurfaceControl矢量动画。 无论是本地动画还是远程…

F5负载均衡有何技术优势?为你详细解读

当今数字化时代,网络应用的性能对于企业的成功至关重要。负载均衡建立在现有网络结构之上,提供了有效的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。F5负载均衡技术则成为了许多企业实现高可用性和高…

原生table样式

HTML <div><table style"width: 100%;"><thead><tr><th style"width:25%;">董事会</th><th style"width:25%;">监事会</th><th style"width:25%;">股东</th><th sty…

物理信息神经网络PINN2024最新改良方案汇总(含复现代码)

传统的数值方法在处理复杂问题时可能需要大量的计算资源和时间&#xff0c;而改良后的PINN可以通过更有效的算法减少计算成本&#xff0c;使得求解过程更加高效。 在写论文时&#xff0c;我们也可以通过改进PINN减少数据需求、加速模型收敛、提高预测准确性、增强可解释性&…

linux -- 内存管理 -- SLAB分配器

SLAB分配器&#xff08;slab allocator&#xff09; SLAB分配器用于小内存空间管理&#xff0c;基本思想是&#xff1a;先利用页面分配器分配出单个或多个连续的物理页面&#xff0c;然后再此基础上将整块页面分割为多个相等的小内存单元&#xff0c;来满足小内存空间分配的需…

kerberos+kafka(2.13)认证(单节点ubuntu)

一&#xff1a;搭建kerberos。 1. 运行安装命令 apt-get install krb5-admin-server krb5-kdc krb5-user krb5-config2. 检查服务是否启动。 systemctl status krb5-admin-server systemctl status krb5-kdcsystemctl start krb5-admin-server systemctl startkrb5-kdc3. 修…

网络安全知识和华为防火墙

网络安全 网络空间安全 ---Cyberspace 2003年美国提出的网络空间概念 ---一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义&#xff1a;网络空间为继海、陆、空、天以外的第五大人类互动领域。 通信保密阶段 --- 计算机安全阶段 --- 信息系统安全 --- 网络空间安…

校园教学气象站是什么

TH-XQ3在当今社会&#xff0c;气象科学的重要性日益凸显。它不仅关系到农业、交通、航空等多个领域的安全&#xff0c;更对人类的生活产生深远影响。因此&#xff0c;许多学校纷纷开设气象学相关课程&#xff0c;帮助学生了解气象知识&#xff0c;培养他们的科学素养。而在这其…

【数据结构:顺序表】

文章目录 线性表顺序表1.1 顺序表结构的定义1.2 初始化顺序表1.3 检查顺序表空间1.4 打印1.5 尾插1.6 头插1.7 尾删1.8 头删1.9 查找1.10 指定位置插入1.11 删除指定位置数据1.12 销毁顺序表 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一…

termux 玩法(一)

termux基础 termux基础玩法推荐国光写的手册&#xff1a;Termux 高级终端安装使用配置教程 | 国光 (sqlsec.com) termux安装 个人使用F-Droid安装的termux&#xff1a;Termux | F-Droid - Free and Open Source Android App Repository 基础知识 这些基础知识简单了解一下…