萌宅鹿网络系列 的基础上增强
目录- 互联网(internet)
- 为什么要学习网络协议
- 客户端-服务器
- 跨平台的原理(Java、C++)
- 网络互连模型(OSI参考模型)
- 计算机之间的通信基础
- 计算机之间的连接方式 - 网线直连
- 计算机之间的连接方式 - 同轴电缆(Coaxial)
- 计算机之间的连接方式 - 集线器(Hub)
- 计算机之间的连接方式 - 网桥(Bridge)
- 计算机之间的连接方式 -
交换机(Switch)
- 计算机之间的连接方式 -
路由器(Router)
数据是如何从一个设备传递到另一个设备的?
- 答:
网络协议
互联网、移动互联网、物联网,都离不开网络协议:
- 最常用的网络协议:
HTTP
- 为了满足各种需求,有各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP等)
重点: 网络协议方面的面试题目近年来要求提高了:
TCP和UDP的区别?说一下它们的报文格式?
TCP的流量控制和和拥塞控制?TCP如何实现可靠性传输?
为什么连接是3次握手,关闭是4次挥手?
7层模型与4层模型的区别?每一层的作用是什么?
交换机与路由器的区别?
Java跨平台的原理: 解释型语言跨平台的原理与 Java 类似:例如 JavaScript,甚至不需要经过编译,有浏览器即可解析。
C++跨平台的原理:使用平台相关的编译器生成对应平台的可执行文件
什么是协议?为什么要有协议?
- 协议就是通用的标准。
- 如果没有一个国际通用的标准,那么各大公司按照自己的标准来,相互之间的交互就会很麻烦。比如我编写的代码在微软的服务器可以运行,但是要在苹果的服务器运行又需要重新编写
为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型 OSI 参考模型(Open System Interconnect Reference Model)
,具有7层结构。
实际上 OSI参考模型(7层) 更偏理论,而 TCP/IP 协议(4层)
在才是在实际中使用的协议,而为了研究和学习计算机网络,又常将之划分为 5层。 请求过程:不管什么协议都是经过下列的
包装
+
解包
的过程。
需要得知对方的IP地址
(根据IP地址可以解析得到MAC地址)
最终是根据MAC地址(网卡地址)
, 输送数据到网卡
, 被网卡
接收
- 数据中包括
源IP
、目标IP地址
、源MAC地址
、目标MAC地址
- 如果网卡发现数据的目标
MAC地址
是自己, 就会将数据传递给上一层处理 - 如果网卡发现数据的目标
MAC地址
不是自己, 就会将数据丢弃
, 不会传递给上一层进行处理
- 需要用 交叉线(不是直通线)
- 相同设备之间使用的是
交叉线
- 不同设备使用的是
直通线
- 相同设备之间使用的是
ARP协议的作用:已知 IP地址,通过 广播(和自己可以Ping通的) 获取 MAC地址。(因为数据是通过网卡(MAC)来接收的, 广播要在同一个网段中才能传播
)
- ARP是有缓存的, ping命令实际就是使用的ICMP协议, 在ICMP之前会先走ARP协议(广播)来获取MAC地址
- arp -a 来查看缓存的MAC地址
为什么右边出现3个ARP包,实际上是 一次完整的发送请求,接收响应的过程。
ping
命令使用的是ICMP协议
,前提是需要知道对方的ip地址
,最终是根据MAC地址
输送数据到网卡
,被网卡
接收。- 当不知道对方
MAC地址
时,使用ARP协议
,进行广播
。 广播
只在同一个网段
中传播,目的是获取MAC地址
,给所有连接设备发广播
,询问对应ip地址
下的MAC地址
。ARP协议
的广播中,目标MAC地址
为FFFF.FFFF.FFFF
。即16进制MAC地址,换算二进制全是1
。- 全是
1
的MAC地址,代表广播,表示在同一个网段
的所有连接设备都能接收 (ping通)。 ARP协议
是有缓存的,当下次在ping
的时候,就不需要再去获取ip地址
了,而是直接执行ICMP协议。
缺点:
- 半双工通信 : 同一时刻只能发送或者接收数据(不能同时接收, 同时发送)
- 半双工通信
- 同一时间,单向通信
- 容易冲突
- 电缆两个方向同时有数据汇入时,会发生冲突。
- 不安全
- 数据不会单向走入对应的计算机,而是向所有设备发送数据。
- 中间断了, 整个就瘫了
- 失去了终止电阻
注意:同轴电缆只要有一个地方线断了,整个线路都瘫痪了。
计算机之间的连接方式 - 集线器(Hub)- 相当于同轴电缆的升级版。
集线器相比同轴电缆唯一的优点就是:
哪怕连着集线器的某一个设备中间线路出问题,不会影响到连着集线器的其他设备。
缺点
: 获取MAC地址的时候, 会给相同网段的所有设备都发ARP协议(造成广播风暴), 获取MAC, 通过ICMP发送数据包也会给所有的设备发送, 这样会占用带宽
将 多个集线器 通过 网桥
连接
能够通过自学习得知每个结构那侧的MAC地址
,从而起到隔绝冲突域的作用。
-
通过
MAC地址表
-
当数据通过网桥
MAC地址表
确定目标MAC地址
不在另一侧时,就不会继续向另一侧发送数据了。 -
如果左右两侧数据可以被网桥分隔,那么左右两侧可以同时进行通信。
-
所谓
隔绝冲突域
是通过:记录设备的MAC地址在左还是在右。 -
例如,6向7发数据包,
- 当6发出请求ARP广播时,网桥会记录6的MAC地址在左;
- 当7发出响应ARP广播时,网桥会记录7的MAC地址在左。
当 6 给 7 发送数据包的时候, 网桥会判断7的MAC地址在网桥的左边, 所以就不会去网桥的右边进行寻找.
隔绝冲突域
-
集线器 + 网桥 的功能 = 交换机
-
交换机直接连接计算机, 每个接口都记录了计算机的MAC地址
(第一次还是通过广播, 交换机学习到同一网段中所有计算机的MAC地址)
若全球所有设备都用交换机连接会发生什么?
- 1、他们必然处于同一网段,因此 IP地址可能会不够用
- 2、即使使用交换机,第一次发送数据包仍然需要ARP广播,耗费大量时间。
- 3、形成
ARP广播风暴
,只要有一个设备发送ARP广播,全球设备都能收到
跨网段通信, 连接不同网段的计算机
主机在发数据之前,首先会判断目标主机的IP地址跟它是否在同一个网段:
- 在同一个网段:ARP广播、通过 交换机/集线器 传递数据
- 不在同一个网段:通过路由器转发数据
网线直连、同轴电缆、集线器、网桥、交换机
同一个网段, 才能形成一个 广播域
- 连接的设备必须在
同一网段
- 连接的设备处在
同一广播域
路由器
- 可以在不同网段之间转发数据 (同一网段中的计算机, 使用交换机, 不能使用路由器)
隔绝广播域
不同网段如何通信
- 主机发数据之前先判断目标IP地址与主机是否在相同网段
- 在同一个
网段
,发送ARP
,通过交换机
、集线器
传递数据。 - 不在同一个网段
- 主机先发送
ARP
到路由器网关
,确定网关MAC地址
(路由器网关要和发送主机在同一网段)。 - 主机发送数据给
网关
,网关
再决定出口是哪个网关
。 - 在
出口网关
发送ARP
,以确认接收方MAC地址
。 - 最后
出口网关
将数据发送给接收方。
- 主机先发送
- 在同一个
每个交换机组成的计算机通信, 相当于一个局域网。多个局域网(不同网段)之间通信使用网关
, 路由器中包含了网关
, 所以一般通过路由器来解决不同网段之间通信, (网关接口要和不同的局域网中的ip地址要在同一网段) 上图流程 : 比如 192.168.3.10 给 192.168.4.11 发数据, 因为此时是不同网段所以通信要使用
路由器
- 同一网段通信, 3.10首先发送到交换机0, 通过ARP广播, 会广播到3.11, 但是不会通过路由器(因为路由器会根据目标ip来判断)
- 不同网段通信, 3.10发送到交换机0, 通过ARP广播, 广播到路由器的4.1网关端口, 然后该网关再发送给交换机1, 通过ARP广播来获取4.11的MAC地址; 然后进行数据的传输
- 网线直连, 同轴电缆, 集线器, 网桥, 交换机
- 连接的设备必须在
同一网段
- 连接的设备处在
同一广播域
- 连接的设备必须在
- 路由器
- 可以在
不同网段
之间转发数据 - 隔绝
广播域
- 不同
网段
之间的广播是发不过去的
- 不同
- 可以在
- 主机发数据之前, 首先会判断目标主机的
ip地址
跟它是否在同一个网段
- 在同一个网段:
ARP
- 不在同一个网段: 通过
路由器
转发数据
- 在同一个网段: