【Java ee初阶】网络原理

TCP协议

1.确认应答 实现可靠传输的核心机制

2.超时重传 实现可靠传输的核心机制

3.连接管理 网络部分最高频的面试题

4.滑动窗口 提高传输效率的机制

5.流量控制 依据接收方的处理能力,限制发送方的发送速度。

6.拥塞控制 依据传输链路的处理能力,限制发送方的发送速度。

做实验

1.先从比较小的窗口开始 慢启动

2.指数增长

3.达到阈值,线性增长

4.遇到丢包,重新设定阈值,把窗口大小设为阈值的大小,继续线性增长

TCP核心机制

核心机制七:延时应答

为了提高传输效率。

承接滑动窗口,让传输效率提高一些。让窗口尽量大一些(在可靠性的前提下)

不立即返回 ack,而是稍微等一等。接收方应用程序,就是消费者。 为了给接收方留出一些时间 好能够多消费一些,接收缓冲区的剩余空间更大一点。

核心机制八 捎带应答

网络通信中,经常是“一问一答”的模型

客户端发起request,服务器返回response (不是ack.....)

核心机制九:面向字节流

读取/写入的时候,读写操作有很多种方式,非常灵活。

读100字节,

1. 一次读10字节,10次完成

2. 一次读20字节,5次完成

3. 一次读50字节,2次完成 ……

因此引起了粘包问题

接收方用的时候 去掉报头,把载荷内容放到一个 接收缓冲区中

接收方的应用程序,read的时候,就有很多种read的可能性

read的可能性:

1) a a a b b b c c c

2) aa ab bb cc c

3) aaa bbb ccc

4) aaab bbcc c

5) aa abb bcc c ......

取决于应用程序的代码是咋写的

具体怎样来读,才能确保读到的是一个“完整的应用层数据包”?

粘包,粘的是应用层的数据包。

TCP字节流的特性,收到多个TCP数据报的时候把所有的载荷都给混到一起 放到接收缓冲区里 

包的边界比较模糊,就好像“粘上了”一样

解决粘包,从应用层入手,合理的设计应用层协议,让包之间的边界,能够比较清晰

1. 通过特殊的分隔符,来作为包边界的区分

比如,约定,每个应用层数据包,都以;为结尾

包的数据里面,不能包含分隔符

需要找合适的符号,确保这个符号在正文中不会重复出现

再比如,之前写的回显服务器当时是使用 \n 作为分隔符的(空白符)

读到空白符就结束了。 空白符是统称,包括不限于: 空格,换行,回车,制表符,分页符,垂直制表符……

发请求的时候,使用 \n 作为结束标记的

由于是通过控制台来进行输入请求内容的

控制台里输入的内容本来就不会包含 \n

即使ascii码表中,也有不少的字符,可以用来作为分隔符

有一些特殊的“不可见字符” 历史遗留

2. 在应用层数据包开头的地方,通过固定长度,约定整个应用层数据包的长度

应用程序read的时候,先固定read 2字节,看看2字节里的内容是啥 => 发现是3

接下来再read 3字节,读到的aaa就是完整的应用层数据包

粘包问题只针对字节流的传输。对于文件操作,(使用文件存储多个结构化数据...也是可能涉及到粘包的)

比如,通过文件,保存若干个学生信息。

class Student { name id age classId ... }

比如约定成,每个学生信息占一行(使用 \n 作为结束标记,作为分隔符)

对于UDP来说,不存在粘包问题,UDP的接收缓冲区和TCP的不太一样

应用层不需要做区分

应用程序每次调用 recv 得到但就是一个完整的 DatagramPacket

也就对应一个完整的应用层数据包了。

未来实际开发中,很多时候是基于一些现成的框架/库进行开发的

(很可能粘包问题已经被框架/库帮我们解决了)

知名的框架和库,都是“通用的”

核心机制十 异常情况

1. 进程崩溃 [正常的流程]

进程崩溃,意味着对应的文件描述符就被关闭了(调用close,干掉进程)。

只要是进程退出,都会释放PCB,释放文件描述符表

TCP的连接并没有因为进程的结束立即结束,保留一会

触发FIN

2. 主机关机 (正常流程)

正常流程下的主机关机,就会先杀死所有的进程

此时也会触发FIN,进而进入四次挥手

有可能挥不完

如果关机的速度比较慢,有很大可能四次挥手挥完了

如果关机的速度比较快,刚发FIN,机器就关了

对端可以正常返回ack,也会继续正常发送FIN,这里的FIN就没有收到ack,尝试重传几次FIN. 还是没有ack,对端就直接放弃连接(删除之前保存的对端信息)

