网络基础
- 序言:什么是网络?
- 一、协议的概念
- 二、网络位置
- 三、网络协议
- 1、协议分层
- 2、OSI七层模型与TCP/IP五层(或四层)模型
- 四、网络传输基本流程
- 1、网络传输流程图
- 2、以太网通信
- (1)一个小故事
- (2)原理
- i、问题1:以太网发生数据碰撞问题
- ii、问题2:数据安全问题
- iii、交换机有效避免数据碰撞问题
- iv、如何看待局域网
- 3、跨网络传输
- (1)令牌是什么
- (2)ip地址小故事
- i、ip地址是什么?
- ii、为什么要有ip地址?
- iii、ip地址vsmac地址
- iv、ipv4
- (3)数据包转发:一切皆ip报文
- 4、网络通信脉络
- 五、数据报封装和分用
- 1、封装
- 2、分用
- 六、总结
序言:什么是网络?
独立模式: 计算机之间相互独立
计算机由于是相互独立的状态,我们前期就有一个光驱或者是软盘的东西,将终端1处理完的数据存到软盘中再给终端2去进行处理,再将终端2处理完的数据继续存到软盘中给终端3进行处理,这一方面其实看似跟个流水线处理比较方便易于理解,但是其效率大大降低,因为前面的业务处理过慢必定影响到后面业务的处理。
网络互联: 多台计算机连接在一起,完成数据的共享。
这就是网络的发展了!可是这是一个地方的实验室里面机器的连接啊!可是不同实验室比如清华大学要和麻省理工大学的实验室进行互联呢?那么就有了子网和子网之间的联系了!而在传输的过程中必定会存在信号的损耗和传输的损耗,那么就有了局域网LAN,即有了交换机和路由器。
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
广域网WAN: 将远隔千里的计算机都连在一起
所谓 “局域网” 和 “广域网” 只是一个相对的概念. 比如, 我们有 “天朝特色” 的广域网, 也可以看做一个比较大的局域网。
互联网的发展要么是政策支持,要么是私企支持,我们国家最开始的时候是政策上支持互联网。所以每个国家发展互联网都是需要电信业务运营商支持的。
一、协议的概念
“协议” 是一种约定。计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
举个例子:出门上大学跟父亲进行一个约定,打电话响一声就是保平安,响两声就是要打钱,响三声就是要接电话有重要的事情要说。这种传输方式就叫做协议/约定,这样子非常方便了,只需要一个协定则处理了很多事情而且处理很简单且不费时,而这个协议该怎么订?这么多嘈杂的环境下怎么订协议?
计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,
大家都来遵守, 这就是 网络协议跳到第三章节
问题系列:
如何定位主机的问题?
答:类似于菜鸟驿站一样,我要邮寄到那边要填好邮出的地址和邮到的地址!
你怎么保证你的数据准确的传送到了下一台设备了呢?
答:菜鸟驿站会告诉你。买家根本不管。
长距离转发过程中数据产生丢失了怎么办?
答:我不管,这是菜鸟驿站的锅啊!让菜鸟驿站赔!
如何处理发来的数据?
答:这是一个应用的问题!
由上面的问题我们就引出了分层的概念,每一层有每一层不同的作用和分层概念。
但为什么会有上面的这些问题?本质就是因为传输的距离变长了。
协议的报头:
多出来的信息,即快递盒子外面贴的快递单和外面包装的纸盒子。
那么报头报文是什么?怎么搞的?其实这些东西就是C语言的结构体的面向对象!因为我们在发送方定义结构体A,接收方定义结构体B,这两个结构体成员是一样的,我们只需要将结构体A与结构体B中的数据进行匹配对应不就好了吗?而管理则是先描述再组织呗,协议这就是一个简单的结构体进行管理和对应的关系。只要我们一想到协议就想到结构体即可。
二、网络位置
我们通常在手机和电脑上使用很多APP,比如我们常用的抖音、微信、QQ、淘宝等,这些APP都是在操作系统的应用层的,用户在应用层的各种请求最终会下达给操作系统,操作系统除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络中,数据在网络内部经过各种路由器转发,最终将数据都传送到了目标的服务器中。
而目标服务器其本身也是一台计算机,该计算机的操作系统是linux,而我们分钟访问目标服务器时使用的可能是windows、安卓或者是IOS等操作系统。此外,对端服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,在对端服务器的应用层就有一个对应的软件服务器,比如抖音服务器、快手服务器、淘宝服务器等,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户。
不同操作系统的进程管理、文件管理、内存管理、驱动管理的实现方式可能是不一样的。比如Windows和Linux实现多线程的方式是不一样的,Linux当中的线程是用轻量级进程模拟的,而Windows当中是有真正意义上的线程的。
而协议栈是网络标准组织定义的,是具有全球性质的,所有的操作系统都必须支持。也就是说,虽然客户端和服务端可能使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法包括各种细节都是一样的,因此双方对数据进行的封包和解包操作都是一样的。
我们知道的是,操作系统中包含进程管理、文件管理、内存管理、驱动管理这四大模块,操作系统层与用户层之间有着系统调用层,操作系统层往下是驱动层,而驱动层再往下就是各种硬件设备了。
三、网络协议
技术落地,应用于不同的应用场景才是我们程序员需要去铭记的!
1、协议分层
C++的继承和回调函数就是分层。
规模太大,需要分层;协议的问题解决就是层状的,所以分层解决。
分层最大的好处在于 “封装” . 面向对象例子。
2、OSI七层模型与TCP/IP五层(或四层)模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问
协议(Telnet)等. 我们的网络编程主要就是针对应用层
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
一般而言
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器, 它只实现了物理层
问题:网络协议栈和操作系统什么关系?
注意:网络通信就是访问硬件。本质就是贯穿协议栈的过程。
通信:本质就是贯穿,而我们体会到的是层与层之间的通信,但实际的本质是贯穿后通信(不管从上往下贯穿还是从下往上贯穿)。
四、网络传输基本流程
1、网络传输流程图
两台计算机通过TCP/IP协议通讯过程:
问题系列:
1、解包过程中进行报头和有效载荷分离的过程很难,所以我们的几乎每一层的协议,都要提供一种能力,将报头和有效载荷分离的能力。
2、我们在解包过程中,往上是有很多不一样的协议,所以我们几乎任何层的协议,都要在报头中提供决定将自己的有效载荷交付给上层的哪一个协议的能力,这就是分用的能力。
有了上面两个功能,面对封装和解包才不会感到困惑并且这是大部分协议的共性。
2、以太网通信
(1)一个小故事
(2)原理
i、问题1:以太网发生数据碰撞问题
想象一下,一个很吵的环境下,东一句西一句,就好比晨读,大家声音都很大很嘈杂,那么必然导致发送的数据很杂很乱导致会产生数据碰撞的问题,那么就有了碰撞避免的算法,也就是多台主机等一个随机数的时间再发送数据和报文,这样每台主机的发送时间各不相同,那么就大大减少了数据碰撞的问题。碰撞域和碰撞避免。
ii、问题2:数据安全问题
因为在以太网通信的过程中,一台主机向另一台主机发送数据的时候,其结果是该局域网中每一台主机均接收到发送的报文,但每台主机的网卡在接收这些报文发现目标地址不是自己的话就直接将报文进行丢弃了。但网卡既有正常模式,也有混杂模式,接收主机都要往上解析报头看一看的,所以在发送的时候只需要加密就好了。
iii、交换机有效避免数据碰撞问题
划分碰撞域的功能。
iv、如何看待局域网
多台主机所共享的一个临界资源。
每台主机每个应用都可以发送接收数据,但在一个时间只能有一台主机一个应用在接收/发送数据!
3、跨网络传输
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
(1)令牌是什么
其实就是锁,因为在某一个以太网中的某一台主机持有令牌才能发报文信息。
(2)ip地址小故事
i、ip地址是什么?
ii、为什么要有ip地址?
指导我们进行路径规划,拿着不变的ip地址不断对目标地进行路由。
iii、ip地址vsmac地址
ip地址,尤其是目的ip,一般都是不会改变的,协助我们进行路径选择。
mac地址,出局域网后,源和目的都要丢弃,让路由器重新封装。
认识IP地址
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
认识MAC地址
MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
iv、ipv4
ipv4是四字节,32比特位,整数,类似于:192.168.1.1风格的。
(3)数据包转发:一切皆ip报文
底层差异我们完全看不到,忽略了,那么无线网是个什么东西,不就是将我们上面的那张图片的令牌网改成无线LAN就好了吗?底层差异我们不看,我们只关心上层协议就好了。
4、网络通信脉络
五、数据报封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
1、封装
2、分用
六、总结
传输层报头+有效载荷称为数据段或数据报
网络层报头+有效载荷称为数据报
数据链路层报头+有效载荷称为数据帧