一、网络发展
独立模式:计算机之间相互独立
网络互联:多台计算机连接在一起。完成数据共享
局域网LAN:计算机的数量更多,通过交换机和路由器连接在一起
了解一下交换机与路由器:
交换机:交换机是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机工作于OSI参考模型的第二层,即数据链路层。交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输。交换机的传输模式有全双工,半双工,全双工/半双工自适应。
路由器:路由器( Router )是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个 数据包 中的地址然后决定如何传送的专用智能性的 网络设备 。 它能够理解不同的协议,例如某个局域网使用的 以太网协议 ,因特网使用的 TCP/IP协议
广域网WAN:将远隔千里的计算机连接在一起
广域网和局域网只是一个相对的概念,比如,我们有一个“天朝特色”的广域网,也可以看做一个比较大的局域网。
二、认识“协议”
2.1 通过故事引入协议
计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示0和1这样的信息,要想传递各种不同的信息,就需要约定好双方的数据格式。
协议是一种约定,计算机协议——就是计算机之间的约定,减少通信成本:沟通成本
- 计算机生产厂商有很多
- 计算机操作系统也有很多
- 计算机网络硬件设备还是很多的
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信,就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是网络协议
2.2 网络分层结构——网络和系统之间的关系
2.2.1 软件分层
我们平时写的代码也会是可以进行分层,main函数为一层,其他函数我们可以分为几层。任何问题都可以添加一层软件层来解决。协议的本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成层状结构。分层最大的好处就是在于“封装”,面向对象的例子。
2.2.2 网络分层(为什么?是什么?怎么办?)
2.2.2.1 为什么要进行网络分层?
- 因为层和层之间可以做到松耦合,可以随时替换或者方便维护
2.2.2.2 为什么要存在网络?主要解决什么问题?
主机进行通信,通信主机的距离变远,必定会引发新的问题:
- 如何使用数据的问题
- 数据传输的可靠性问题
- 主机定位的问题
- 数据报如何在局域网中转发问题
解决问题:网络协议(TCP/IP协议)网络协议主要解决:距离变远必然会引发新的问题,网络协议是一种解决方案。
好的解决方案,坏的解决方案 标准:可扩展,可方便维护,将网络协议设计成层状结构。
2.2.2.3 是什么?
OSI七层模型
OSI七层模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。OSI把网络从逻辑上分为7层,每一层都有相关、相对应的物理设备,比如路由器、交换机。
OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,它最大的特点就是将服务、接口、协议这三个概念明确区分出来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。但是,其既复杂有不实用,所以我们按照TCP/IP四层模型来讲解。
TCP/IP四层模型
TCP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括了许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层次结构,每一层都呼叫它的协议层所提供的网络来完成自己的需求
- 物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞线),早期以太网采用的同轴电缆,光纤,现在的wifi无线网使用电磁波等都属于物理层的概念,物理层的能力决定了最大传输速率、传输距离、抗干扰性等,集线器工作在物理层。
- 数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作,有以太网、令牌环网、无线LAN等标准。交换机工作在数据链路层。
- 网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器工作在网络层。
- 传输层:负责两台主机之间的数据传输,如传输控制协议,能够确保数据可靠地从源主机发送到目标主机。
- 应用层:负责应用进程程序间沟通,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。
一般而言:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容
- 对于一台路由器,它实现了从网络层到物理层
- 对于一台交换机,它实现了从数据链路层到物理层
- 对于集线器,它只实现了物理层
- 但并不是绝对的,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)
2.2.2.4 网络与操作系统之间的关系(重要)
在上述的关系基础上,我们来了解一下多主机中网络和操作系统之间的关系:
2.3 站在语言角度,重新理解协议
站在语言的角度中,协议就是双方都能识别的数据结构类型!!!我们双方可以使用同样的数据结构去进行通信,在之后我们还会学习一些序列化和反序列化的工具。
2.4 协议的作用
任何协议的作用(特殊情况暂不考虑):
- 将报头和有效载荷进行分离
- 将自己的有效在和交付给上层的那一个协议
三、网络传输基本流程
3.1 网络传输流程图
同一个网段内的两台主机进行文件传输。
3.1.0 数据包封装和分用
- 不同的协议栈对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装。
- 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
封装:报文不断被自顶向下进行交付的过程,要添加每一层的协议报头 “报文” = 协议报头 + 有效载荷 报头部分:就是对应协议层的结构体字段,我们一般称为报头 除了报头,剩下的部分称为有效载荷
在这里,由于网络中有不同层,该完整报文也有不同的叫法:
- 在传输层中叫做段,在网络层中叫做数据报,在链路层中叫做帧
- 应用层数据通过协议栈发到网络中时,每层协议都要叫做一个数据首部,称为封装
- 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息
- 数据封装成帧后发到传输介质中,到达目的主机后每层协议需要剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理
分用:
3.1.1 局域网通信
两台计算机通过TCP/IP协议通讯的过程如下所示:
TCP/IP通讯过程
在一个局域网中只允许一台主机进行通信,否则会发生碰撞。因此,我们如果想要黑掉局域网中的一台主机,我们只需向总线一直发送脏数据即可;也可以得出在局域网中,主机越少越好。在局域网中,我们可以使用交换机来减少碰撞冲突。
3.1.2 广域网通信
在进行通信时,由于需要进行跨网络,所以要使用到路由器。IP地址在整个过程中是不会变的,但是mac地址会进行改变。
四、网络中的地址管理
4.1 认识IP地址
IP协议有两个版本:IPv4和IPv6。在之后的网络编程中,默认指的是IPv4。
- IP地址是在IP协议中,用来表示网络中不同主机的地址
- 对于IPv4来说,IP地址是一个4字节,32位的整数
- 我们通常也使用“点分十进制”的字符串表示IP地址,例如192.168.0.1;用电分割的每一个数字表示一个字节,范围是0~255。
跨网段的主机的数据传输,数据从一台计算机到另一台计算机的传输过程中需要经过一个或多个路由器。
4.2 认识MAC地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位,即6个字节,一般使用16进制的数字加上冒号的形式来表示
- 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的
- 虚拟机中的Mac地址不是真实的Mac地址,可能会发生冲突,也有些网卡支持用户配置
4.3 IP地址与MAC地址的区别
- IP地址在整个路由过程中,一直不变
- Mac地址一直在变
- 目的IP是一种长远的目标,Mac地址是下一阶段的目标,目的IP是路径选择的重要依据,Mac地址是局域网转发的重要依据
- IP网络层存在的意义:提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽最低层网络的差别