【网络原理】TCP 协议中比较重要的一些特性(一)

news2024/10/7 2:18:34

目录

1、TCP 协议

2、确认应答

2.1、确认序号

3、超时重传

4、连接管理

4.1、建立连接(三次握手)

4.2、断开连接(四次挥手)



1、TCP 协议

TCP 是工作中最常用到的协议,也是面试中最常考的协议,具有面向连接,可靠传输,面向字节流,全双工的特点,其中可靠传输是 TCP 安身立命的本钱,TCP 设计的初心就是为了解决“可靠传输”这个问题

2、确认应答

确保 TCP 可靠性最核心的机制,称为“确认应答”。发送方给接收方发送消息成功后,接收方会返回一个应答报文(ack 报文,acknowledge)

ack(acknowledge,应答报文)

2.1、确认序号

确认序号是返回的应答报文中的一个值,确认序号是按照发送过去的最后一个字节的序号再加上 1 来进行设定的。

如上图所示,主机 B 收到 1 - 1000 这些字节数据之后,反馈了一个应答报文。应答报文中的确认序号的值就是 1001。 此处发送回去的 1001 有两个含义

  1. 告诉发送方主机 A ,小于 1001 的数据已经收到了
  2. 发送方主机 A接下来要发送从 1001 开始的数据

3、超时重传

超时重传,是确认应答的补充,用于处理丢包情况。

如果一切顺利,通过应答报文就可以告诉发送方,当前的数据是否成功收到,但是网络上可能存在“丢包”情况。如果数据包丢了,没有到达对方,对方自然也就不会发送 ack 应答报文。为了针对这种情况,提出了“超时重传”。

超时重传简单来说就是:发送方发了一个数据后,会进行等待,如果超过了预设的等待时间依然没有 ack 应答报文返回(超时),此时发送方就会认为数据的传输出现了丢包,就会将刚才发送的数据包再传输一次(重传)

重传并不会无限的重传,当重传次数到达一定上限时,会尝试重置连接,如果重置也失败,则会直接放弃连接。并且重传的超时时间阈值也不是固定不变的,会随着重传次数的增加而增大(重传频率越来越低)

当然,发送方没有接收到 ack 应答报文,有两种情况,一种是数据丢了,一种是接收方收到了数据,再回传 ack 时 ack 丢了。

当 ack 丢失时,会导致发送多次相同数据到接收方,此时接收方可以通过“接收缓冲区”将重复的数据过滤掉,防止因为重复数据出现问题。

接收缓冲区除了能够帮助我们进行去重之外,还能进行排序,对收到的数据按照序号进行排序,确保应用程序读到的数据和发送的数据顺序是一致的,可以简单认为接收缓冲区是一个“优先级队列”,以序号作为优先级的参考依据。

注意:上述谈到的 ack、超时重传、保证顺序、自动去重,都是 TCP 内置的,只需要调用 outputStream.write() 上述功能即可自动生效。

反之如果使用 UDP,上述问题都需要好好考虑并处理。

4、连接管理

4.1、建立连接(三次握手)

操作系统内核建立连接的过程称为“三次握手”,目的是让通信双方都能保存对方的相关信息。

socket = new Scoket(serverIp,serverPort);

这个操作就是在进行“三次握手”,而服务器是在“三次握手”之后通过 accept 从队列中获取最新连接

syn(synchronize,同步报文段)不携带载荷,只携带报头。

第一次交互,一定是客户端主动发起的,此时客户端会发送一个 syn 。服务器收到 syn 之后,会返回 ack (应答报文)和 syn ,其中 ack 表示收到了连接请求,syn 表示接收连接。此时客户端接收到 syn 后再给服务器发送一个 ack。

所谓的建立连接的过程,本质上就是通信双方各自给对方发送一个 syn,各自给对方回一个 ack。

由于服务器返回 ack 和 syn 的过程和应用程序代码无关,由内核完成,中间两步的触发时机几乎完全一致,因此可以合并为一步。

“三次握手”的意义:

  1. 可以先针对通信路径,进行投石问路,初步的确认以下通信链路是否畅通。【关注点在中间过程】
  2. 验证通信双方的“发送能力”和“接受能力”是否正常。【关注点在两端】
  3. 三次握手的过程中协商一些必要的参数。例如序号

