当前位置: 首页 > article >正文

理解计算机系统_网络编程(1)

前言
       

        以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定

引入 

        网络是计算机科学中非常重要的部分,笔者过去看过相关的内容,但都理解得不是很透彻.本书内容从网络基本面讲起,有了前面进程,文件等概念的基础,挺适合入门.

网络概述

所有程序都遵循的开发思路

         本书P642:所有的网络应用都是基于相同的基本编程模型,有着相似的整体逻辑结构,并且依赖相同的编程接口 ---黑体字是原话

        ----解读:这句话有两层含义:

                        1>不管是web端还是移动端,或者桌面端的通信模块,使用的api都差不多

                        2>编程模型=思想,逻辑结构=程序结构,编程接口=api.网络之外的程序也是同样的思路:先有编程思想,再设计程序结构,最后写代码-api实现.

所有程序开发的过程:选择编程模型,设计程序结构,写代码

客户端-服务器编程模型

        1.每个网络应用都是基于客户端-服务器模型的.采用这个模型,一个应用是由一个服务器进程一个或多个客户端进程组成.服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务.  ---黑体字是原话

                ----解读:网络应用包含了两个层面:进程和数据交换.是的,又回到了熟悉的部分:操作数据.

        2.客户端-服务器模型中的基本操作是事务.一个事务包含4个步骤.

                1>客户端发送请求 2>服务器处理请求 3>服务器发送相应 4>客户端处理响应.

        3.客户端和服务器都属于进程,而不是常提到的机器或者主机.

                进程和主机的关系分析:

                        1>一台主机可以运行多个进程,所以一台主机可包括多个客户端和服务器

                        2>一个进程可以属于这台或那台主机,所以客户端和服务器可以分布于不同主机上

网络的物理部分

        客户端和服务器通常运行在不同主机上,并且通过计算机网络的硬件和软件资源来通信.

        对主机而言,网络只是又一种I/O设备,是数据源和数据接收方.一个插到I/O总线扩展槽的适配器提供了到网络的物理接口.从网络上接收到的数据从适配器经过I/O和内存总线复制到内存,通常通过DMA传送.相似地,数据也能从内存复制到网络.  ---黑体字是原话

                ----解读:网络是一种I/O设备,意味着被抽象成文件,同时有对应的标准来操作.见笔者另一篇贴理解计算机系统_文件管理_系统级I/O(一)-CSDN博客        

各种网络简单示意 

1>局域网(以太网)

        由集线器连接多台主机

2>大型局域网

        由网桥连接多个集线器

局域网概念图--把前面两种综合起来

3>广域网

        内部由路由器连接网桥或集线器,外部以多个路由器作结点组成互联网络.

        每个路由器都身处内部和外部两个网络,在每个网络中均有自己的ip地址.

注意:internet和Internet不一样,internet是概念上的互联网,由路由器完成.而Internet指的是国际互联网. 

        本书在网络这块的内容,偏向于底层实现.而网络的应用层,传输层,物理层等概念,属于在底层的基础上建立起来的内容,本书中提及不多,笔者找了篇写得比较详细且生动的帖子以供参考一文讲透TCP/IP协议 | 图解+秒懂+史上最全_tcpip协议-CSDN博客

网络数据怎样传递

        简单的说,数据传递遵循某种协议.

        本书原话:互联网络至关重要的特性是,它能由采用完全不同和不兼容技术的各种局域网和广域网组成.每台主机和其他每台主机都是物理相连的.但是如何能够让某台源主机跨过所有这些不兼容的网络发送数据位到另一台目的主机呢?

        解决方法是一层运行在每台主机和路由器上的协议软件,它消除了不同网络之间的差异.这个软件实现一种协议,提供两种基本能力:命名机制和传送机制.   ---黑体字是原话

        ----解读:协议和笔者前面帖子中的"标准"是相同意义.这段话表达了协议的设计思想.协议正是依据这些思想设计出来的,如TCP/IP协议,UDP协议等.而在网络世界里,程序员面向协议编程.

                命名机制:每台主机会分配至少一个互联网络地址(Internet address),标识主机

                传送机制:采用数据包封装数据

=========================内容分割线↓=======================================

引入一点知识:

和上一篇帖子对照:程序员可以面向标准,面向库或者面向框架编程.

        框架包含的内容多,需要程序员考虑的少,自由空间少,简单;

        库和协议包含的内容少,需要程序员考虑的内容多,自由空间大,复杂 ;

        对于技术水平来讲,笔者偏向于程序员除了用框架,自己能使用标准(协议)的api,能自己写库.

=========================内容分割线↑=======================================

        下面讲了一个数据传输的示例,数据从应用层到传输层到物理层(没显式提出),再到另一台主机

其中提到互联网络思想的精髓是封装

小结

        网络编程基础

        

相关文章:

理解计算机系统_网络编程(1)

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 网络是计算机科学中非常重要的部分,笔者过去看过相关的内…...

前端面试场景题

目录 1.项目第一次加载太慢优化 / vue 首屏加载过慢如何优化 2.说说了解的es6-es10的东西有哪些 ES6&#xff08;ES2015&#xff09;之后&#xff0c;JavaScript 新增了许多实用的数组和对象方法&#xff0c;下面为你详细介绍&#xff1a; 3.常见前端安全性问题 XSS&#…...

Unity使用Rider的常用快捷键

最近换了IDE&#xff0c;改用Rider进行Unity的代码编写 Rider提供了几个快捷键方案供选择&#xff0c;默认的是Visual Studio的快捷键方案。我索性直接选择了Rider的快捷键方案&#xff0c;一则这2年搞H5没用Visual Studio&#xff0c;快捷键已经忘的差不多了&#xff1b;二则…...

Spring Boot + MyBatis 动态字段更新方法

在Spring Boot和MyBatis中&#xff0c;实现动态更新不固定字段的步骤如下&#xff1a; 方法一&#xff1a;使用MyBatis动态SQL&#xff08;适合字段允许为null的场景&#xff09; 定义实体类 包含所有可能被更新的字段。 Mapper接口 定义更新方法&#xff0c;参数为实体对象&…...

Unity多线程渲染指令队列设计与集成技术详解

一、多线程渲染架构设计背景 1. 传统渲染管线瓶颈分析 阶段单线程耗时占比可并行化潜力场景遍历与排序35%★★★★☆材质属性更新20%★★★★★GPU指令提交25%★★☆☆☆资源上传20%★★★★☆ 2. 多线程渲染优势 CPU核心利用率&#xff1a;从单线程到全核心并行 指令缓冲优…...

栈和队列学习记录

一、栈 1.栈的概念 操作受限的线性表-----栈&#xff1a;栈只允许在表的一端进行插入和删除操作&#xff0c;这一端被称为栈顶&#xff08;Top&#xff09;&#xff0c;另一端则是栈底&#xff08;Bottom&#xff09;。这种受限的操作方式使得栈遵循后进先出&#xff08;LIFO…...

位运算练习:起床困难综合征(贪心,位运算)【算法竞赛进阶指南学习笔记】

目录 前情提要起床困难综合征&#xff08;贪心&#xff0c;位运算&#xff09; 前情提要 一些基础运算操作用法看看上一篇&#xff1b; 起床困难综合征&#xff08;贪心&#xff0c;位运算&#xff09; 题目原文 [P2114 NOI2014] 起床困难综合症 - 洛谷 思路分析 题目很长…...

ubuntu24设置拼音输入法,解决chrome不能输入中文

## 推荐方案&#xff1a;使用 Fcitx5 Fcitx5 是当前在 Wayland 环境下兼容性最好的输入法框架。 ### 1. 安装 Fcitx5 bash sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fcitx5-module-c…...

React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案

一条“Hydration failed”的错误&#xff0c;让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用&#xff0c;一切顺利&#xff0c;直到打开了 SSR&#xff08;服务端渲染&#xff09;&#xff0c;突然看到这个令人头皮发麻的报错&#xff1a; …...

轻量级景好鼠标录制器

景好鼠标录制器&#xff08;详情请戳 官网&#xff09;是一款免费无广的键鼠动作录制/循环回放工具&#xff0c;轻松自动化应对一些重复繁琐的操作任务&#xff0c;如来回切换窗口、文档同一相对位置的复制粘贴等场景&#xff0c;兼容Win XP - 11 。毕竟此款本身主打简约类型&a…...

leetcode--两数之和 三数之和

1.两数之和 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 …...

FFMPEG-视频解码-支持rtsp|rtmp|音视频文件(低延迟)

本人亲测解码显示对比延迟达到7到20毫秒之间浮动兼容播放音视频文件、拉流RTSP、RTMP等网络流 基于 Qt 和 FFmpeg 的视频解码播放器类,继承自 QThread,实现了视频流的解码、播放控制、帧同步和错误恢复等功能 工作流程初始化阶段: 用户设置URL和显示尺寸 调用play()启动线程解…...

openEuler安装nvidia驱动【详细版】

注意&#xff1a;在 openEuler 24.03 LTS 系统中安装 NVIDIA 驱动&#xff08;RTX 3090&#xff09;需要禁用默认的 Nouveau 驱动并手动安装官方驱动。 一、准备工作 系统更新与依赖安装 更新系统并安装必要依赖包&#xff1a;sudo dnf update -y sudo dnf install gcc make k…...

力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值

前言 简单、中等 √ 二分法思路很简单&#xff0c;但是判断边界太麻烦了&#xff01;难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右&#xff0c;目标大于中间值&#xff08;向下取整&#xff09;时&#xff0c;左中1&#xff0c;小于&#xff0c;右中-1&…...

基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)

# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…...

程序员思维体操:TDD修炼手册

程序员思维体操&#xff1a;TDD修炼手册 ——从"先写代码"到"测试先行"的认知革命 一、重新认识TDD&#xff1a;不仅仅是写测试 什么是TDD&#xff08;测试驱动开发&#xff09; TDD其实很简单&#xff0c;不要看名字很高级复杂&#xff0c;传统开发是直…...

PHP异常处理__RuntimeException运行时错误

