理论知识
网络的发展历程
单机时代->局域网->广域网->移动互联网时代(国内的网络发展相对较慢,2000年前后,才真正的进入了网络时代)
组建网络的核心设备
路由器和交换机是组建网络的核心设备(交换机可以认为是对路由器的接口进行拓展)
网络通信
基础知识
网络互联的目的是为了网路通信,也就是传输数据,那么是如何进行通信的,我们需要了解一下知识
1.IP地址
IP地址是用来定位主机的网络地址,我们可以在cmd通过ipconfig来看主机的ip地址
2.端口号
一台主机上可能有多个程序同时使用网络,端口号是用来区分一台主机上多个程序的
3.协议
协议是网络协议的简称,网络协议是网络通信(即网络数据传输)经过所有网络设备都必须遵从的一组约定/规则,比如怎么样建立连接,怎么样互相识别等.只有遵守这个约定,计算机之间才能互相通信交流,通常是有三要素组成:1.语法 数据与控制信息的结构或格式; 2.语义: 需要发出何种控制信息,完成何种动作以及做出何种响应等 3.时序:即时间实现顺序的详细说明
协议(protocol)最终体现为网络上传输的数据包和格式
进行一次网络通信,涉及到五个非常关键的信息--五元组
源IP,源端口,目的IP,目的端口,协议类型
网络同时是一个非常复杂的过程,为了保证这一过程的顺利进行我们的协议非常复杂,因此我们会对协议进行分层
协议分层
小的协议归类,只有相邻两层的协议之间可以进行交互,上层可以调用下层,下层可以给上层提供服务
协议分层的好处 1.上传协议不需要了解下层协议的细节(进行了封装) 2.分层之后,灵活的替代了其中的某一层,对整个工作过程的影响较小(解耦)
真实互联网的分层方式
OSI七层网络模型
|----|-------|----------------------------------------|------------------------------|
| | 分层名称 | 功能 | 每层功能概览 |
| 7. | 应用层 | 针对特定应用的协议 | 针对每个应用的协议 eg:电子邮件<->电子邮件协议 |
| 6. | 表示层 | 设别固有数据格式和网络标准数据格式的转换 | 接受不同形式的信息,如文字流,图像和声音等 |
| 5. | 会话层 | 通信管理,负责建立和断开通信连接(数据流动的逻辑通路),管理传输层以下的分层 | 何时建立连接,何时断开连接以及保持多久的连接? |
| 4. | 传输层 | 管理两个节点之间的数据传输,负责可靠传输(确保数据可靠地传送到目标地址) | 是否有数据丢失 |
| 3. | 网络层 | 地址管理和路由选择 | 经过哪个路由器传递到目标地址 |
| 2. | 数据链路层 | 互联设备之间传送和识别数据帧 | 数据帧与比特流之间的转换 |
| 1. | 物理层 | 以"0""1"代表电压的高低,灯光的闪灭.界定连接器和网线的规格 | 比特流和电子信号之间的转换 |
这一套分层体系只是理论,由于这种分层过于复杂,实际真实的网络分层方式更加简化(TCP/IP五层(四层)协议模型)
TCP/IP五层(四层)协议模型
|-------|-----------------------------------------------------------------|
| 应用层 | 如何使用 |
| 传输层 | 是两个设别之间的通信,但不考虑过程,只考虑起点和终点 |
| 网络层 | 两个任意设备之间如何进行通信,考虑的是过程 |
| 数据链路层 | 完成两个相邻的设备之间如何进行通信的,通过网线,把电脑连接到路由器/交换机上 |
| 物理层 | 物理层规定了网络通信中的一些硬件设施符合的要求,网络/wifi/光纤 物理层的协议,就是约定这些硬件设施要符合的要求是怎么样的 |
为什么有些资料会把这种叫做四层呢?是把数据链路层和物理层看成整体了(这两层都是和硬件设备直接相关的)

主机 工作过程涉及到 物理层->应用层 通过该应用程序满足网络通信的需求
路由器 工作过程涉及到物理层->网络层 组建局域网,进行网络数据包的转发
交换机 工作过程涉及到物理层->数据链路层 对路由器的接口进行拓展,不需要考虑到组网问题
但真实情况不完全相同,现在路由器和交换机的功能更加丰富,更强大,现代的交换机很多都有路由器的功能,路由器也可以开启特殊的mesh模式,就可以起到"交换机"的效果
网络通信的基本流程
发送数据
1.应用程序获取到用户输入,构造一个应用层的数据包
这个应用层的数据包会遵守应用层协议->往往是有程序员自己定义的(应用层数据包是一种结构化数据,类似C中的结构体,有很多属性)
网络传输的数据本质上都是"字符流"或者"二进制的bit流"
发送数据的时候,把结构化数据->字符串/二进制bit流 序列化
接收数据的时候,把字符串/二进制bit流->结构化数据 反序列化
2.应用程序调用传输层提供的接口(api),把数据交给传输层
传输层拿到数据之后,构造出"传输层数据包"
传输层的协议主要有两个TCP/UDP
例如: TCP数据包=TCP报头(header)+TCP载荷(payLoad)
3.传输层构造好数据之后,继续调用网络层的api,把传输层的数据包交给网络层,网络层继续处理
网络层最主要的协议是IP协议
IP协议继续对上述数据包进行加工=>拼上IP报头
IP报头包含的信息很多,源IP/目的IP
4.IP协议继续调用数据链路层的api,把IP数据包交给数据链路层
数据链路层核心协议"以太网"
以太网也会在网络层数据包的基础上进一步加工,以太网数据帧=帧头+载荷+帧尾
ps谈到网络数据传输的"基本数据单位",涉及到多个术语~
网络数据包/帧/段/报
ps:无线网的协议是820.11,这个协议和以太网是并列关系,本质上是一样的,数据格式不一样,功能略有差异(无线衰减比有线快,但都会衰减)
段(segement)TCP 报(datagram)UDP 包(packet) IP 帧(frame)数据链路层 以太网数据帧
5.以太网继续把这样的数据交给硬件设备(网卡)
网卡会把上述的二进制数据最终以光信号/电信号/电磁波信号传播出去
从上层到下层,数据都要进行进一步加工(添加报头)
接受数据
封装(这里的封装和面向对象的封装是不一样的) 接受方法是反过来的
一般来说,一根网线连接的两个电脑之间是可以通信的,数据到达接收方主机,数据会被逐层解析
1.数据到达接受方的网卡 网卡把光电信号 还原成二进制,然后把数据上交给上层数据链路层
2.数据链路层按照以太网协议进行解析(把帧头帧尾取出来,剩下的载荷,往上传递给网络层)
3.网络层拿到这个数据之后,按照IP协议进行解析,然后再把载荷数据向上传递给传输层
4.传输层拿到数据之后,也是类似,按照TCP/UDP协议进行解析,取出载荷,交给应用层
5.应用程序,解析应用层数据,拿到关键信息,展示到界面上,给出提示
传输的中间过程,也是涉及到封装分用的
交换机只需要封装分用到数据链路层就可
主机的数据=>交换 ,交换机收到之后,物理层解析,数据链路层解析(没有网路层),重新构造出新的以太网数据帧,发送给下一个设备
路由器是工作在网络层(三层转发)
防火墙和网关工作在传输层
集线器/网络延长线 工作在物理层