大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: Web开发基础 修改讲义
@想一想@:计算机网络是如何搭建/构成的,又是如何能够从一个点达到另一个点的,不同计算机之间又是如何进行有效通信的……


网络拓扑结构

大白话:网络上各个节点如何连接……是不是这样的?


有点乱,但宏观上来说,可能真这样的,不然怎么叫“网(web)”呢?^_^

但细分到内部,大体上来说,有以下一些常见的连接方式:

  • 环型:所有节点依次连接,形成一个闭环
  • 星型:有一个中央节点⑧,其他所有节点都各自连接到该中央节点
  • 总线型:有一条主干线①③④⑥,其他节点连接到这条主线

@想一想@:以上连接方式的优劣?

局域网/互联网

因为每种连接方式都各有利弊,所以早期的网络连接是“八仙过海各显神通”,我想怎么连就怎么连。

所以就出现了这种情况:A公司用环形,B公司用星型,C公司用总线……

现在问题来了:怎么把ABC这三家(以及后面有可能加入的)公司网络连在一起?

应运而生:

  • 局域网:你们ABC……自己搭建的网络都属于局域网,你们内部怎么连我不管,但你要想和外部连接,搞个节点出来做网关(gateway)
  • 互联网:用统一的方式,通过网关把所有的局域网连接起来,就形成互联网。

举个例子,网关就相当于某些保密单位的“传达室”,

  • 所有的外部邮件,邮差只管送到传达室,然后由传达室再进行分发到具体的部门和个人
  • 所有部门和人员,要向外部传递信息,也都是先交到传达室……

另外:由于互联网的普及,很多很多局域网也按互联网这种模式组织。所以小局域网又可以组成大局域网,大局域网再组成超大局域网……“局域”是相对的,可以是一个家庭,也可以是一个公司,或者一个小区,甚至一个城市一个国家!

PS:飞哥能查到的(应该很老旧的)中国3个国家级网关:教育网、高能所和公用数据网


IP地址

要想在网络上找到一个节点,就一定要给这个节点一个地址,是不是?地址有很多种,现在最流行的,就是IP地址。

IP本身是一种协议,Internet Protocol,互联网协议。IP地址,就是基于这种协议所生成/产生的地址。

协议

通信双方达成的一致,共同遵守的规范(体会:规范和协议之间所体现的价值观差异),就是协议。

协议(以及接口)在计算机应用中占有非常重要的地位。没有(一个广泛遵守的)协议,通信就会变得非常困难(甚至不可能):

  • 数据:你发给我一串010101101010010101010011……我知道是啥鬼意思?
  • 连接方式:我怎么公告我的地址,你怎么找到我,找我干什么,我怎么回复你?……

这些都需要用协议规范。

IP4和IP6

#cmd演示#:通过ipconfig查看本机ip地址:

IPv4 地址 . . . . . . . . . . . . : 192.168.1.10

本地链接 IPv6 地址. . . . . . . . : fe80::b572:c277:ec4e:dda3%7

