1. 网络与系统关系
将数据放到网络里,把数据从网络拿出来,全部依赖于网卡。
2. 网络背景
-
独立模式:
早年开始为独立模式,由于每个人业务不同,多人共享时需要人手动操作。
-
网络互联:
在发展时,通过一个服务器,每个人将数据上传到一个服务器中,然后实现共享。
-
局域网(LAN):
后来由于计算机数量越来越多,通过交换机将路由器全部连接在一起
交换机:数据链路层
路由器:网络层
- 广域网(WAN):
将每个大局域网中,远隔千里的计算机连接起来
在学习网络的同时一定不能忽略硬件设备。
3. 认识协议
其实我们所学的网络和计算机体系结构中的网络,唯一区别就是。线变长了,那么一定会带来一大批问题。计算机网络就是解决这些问题。
"协议"是一种约定,计算机之间擅长处理数据,一台计算机向一台计算机发协议信息,另一台计算机就会解析出来。
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
- 计算机生产厂商有很多;
- 计算机操作系统, 也有很多;
- 计算机网络硬件设备, 还是有很多;
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议。
不同地方有不同地方的方言,但是国家规定了普通话让我们学习,从而可以交流。
而实际上,计算及内部也有网络。与我们现在理解的网络,无非就是“线变长了”,那么带来的问题也有很多,总结一下就是,1.效率,2.定位3.可靠性
协议实际大部分用操作系统实现的,先描述在组织,协议本质就是用结构体来完成的。所以他也可以定义变量。
在实际中,我们收到一个快递,而快递会被包装,上面有着单号,名字等信息。所以当我们实际收到一件商品,所得到的东西比商品本身要多,而多的东西就可以看做是“协议”,而协议解决了这些问题,协议+数据,就构成了,数据段,数据帧,数据报。拼接其实很简单,协议用结构体描述,可以定义变量,在和数据拼接在一起。
4. osi七层协议
计算机网络最开始分为七层协议
分太多,既复杂又不实用,后来实际在实现的时候将七层协议转换成五层,不谈物理层就只有四层,物理层属于硬件
5. Tcp/Ip五层协议
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.(交换机)
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.(路由器)
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
应用层就代表应用程序,传输层和网络层,是操作系统内核实现。数据链路层在网卡驱动层实现。
为什么要分成这么多层呢,本质是为了解耦,替换一层不会影响另一层。可维护性强,便于分批组装。
6. 网络传输流程
6.1 局域网
-
数据包=报头+数据(有效载荷)
-
报头也是一种数据,将来要分开,怎么分开呢。几乎所有的协议都会解决报头和有效载荷的分接问题
-
怎么确定把自己的有效载荷交给头顶的哪个协议呢?几乎所有的协议也会解决,当确认数据包分离后,去掉本协议的报头,将自己的有效载荷交给上层哪个协议,这叫做分用。
应用层最终解包拿到hello -
局域网中所有的主机可以直接通信,那么怎么确定那个最终封包后的数据包是传给对应主机的呢?在数据链路层有着唯一的mac地址,这个地址具有唯一性。就像在一个教室里,老师叫张三回答问题,你也听到了这个声音,但经过你分析这个问题不是传输给你的,你就不会站起来。网络中当别的主机检测到这个数据不是发给自己的,就会丢弃掉数据。
- 教室中有多人说话,张三给你说的话,你没听清,由于别人说话声大,产生了碰撞,所以这个时候张三需要再说一遍,而传输的数据也是一样,这时就需要重发。这叫做碰撞检测。但是有可能别的同学声音大,你又不听到。这个时候就需要等一会,让张三再给你说话。这在网络中叫碰撞避免。三个概念,碰撞域,碰撞检测,碰撞避免。
- 第四条+第五条就是局域网的通信原理
一个局域网,主机越多碰撞越多。一直塞垃圾数据,局域网就会瘫痪,但是用户层塞垃圾数据,驱动层有避免算法。这时就需要一种绕开网络链路层的算法来实现。
6.2 广域网
从硬件层面来看,路由器有两个接口。连接两个局域网。这是路由器可以看做一台主机。
当用户向路由器发数据时,左边局域网中,所有的主机都会收到数据,不过第一次解析时就会丢弃,因为链路层封包的是路由器的mac地址。
路由器收到数据向上分用然后路由,再加上目标主机的mac地址。最终实现解包
在此过程中,以太网协议(链路层)在不断地变化,自网络层往上的,包括网络层,传输层,应用层都不会变化。
- mac地址分为原mac地址,和目标mac地址。
左侧,原mac地址为用户主机,目标mac地址为左侧局域网路由器的网卡驱动的mac地址。经过路由,原mac地址变成了右边路由器的网卡驱动的mac地址,目标mac地址变成目的主机网卡的mac地址。 - Ip地址分为原ip地址,目的ip地址
所以说,即使底层的局域网标准实现有差异,但是ip地址是不会变化的,即可以理解ip将以太网协议封装了一层虚拟化技术。
两套地址是不冲突的,IP地址决定了,从哪开始,到哪去。mac地址决定了当前在哪,下一站到哪。
而且所有的数据转发都必须经过物理层,而且传输的过程就像上楼和下楼的过程。
6.3 数据封包和使用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理即分用
7. 网络中的地址管理
7.1 IP
IP协议有两个版本, IPv4和IPv6.
IP地址是在IP协议中, 用来标识网络中不同主机的地址;对于IPv4来说, IP地址是一个4字节, 32位的整数;我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255。
- IPV4为32个比特位,
2^32
大概42亿多 - IPv6为128个比特位
2^128
太大了
公网当中的IP是绝对不能重复的,IPV4即将被耗尽,所以需要推广IPV6,但是由于Pv6的升级必然会淘汰一些不支持IPv6协议的网络基础设备,同时很多软件开发商还要基于IPv6做重开发,运营商也不得不考虑到用户在面对升级时带来的经济问题,所以是不会轻易地去升级的,但是IPv6已经开始走向社会了。
7.2 mac地址
MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)mac地址为48个比特位。
7.3 网络相关的两个命令
ifconfig查看本机IP
lspci查看硬件驱动
转载:https://blog.csdn.net/qq_45928272/article/details/116423790