网络架构及演变过程

网络架构

单机

  • 植物大战僵尸
  • office

CS架构

cs--->client客户/server服务

应用领域

  • QQ
  • 大型网络游戏

客户端:用户安装的软件

服务端:统一管理数据库的主机中的软件就叫服务端,再后来服务端不只是管理数据,外加处理业务逻辑.

  • cs架构要求

    1.用户操作系统安装客户端,产商操作系统部署服务端

    2.每个用户都需要独立安装软件,服务端升级也要每个用户升级

  • 面试题:数据放在服务端和客户端的利与弊?

    答:

    1. 服务端统一处理有更好的安全性和稳定性而且升级比较容易,不过服务器负担就增加了
    2. 客户端将负担分配到每个用户,从而可以节约服务器资源,安全性和稳定性可能会有一定的问题,但是升级升级比较麻烦,每个安装的客户端程序都需要升级,另外为了节省网络资源,通过网络传输的数据应该尽量减少!

BS架构

应用领域:

  • 淘宝

  • 京东

    统一客户端即默认安装用户电脑中的浏览器,访问同种类的网站,具体业务的处理根据相应协议和标准提供通用的服务器程序,在不同的服务器处理。

互联网和互联网的组成

互联网的组成(教材版)

互联网的拓扑结构非常复杂 ,并且在地理位置上覆盖了全球,从工作方式上看,可以划分为两大块:

  1. 边缘部分:这部分由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信和资源共享。
  2. 核心部分:由大量网络和连接这些网络的路由器组成。这部分用来为边缘部分提供服务。

互联网的组成(科普版)

说到互联网大家都不陌生,利用互联网打开电脑或手机看新闻、写邮件、逛淘宝、聊微信、看抖音。现代人离开了手机离开了互联网就好像和全世界断了联系,好像已经作为我们身体的一部分了。

区块链号称是是下一代互联网。那么,到底什么是互联网?

作为一个技术老兵,见证互联网的发展,以下是个人对什么是互联网的理解:谈互联网主要就是谈互联网的组成,也就是说明互联网的基础设施的组成。

互联网的基础设施非常庞大,包含硬件、软件两部分。下面我们先来看下当你打开浏览器,输入一个网址比如<www.taobao.com>,几秒钟就看到淘宝首页。这个一个简单的动作,整个互联网到底发送了什么?其实这是一个非常非常复杂的事情。下面是一个简化的过程描述:

  1. 浏览器检查是否有缓存过域名对应IP地址
  2. 如果没有缓存的域名对应的IP,请求域名服务器解析成对应的IP地址(这个过程也非复杂,暂省了)
  3. 浏览器建立Socket连接,根据http协议组装get 类型的http header,通过tcp/ip协议发送报文。
  4. tcp/ip协议会通过网络层网卡(wifi或网线)发射信号到家庭里面的路由器,家里的路由器发送信号到电讯厂商的交换机(中间可能会经过很多次的路由)找到目标服务器,服务器也许托管在IDC机房,也许在阿里云VPS,也许在国外。
  5. 机房里面会有大型交换机、机柜、专业的精密空调,你要访问的那台IP的服务器就在其中某个机柜中。
  6. 在服务器接收到信号后,会根据tcp/ip协议解出http协议头。根据get的请求决定需要返回的数据
  7. 在服务器端实际上根据业务还有很复杂的逻辑;服务器后面还有许多台服务器,到底指定那台服务器来处理请求,需要负载均衡设备来完成
  8. 要返回的数据是在缓存里面、还是在静态文件中、还是在数据库(如MySQL,Oracle)中
  9. 浏览器根据返回的数据,发现有一些静态资源(如CSS,JS,图片等)时有重新发起新的http请求,而这些静态资源文件可能在CDN网络中,请求静态资源的整个过程需需要从第一步重新再走一遍,并且很可能中间经过的交换机,路由过程是不一样的。

互联网的硬件组成

硬件组成主要包括终端设备,主要是联网的个人设备;组成家庭(企业)局域网、城域网、主干网的网络设备;提供内容服务的服务主机设备等。

  1. 终端设备:电脑(pc,笔记本),移动设备(手机,pad),智能电视,智能家居
  2. 网络设备:网卡,网线,水晶头,路由器,家用交换机,防火墙设备,中继器,桥接器
  3. 主机设备:IDC机房,机柜,精密空调,负载均衡器,服务器,工作站,小型机、大型机

