【杂记-利用TCP协议传输数据始末详解】

一、三次握手前:

1、使用TCP协议的原因
TCP协议的目的是为了保证数据能在两端准确、连续的传输。
2、实现多设备传输的基础
TCP协议可使一个设备能同时与多个设备交互信息,它必须要保证不同传输通道之间不会产生串联或相互影响,所以TCP使用Socket数据结构来实现不同设备之间的连接。
3、Socket数据结构的作用
Socket包含两个成分:IP地址和端口号,一个设备可以对应一个IP,其中不同的传输通道用不同的端口号区分开来,于是同一个设备发送给其他不同设备的信息就不会产生混乱。
4、传输控制块TCB的产生
设备可能会产生多种数据并分发给不同的设备,为了确保数据能够正确分发:TCP使用TCB,也叫传输控制块的数据结构把发给不同设备的数据封装起来,该结构看做是信封。
5、TCB的结构
TCB数据块包含数据发送双方的Socket信息,以及装载数据的缓冲区。在两个设备要建立连接和发送数据之前,双方会分配内存建立起TCB数据块。
6、两者需做好准备
无论是客户端还是服务端,在建立连接前都需要准备好TCB数据结构。
7、客户端TCB主动打开
客户端主动向服务器表达自己想建立数据连接的请求,此时TCB状态为:Active Open(Create TCB)。
8、服务端TCB被动打开
由于服务器不知道有哪个设备想向它发起连接,因此在构建TCB模块时会默认将客户端对应的Socket数据初始化为0,服务器保持监听,等待客户端从该端口向它发起连接请求,此时TCB状态为:Passive Open(Create TCB)。
9、TCB已做好准备
双方把自己的Socket和TCB数据结构准备好后,就可以进入三次握手的过程。

二、三次握手时:

11、TCP协议终端两种数据包
一种数据包用来传输数据;一种数据包用来发送控制信息(SYN、ACK等),TCP报头中的标志位用于表明数据包是用于数据发送还是用于传输控制信息。
SYN:Synchronize,同步。
ACK:Acknowledge,确认。
12、TCP报头的标志位
当标志位中的SYN比特位启动时,表明当前数据包目的是实现双方数据状态同步。
当标志位中的ACK比特为启动时,表明数据包用于通知接收方已收到了数据。
13、为数据传输前做的准备
一是客户端通知服务器,“我想建立连接”。二是双方通知对方自己数据发送时的“初始序列号”。三是实现参数交换,把自己的有关信息发送给对方。
14、简述握手时过程
TCP三次握手只是建立连接的过程,和后续的数据传输关系不大。
客户端发送一个SYN数据包给服务端,其中包含了数据的初始序列号。
服务端收到数据包后回发一个SYN+ACK给客户端,其中包含了数据的初始序列号。
客户端收到数据包后,回发一个ACK包。
至此,握手过程结束,双方可以开始互发数据包。
15、初始序列号是随机数
为了防止由于网络波动等原因,先后接收到同一序列号导致握手异常,所以初始序列号是一个随机数,而不是每次都以1开始。
16、握手过程中的初始序列号
客户端把自己的初始化序列号放在SYN数据包中发送给服务端。
服务端收到来自客户端的数据包后,会将客户端的序列号的值加1,同时放入服务端自己的初始化序列号,回发SYN+ACK数据包。
当A收到数据后发送一个ACK数据包其中包含了B发过来的序列号加一后所得的数值
(待完成)

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

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

相关文章

OpenWrt 23.05 安装之后默认空间小 磁盘扩容 教程 软路由实测 系列六

1 安装fdisk opkg update opkg install fdisk #查看磁盘 rootOpenWrt:~# fdisk -l GPT PMBR size mismatch (246303 ! 250069679) will be corrected by write. The backup GPT table is not on the end of the device. Disk /dev/sda: 119.24 GiB, 128035676160 bytes, 25006…

SpringCloud配置文件bootstrap不生效问题解决

解决方案&#xff1a; 情况一、SpringBoot 版本 小于 2.4.0 版本&#xff0c;添加以下依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId> </dependency> 情况二、SpringBoot…

开源远程协助:分享屏幕,隔空协助!

&#x1f5a5;️ 星控远程协助系统 &#x1f5b1;️ 一个使用Java GUI技术实现的远程控制软件&#xff0c;你现在就可以远程查看和控制你的伙伴的桌面&#xff0c;接受星星的指引吧&#xff01; 支持系统&#xff1a;Windows / Mac / Linux &#x1f31f; 功能导览 &#x1f…

java-求质数问题

在 Java 中求质数是一个经典的问题&#xff0c;它可以很好地展示编程技巧和数学知识。质数是只有两个正因数&#xff1a;1 和它本身的数。例如&#xff0c;2、3、5、7、11、13 等都是质数。在计算机科学中&#xff0c;质数有着广泛的应用&#xff0c;比如在密码学、公共密钥加密…

521源码-免费源码下载-免费学习教程-常见的原生js封装ajax

更多 网站源码 学习教程 游戏源码&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源 请看以下案例&#xff1a; function ajax(options) {var xhr null;var type GET;var params formsParams(options.data);if(typeof options.type ! undefined){type o…

