JAVAEE初阶 网络编程(五)

TCP协议

    • 一.TCP协议图
    • 二. TCP中的关键协议
      • 确认应答
        • 后发先至机制
        • 引入序号和确认序号
      • 超时重传
        • 去重机制
      • 建立连接
        • 三次握手

一.TCP协议图

在这里插入图片描述

我们可以发现,相比于UDP,TCP协议明显复杂很多,比如32位序号和32位确认序号,4位首都长度,保留位,窗口大小,紧急指针,选项,数据等这都是UDP协议中不存在的,我们就依次来看看TCP协议中的关键内容吧。

在这里插入图片描述

接着来介绍6位保留位,我们知道,在UDP协议中,因为受到报头长度的限制,如果我们长度超过报头的长度时,就会发生截断,超出部分就不会保留,那么在TCP中专门有"保留位"这个概念来预备将来想要扩展时所需的长度。

二. TCP中的关键协议

确认应答

确认应答是保证可靠性最核心的机制。在网络传输

后发先至机制

在网络传输的过程中,我们经常会发现有后发先至这种情况,意思就是后发出去的消息先显示出来的情况。

在这里插入图片描述

在网络传输过程中,出现后发先至,就会导致错误的含义。
为什么会发生后发先至的情况呢

在这里插入图片描述

那么为了解决后发先至这种情况,我们来引入一些规则。

引入序号和确认序号

引入这种之后,应答方就会告知发送方,我回答的是哪个数据。就不会导致被错误的理解。

在这里插入图片描述
在这里插入图片描述

而应答报文中的第一个序号,是按照发送报文的最后一个字节的序号+1得到的。

在这里插入图片描述

在确认应答机制中,通过应答报文来反馈回送给发送方,表示当前的数据正确收到了。
应答报文,也就是acknowledge,ack的缩写。

在这里插入图片描述

保留位中的第二位,就是ACK。如果当前报文是应答报文,ACK就会从0变成1.

超时重传

如果这一切数据的传输都是顺利的,那么接收方就会收到ACK应答报文,表示数据传输过程中传输正确,那么,如果在传输的过程当中,遇到丢包的情况,收不到ACK应答报文,这时候就需要超时重传上场了。

在发送方传输数据时,等的时间里,收到了ACK应答报文,如果等了好久都还没有收到, 那么发送方就会认为在传输的过程发生了丢包,就会把刚才的数据包再次传输。但是等待的时间有一个最大值阈值。

在这里插入图片描述

去重机制

在这里插入图片描述

超时确实会重传,但是重传也会有一定的次数限制,不会无休止的重传。
1.重传到一定程度,还没有ack应答报文,就会尝试重新连接,如果连接不上,就会放弃连接。
2 重传时间也不是一成不变的,重传到一定程度,会随着重传的次数而增大。

建立连接

建立连接的代码表示:

在这里插入图片描述

三次握手

此处的连接是虚拟的连接,抽象的连接,目的是让双方都能够保存到对端的信息。

在这里插入图片描述

虽然看起来图上有四次交互,但是有两次可以合并为一次,也就是中间的ack和syn可以合并为一处,最终形成三次握手。

所谓的建立连接的过程,就是服务器和客户端各自向对方发起一个syn,接收一个ack,其实在双方第一次交互的时候,连接就已经建立好了,但是最终要完成连接的建立,确立出后续进行通信,还需要接下来的步骤走完才可以,等到所有的握手环节都走完,服务器才会保留对端,也就是客户端的信息。

最终四步交互可以变成三步。

在这里插入图片描述

三次握手的意义是什么?为什么要进行三次握手。

  1. 可以先针对通信路径,投石问路,通信链路是否畅通。
  1. 针对通信双方,检验一下发送能力和接收能力是否正常。

在这里插入图片描述

  1. 服务器和客户端双方协商一些必要的参数。

在这里插入图片描述

协商参数的时候,大部分是以选项来体现的,最少0字节,最多40字节(因为报头部分占有20字节),TCP在一次通信过程中,每次开始的序号并不是从0/1开始的,而是选择一个较大的数字,以这个数字来继续计算,即使是同一个客户端和服务器,每次连接开始的序号也不同。

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

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

相关文章

前端面试题-js数据类型-怎么判断是对象还是数组-字符串常用方法-数组常用方法

前端面试题-js部分-js数据类型-怎么判断是对象还是数组-字符串常用方法-数组常用方法 JS数据类型有哪些值类型和引用类型的区别数组的常用方法哪些方法会改变原数组 字符串常用方法对象常用方法怎么判断是对象还是数组 JS数据类型有哪些 数据类型类型描述Number基本类型&#…

ANSYS 2023 下载安装教程,附安装包和工具,轻松安装,无套路

前言 ANSYS是一款融结构、流体、电场、磁场、声场分析于一体的大型通用有限元分析(FEA)软件,能与多数计算机辅助设计软件接口,实现数据的共享和交换,如Creo,NASTRAN、Algor、IDEAS、AutoCAD等. 准备工作 1、Win10及以上系统 2、提前准备好…

防火墙的基础知识点

目录 1. 防火墙的意义: 2. 防火墙分类: 3. 防火墙的发展史: 3.1 包过滤 3.2 应用代理 3.3. 状态检测 3.4. 专用设备 3.4.1 入侵检测系统(IDS) 3.4.2 入侵防御系统(IPS) 3.4.3 防病毒网关 (AV) 3.4.4 Web应用防火墙 (WAF) 3.5. 统…

Netty的解码器和编码器