四次挥手,如果挥完了, 双方可以确认,双方都能顺利把保存的信息删掉, 如果挥不完,至少自己可以把保存的信息删掉, 对端就不管了 此时对端关机了,内存的数据全没了

3. 主机掉电(直接拔电源)

直接啥都没了

来不及发起FIN 台式机

1) 如果掉电的一方是接收方,对方是发送方。

对方继续发送数据,没有ack=> 超时重传 => 仍然没有ack => 继续超时重传

达到一定程度,掉电方仍然没有ack,发送方发送一个复位报文,就是表示要重置连接

放弃当前的连接

2) 如果掉电的一方是发送方,对方是接收方。

接收方感受到的是,发送方,突然停下了

接收方会继续阻塞等待,等待发送方发来新的数据

心跳包。

接收方会周期性的和发送方交换“心跳包”

A给B发一个无业务数据的报文

B给A返回一个ack 如果对方有应答,就可以认为对方是正常工作的。

如果心跳包也没有应答,就可以认为,对方挂了

如果发现心跳包没有,就可以单方面的释放连接了

这个机制非常重要,尤其是分布式系统中

分布式系统中,知道某个节点存活,非常重要的

4. 网线断开

本质上和主机掉电是一样的.

网线断开的两端,一个是发送方,一个是接收方 对于发送方来说,没有ack => 超时重传 => 仍然没有ack => 超时重传 => 达到一定程度,放弃连接

对于接收方来说,周期性触发心跳包 => 发现对端下线 => 放弃连接

1. 确认应答 2. 超时重传 3. 连接管理(三次握手,四次挥手) 4. 滑动窗口(快速重传) 5. 流量控制 6. 拥塞控制 7. 延时应答 8. 捎带应答 9. 面向字节流(粘包问题) 10. 异常情况(心跳包)

TCP有连接,可靠传输,面向字节流

还有一系列的机制……十个机制 

大部分情况优先考虑TCP

UDP无连接,不可靠传输,面向数据报 UDP传输效率高

机房内部的传输,不太会丢包,效率要求更高 还有的场景,既需要可靠性(不需要那么严格的可靠性),又需要效率(比TCP更高)

用UDP实现可靠传输(经典面试)

其实是在考察 TCP 基于UDP,在应用层,自己写代码,实现可靠传输.... 参考TCP的做法。

1) 确认应答 序号/确认序号 2) 超时重传 3) 滑动窗口 4) 流量控制,拥塞控制 …… 

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

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

相关文章

B站取关脚本

个人的账号可能被盗了,发现关注数量蹦到3000多,然后b站没有一键取关的按钮,并且对api的访问有速度限制,然后网上的脚本很多都已经失效了,所以自己稍微写个简陋的 测试时间: 2025.05.11 使用步骤: 进入b站的关注页面…

PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)

前言: 大二小学期python课上基于pygame做的一个游戏小demo,当时老师花了一天讲解了下python基础语法后(也是整个大学四年唯一学习python的时间),便让我们自学网课一周然后交项目,所以做的非常仓促&#xff…

使用 React 实现语音识别并转换功能

在现代 Web 开发中,语音识别技术的应用越来越广泛。它为用户提供了更加便捷、自然的交互方式,例如语音输入、语音指令等。本文将介绍如何使用 React 实现一个简单的语音识别并转换的功能。 功能概述 我们要实现的功能是一个语音识别测试页面&#xff0…

C++ 双峰高斯函数拟合

C 双峰高斯函数拟合 一维高斯函数二维高斯函数多维高斯函数一维双峰高斯函数代码实现 二维双峰高斯函数代码实现 多维多峰高斯函数 在数据分析与清洗中经常遇到这样的数据:数据不仅仅向单个中心靠拢,而是类似分段的向两个甚至多个中心靠拢。数据向单个中…

【RP2350】香瓜树莓派RP2350之LED

本文最后修改时间:2025年05月10日 01:57 一、本节简介 本节以树莓派pico2开发板为例,举例如何写一个LED驱动加进工程里。 二、实验平台 1、硬件平台 1)树莓派pico2开发板 ①树莓派pico2开发板(作为仿真器) ②micr…

机器人运动控制原理浅析-UC Berkeley超视觉模态模型

加州伯克利发布的超视觉多感知模态融合(FuSe, Fuse Heterogeneous Sensory Data)模型,基于视觉、触觉、听觉、本体及语言等模态,利用自然语言跨模态对齐(Cross-Modal Grounding)优调视觉语言动作等通用模型,提高模型任务成功率。 总体框架 …

【Bootstrap V4系列】学习入门教程之 组件-媒体对象(Media object)

