网络原理 一

news2024/11/25 6:52:24

网络原理

本文主要是介绍TCP/IP协议这里面的核心内容,还是很重要的

TCP/IP协议的层级

应用层

传输的数据如何去使用

传输层

起点和终点的传输

网络层

中间传输过程中的路径规划

数据链路层

相邻节点的传输

物理层

这是最底层的,相当于基础设施

应用层

不同的应用程序,涉及到不同的应用层协议,很多时候都是自定义应用层协议

如何自定义应用层协议

  1. 考虑在客户端服务器之间要传输哪些数据?[根据需求]
  2. 考虑信息/数据按照什么格式组织[也是根据需求]

举一个具体的例子点外卖

  1. 明确传输的信息, 请求里面有什么,响应里面有什么

    请求: 用户的位置 用户的偏好

    响应: 商家的列表需要包含多个商家的信息,每个商家要包含名称 图片 评分 距离

  2. 明确数据的格式

    网上传输的数据的本质都是bit流,也就是一堆二进制位,不同程序之间的传输格式也是不一样的

但是,自定义应用层协议实在是太灵活了,这并不是一件好事

一些特定的数据传输格式

使用特定的一些数据传输格式,基于这些常用的格式来传输数据, 就会更加通用,更方便

XML

  1. HTTP是应用层中最常用最重要的协议(后面会重点讲解)

  2. XML是比较典型的数据组织格式,比较经典古老

    XML是通过标签的形式来组织 键值对 数据的

    类似于这种格式:

    image-20221103214231907

    在标签里面的名字就是key, 标签里面的内容是value

    XML 与 HTML的区别:

    虽然HTML也是标签化的格式,但是xml的标签名是自定义的

    html的标签名是已经约定好的,不能自定义的

    XML的缺点:

    • 不美观
    • 数据一旦多了,写起来就会很难受
    • 数据传输要消耗网络带宽,由于XML含有大量的标签,就导致了网络带宽占用变高了

JSON

JSON是当前最流行的数据组织格式,相当于是XML的替代品

JSON首先是一个{},{}里面包括多组键值对,键值对之间使用分号分隔

键和值之间是用 冒号: 进行分隔

键只能是字符串类型

值可以是字符串 数字 数组 JSON(嵌套)

一个例子:

image-20221103215202035

JSON并没有解决占用较多网络带宽的问题,但是代码量相比于XML减少了,可读性更强了

所以,开发效率就提高了,还是很好的

protobuffer

前面说的XML和JSON的网络带宽占用都比较高,运行效率比较低,也有一些数据组织格式能高效组织数据,最典型的就是protobuffer(谷歌研发出来的)

protobuffer是二进制的格式,所以不方便看,但是这样子的传输效率就会有明显的提升,所以protobuffer适合对运行效率要求很高的场景使用

传输层

传输层关注的是起点和终点

在传输层中最主要的协议是UDP 和 TCP

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

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

学习协议主要学习的就是协议的报文格式

UDP

UDP的报文格式

image-20221104104246834

image-20221104105707555

UDP报头是很简单的,里面只有4个字段

在传输层中,表示端口号的长度就是2个字节

也就是16个bit位,所以就是2^16次方 ,也就说明了端口号是0-65535,但是一般我们都是使用1024-65535 的端口号

2个字节时0-65535 换算成KB,就是0-64KB

最大的大小是64KB,但是随着时代的发展,现在64KB已经是很短的长度了

所以,要是使用UDP传输一个比较大的数据,就要考虑进行拆包,将一个大的数据报拆分成多个小的数据报

还有一种方法就是使用TCP,因为TCP是面向字节流的,不限制包的大小

校验和的作用是检查数据是否出错了

在网络传输过程中, 有时候会受到外界因素的干扰,导致数据发生错误,所以就需要接收方收到数据之后,验证这个数据是否正确

校验和可以看传输的数据的大小是否正确来验证

更好的校验和算法是能够与数据内容相关的,接收到不同的内容,就会产生不同的校验和

UDP的校验和使用的是CRC算法(循环冗余校验)

就是将UDP报文中的每个字节都进行累加,将 加和 放到一个2字节的数组中,不用管加的时候是否会溢出

发送方会先计算一下校验和,接收方收到之后也会计算一下校验和,要是值相等,说明数据正确,要是不相等,说明数据出错了

要是多个数据变了,但是正好值不变,这种情况是极少见的,一般也就忽略这种情况了

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

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

相关文章

「Electron|快速开始」来写个Hello World吧

本文主要介绍如何快速使用Electron生成一个Hello World应用 文章目录主要步骤一、准备工作创建项目安装electron二、编写electron应用所需的基本内容首先,我们需要给electron应用一个入口创建窗口往窗口里面放一个HTML界面,写上"Hello World!"…

修改ik分词器源码实现直连数据库动态增量更新词汇

谈到es的中文分词器,肯定少不了ik分词器.现ik分词器有两种获取主词汇和停用词的方法: 一是通过ik\config目录下的main.dic和stopword.dic获取,但是每次修改后要重启才能生效 二是通过提供接口返回所有词汇的接口,接口路径配置在.但是该方式每次都需要将所有词汇返回,效率不高.…

