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

news2025/4/25 0:19:36

前言
       

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

引入 

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

网络概述

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

         本书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,能自己写库.

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

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

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

小结

        网络编程基础

        

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

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

相关文章

栈和队列学习记录

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

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…

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

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

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

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

Nvidia显卡架构演进

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

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

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

测试基础笔记第九天

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

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;构造函数产生两个部分&…

消息中间件RabbitMQ02:账号的注册、点对点推送信息

一、默认用户登录和账号注册 1.登录 安装好了RMQ之后&#xff0c;我们可以访问如下地址&#xff1a; RabbitMQ Management 输入默认的管理员密码&#xff0c;4.1.0的管理员账号和密码是&#xff1a; guest guest 2.添加账号 consumer consumer 添加成功后&#xff1a; 角色…

大语言模型的评估指标

目录 一、混淆矩阵 1. 混淆矩阵的结构&#xff08;二分类为例&#xff09; 2.从混淆矩阵衍生的核心指标 3.多分类任务的扩展 4. 混淆矩阵的实战应用 二、分类任务核心指标 1. Accuracy&#xff08;准确率&#xff09; 2. Precision&#xff08;精确率&#xff09; 3. …

好用————python 库 下载 ,整合在一个小程序 UIUIUI

上图~ import os import time import threading import requests import subprocess import importlib import tkinter as tk from tkinter import ttk, messagebox, scrolledtext from concurrent.futures import ThreadPoolExecutor, as_completed from urllib.parse im…

OpenVINO教程(五):实现YOLOv11+OpenVINO实时视频目标检测

目录 实现讲解效果展示完整代码 本文作为上篇博客的延续&#xff0c;在之前实现了图片推理的基础上&#xff0c;进一步介绍如何进行视频推理。 实现讲解 首先&#xff0c;我们需要对之前的 predict_and_show_image 函数进行拆分&#xff0c;将图像显示与推理器&#xff08;pre…

CentOS的安装以及网络配置

CentOS的下载 在学习docker之前&#xff0c;我们需要知道的就是docker是运行在Linux内核之上的&#xff0c;所以我们需要Linux环境的操作系统&#xff0c;当然了你也可以选择安装ubuntu等操作系统&#xff0c;如果你不想在本机安装的话还可以考虑买阿里或者华为的云服务器&…

「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(二)

本教程介绍在MyEclipse中开发EJB 3无状态会话bean&#xff0c;由于JPA实体和EJB 3实体非常相似&#xff0c;因此本教程不涉及EJB 3实体Bean的开发。在本教程中&#xff0c;您将学习如何&#xff1a; 创建EJB 3项目创建无状态会话bean部署并测试bean 在上文中&#xff08;点击…