网络原理 TCP/IP

1.应用层

1.1自定义协议

客户端和服务器之间往往进行交互的是“结构化”数据,网络传输的数据是“字符串”“二进制bit流”,约定协议的过程就是把结构化”数据转成“字符串”或“二进制bit流”的过程.

序列化:把结构化”数据转成“字符串”或“二进制bit流”的过程

反序列化:“字符串”或“二进制bit流”还原成结构化”数据

约定这两件事的过程就是自定义协议的过程

1.2 xml

里面的标签/格式/值都是自定义的

1.3 json(当下主流的数据组织格式)

键值对结构,比1.2更节省带宽

1.4 protobuffer

更节省带宽,效率最高的方式

只是在开发阶段定义出这里有哪些资源,描述每个字段的含义,程序真正运行的时候,实际传输的数据是不包含这样的描述信息

2.传输层

2.1 端口号

2个字节的整数,1-1024系统保留自用的端口号

2.2 UDP协议

无连接,不可靠传输,面向数据报,全双工

UDP效率会比TCP高

报文格式:

UDP数据报=报头(重点)+载荷(应用层数据报)

UDP报头中有4个字段,每个字段2个字节

由于协议报头中使用2个字节表示端口号,端口号的取值范围0-65535,最大值64kb,所以一个数据报的最大值就是64kb

校验和/检验和:验证数据在传输的过程中是否正确,可能受电磁波,电信号,光信号等干扰

2.3 TCP协议(常用且考频高)

TCP报头中前20个字节是固定长度的,选项可以有可以没有

保留位给后续需要扩展功能,避免因为扩展引起不兼容问题

六位标志位,TCP非常核心的部分

有连接,可靠传输,面向字节流,全双工

2.3.1确认应答

确保“可靠性”最核心的机制是“确认应答”TCP的序号确认序号是按照字节来进行编号的

2.3.2 超时重传

发送方认为没有收到ack就判定为丢包会重新传送一次,所以存在两种情况,一个是数据丢包,一个是ack丢包(会收到2次数据)。针对这个问题,TCP socket在内核中存在接受缓冲区,发送方发来的数据先放到接收缓冲区中,然后应用程序调用read/scanner.next才能读到数据,这里的读操作读的是接收缓冲区。

接收方通过数据的序号来判断这个数据是否是“重复数据”,应用程序读取数据的时候是按照序号的先后顺序连续读取的

重传不是无限的,重传到一定程度还没有ack就会尝试重置连接,如果重置也失败就会直接放弃连接,重传的频率越来越低

针对上述ack,重传,保证顺序,自动去重,都是TCP内置的,咱们使用TCP内置的api时outputStream.write()只需要调用一个这个代码即可

2.3.3连接管理

建立连接和断开连接

2.3.3.1 建立连接

TCP有连接,客户端执行socket=new Socket(severlp,severPort);//这个操作就是在建立连接

三次握手:内核建立连接的过程,让通信双方都能保存对方的相关的信息,syn不带有应用层载荷,但是会有ip报头。中间两次合并为一次握手

握手的意义

1.初步确认通信链路是否畅通

2.验证通信双方发送能力和接受能力是否正常

3.协商一些必要的参数

2.3.3.2 断开连接

四次挥手:不一定是客户端先发起,调用socket.close进程直接结束都会触发fin

中间的ack,fin不一定可以合并,因为它们之间的时间间隔比较长

谁被动断开连接,谁进入CLOSE_WAIT,谁主动 断开连接,谁进入TIME_WAIT

2.3.4 滑动窗口

提高效率,批量传输

如果出现丢包,滑动窗口会怎么样?

1.ack丢了,不会影响可靠性,所以不用进行任何处理

2.数据丢了,会影响可靠性,要重传

2.3.5 流量控制

接收方影响发送方的速度,接收方按照自己的接收缓冲区剩余空间的大小作为ack中的窗口大小的数值,前提就是为了保证可靠性

2.3.6 拥塞控制

限制发送方发送数据的速率,流量控制和拥塞控制谁产生的窗口大小更小,谁就说了算

2.3.7 延时应答

再提高一点效率,接收方收到数据之后,不会直接返回ack,而是等一会再返回ack

2.3.8 捎带应答

提升传输效率,ack和应答的响应数据合并成一个tcp数据报

