网络初识部分

 1.网络

单机时代-局域网时代-广域网时代-移动互联网时代

局域网时代:通过路由器把几个电脑连接起来。

广域网时代:把更多的局域网连接到一起,构成的网络更庞大,可能已经覆盖了一个城市/国家/全世界。

2.什么是路由器?

路由器就是一个用来连接其他设备的中转站。

一般家用的路由器有5个接口(1个WAN和4个LAN),WAN是用来连接上级路由器的,LAN是用来连接电脑(实现多台电脑之间的通信,一个LAN口对应一台电脑)。

ps:一般的家用电脑只有一个网口。

3.什么是交换机?

是用来扩展路由器的端口。

eg:

 4.IP地址

是用来描述一台设备在网络中的地址,使用一个32位(4字节)数字表示(一般来说IP地址是用4个0~255的十进制数字并且使用3个点相隔表示=> 点分十进制)

5.端口

区别一个主机上不同的应用程序,一个端口对应一个应用程序,但是一个应用程序可能会绑定多个端口(是一个2字节的整数)。

1~1023范围内的端口号有特定的用途(0不使用),如果是要自定义端口建议使用1024~65535内的。

在实际通信过程中往往IP地址和端口号是成对出现的。

6.协议

是一种约定,约定通信双方按照什么样的方式来进行通信(传递数据)。

网络上本质是通过光/电信号来进行传输的。

7.协议分层

按照协议的定位/作用进行分类,并且约定了不同层次之间的“调用关系”。

(1)为什么需要协议分层?

平时写代码的时候,写的多了,往往需要把代码分成多个部分(拆分之后,更容易理解,是基于人的基本认知规律)。

如果一个大的协议来解决所有的问题,此时这个协议就非常大和复杂,不太容易让人理解。

相比之下,可以将这个大的协议给拆分成多个协议,让每个小的协议只是专注于做一小块事情,这样一来,代码就更容易理解。但是由于网络通信是很复杂的,往往一个协议会被拆分成很多很多的小协议,此时就需要对这些协议进行分层。

(2)好处:

a.协议进行分层之后,上层和下层协议彼此都进行了封装,使用上层协议不必过多关注下层,使用下层协议不必过多关注上层协议。

b.每一层协议可以根据需要灵活进行替换。

8.TCP/IP五层网络模型(还有个OSI七层网络模型)

(1)解释:

a.物理层:描述网络通信的硬件设备。

b.数据链路层:两个相邻节点之间的数据传输情况。

c.网络层:进行路线规划。

d.传输层:关注起点和终点。

e.应用层:应用程序如何使用这个数据(程序员最需关注的一点)。

(2)作用:

a.应用层:就是对应到应用程序(程序员手动实现的代码)。

b.传输层和网络层:也称操作系统。

c.数据链路层和物理层:驱动程序+硬件。

9.封装和分用

描述了网络通信过程中,基本的数据传输流程。

(1)封装:

是发送方进行的操作,目的在于给数据添加更多的“辅助信息”。从上层协议到下层协议,是一个层层对数据报进行拼接报头的过程。

eg:现在要A要通过QQ把一个消息传递给B

a.应用层

QQ应用程序,QQ就会把A输入的信息(hello)给打包成一个数据报(格式是啥并不知道,得QQ得程序员才知道),现在假设格式为:

用四个字段来进行分割,这里就构成了一个简单的应用层数据报(采用字符串拼接的形式),上述描述的规则,就是此处约定的应用层协议,但是具体用几个字段,字段的顺序如何,字段之间用什么分割,这些都是可以根据需要灵活更改。

b.传输层(使用UDP)

在这里就会对刚才的数据报进行打包,变成传输层的数据报,这里打包的过程还是字符串拼接(在刚才的基础上拼接上传输层报文)。传输层打包过后,会进一步转交给网络层。

c.网络层

这里在刚才的基础上拼接上IP报头(一个数据报包含报头和载荷),进一步交给数据链路层。IP报头中包含源IP和目的IP

d.数据链路层

这里在刚才基础上拼接上以太网报头和报尾。以太网报头中包含重要的信息:源mac地址和目的mac地址(物理地址,也是用来描述设备在网络上的地址)

e.物理层

把上述数据转换成0/1的二进制数据,通过光/电信号进行传输。

(2)分用:

当上述封装过程完成后,数据报发送出去之后,就会经过一系列的交换机和路由器的转发,当数据报到达接收方之后,就要对数据报进行分用。

a.物理层

拿到光/电信号=>二进制数据=>将得到的数据交给数据链路层(以太网数据报)

b.数据链路层

通过以太网协议对数据报进行解析,这个解析过程就会解析出报头,报尾和中间的载荷,然后把载荷部分进一步交给网络层处理。

c.网路层

通过IP协议对数据报进行解析,会解析出报头和载荷,进一步交给上层(传输层)。

d.传输层

通过UDP协议对数据报进行解析,会解析出报头和载荷,进一步交给上层。

e.应用层

此时的数据就是最原始的数据,就需根据端口号把数据交给QQ这个程序,然后QQ进一步解析这里的数据,这个解析过程也就是按照前面程序员自定义的协议来进行的。

10.传输层协议

通过网络可以让两个主机之间进行通信=>基于这样的通信来完成一定的功能。

进行网络编程的时候,需要操作系统提供一组api,通过这些api(可以认为是传输层与网络层之间的交互的路径,也就是socket api,通过该api可以完成不同主机之间,不同系统之间的通信)才能完成编程。

TCP与UDP这两种协议的工作原理差异很大,导致这两种协议进行网络编程的时候,存在一定的差别,故系统分别提供了两套api。

(1)区别:

a.TCP是有连接的,UDP是无连接的。(连接是抽象的描述)

此处连接的本质是建立连接的双方各自保存对方的信息。

两台计算机建立连接就是保存了对方的关键信息。

故而要想使用TCP进行通信,则通信双方必须建立连接,做完之后才能进行通信。

使用UDP通信,则不需要建立连接就可以进行通信。

eg:这里的建立连接就好比结婚证,一式两份,夫妻双方一人一份,内容一样(记录着双方的信息),妻子一看就知道谁是她的丈夫,丈夫也一样。

b.TCP是可靠传输的,UDP是不可靠传输的

可靠传输:A->B发送信息,消息如果没有到达B这一方,A能感受到,进一步就会采取一定的措施来进行补救(超时重传之类的)

不可靠传输:A->B发送信息,A只管发送信息,不管B有没有收到(A感知不到B的状态)

在网络通信中,A->B发送一个信息,是不可能100%到达的(网络环境很复杂),要想让数据尽可能被接收到,那应该都要采用TCP,为啥还要有UDP呢?

可靠传输意味着需要付出一定的代价(机制更复杂,传输速率会降低)

c.TCP是面向字节流,UDP是面向数据报的

此处的字节流与文件操作的字节流是一个意思,TCP和文件操作是相同的,以字节为单位来传输数据,UDP则是按照数据报为单位来进行传输的。

d.TCP和UDP是全双工的

一个信道允许双向通信,就是全双工的;只允许单向通信,就是半双工的。也就是在代码中使用一个socket对象就可以进行发送/接收数据。

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

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

相关文章

React Native中好用的UI组件库

文章目录 前言1.React Native ElementsStar数超24K地址 2.React Native UI KittenStar数超20K地址 3.NativeBaseStar数超20K地址 前言 下面是React Native中一些常用的UI库 1.React Native Elements Star数超24K 官方介绍 React Native Elements 的目标是提供一套用于在 Rea…

洛谷官方精选题单解析(持续更新~)

首页 - 洛谷 | 计算机科学教育新生态 https://www.luogu.com.cn/ 真题解析-CCF-GESP编程能力等级认证 https://gesp.ccf.org.cn/101/1010/index.html 我会陆续针对每一道题目发独立博客,剖析解题思路、知识点及代码。 目录 1、【入门1】顺序结构(1…

Node.js自学速通---- 24-8-22 22-44

目录 一、安装 Node.js二、Node.js 的基本概念三、创建第一个 Node.js 应用四、使用模块五、创建 HTTP 服务器六、案例:文件服务器 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可以让 JavaScript 在服务器端运行。 一、安装 Node.js 打…

ORA-01950表空间使用权限报错排查

ORA-01950表空间使用权限报错排查 报错信息授权但是没用?到底谁没权限?报错信息 用户USER2对表USER1.T1本身有DML权限。 用户USER2往USER1的表T1插入数据报错 ORA-01950: Error : 1950, Position : 20, SQL = INSERT INTO USER1.T1 (L_DATE)VALUES (:1 ) RETURNING ROWID …

三维模型单体化软件:地理信息与遥感领域的精细化革命

在地理信息与遥感科学日新月异的发展浪潮中,单体化软件作为一股强大的驱动力,正引领着我们迈向空间信息处理与应用的新纪元。本文旨在深度解析单体化软件的核心价值、技术前沿、实践应用及面临的挑战,共同探讨这一技术如何塑造行业的未来。 …

Python生成JMeter测试脚本----HTTP信息头管理器和用户定义的变量

前言 之前的文章写了怎么用python生成JMeter脚本,生成了测试计划、线程组、Http监听器组件、响应断言、查看结果树、汇总报告、聚合报告、响应时间图。本篇内容接着讲怎么用python生成HTTP信息头管理器和用户定义的变量组件。 HTTP信息头管理器 信息头管理器的内…

client网络模块的开发和client与server端的部分联动调试

客户端网络模块的开发 我们需要先了解socket通信的流程 socket通信 server端的流程 client端的流程 对于closesocket()函数来说 closesocket()是用来关闭套接字的,将套接字的描述符从内存清除,并不是删除了那个套接字,只是切断了联系,所以我们如果重复调用,不closesocket()…

解决图片导入Excel后变成横向问题

最近有同事遇到图片打开的时候是竖向的,导入Excel后就变成横向了 我在网上搜了一下,没找到直接的答案 我猜大概是用了某些软件做处理(例如压缩分辨率)但是没处理干净 后来经过多次尝试,发现只要用windows自带的画图软件…

FouriDown: Factoring Down-Sampling into Shuffling and Superposing

摘要 https://openreview.net/pdf?idnCwStXFDQu 空间下采样技术,如步长卷积、高斯下采样和最近邻下采样,在深度神经网络中至关重要。在本文中,我们重新审视了空间下采样家族的工作机制,并分析了先前方法中使用的静态加权策略所…

【头条的AI IDE MarsCode】

文章目录 1、AI云端IDE2、网址3、可以直接导入github上的仓库代码4、总结 1、AI云端IDE 操作很简单,打开豆包MarsCode 云端 IDE,通过 GitHub 链接导入 Cambrian-1 代码库,向豆包MarsCode 提问。让豆包MarsCode 介绍 Cambrian-1 项目&#xf…

安卓主板_MTK联发科主板定制开发|PCBA定制开发

MTK联发科安卓主板,采用MT6762八核平台方案,支持谷歌Android 11.0系统,MT6762采用ARM八核A53内核芯片、主频高达2.0GHz,GPU采用ARM PowerVR GE8329650MHZ,支持主流19201080分辨率,支持硬解H.264&#xff0c…

十分钟教会你在python中使用Redis

文章目录 一、Redis 简介二、Redis 特性三、Redis 使用场景四、Redis 客户端与常用命令五、Redis在Python上的操作1. 安装 redis-py 库2. 连接Redis服务器3. 数据操作字符串操作设置键值对 set(key, string)获取字符串 get(key)检查键是否exists(key)删除键delete(key)批量设置…

Win10安装ChatTTS-2024-cuda10.1

0x00 前言 ChatTTS是专门为对话场景设计的文本转语音模型,例如大语言助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。目前在huggingface中的开源版本为4万小时训练且未SFT的版本。 0x01 准备环境 版本操作系统Win1…

鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗

ninja | 忍者 ninja是一个叫 Evan Martin的谷歌工程师开源的一个自定义的构建系统,最早是用于 chrome的构建,Martin给它取名 ninja(忍者)的原因是因为它strikes quickly(快速出击).这是忍者的特点,可惜Martin不了解中国文化,不然叫小李飞刀更合适些.究竟有多块呢? 用Martin自…

Uniapp使用InnerAudioContext返回内部 audio 上下文 ,获取不到duration当前音频的长度,如何解决?

原因:其实是wx的bug,这个问题在开发环境中,并不会遇到。而是真机测试或发版后,就获取不到duration。 解决:我们只要去手动播放音频后,就会抓取到duration。 代码示例 关键代码 this.audioContext.play(); //手动播放音频 完整代码 Audio…

本地Docker部署Navidrome音乐服务器与远程访问听歌详细教程

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

StarRocks 存算分离数据回收原理

前言 StarRocks存算分离表中,垃圾回收是为了删除那些无用的历史版本数据,从而节约存储空间。考虑到对象存储按照存储容量收费,因此,节约存储空间对于降本增效尤为必要。 在系统运行过程中,有以下几种情况可能会需要删…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 07数据中心的边缘

本章将帮助你回答以下问题 可以用哪些方式将 Clos 拓扑连接到外部网终?边缘部署路由协议的最佳实践是什么?企业应如何处理混合云中的连接? 连接模型 为什么要连接到外部世界? 数据中心连接到外部世界的原因很多。如果你要对外提供某种服务(例如搜索服务广告推荐系统或内…

35岁程序员转行大模型:如何把握行业机遇与个人发展

对于一位35岁的程序员想要转行到大模型领域,这是一个很好的时机,因为人工智能和大模型技术正在快速发展,并且有着广泛的应用前景。以下是一些具体的步骤和建议,可以帮助您顺利地完成这一转变: 基础知识学习 数学基础&a…

科技在日常生活中的革新

在科技日新月异的今天,‌我们的生活正经历着前所未有的变革。‌从智能家居到可穿戴设备,‌科技已经渗透到我们生活的每一个角落,‌深刻地影响着我们的生活方式和社会经济的发展。‌ 智能家居系统的出现,‌无疑是科技改变生活的典…