互联网的软件组成

互联网的软件非常多,不太好分类,大致分成网络协议类,操作系统类,平台中间件类,应用类。

  1. 网络协议类,比如互联网的基础协议tcp/ip协议
  2. 操作系统类,比如window,linux,macOS,android,iOS
  3. 平台中间件类:比如webServer,Nginx,Apache,Tomcat,MySQL等
  4. 应用类:比如浏览器,微信,邮箱,游戏等等。

注意:上述四种分类,上三种都是基于协议开发的应用程序,也就说作为开发的我们要想开发上三种应用程序,则必须得了解互联网的基础协议。

OSI七层协议

互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。

每一层都运行不同的协议。协议是干什么的,协议就是标准。

实际上还有人把它划成五层、四层。

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

五层划分为:应用层、传输层、网络层、数据链路层、物理层。

四层划分为:应用层、传输层、网络层、网络接口层。

物理层

物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

物理层字面意思解释:物理传输、硬件、物理特性。在深圳的你与北京的朋友聊天,你的电脑必须要能上网,物理体现是什么?是不是接一根网线,插个路由器,北京的朋友那边是不是也有根网线,也得插个路由器。也就是说计算机与计算机之间的通信,必须要有底层物理层方面的连通,就类似于你打电话,中间是不是必须得连电话线。

中间的物理链接可以是光缆、电缆、双绞线、无线电波。中间传的是电信号,即010101...这些二进制位。

要让这些010010101001...有意思,人为的分组再适合不过了,8位一组,发送及接收都按照8位一组来划分。接收到8位为一组的话,那么就可以按照这8位数来做运算。如果没有分组,对方接收的计算机根本就不知道从哪一位开始来做计算,也解析不了收到的数据。我发了16位你就按照16位来做计算吗?我发100位你就按照100位做计算吗?没什么意义是吧。因此要想让底层的电信号有意义,必须要把底层的电信号做分组。我做好8位一组,那么我收到数据,我就知道这几个8位做一组,这几个8位做一组。那么每个8位就可以得到一个确定的数。分组是谁干的活呢?物理层干不了,这个是数据链路层干的。

数据链路层

数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

数据链路层的功能:定义了电信号的分组方式

  • 以太网协议

    规定物理层中传输的0和1的格式

    ethernet规定:一组电信号构成一个数据报,叫做'帧',每一数据帧分成:报头head和数据data两部分

    • head包含:(固定18个字节)

      • 发送者/源地址,6个字节
      • 接收者/目标地址,6个字节
      • 数据类型,6个字节
    • data包含:(最短46字节,最长1500字节)

      • 数据报的具体内容:head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

      这就像写信,发送者的地址(源地址)就是你家的地址,接收者地址(目标地址)就是对方的收信地址,你家的路由器就相当于邮局。其实在计算机通信中的源地址和目标地址指的是Mac地址

  • MAC地址

    head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即Mac地址

    • Mac地址:每块网卡出厂时都被烧制上一个世界唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
  • 广播地址

    有了Mac地址以后,计算机就可以通信了,假设一个教室就是一个局域网(隔离的网络),这个教室里面有几台计算机,计算机的通信和人的通信是一个道理,把教室里面的人都比作一个个计算机,假设教室里面的人都是瞎子,其实计算机就是瞎子的,计算机通信基本靠吼,现在我要找教室里面的飞哥要战狼2的片,然后我就吼一声,说我要找飞哥要战狼2的片,战狼2的片就属于我的数据,但是我在发的时候我是不是要标识我是谁,我要找谁,我是谁就是我的Mac地址,我要找谁就是飞哥的Mac地址,这两个地址做数据包的头部,再加上数据战狼2的片就构成了一个数据帧。

    这个数据包封装好以后就往外发,到物理层以后就全部转成二进制,往外发是怎么发的呢?就是靠吼。即“我是nick,我找飞哥要战狼2的片”。这么吼了一嗓子以后,全屋子的人都能听到,这就是广播。

    计算机底层,只要在一个教室里(一个局域网),都是靠广播的方式,吼

    广播出去以后,所有人都听得见,所有人都会拆开这个包,读发送者是谁,接收者是谁,只要接收者不是自己就丢弃掉。对计算机来说,它会看自己的Mac地址,飞哥收到以后,他就会把片发给我,发送回来同样采用广播的方式了,靠吼。

    同一个教室(同一个局域网)的计算机靠吼来通信,那不同教室的计算机又如何?

    比如说局域网1的pc1与局域网2的pc10如何通信?你在教室1(局域网1)吼,教室2(局域网2)的人肯定是听不见的。这就是跨网络进行通信,数据链路层就解决不了这个问题了,这就得靠网络层出面了。

  • 网络层

    网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

    网络层的由来:有了ethernet、Mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由 一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到

  • 传输层

    传输层功能:建立端口到端口的通信

    我们通过IP和Mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

  • 应用层

    应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式

    应用层功能:规定应用程序的数据格式。

  • IP协议详解

  • 子网掩码详解

  • IP数据包详解

  • ARP协议详解

  • TCP协议

    • 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
  • UDP协议

    • 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
  • Socket抽象层

    socket抽象层就是写出一个全世界独一无二的计算机上的应用程序,既可以是客户端,也可以服务端

    我们知道两个进程如果需要进行通讯最基本的一个前提是能够唯一标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的IP地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用IP地址+协议+端口号唯一标示网络中的一个进程。

    能够唯一标示网络中的进程后,它们就可以利用Socket进行通信了,什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    以上数据信息均来自于 https://www.cnblogs.com/nickchen121/