2.3.9 面向字节流

“粘包问题”解决方案:

1.分隔符,见到分隔符就可以视为一个包结束了

2.指定出包的长度

2.3.10 异常情况

1.其中一方出现进程崩溃

触发回收文件资源,关闭文件这样的效果,就会触发四次挥手,TCP连接的生命周期可以比进程更长一些,虽然进程已经退出,但是TCP连接还在,仍然可以继续进行四次挥手,所以和正常的四次挥手结束没有什么区别

2.其中一方出现了正常关机

强制结束所有进程,如果四次挥手完成的快就和正常的一样,如果完成的慢,则会触发超时重传,超时重传失败后会触发单方面删除连接信息

3.其中一方突然断电

来不及发送fin,TCP会尝试“复位”连接且单方面释放连接

4.网线断开

TCP会尝试“复位”连接且单方面释放连接

3.网络层

3.1 IP协议

3.1.地址管理

使用一套地址体系(IP地址)来描述互联网上每个设备所在的位置

IP地址在NAT机制下,分成了两大类:私网IP:10.*    172.16-172.31.*     192.168.*

公网IP:除了私网IP,剩下的都是

一个IP地址分为两部分:网络号+主机号

IP地址通常是动态分配的

3.2. 路由选择

一个数据包,如何从网络中的某个地址传输到另一个地址

4. 数据链路层

4.1 以太网

数据帧格式:

mac地址是静态分配的

5.DNS

域名解析系统

使用IP地址来描述网络设备的位置,域名一串可读性更好的单词,把域名自动转换为对应的IP地址

DNS服务器并非只有一份,有多份

根域名服务器:最开始的这一套DNS服务器,内容最全

 

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

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

相关文章

2025年5月HCIP题库(带解析)

某个ACL规则如下:则下列哪些IP地址可以被permit规则匹配: rule 5 permit ip source 10.0.2.0 0.0.254.255 A、10.0.4.5 B、10.0.5.6 C、10.0.6.7 D、10.0.2.1 试题答案:A;C;D 试题解析: 10.0.2.000001010.00000000.00000010.0000000…

【Redis | 基础总结篇 】

目录 前言: 1.Redis的介绍: 2.Redis的类型与命令: 3.Redis的安装: 3.1.Windows版本 3.2.Linux版本 4.在java中使用Redis: 4.1.介绍 4.2.Jedis 4.3.Spring Data Redis 前言: 本篇主要讲述了Redis的…

38.前端代码拆分

因为前端代码之前是一体编写的,所以为了方便对代码进行了拆分 之前是这样的: 为了更加规范,所以拆分成vue、util、store、api等部分: css: store: 拆分后的大致界面为: 其实还有点别扭需要后续再调整

tinyrenderer笔记(Shader)

tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 现在我们将所有的渲染代码都放在了 main.cpp 中,然而在 OpenGL 渲染管线中,渲染的核心逻辑是位于 shader 中的,下面是 OpenGL 的渲染管线: 蓝色是我们可以自…

C++高性能内存池

目录 1. 项目介绍 1. 这个项目做的是什么? 2. 该项目要求的知识储备 2. 什么是内存池 1. 池化技术 2. 内存池 3. 内存池主要解决的问题 4.malloc 3. 先设计一个定长的内存池 4.高并发内存池 -- 整体框架设计 5. 高并发内存池 -- thread cache 6. 高并发内存池 -- …

LintCode407-加一,LintCode第479题-数组第二大数

第407题: 描述 给定一个非负数,表示一个数字数组,在该数的基础上1,返回一个新的数组。 该数字按照数位高低进行排列,最高位的数在列表的最前面. 样例 1: 输入:[1,2,3] 输出:[1,2,4] 样例 …

SMT贴片钢网精密设计与制造要点解析

内容概要 SMT贴片钢网作为电子组装工艺的核心载体,其设计与制造质量直接影响焊膏印刷精度及产品良率。本文系统梳理了钢网全生命周期中的15项关键技术指标,从材料选择、结构设计到工艺控制构建完整技术框架。核心要点涵盖激光切割精度的微米级调控、开口…

OpenCV进阶操作:角点检测