直观来看,IP6和IP4相比,区别在于:

  1. IP4使用10进制,IP6使用16进制(%号指定网卡接口等,略过……
  2. IP4使用点(.)分割,IP6使用冒号(:)分割

但本质上来说,

  1. IP4,是把网络上所有节点地址以32位的二进制表示
  2. IP6,使用128位二进制表示

@猜一猜@:为什么要引入IP6?@想一想@:容量是不是32位的4倍?

但是, IPv6 在国内至今未得以大规模应用,所以我们主要讲IP4。

根据IP4协议,网络上所有节点地址以32位的二进制表示,为了便于人眼识别,每8位(一个字节的长度)为一截,转成十进制后用小数点分割。比如:

  • 121.4.222.169,就对应
  • 对应:01111001.00000100.11011110.10101001

公网/私网地址

但很多局域网内部也使用IP协议搭建,所以局域网内部节点也有IP地址。

根据IP地址是否能直接用于互联网访问,可分成:

  • 公网地址:经向相关机构申请,能够直接互联互通的IP地址
  • 私网地址:未经申请,自己在局域网中使用的IP地址

PS:就是为了照顾局域网的IP地址使用,以下IP地址被预留,不会用作公网地址:

  • A类地址:10.0.0.0~10.255.255.255
  • B类地址:172.16.0.0~172.31.255.255
  • C类地址:192.168.0.0~192.168.255.255

所以基本上你一眼就能看出哪些IP地址是公网的,哪些是私网的。

公网IP地址是要(花钱)申请的。而且,截止2019年11月26日,全球所有43亿个IPv4地址已分配完毕!

NAT

但IP6并没有被广泛的使用,IP4好像仍然活得挺滋润,为什么呢?

因为不同的内网之间,IP地址可以重复。比如:局域网A里面可以有一个192.168.1.10,局域网B里面也可以有一个192.168.1.10,因为它们处于不同的局域网中,所以是互不影响的。

  • 局域网内部可以不用公网IP地址
  • 局域网和外部交互时,只要这个网关有一个公网IP地址

也OK的?就类似于公司/我家有个(公共的)门牌号就行了,部门/卧室就不需要。所以,不是网络上每一个节点都需要一个公网IP(地址)。

复习:局域网内部所有的节点,和外部(互联网)交互都需要通过网关

网关使用了NAT(Network Address Translation,网络地址转换技术解决内网节点和外网交互的问题。

但NAT只能内网访问外网,不能外网访问内网

演示:飞哥的电脑在一个网关IP地址为192.168.1.1的局域网内

默认网关. . . . . . . . . . . . . : fe80::1%7
                                   192.168.1.1

那我对外交互时的IP地址是多少呢?

演示:浏览器上IP地址查询


注意:不是说一个节点有一个公网地址,就不能被放置在局域网中。

演示:服务器拥有公网IP,但ipconfig仍显示私网IP地址

子网掩码

@想一想@:假如请求同一局域网中的另一个节点cmd演示ping,比如:

  • 192.168.1.1
  • 172.17.0.1
  • 192.168.1.2
  • 192.168.2.1

会发生什么?计算机应该只会在当前局域网中查找?但是,怎么界定这个“当前”局域网?(局域网可以一层套一层)

演示ipconfig中,除了网关,还有:

子网掩码  . . . . . . . . . . . . : 255.255.255.0

子网掩码(和IP地址一样)也是一个32位地址,比如255.255.255.0就是111111111.11111111.11111111.000000000

子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址:

  1. 把当前IP和请求IP同子网掩码进行位与运算复习:1 and 1 = 1;1 and 0 = 0;0 and 0 = 0。
  2. 得到的结果如果相同,两个IP属于同一个网段/子网中的节点,可以直接通信,不走网关。

通常把子网掩码设置成:

  • 前面n个连续的1,对应网络地址
  • 后面n个连续的0,对应主机地址

再8位一段8位一段,配合小数点分割,这样就一目了然。比如,子网掩码255.255.255.0,就会截取IP地址的前三段做网络地址,最后一段做主机地址。

@想一想@:使用255.255.255.0的子网掩码能容纳多少个节点?

所以子网掩码还有一个作用:确定网络中最大节点数。当网络比较复杂节点过多不能浪费的时候,子网掩码就要精打细算,不会255这样明确……


IP地址,实际上分为两个部分:

  • 网络地址:确定节点所在的网络,类似于先找到小区
  • 主机地址:确定节点本身的位置,类似于再找到门户


路由器

网关通常由路由器充当。

路由器的英文单词就是router:路径(机)器,在网络中,能决定一个点到另一个点径的机器。

PS:用尽了洪荒之力吧路由两个字带出来了,翻译出来背锅……

你想象中的互联网是咋样子的?是不是这个样子的:

互联网是一个网状结构,所以网络中两个节点之间就可以有很多条路径可以到达(就像我们的交通系统一样)。

如前文图片,我们要从①到⑥,是不是有很多路径?

  • 1-3-4-6
  • 1-8-6
  • 1-0-9-7-6
  • ……

究竟选择哪一条路径呢?这个工作就交给路由器了。

所谓wifi,其实就是无线路由器。

路由器配置

使用ipconfig找到默认网关的IP地址

默认网关. . . . . . . . . . . . . : 192.168.1.1在浏览器中输入该IP地址,进入路由器管理界面。理解:

路由器:

  • 对外的WAN(Wide Area Network)接口:使用公网IP
  • 对内的LAN(Local Area Network)接口:使用局域网IP

PPPoE:一种使用用户名和密码上网的方式

MAC地址:

  • 设备(网卡)的唯一身份标志,在出厂时写入,绝不重复,不可更改。
  • 以前有些网络服务商(ISP)会将MAC地址和PPPoE账号绑定,确保一个账号只有一台设备使用,所以路由器会提供MAC地址克隆功能欺骗(因为这个技术太过普及,现在的ISP也懒得干这种傻事了……)

DHCP:Dynamic Host Configuration Protocol,动态主机配置协议,简单来说,就是路由器会自动的为所有接入的设备、动态的分配内网IP地址,不再需要我们手动设置。这就是为什么现在路由器可以开机即用的原因。

可以在路由器上根据网址和MAC地址等,按黑名单/白名单进行监控过滤等……

tracert

一个cmd命令,trace route的缩写,可以用于追踪从本地/机到某个IP地址的行经路径/节点

通过查询IP地址演示,从源栈教室路由器到沙坪坝到重庆再到上海……的过程。




网络协议分层

除了IP协议,网络上还要很多协议,这些协议可以被分成4层(或更细的7层):


简单的说一下:
  • 网络接口层:ARP(Address ResolutionProtocal):确定Mac地址和IP之间的映射
  • 网间层:IP协议确定如何通过IP找到彼此
  • 传输层:确定两个节点之间数据传输方式。
  • 应用层:针对具体的应用,比如网页浏览(HTTP)、email发送(SMTP),文件断点传输(FTP)……设定的一些协议

我们的使用是从上到下的,比如先HTTP,HTTP再调用TCP,TCP再调用IP……

@想一想@:为什么要分层?

TCP/IP协议(簇):实际上不仅仅指TCP和IP两个协议,而是囊括了相关一系列(如图所示)协议的合集


#常见面试题:TCP和UDP的区别,以及什么几次“握手”#

背景知识:

  1. 数据会被分成若干段,被称之为数据包
  2. 因为路由,数据包可能以一种“乱序”的方式到达终点
  3. 甚至,某些包有可能被丢失(或未及时到达)

区别:

  • UDP:丢了就丢了,算了…… @想一想@:为什么可以这么任性?(效率优先,牺牲数据完整性,适用场景:音视频即时通信……)
  • TCP:不行,必须保证数据的完整性。所以有了所谓的“三次握手”和“四次握手”,一共七次握手:

建立连接(3次)

  1. 发:我现在给你发数据,可以吗?
  2. 收:可以,请发送?
  3. 发:我开始发送了……(包含一份包裹清单)

关闭连接(4次)

  1. 发:我发完了
  2. 收:收到,知道你发完了。(同时对照包裹清单检查)
  3. 收:一切OK,可以关闭连接
  4. 发:关闭连接

所以,握手,其实就是一种确认。

@想一想@:为什么要这么麻烦?(确保数据传输的完整性)

作业

学习笔记
源栈学历
大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 Web开发基础 中继续学习:

上一课: 已经是第一课了……

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码