浅谈TCP协议的可靠含义和三次握手

        这里不过多阐述计算机网络的体系结构,本文主要是想阐述三次握手和可靠连接之间的联系。TCP协议全称传输控制协议(Transmission Cotrol Protocol)。

1、TCP协议运行在哪一层

        TCP运行在运输层。
2、TCP协议的可靠是什么意思
        步入主题,很多同学的回答是TCP三次握手确保了可靠连接,这样说非常不严谨,这个可靠并不是说因为三次握手所以建立起的这个连接是可靠的,三次握手只是建立连接的一个方式,可靠的意思是说TCP协议中的各种机制使得其建立连接后的信道是可靠的,更严谨的说,是能确保这个信道数据的传输是可靠的。
2.1、其中的面向连接是什么意思
        意思是说TCP传输数据需要先建立连接,数据传输完毕要释放连接,就像通信双方中间建立了一条无形的物理连接一样(逻辑信道)。
        那通信双方是谁呢,在计算机中,叫套接字(socket)(对应的,Linux有Socket Statistics,简称ss命令可以查看本机网络连接),写法是IP地址:端口号,相当于两个端点之间建立了一条连接,如192.168.1.1:8000---192.168.1.2:8000(所以一个端点可能有不同的几条连接)。
2.2、可靠的保证
        前面提到,TCP的可靠是由其中各种机制保证的。那不妨想下,两个人通信可能会出现什么问题?例如在课堂上,A写了张纸条丢给B,那B可能收到了纸条,B也可能没有,B收到了纸条又可能存在什么问题?B收到了,但A不知道B收到了(假设A无法看见B是否捡起了纸条),B收到了但是A给定纸条上的信息有错误...,等等一系列情况,TCP的各种机制就是确保这些情况不会影响数据传输的(所以可以想一下,TCP相比UDP是比较耗时复杂的,因为它为了确保可靠传输多做了很多工作)。
        本篇文章主要为了说明可靠传输并不仅仅是三次握手实现的,因此只简单例举几种情况和几种相应的机制。例1,怎么确认B收没收到?所以TCP协议中会有停止等待机制,即每发送一个分组,等待对方的确认再继续发送。例2,等多久?B没收到怎么办?所以TCP协议有个超时重传机制,即每次发送完分组,会开始计时,规定时间内没收到确认会重发。
        上述只是简单的介绍两个确保可靠传输的机制,从上述例子中,可以再想一下,怎么知道这个分组发过了?分组是否要编号?多长时间重发?检查到分组数据有错误怎么办?数据传输效率怎么样?这就是可以继续深入的问题了。
3、可以说TCP的三次握手就能确保信道可靠的吗
        是不能的,有一个经典的问题,即蓝军通信问题。蓝军1和蓝军2需要协同作战对抗白军,现在蓝军1需要把命令传给蓝军2,假设蓝军1将作战信息发送给蓝军2,此时蓝军2收到信息并回复“蓝军2已收到”,但蓝军2并不知道蓝军1是否收到“蓝军2已收到”信息,假设蓝军1收到“蓝军2已收到”,那蓝军1,2有百分百把握执行作战信息吗,其实是没有的,需要蓝军1再发一次“蓝军1对信息-蓝军2已收到,已收到”给蓝军2。
        不难发现,双发永远无法确保自己发的最后一条信息是否被对方接收,这里的关键是知道最后一条信息是否被对方收到,三次握手也同理,那三次握手解决了这个问题吗,其实是没有的,下面是三次握手图解(摘自《计算机网络第七版》)。

        图示中SYN(同步)和ACK(确认)均是TCP报文段中的首部字段,简单来说步骤是服务器等待连接,客户端随机选择序号是x的分组(数据会被拆成一个个分组,并且编好序号)传给服务器,服务收到后把ack置为x+1,并且发送自己的序号是y的数据,客户端收到后ack=x+1后,知道x收到了,接着把x+1的发送给服务器,由此交换三次报文就算建立连接了,所以三次握手并没有解决最后一条信息问题,只是说确认双方存在建立了条连接罢了。换句话说,这里并不关注最后一条信息,只保证接收到当前数据并且发送下条数据。
        总结,下面就回到开头那句‘更严谨的说,是能确保这个信道数据的传输是可靠的’了,TCP各种机制是确保了数据(每一个分组)被正确接收,就像即使是一条保护的很好的物理线路,也不能保证这条线路永远不会损坏,但是协议得知道数据有没有传过去,是不是传对了等等。

        PS:有基本的概念后,再去学习运输层,就会明白很多了,例如为了解决前面那些问题的超时重传,选择确认等机制等的具体实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MLflow【部署 01】MLflow官网Quick Start实操(一篇学会部署使用MLflow)

一篇学会部署使用MLflow 1.版本及环境2.官方步骤Step-1 Get MLflowStep-2 Start a Tracking ServerStep 3 - Train a model and prepare metadata for loggingStep 4 - Log the model and its metadata to MLflowStep 5 - Load the model as a Python Function (pyfunc) and us…

Hackme 1

信息收集 Nmap部分 存活扫描: └─# nmap -sn 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-20 15:00 CST Nmap scan report for 192.168.10.1 (192.168.10.1) Host is up (0.00012s latency). MAC Address: 00:50:56:C0:00:08 (VMwar…