4.2、断开连接(四次挥手)

通过 socket.close() 开始执行断开连接操作。

FIN(finish,结束报文段)

在实际过程中,也可能是“三次挥手”,三次和四次取决于第一个 ack 和第二个 fin 的时间间隔,由于这两者之间的间隔与应用程序代码有关,如果时间间隔比较长,此时就无法进行合并。但是通常情况下还是认为是四次挥手。

所谓的断开连接的过程,本质上就是通信双方各自给对方发送一个 fin,各自给对方回一个 ack。

【博主推荐】 

JVM 的垃圾回收机制以及垃圾回收算法的详解-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136530845?spm=1001.2014.3001.5501对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136529700?spm=1001.2014.3001.5501【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/136322678?spm=1001.2014.3001.5501

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

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

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

相关文章

spring-data-elasticsearch官方文档解读(部分)

Spring Data Elasticsearch 这里主要学习的是4.4.16版本的文档 1. 版本 下表显示了 Spring Data 发行版系列使用的 Elasticsearch 版本和其中包含的 Spring Data Elasticsearch 版本,以及引用该特定 Spring Data 发行版系列的 Spring Boot 版本。给出的 Elastics…

关于yolov8的DFL模块(pytorch以及tensorrt)

可以参考我改的项目,不过目前推理结果不对,还在修复: https://github.com/lindsayshuo/yolov8-cls-tensorrtx先看代码 class DFL(nn.Module):"""Integral module of Distribution Focal Loss (DFL).Proposed in Generalized…

视频占用内存太大了怎么办 如何快速又无损的压缩视频 快来学习吧

视频文件太大是很多人在使用电脑或移动设备时经常遇到的问题。如果视频文件过大,不仅会占用过多的存储空间,还会让播放和传输变得困难。为了解决这个问题,我们需要学会如何缩小视频文件大小。那么如何缩小储存视频的大小呢?下面给…

【JAVA】CSS2:样式、选择器、伪类、颜色、字体、边框、列表、背景、盒子、布局、浮动

本文介绍了CSS样式、选择器、伪类、像素、颜色、字体、边框、列表、表格属性、背景、盒子、布局与浮动 1.样式 1.1 行内样式 <h1 style"color: aqua;font-size: large;">123</h1> 1.2 内部样式 <style>h1{color: red;font: 100;}</style>…

高速电路顶级会议DesignCon 2019年会议总结和论文资料分享

会议基本介绍 DesignCon 2019年是一场专注于电子设计和信号完整性的国际会议&#xff0c;于在美国加利福尼亚州举行。 主题丰富&#xff1a;DesignCon 2019年聚焦于电子设计和信号完整性的多个领域&#xff0c;包括高速串行链接、射频和微波设计、功率完整性、模拟设计、信号…

Unity3d Shader篇(十三)— 透明度混合(AlphaBlend)

文章目录 前言一、什么是透明度混合&#xff1f;1. 透明度混合原理2. 透明度混合优缺点优点&#xff1a;缺点&#xff1a; 3. 纹理图 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三、效果四、总结 前言 在计…

ArmSoM Rockchip系列产品 通用教程 之 PCIe 使用

1. PCIe 简介​ PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种用于连接主板和外部设备的高速串行接口标准。它是 PCI 技术的后继者&#xff0c;旨在提供更高的带宽和更好的性能。 高速传输&#xff1a; PCIe接口提供了高速的数据传输通道&am…

【STA】SRAM / DDR SDRAM 接口时序约束学习记录

1. SRAM接口 相比于DDR SDRAM&#xff0c;SRAM接口数据与控制信号共享同一时钟。在用户逻辑&#xff08;这里记作DUA&#xff08;Design Under Analysis&#xff09;&#xff09;将数据写到SRAM中去的写周期中&#xff0c;数据和地址从DUA传送到SRAM中&#xff0c;并都在有效时…

使用QEMU来模拟运行Linux系统

第一步&#xff1a;安装 执行命令 假设我们呢开发板需要arm64架构的Ubuntu 得通过apt-file去找&#xff0c;可以找到qemu-system-arm 所以直接按照qemu-system-arm就行了 apt-file list会列举这个软件包里所有的文件 这个命令可以列举出所有安装好的包名&#xff0c;有点像pip…