文章目录 一、角点检测1、定义2、检测流程1)输入图像2)图像预处理3)特征提取4)角点检测5)角点定位和标记6)角点筛选或后处理(可选)7)输出结果 二、Harris 角点检测&#…

江苏正力新能Verify认知能力测评笔试已通知 | SHL测评题库预测题 | 华东同舟求职讲求职

江苏正力新能入职笔试通知,Verify(认知能力测评),用时约46分钟,其中正式测试部分计时36分钟;时间到了试卷会自动提交,请合理安排答题时间!前面有10分钟练习时间,可以略过…

在若依里创建新菜单

首先打开左侧菜单栏的系统管理,然后点击菜单管理 可以点击左上角的新增,也可以点击右侧对应目录的新增 这里我选择了右侧的新增,即在系统管理目录下新增菜单 其中的组件路径就是写好的页面的路径 (从views的下一级开始写即可&…

【AI知识库云研发部署】RAGFlow + DeepSeek

可以分成两台机器部署,一台gpu,一台cpu,cpu的机器运行ragflow的主程序,使用模型时才访问gpu。当然全部在一台机器上部署是完全ok的。全文没有复杂的环境问题 gpu 安装screen:yum install screen 配置ollama: 下载官方安装脚本并执行: curl -fsSL https://ollama.co…

Java后端开发day40--异常File

(以下内容全部来自上述课程) 异常 异常:异常就是代表程序出现的问题 1. 异常的分类 1.1 Error 代表的是系统级别的错误(属于严重问题) 系统一旦出现问题,sun公司会把这些错误封装成Error对象。 Error…

算法思想之深度优先搜索(DFS)、递归以及案例(最多能得到多少克黄金、精准核酸检测、最富裕的小家庭)

深度优先搜索(DFS)、递归 深度优先搜索(Depth First Search,DFS)是一种用于遍历或搜索树或图的算法。在 DFS 算法中,从起始节点开始,沿着一条路径尽可能深地访问节点,直到到达叶子节…

Spark,HDFS客户端操作

hadoop客户端环境准备 找到资料包路径下的Windows依赖文件夹,拷贝hadoop-3.1.0到非中文路径(比如d:\hadoop-3.1.0) ① 打开环境变量 ② 在下方系统变量中新建HADOOP_HOME环境变量,值就是保存hadoop的目录。 效果如下: ③ 配置Pa…

共享会议室|物联网解决方案:打造高效、智能的会议空间!

在数字化转型的浪潮下,企业、园区、公共机构的会议室面临诸多痛点,如何通过物联网技术实现会议室资源的智能调度、环境设备的自动化控制以及用户体验的全面升级?本文将结合行业实践与技术方案,探讨基于物联网的共享会议室解决方案…

ts bug 找不到模块或相应类型的声明,@符有红色波浪线

解决方法&#xff1a;在env.d.ts文件中添加以下代码&#xff0c;这段代码是一个 TypeScript 的声明文件&#xff0c;用于让 TypeScript 知道如何处理 Vue 单文件组件&#xff08;.vue 文件&#xff09;的导入。 /// <reference types"vite/client" /> // 声明…

端口隔离基本配置

1.top图 2.交换机配置 # sysname sw1 # vlan batch 10 # interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 10 # interface GigabitEthernet0/0/2port link-type trunkport trunk allow-pass vlan 10sys sw2 # vlan batch 10 # interface Giga…

Android View#post()源码分析

文章目录 Android View#post()源码分析概述onCreate和onResume不能获取View的宽高post可以获取View的宽高总结 Android View#post()源码分析 概述 在 Activity 中&#xff0c;在 onCreate() 和 onResume() 中是无法获取 View 的宽高&#xff0c;可以通过 View#post() 获取 Vi…

SecureCrt设置显示区域横列数

1. Logical rows //逻辑行调显示区域高度的 一般超过50就全屏了 2. Logical columns //逻辑列调显示区域宽度的 3. Scrollback buffer //缓冲区大小

最短路径-Dijkstra算法板子(java)

自己把Dijkstra的板子整理了一下&#xff0c;也方便自己后续做题&#xff0c;在此做个记录。 Dijkstra基本上都会需要这些变量&#xff1a; dist[]&#xff1a;记录各个节点到起始节点的最短权值 path[]&#xff1a;记录各个节点的上一个节点(用来联系该节点到起始节点的路径)…