Bootstrap V4系列 学习入门教程之 组件-媒体对象(Media object) 媒体对象(Media object)一、Example二、Nesting 嵌套三、Alignment 对齐四、Order 顺序五、Media list 媒体列表 媒体对象(Media object) B…

解决VirtualBox中虚拟机(ubuntu)与主机(windows)之间互相复制粘贴(文本)

一.开始的设置 1.在VirtualBox中打开设置,常规中修改主机与虚拟机交互设置 2.虚拟机关闭状态下,存储中选中控制器SATA,勾选‘使用主机输入输出’ 3.选中操作系统对应的虚拟文件,.vdi文件,勾选右边的固态驱动器。 4.启…

java 多核,多线程,分布式 并发编程的现状 :从本身的jdk ,到 spring ,到其它第三方。

Java 在多核、多线程和高性能编程领域提供了丰富的现成框架和工具,既有标准库中的并发组件,也有第三方框架。以下是一些关键框架及其应用场景的总结:便于后面我们站在巨人的肩膀上,继续前行 一、Java 标准库中的多线程框架 Execut…

Nodejs核心机制

文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…

C++笔记6:数字字面量后缀和前缀总结

在C中,可以在数字字面量后面添加字母后缀(或前缀)来表示特定的数据类型。这些后缀能够明确指定字面量的类型,避免类型转换带来的潜在问题。以下是常见的几种类型后缀及其含义: 1. 整数后缀 u 或 U:表示 u…

50.辐射抗扰RS和传导抗扰CS测试环境和干扰特征分析

辐射抗扰RS和传到抗扰CS测试环境和干扰特征分析 1. 辐射抗扰RS2. 传导抗扰CS 1. 辐射抗扰RS 辐射抗扰RS考察对外界电磁场干扰得抗扰能力,测试频段为80MHz~2000MHz,用1KHz得正弦波进行调幅,在电波暗室内进行。测试标准:IEC 61000-…

Java多态详解

Java多态详解 什么是多态? 比如我们说:“驾驶一辆车”,有人开的是自行车,有人开的是摩托车,有人开的是汽车。虽然我们都说“开车”,但“怎么开”是由具体的车类型决定的:“开”是统一的动作&a…

问题及解决01-面板无法随着窗口的放大而放大

在MATLAB的App Designer中,默认情况下,组件的位置是固定的,不会随着父容器的大小变化而改变。问题图如下图所示。 解决: 为了让Panel面板能够随着UIFigure父容器一起缩放,需要使用布局管理器,我利用 MATLA…

【GESP真题解析】第 20 集 GESP 二级 2025 年 3 月编程题 2:时间跨越

大家好,我是莫小特。 这篇文章给大家分享 GESP 二级 2025 年 3 月编程题第 2 题:时间跨越。 题目链接 洛谷链接:B4260 时间跨越 一、完成输入 根据题意,输入包含五行,每行一个正整数,分别代表 y,m,d,h,k。 注意到数据范围:对于全部数据,保证有 2000≤y≤3000,1≤m≤…

GTS-400 系列运动控制器板卡介绍(二十一)---电子齿轮跟随

运动控制器函数库的使用 运动控制器驱动程序、dll 文件、例程、Demo 等相关文件请通过固高科技官网下载,网 址为:www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提前下载运动…

软件工程之需求分析涉及的图与工具

需求分析与规格说明书是一项十分艰巨复杂的工作。用户与分析员之间需要沟通的内容非常的多,在双方交流信息的过程中很容易出现误解或遗漏,也可能存在二义性。如何才能更加准确的表达双方的意思,且清楚明了,绘制各类图形就显得非常…

蓝桥杯14届 数三角

问题描述 小明在二维坐标系中放置了 n 个点,他想在其中选出一个包含三个点的子集,这三个点能组成三角形。然而这样的方案太多了,他决定只选择那些可以组成等腰三角形的方案。请帮他计算出一共有多少种选法可以组成等腰三角形? 输…

在Fiddler中添加自定义HTTP方法列并高亮显示

在Fiddler中添加自定义HTTP方法列并高亮显示 Fiddler 是一款强大的 Web 调试代理工具,允许开发者检查和操作 HTTP 流量。一个常见需求是自定义 Web Sessions 列表,添加显示 HTTP 方法(GET、POST 等)的列,并通过颜色区…

数据库分库分表实战指南:从原理到落地

1. 为什么要分库分表? 1.1 单库瓶颈表现 存储瓶颈:单表数据超过5000万行,查询性能急剧下降性能瓶颈:单库QPS超过5000后响应延迟显著增加可用性风险:单点故障导致全系统不可用 1.2 突破性优势 --------------------…