什么是PLC远程控制模块?

随着工业自动化的不断发展&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;已成为现代工业设备中不可或缺的核心组件。然而&#xff0c;传统的PLC管理方式往往受限于现场操作和维护&#xff0c;难以满足日益复杂的工业需求。在这一背景下&#xff0c;PLC远程控制模块应…

【数据库系统概论】第2章:关系数据库

文章目录 0. 前言2.1 关系数据结构及形式化定义2.1.1关系2.1.2 关系模式 2.2 关系操作2.3 关系的完整性2.4 关系代数 0. 前言 关系数据库系统是支持关系模型的数据库系统。第一章初步介绍了关系模型及其基本术语。本章将深入介绍关系模型。 按照数据模型的三个要素&#xff0c;…

基础刷题50之五(重复的子字符串)

文章目录 前言一、题目二、力扣官方解释1、枚举2、字符串匹配 三、文心一言解释1、枚举2、字符串匹配 总结 前言 刚上研一&#xff0c;有人劝我好好学C&#xff0c;当时用的不多就没学&#xff0c;现在毕业上班了。在此亡羊补牢了 在此感谢力扣和文心一言 一、题目 给定一个…

Python图像处理【22】基于卷积神经网络的图像去雾

基于卷积神经网络的图像去雾 0. 前言1. 渐进特征融合网络2. 图像去雾2.1 网络构建2.2 模型测试 小结系列链接 0. 前言 单图像去雾 (dehazing) 是一个具有挑战性的图像恢复问题。为了解决这个问题&#xff0c;大多数算法都采用经典的大气散射模型&#xff0c;该模型是一种基于单…

ECharts饼图图例消失踩的坑

在使用Echarts的饼图时&#xff0c;当时做法是在图例数小于8时显示全部的图例&#xff0c;在大于8的时候显示前8个图例。于是用了两种不同的方式处理。导致出现切换时间后图例不显示的情况。 错误过程&#xff1a; 在进行图例生成时采用了两种不同的方式&#xff1a; ①如果…

Redis底层源码分析系列(前提准备)

文章目录 一、 面试题二、 源码分析1. 源码导入2. 源码核心部分 一、 面试题 1. redis跳跃列表了解吗&#xff1f;这个数据结构有什么缺点&#xff1f; 2. redis项目里面怎么用&#xff1f; redis的数据结构都了解哪些&#xff1f; 3. redis的zset底层实现&#xff1f; redi…

深入理解Servlet

目录&#xff1a; ServletWeb开发历史Servlet简介Servlet技术特点Servlet在应用程序中的位置Tomcat运行过程Servlet继承结构Servlet生命周期Servlet处理请求的原理Servlet的作用HttpServletRequest对象HttpServletResponse对象ServletContext对象ServletConfig对象Cookie对象与…

Constrained Iterative LQR 自动驾驶中使用的经典控制算法

Motion planning 运动规划在自动驾驶领域是一个比较有挑战的部分。它既要接受来自上层的行为理解和决策的输出,也要考虑一个包含道路结构和感知所检测到的所有障碍物状态的动态世界模型。最终生成一个满足安全性和可行性约束并且具有理想驾驶体验的轨迹。 通常,motion plann…

微信小程序开发系列(二十八)·小程序API如何发送网络请求以及网络请求失败后的解决方法

目录 1. 小程序API介绍 2. 网络请求 2.1 网络请求失败解决方法 2.2 如何跳过域名校验 1. 小程序API介绍 小程序开发框架提供丰富的微信原生API&#xff0c;可以方便的调起微信提供的能力&#xff0c;例如&#xff1a;获取用户信息、微信登录、微信支付等&#xff0c;小…

“antd“: Unknown word.cSpell

你遇到的问题是 VS Code 的 Code Spell Checker 插件在检查拼写时&#xff0c;将 "antd" 标记为未知单词。"antd" 是 Ant Design 的缩写&#xff0c;是一个流行的 React UI 库&#xff0c;不是一个英语单词&#xff0c;所以 Spell Checker 会将其标记为错误…

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中&#xff0c;我们一般会提供一个搜索框&#xff0c;输入关健字&#xff0c;点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…