【Flutter】KeyAnimatedList组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月28日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

10个最佳人物素材网站推荐,免费获取第一个PNG文件!

人物素材是设计中应用最广泛的元素之一。无论是网页设计还是移动终端设计&#xff0c;人物素材的插画设计都比文字信息更容易吸引用户的注意力。作为内容呈现&#xff0c;还可以增加设计的艺术属性。为了节省大家寻找人物素材的时间成本&#xff0c;本文立即为大家整理了10个宝…

Java 实验12 线程同步与通信

&#xff08;一&#xff09;实验目的 1、掌握JAVA中多线程的实现方法&#xff1b; 2、重点掌握多线程的同步与通信机制&#xff1b; 3、熟悉JAVA中有关多线程同步与通信的方法 &#xff1b; 4、能使用多线程机制解决实际应用中的线程同步与通信问题。 &#xff08;二&…

202305青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头 小母牛。问第n 年的时候, 共有多少头母牛? 由递推法可推测, 当年数小于等于 4 的时候, 第几年就是有几头牛, 即 a[1]=1; a[2]=2; a[3]=3; a[4]=4。 当 n 大于 …

行为设计模式之职责链模式

文章目录 概述原理代码实现小结 概述 职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求.将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止. 在职责链模式中&…

宝塔:如何在宝塔面板做301重定向

如何在宝塔面板做301重定向?301重定向对于网站来说非常重要。如果你的网站以www开头&#xff0c;我们应该把没有www的域名重定向到有www的域名&#xff0c;反之亦然。 1、我们进入宝塔管理后台 2、登录面板并单击添加站点。既然要把xxx.com 301发到www.xxx.com&#xff0c;我…

GB/T 18915.2-2013 低辐射镀膜玻璃检测

低辐射镀膜玻璃是指对红外线有较高反射比的镀膜玻璃&#xff0c;根据工艺的不同分为离线镀膜玻璃和在线镀膜玻璃。 GB/T 18915.2-2013低辐射镀膜玻璃测试项目&#xff1a; 测试项目 测试方法 尺寸 GB/T 18915.2 弯曲度 GB/T 18915.2 外观质量 GB/T 18915.2 光学性能 …

如何从 JavaScript 对象中移除属性?

在 JavaScript 中,移除对象中的属性是一项常见的操作。本文将详细介绍如何使用 delete 操作符以及其他相关方法。 使用 delete 操作符 delete 操作符用于从对象中移除属性。例如: const obj = {foo: "bar" };delete obj.foo; console.log(obj.hasOwnProperty(&q…

大模型微调系列 --关于`transformer`中的`pipeline`是什么

大模型微调系列 --关于transformer中的pipeline是什么 pipeline就是一个帮你做数据预处理以及一些模型加载&#xff0c;模型预测的步骤的工具&#xff0c;提供各种接口 定义数据预处理函数 对输入的文本进行预处理 转换为小写去除标点符号去除特殊字符 def preprocess_tex…

JS 中怎么删除数组元素?有哪几种方法?

正文开始之前推荐一位宝藏博主免费分享的学习教程,学起来! 编号学习链接1Cesium: 保姆级教程+源码示例2openlayers: 保姆级教程+源码示例3Leaflet: 保姆级教程+源码示例4MapboxGL: 保姆级教程+源码示例splice() JavaScript中的splice()方法是一个内置的数组对象函数, 用于…

05.配置tomcat管理功能

认证失败&#xff0c;需要配置tomcat-users.xml文件 配置用户信息 [rootweb01 /application/tomcat/conf\]# tail tomcat-users.xml <role rolename"admin-gui"/> <role rolename"host-gui"/><role rolename"mana…

Java中集合中对象的某一个属性转为set集合

在Java中&#xff0c;如果你想要将一个集合&#xff08;比如List<YourObject>&#xff09;中对象的某个属性&#xff08;假设为String类型&#xff09;提取出来并放入一个Set<String>集合中&#xff0c;以确保去重&#xff0c;你可以通过Java 8的Stream API来轻松地…

Codeforces Round 946 (Div. 3)

Codeforces Round 946 &#xff08;div3&#xff09; A. Phone Desktop题意&#xff1a;题解&#xff1a;代码&#xff1a; Symmetric Encoding题意&#xff1a;题解&#xff1a;代码&#xff1a; C. Beautiful Triple Pairs题意&#xff1a;题解&#xff1a;代码&#xff1a;…

洛谷 CF1209D Cow and Snacks

题目来源于&#xff1a;洛谷 题目本质&#xff1a;并查集 解题思路&#xff1a; 我们以每种化为一个点&#xff0c;以每个客人喜欢的两朵花给两朵花连一条无向边。则会出现一定数目的连通块&#xff0c;连通块总个数为 ans。 对每个连通块进行分析&#xff1a;第一个客人买走…

QGraphicsView实现简易地图17『涟漪效果』

前文链接&#xff1a;QGraphicsView实现简易地图16『爆炸效果』 模仿水波荡漾时的涟漪效果&#xff0c;参考了echarts中的散点图 支持设置散点大小、颜色、涟漪线条宽度。 动态演示效果 静态展示图片 核心代码 #pragma once #include "../AbstractGeoItem.h" #incl…