matlab代码--基于matlabLDPC-和积译码系统

LDPC编码 一个码长为n、信息位个数为k的线性分组码(n,k)可以由一个生成矩阵 来定义,信息序列 通过G被映射到码字XS.G。线性分组码也可以由一个校验矩阵 来描述。所以码字均满足 。校验矩阵的每一行表示一个校验约束 ,其中所有的非…

C++入门学习(三十二)二维数组定义方式

一维数组类似于一条“线”&#xff0c;而二维数组类似于一个“面”&#xff0c;二维数组也更像一个表格&#xff0c;由我们在“表格”中查询数据。 1、先定义数组&#xff0c;后赋值 int arr[2][3]; #include <iostream> using namespace std;int main() { int arr…

分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测

分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测 目录 分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab…

day6 2/22

1> 将互斥机制的代码实现重新敲一遍 #include<myhead.h> int num520; pthread_mutex_t mutex;//创建互斥锁 void*task1(void*arg) {pthread_mutex_lock(&mutex);sleep(3);num;printf("%d\n",num);pthread_mutex_unlock(&mutex);pthread_exit(NULL)…

2024/2/22

P8680 [蓝桥杯 2019 省 B] 特别数的和 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 00&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共28 个&#xff0c;他们的和是574。 请问&#xff0c;在…

【Git】:标签功能

标签功能 一.标签操作二.推送远程标签 标签 tag &#xff0c;可以简单的理解为是对某次commit的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项⽬发布某个版本的时候&#xff0c;针对最后⼀次commit起⼀个v1.0这样的标签来标识⾥程碑的意义。这有什么⽤呢&…

CRF算法(Conditional Random Fields)揭秘

CRF基本介绍 在机器学习中&#xff0c;建模线性序列结构的方法&#xff0c;除了HMM算法&#xff0c;另一个重要的模型就是CRF。HMM为了降低模型复杂性&#xff0c;对观测变量做了独立假设(即隐状态之间有相关性&#xff0c;而观测变量之间没有相关性)&#xff0c;这在某种程度…

五种多目标优化算法(MSSA、MOJS、NSWOA、MOPSO、MOAHA)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MSSA 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0c…

C2-1.4(L1,L2)正则化

C2-1.4&#xff08;L1,L2&#xff09;正则化 参考书籍 1 正则化的概念 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息&#xff0c;以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数额外项&#xff0c;常用的额外项一般…

Python实现简易小钢琴

Python实现简易小钢琴 使用Python和内带的Tkinter库、winsound 模块实现的简单小钢琴。 Tkinter库和winsound模块不需要额外安装就可以使用&#xff0c;因为它们是Python的标准库之一&#xff0c;已经随着Python的安装包一起提供。标准库是Python官方提供的一组核心模块和工具…

MFC 多文档程序的基本编程

下载了一个openGL mfc的多文档程序,以此来学习mfc多文档模式的编程; 它每次新建一个文档,会在窗口绘制一个三角形、一个矩形;如果没有了图形刷新一下; 先看一下为什么每次打开新文档会绘制图形; 生成工程之后主要有5个类,比单文档程序多了一个子框架类; 可以打开多个…

C++:STL简介

1. 什么是STL STL(standard template libaray- 标准模板库 ) &#xff1a; 是 C 标准库的重要组成部分 &#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架 。 2. STL的版本 3. STL的六大组件 4.STL的缺陷 1. STL库的更新太慢了。这…

计算机设计大赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

【海贼王的数据航海:利用数据结构成为数据海洋的霸主】时间复杂度 | 空间复杂度

目录 1 -> 算法效率 1.1 -> 如何衡量一个算法的好坏&#xff1f; 1.2 -> 算法的复杂度 2 -> 时间复杂度 2.1 -> 时间复杂度的概念 2.2 -> 大O的渐进表示法 2.3 -> 常见时间复杂度计算 3 -> 空间复杂度 4 -> 常见复杂度对比 1 -> 算法效…

第2部分 基础篇 第2章 隐私计算技术简介(1)

2.6.1. 隐私计算技术解决什么问题&#xff1f; 本聪老师&#xff1a;关于隐私计算&#xff0c;我想先问大家一个问题&#xff1a;隐私计算技术能够解决什么问题&#xff1f; 小明&#xff1a;是不是应该是保护用户的隐私。 本聪老师&#xff1a;可以这么说&#xff0c;但是怎…

一 些有代表性的相位解包裹算法

Itoh首先给出了传统解包裹算法的数学描述!。传统的相位解包裹操作是通过对空间相邻点相位值的比较来完成的。根据抽样定理&#xff0c;如果相邻采样点的相位差不超过z&#xff0c;则对应的相位解包裹处理是非常简单的&#xff0c;理论上以某点为起始点沿某一路径对包裹相位的差…

如何使用Docker部署MongoDB并结合内网穿透实现远程访问本地数据库

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 …

机器学习第二十八周周报 PINNs2

文章目录 week28 PINNs2摘要Abstract一、Lipschitz条件二、文献阅读1. 题目数据驱动的偏微分方程2. 连续时间模型3. 离散时间模型4.结论 三、CLSTM1. 任务要求2. 实验结果3. 实验代码3.1模型构建3.2训练过程代码 小结参考文献 week28 PINNs2 摘要 本文主要讨论PINN。本文简要…