理解计算机系统_网络编程(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,能自己写库.
=========================内容分割线↑=======================================
下面讲了一个数据传输的示例,数据从应用层到传输层到物理层(没显式提出),再到另一台主机
其中提到互联网络思想的精髓是封装.
小结
网络编程基础