以下是对 PHP 中 RuntimeException 的详细解释&#xff1a; 一、RuntimeException 概述 RuntimeException 是 PHP 内置的异常类&#xff0c;它继承自 Exception 类。它通常用于表示在程序运行时发生的异常情况&#xff0c;这些异常情况通常是在程序正常执行过程中出现的错误&…...

从性能到安全:大型网站系统架构演化的 13 个核心维度

大型网站系统架构的演化是一个复杂的过程&#xff0c;涉及到多个维度的技术内容&#xff0c;从关键维度进行详细分析&#xff1a; 1.性能维度 缓存技术&#xff1a;包括浏览器缓存、CDN&#xff08;内容分发网络&#xff09;缓存、服务器端缓存&#xff08;如 Memcached、Red…...

基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)

0、原图 一、优化地方 计算行的时候&#xff0c;采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等&#xff0c;并返回该差值:param array: 二维数组&#xff0c;其中每个元素是一个…...

spring Ai---向量知识库(二)

RAG&#xff1a;检索增强&#xff0c;结合了检索和生成两种技术&#xff1b;用于提升生成模型的效果。 1.信息检索&#xff08;R) &#xff1a;系统从一个大型文档库中检索出与查询最相关的文档片段。这一步的目标是找到那些可能包含答案或相关信息的文档。 2.生成增强&#xf…...

Nvidia显卡架构演进

1 简介 显示卡&#xff08;英语&#xff1a;Display Card&#xff09;简称显卡&#xff0c;也称图形卡&#xff08;Graphics Card&#xff09;&#xff0c;是个人电脑上以图形处理器&#xff08;GPU&#xff09;为核心的扩展卡&#xff0c;用途是提供中央处理器以外的微处理器帮…...

rollup使用讲解

rollup 总结 什么是 rollup? rollup 是一个 JavaScript 模块打包器,在功能上要完成的事和 webpack 性质一样,就是将小块代码编译成大块复杂的代码,例如 library 或应用程序。在平时开发应用程序时,我们基本上选择用 webpack,相比之下,rollup.js 更多是用于 library 打…...

USO服务器操作系统手动升级GCC 12.2.0版本

1. 从 GNU 官方 FTP 服务器下载 GCC 12.2.0 的源码包&#xff0c;并解压进入源码目录。 wget https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz tar -zxvf gcc-12.2.0.tar.gz cd gcc-12.2.0 2. 运行脚本下载并配置 GCC 编译所需的依赖库。此步骤会自动下载如 GMP…...

STM32F407使用ESP8266实现阿里云OTA(上)

文章目录 前言一、阿里云OTA二、命令调试1.升级包上传2.OTA订阅和上报的主题3.命令调试4.具体效果三、所用到的工具和材料前言 在经过前面对ESP8266、SD卡、FLASH的了解之后,终于要进入我们的正题了,就是使用STM32和ESP8266实现阿里云的OTA。这一功能并不复杂,只是需要主要…...

玩转Docker | 使用Docker部署DashMachine个人书签工具

玩转Docker | 使用Docker部署DashMachine个人书签工具 前言一、DashMachine介绍DashMachine简介DashMachine使用场景二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署DashMachine服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问Das…...

测试基础笔记第九天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、数据类型和约束1.数据类型2.约束3.主键4.不为空5.唯一6.默认值 二、数据库操作1.创建数据库2.使用数据库3.修改数据库4.删除数据库和查看所有数据库5.重点&…...

使用n8n构建自动化工作流:从数据库查询到邮件通知的使用指南

n8n是一款强大的开源工作流自动化工具&#xff0c;可以帮助你将各种服务和应用程序连接起来&#xff0c;创建复杂的自动化流程。下面我将详细介绍一个实用的n8n用例&#xff1a;从MySQL数据库查询数据并发送邮件通知&#xff0c;包括使用场景、搭建步骤和节点部署方法。 使用场…...

Python爬虫与代理IP:高效抓取数据的实战指南

目录 一、基础概念解析 1.1 爬虫的工作原理 1.2 代理IP的作用 二、环境搭建与工具选择 2.1 Python库准备 2.2 代理IP选择技巧 三、实战步骤分解 3.1 基础版&#xff1a;单线程免费代理 3.2 进阶版&#xff1a;多线程付费代理池 3.3 终极版&#xff1a;Scrapy框架自动…...

Unity 将Excel表格中的数据导入到Mysql数据表中

1.Mysql数据表users如下&#xff1a; 2.即将导入的Excel表格如下&#xff1a; 3.代码如下&#xff1a; using System; using System.Data; using System.IO; using Excel; using MySql.Data.MySqlClient; using UnityEngine; using UnityEditor;public class ImportExcel {// …...

JavsScript 原型链

解决构造函数浪费内存的问题 每一个构造函数都有一个属性prototype属性&#xff0c;指向一个原型对象 原型是构造函数的一个属性 prototype 给数组类型扩展 正常代码&#xff1a; prototype中的this指向为调用对象 所以 基本关系&#xff1a;构造函数产生两个部分&…...