链路图 一个完整的RPC请求中,netty对请求数据和响应数据的处理流程如下图所示 网络线路中传输的都是二进制数据,之后netty将二进制数据解码乘POJO对象,让客户端或者服务端程序处理。 解码的工具称为解码器,是一个入站处理器InBo…

BAT学习笔记:详解环境变量及其所有创建方法

文章目录 一、初识环境变量二、什么是环境变量三、为什么需要环境变量四、环境变量的分类五、环境变量的设置 一、初识环境变量 1.windows 的搜索框中输入 查看高级系统设置。点击打开系统属性窗口。 2. 在系统属性窗口中,点击右下方的“环境变量”打开环境变量设…

Linux服务器配置与管理(第二次实验)

实验目的及具体要求 目的 1.掌握基于命令行的文件操作 2.掌握基于命令行的目录操作 3.掌握用户账户的命令行操作 4.掌握组账户的命令行操作 5.熟悉磁盘分区操作 6.掌握调整优先级的方法 具体要求 1.掌握基于命令行的文件和目录操作 ①创建测试目录 ②创建文件 ③复…

解析MySQL生产环境CPU使用率过高的排查与解决方案

引言 在生产环境中,MySQL作为一个关键的数据库组件,其性能对整个系统的稳定性至关重要。然而,有时候我们可能会遇到MySQL CPU使用率过高的问题,这可能导致系统性能下降,应用页面访问减慢,甚至影响到用户体…

代码随想录算法训练营第十七天 |110.平衡二叉树,257.二叉树的所有路径,404.左叶子之和(待补充)

110.平衡二叉树 1、题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 2、文章讲解:代码随想录 3、题目: 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二…

前端工程化之:webpack1-6(编译过程)

一、webpack编译过程 webpack 的作用是将源代码编译(构建、打包)成最终代码。 整个过程大致分为三个步骤: 初始化编译输出 1.初始化 初始化时我们运行的命令 webpack 为核心包, webpack-cli 提供了 webpack 命令,通过…

Go 命令行解析 flag 包之快速上手

本篇文章是 Go 标准库 flag 包的快速上手篇。 概述 开发一个命令行工具,视复杂程度,一般要选择一个合适的命令行解析库,简单的需求用 Go 标准库 flag 就够了,flag 的使用非常简单。 当然,除了标准库 flag 外&#x…

架构整洁之道——价值维度与编程范式

1 设计与架构究竟是什么 结论:二者没有任何区别,一丁点区别都没有。 架构图里实际上包含了所有底层设计细节,这些细节信息共同支撑了顶层的架构设计,底层设计信息和顶层架构设计共同组成了整个架构文档。底层设计细节和高层架构信…

Neo4j 国内镜像下载与安装

Neo4j 5.x 简体中文版指南 社区版:https://neo4j.com/download-center/#community 链接地址(Linux版):https://neo4j.com/artifact.php?nameneo4j-community-3.5.13-unix.tar.gz 链接地址(Windows)&#x…

如何使用react框架进行两个html页面的切换?

如何使用react框架进行两个html页面的切换? 项目背景首先是古老的做法login.htmlindex.html 正文->react框架如何设置两个页面的跳转?配置react框架的环境react框架如何实现两个页面的跳转? 项目背景 古老的html页面跳转的做法无法在react框架中直接适配,所以非常有必要…

MySQL-进阶-索引

一、索引概述 1、介绍 2、有误索引搜索效率演示 3、优缺点 二、索引结构 1、B-Tree(多路平衡查找树) 2、BTree 3、Hash 三、索引分类 四、索引语法 1、语法 2、案例 五、SQL性能分析 1、查看执行频次 2、慢查询日志 3、show-profile 4、explain 六、索…

redis 入门

一、什么是redis? redis是c语言编写的高性能(读的速度是110000次/s,写的速度是81000次/s)的k-v形式的数据库,数据存在内存中 二、redis的使用场景? 数据量小,访问量大 三、redis的启动和关闭 启动: 打开cmd&…

2. HarmonyOS应用开发DevEcoStudio准备-1

2. HarmonyOS应用开发DevEcoStudio准备-1 下载 DevEco Studio 进入HUAWEI DevEco Studio产品页产品页。 单击下载列表右侧的按钮,下载 DevEco Studio。 安装 DevEco Studio 下载完成后,双击下载的 deveco-studio-xxxx.exe,进入 DevEco St…

gitee建库并git

箴言:书山有路勤为径 文章目录 前言一、gitee导入ssh二、gitee建库三、克隆到本地四、关联本地工程到远程仓库五、push流程总结 前言 nodejs每天的学习都有代码产出,转念一想不如在码云上面搞个仓库,也经历了些许波折,往常也建了…

接口测试工具开发文档

1 开发规划 1.1 开发人员 角 色 主要职责 负责模块 人员 备注 n xxx模块 xxx 1.2 开发计划 <附开发计划表> 1.3 开发环境和工具 开发工具 工具 作用 Notepad 编辑器 Perl 解释器 2 总体设计 设计思路&#xff1a;因为测试app和server。首先必须…

LeetCode.11. 盛最多水的容器

题目 题目链接 分析 这道题的意思就是让我们找两个下标&#xff0c;以这两个下标组成的线为底&#xff0c;高度取这两个位置对应数字的最小值为高&#xff0c;组成一个长方形&#xff0c;求长方形最大的面积可以为多少。 暴力的解法是什么&#xff1f;&#xff1f;&#xf…

【Linux】开始使用 vim 吧!!!

Linux 1 what is vim &#xff1f;2 vim基本概念3 vim的基本操作 &#xff01;3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(&#xff65;ω&#xff65;)&#xff89;感谢阅读下一篇文章见&#xff01;…