Day 27 网络编程的更多相关文章

  1. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  2. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  3. [转]12篇学通C#网络编程——第二篇 HTTP应用编程(上)

    本文转自:http://www.cnblogs.com/huangxincheng/archive/2012/01/09/2316745.html 我们学习网络编程最熟悉的莫过于Http,好,我们就从 ...

  4. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  5. Java实验报告五:Java网络编程及安全

    Java实验报告五:Java网络编程及安全                                                                               ...

  6. Unix网络编程--卷一:套接字联网API

    UNIX网络编程--卷一:套接字联网API 本书面对的读者是那些希望自己编写的程序能够使用成为套接字(socket)的API进行彼此通信的人. 目录: 0.准备环境 1.简介 2.传输层:TCP.UD ...

  7. java网络编程serversocket

    转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerS ...

  8. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  9. Android之Http网络编程(三)

    在前面两篇博客<Android之Http网络编程(一)>.<Android之Http网络编程(二)>中,简单的介绍了对网页的请求和客户端与服务端的简单的参数交互.那么,这一篇博 ...

随机推荐

  1. Python中range和xrange的异同之处

    range     函数说明:range([start,] stop[, step]).依据start与stop指定的范围以及step设定的步长,生成一个序列. range演示样例:  >> ...

  2. tableView优化

    ※ tableView优化 概括说:1.使用不透明视图.2.不要重复创建不必要的table cell.3.减少视图的数目.4.不要做多余的绘制工作.5.预渲染图像.6.不要阻塞主线程. 详细说:1.使 ...

  3. HBase行锁原理及实现

    请带着例如以下问题阅读本文. 1.什么是行锁? 2.HBase行锁的原理是什么? 3.HBase行锁是怎样实现的? 4.HBase行锁是怎样应用的? 一.什么是行锁? 我们知道.数据库中存在事务的概念 ...

  4. 54. Extjs组件render说明

    转自:http://blog.chinaunix.net/uid-450400-id-2119168.html 1. 1.调用组件的render方法 panel.render('div'); 2.在配 ...

  5. quill支持json吗

    RT quill目前的驱动(2.4.2版本)不支持json,等待作者更新版本吧

  6. Java 中数组的遍历方式

    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 今天我们就来说一下在java中遍历数组都有哪几 ...

  7. 数据库mysql原生代码基本操作

    创建表: CREATE TABLE `biao` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '测试表', `createtime` ...

  8. pip使用豆瓣镜像源

    pip使用豆瓣的镜像源 豆瓣镜像地址: https://pypi.douban.com/simple/ 虽然用easy_install和pip来安装第三方库很方便 他们的原理其实就是从Python的官 ...

  9. Axure基础教程

    文字教程:      https://www.axure.com.cn/3608/ 视频教程:      http://www.iqiyi.com/playlist409963402.html

  10. 协程概念,原理及实现(c++和node.js实现)

    协程 什么是协程 wikipedia 的定义: 协程是一个无优先级的子程序调度组件,允许子程序在特点的地方挂起恢复. 线程包含于进程,协程包含于线程.只要内存足够,一个线程中可以有任意多个协程,但某一 ...