大数据课设

----------------------------------------------------------------------------------------------------------------------------- 由于本人主修嵌入式方向最多使用的就是C语言,由于物联网这个专业的特殊性,javaweb没少 写,所以java也用…

Nginx动静分离

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Linux专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录&…

[附源码]Python计算机毕业设计SSM基于Java的租房系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

论文笔记:CycleMorph: Cycle Consistent UnsupervisedDeformable Image Registration

CycleMorph: Cycle Consistent Unsupervised Deformable Image Registration 针对本篇论文个人总结: 文章最重要的点在于施加循环一致性,模型有两个网络,移动图像与固定图像互相配准过程中施加约束优化网络提高配准精度,仔细看图…

如何求解欧拉路径?

求解欧拉路径前言一、案例二、回溯三、源码四、复杂度分析五、欧拉科普总结参考文献前言 欧拉路径 从图的一个节点出发,每条边只访问一次,遍历完了所有图节点,这条路径为欧拉路径。 一、案例 二、回溯 按照上面的例子,很容易理…

【LeetCode】1945. 字符串转化后的各位数字之和

题目描述 给你一个由小写字母组成的字符串 s ,以及一个整数 k 。 首先,用字母在字母表中的位置替换该字母,将 s 转化 为一个整数(也就是,‘a’ 用 1 替换,‘b’ 用 2 替换,… ‘z’ 用 26 替换&…

计算机网络原理第1章 概述

1.1 计算机网络在信息时代中的作用 1.2 互联网概述 1.2.1 网络的网络 互联网 特指Internet,起源于美国,现已发展成为世界上最大的、覆盖全球的计算机网络。 计算机网络 (简称为网络) 由若干结点(node)和连接这些结点的链路(link)组…

玩转MySQL:一站式解决分库分表后患问题方案

引言 上篇有关分分库分表一文中已经将分库分表的方法论全面阐述清楚了,总体看下来用一个字形容,那就是爽!(手动狗头)尤其是分库分表技术能够让数据存储层真正成为三高架构,但前面爽是爽了,接着…

面试官:你觉得HTTPS能防止重放攻击吗?

引言 先来一段面试情景再现~~ ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 最后的结局自然就是 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) OK,带着上面的疑问&#xf…

【SpringCloud负载均衡】【源码+图解】【四】负载均衡的实现

【SpringCloud负载均衡】【源码图解】【三】LoadBalancer的工作原理 目录4. 负载均衡4.1 提供者DiscoveryClient4.1.1 CompositeDiscoveryClient4.1.2 EurekaDiscoveryClient4.1.3 SimpleDiscoveryClient4.1.4 自定义DiscoveryClient4.2 过滤器Supplier4.2.1 CachingServiceIns…

Linux文本三剑客之grep命令

Linux文本三剑客之grep命令 1. grep 命令 介绍 grep 命令的基本语法格式和参数列表! 文本搜索工具,根据用户指定的”模式”对目标文本逐行进行匹配检查,打印匹配到的行。 模式:由正则表达式字符及文本字符所编写的过滤条件&am…

MySQL 中截取字符串的方法

LEFT(str, len) 从左边开始截取,如果字符串为 null 则返回null。 str:被截取字符串;len:截取长度 SELECT LEFT(ABCDEFT, 2) FROM sub_str;RIGHT(str, len) 从右边开始截取,如果字符串为 null 则返回null。 str&…

0125 搜索与回溯算法 Day14

剑指 Offer 12. 矩阵中的路径 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻…

GLAD:带有反射壁的空心波导

概述 离散傅里叶变换的混叠效应为带有反射壁的空心波导的建模提供了一个便捷的方法。反射壁可以将光返回到光路中而混叠效应将使溢出光场从反方向折回到采样光场中。如果光场分布是一个偶函数,那么折回的作用就如同反射效果。我们可以将任意形状的光场分布转化成…

推荐一款免费的AI绘图软件,可生成二次元画作和3D模型

随着AI绘画的火热,市面上关于AI绘画的话题居高不小,各种教程、软件、小程序也是满天飞,在这些眼花缭乱的推荐中,究竟哪一款ai绘图软件才是真正适合自己的,不但免费,生成出来的二次元画作还很精美&#xff1…

早教资源网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 网站前台:关于我们、联系我们、公告信息、二手物品、资源信息 管理员功能: 1、管理关于我们、联…

Django 第三天学习笔记

1.模板层-变量和标签 能够传递到Django模板中的数据类型: 1.str 字符串 2.Int 整形 3.List 数组 4.Tuple 元组 5.Dict 字典 6.Func 方法 7.Obj 类的实例化对象。 在模板中使用的变量的语法: {{变量名}}{{变量名.index}} #索引{{变量名.key}} #获取字典对…

数据结构顺序栈

栈 这是大话数据结构种对于栈的描述 可以看到 栈是一种特殊的线性表 它只能在尾部进行元素的插入和删除 但是在栈种 这叫做 入栈 和 出栈 而且它遵循 先进入的元素后出 后进入的元素先出 即就是我们常听说的 先进后出 和后进先出 这里就有一个简单的例子 先进后出 后进先出…