Linux--11.网络基础
计算机网络背景
网络,是我们通信的重要媒介,在我们之前的学习当中,所有的操作都只是在局部单机进程进行通信,数据交流的,而网络则是可以完成计算机与计算机之间的通信
事实上在网络出现之前,计算机是用来计算导弹轨迹的,计算机可以提高我们的计算效率,但是随着计算量的增加,单一计算机已经不能满足计算需求了,需要计算机与计算机之间的通信,如果计算机与计算机通过人来进行通信的话效率太低了,且可能出错,所以我们由此出现了计算机网络,来实现计算机与计算机之间的通信
独立模式: 计算机之间相互独立
网络互联: 多台计算机连接在一起, 完成数据共享
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
广域网WAN: 将远隔千里的计算机都连在一起
我们可以发现,网络的发展是随着距离越来越远的,在局域网内我们可以通过交换机来进行通信,距离更远时我们可以通过路由器来完成,随着一张路由器网遍布在我们所生活的世界中,我们便完成了远距离通信
注意:局域网与广域网只是相对的概念,地区与地区间可以看作广域网,而相对于更大的范围--国家之间,他们也就相当于局域网了
而我们不仅不同的主机之间需要有网络来传输数据,我们一台主机的内部,硬件与硬件之间,也是需要数据的传输的,同样也需要网络
协议
协议,其实就是一种约定
我们举个通俗易懂的例子,四川人说话,陕西人听不懂,那么我们如果想让这两个人完成通信,他们之间就可以约定,都说普通话,这就是协议
计算机生产厂商有很多 ;计算机操作系统 , 也有很多 ;计算机网络硬件设备 , 还是有很多 ;如何让这些不同厂商之间生产的计算机能够相互顺畅的通信 ? 就需要有人站出来 , 约定一个共同的标准 ,大家都来遵守 , 这就是 网络协议
网络协议
有了协议的基本认识,我们来看看在计算机内部,我们的数据是如何通过协议在两个主机之间进行传输的呢?
我们在操作系统中有各种各样的协议,需要进行管理,所以我们的操作系统通过结构体将这些协议组织起来,当一台主机需要发送数据到另一台主机时,需要将数据与协议进行合并,一同发送出去,所以我们真正进行数据传输时,大小会大一些,大的这部分就是协议,而后目标主机接收到数据,先对其按照特定的协议方式进行“拆包”,随后拿到数据传给上层
注意:两个主机之间需要进行协议的约定,都采用同一种方式对数据进行装包与拆包,若两个主机之间的协议不一致,则无法完成数据的传输,所以约定网络协议是很有必要的
网络里的协议就是一种数据格式,规定的相同的数据格式就是网络协议
协议分层
我们用一个经典的例子来对协议的分层进行形象化的描述,两个人需要交流,约定好都使用中文,这就是应用层的“协议”,电话机与电话机之间,约定好使用电话机协议进行数据的传输,这就是通信设备层的“协议”,再分别通过各自的接口来完成两个人的通信,那么我们如果想切换协议,两个人改成英文交流,此时我们只需要让应用层的用户改变说话的语言即可,对通信层没有影响,若想改变通信层的协议,改成使用手机而不是电话来进行通信,我们也只需要改变下层通信协议即可,不会对应用层造成影响
在这个例子中,其实我们就完成了对协议的分层,分为用户与通信方式之间,这样做的好处是完成了解耦,封装了层级之间的协议,当一层受影响时不会对其他层有影响
OSI七层模型
OSI ( Open System Interconnection ,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;把网络从逻辑上分为了 7 层 . 每一层都有相关、相对应的物理设备,比如路由器,交换机 ;OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输 ;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整 . 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;但是 , 它既复杂又不实用 ; 所以我们按照 TCP/IP 四层模型来讲解
TCP/IP五层(或四层)模型
物理层 : 负责光 / 电信号的传递方式 . 比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆(现在主要用于有线电视 ) 、光纤 , 现在的 wififi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器 (Hub) 工作在物理层 .数据链路层 : 负责设备之间的数据帧的传送和识别 . 例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作 . 有以太网、令牌环网, 无线 LAN 等标准 . 交换机 (Switch) 工作在数据链路层 .网络层 : 负责地址管理和路由选择 . 例如在 IP 协议中 , 通过 IP 地址来标识一台主机 , 并通过路由表的方式规划出两台主机之间的数据传输的线路( 路由 ). 路由器 (Router) 工作在网路层 .传输层 : 负责两台主机之间的数据传输 . 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.应用层 : 负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议(Telnet )等 . 我们的网络编程主要就是针对应用层
我们的五层模型指得是去掉表示层与会话层剩下的部分
我们的四层模型值得是去掉表示层,会话层与物理层剩下的部分
对于一台主机 , 它的操作系统内核实现了从传输层到物理层的内容 ;对于一台路由器 , 它实现了从网络层到物理层 ;对于一台交换机 , 它实现了从数据链路层到物理层 ;对于集线器 , 它只实现了物理层
网络传输基本流程
网络传输流程图
同一个网段内的两台主机进行文件传输
我们的客户需要传递数据给服务器,先添加FTP协议,再通过TCP协议传递到传输层,再通过IP协议传递到网络层,再通过以太网协议到达链路层,通过以太网将数据与添加的三层协议报头传递给服务器的以太网程序,而后开始分离之前层层封装的报头与数据,最后传递给服务器
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
这种需要跨网段传输数据的形式需要加上一步路由器的传输
数据包封装和分用
不同的协议层对数据包有不同的称谓 , 在传输层叫做段 (segment), 在网络层叫做数据报 (datagram), 在链路层叫做帧(frame).应用层数据通过协议栈发到网络上时 , 每层协议都要加上一个数据首部 (header), 称为封(Encapsulation).首部信息中包含了一些类似于首部有多长 , 载荷 (payload) 有多长 , 上层协议是什么等信息 .数据封装成帧后发到传输介质上 , 到达目的主机后每层协议再剥掉相应的首部 , 根据首部中的 " 上层协议字段" 将数据交给对应的上层协议处理
下图为数据封装的过程
下图为数据分用的过程
事实上,我们通过上面的逻辑其实可以发现,局域网中的一台主机发送数据,每台主机都能收到
局域网通讯原理
既然我们在局域网中所有主机都可以收到发送的数据,那么如何来标识是否接收呢?,其实我们所有的主机,在数据链路层都有一个mac地址,用来唯一标识一个网卡,而在链路层会将目标主机的mac地址添加到报头中,发送的数据每一台主机都能收到,在链路层会分析报头的mac地址,看是否与当前主机的mac地址匹配,不匹配则会直接丢弃,匹配的话才向上解包数据
广播:将mac地址设置为全f,所有的主机都可以收到数据
网络中的地址管理
认识IP地址
IP 地址是在 IP 协议中 , 用来标识网络中不同主机的地址 ;对于 IPv4 来说 , IP 地址是一个 4 字节 , 32 位的整数 ;我们通常也使用 " 点分十进制 " 的字符串表示 IP 地址 , 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
其实我们现在IPv4已经快不够用了,国家也在推崇IPv6,但是由于兼容性的问题发展缓慢
认识MAC地址
MAC 地址用来识别数据链路层中相连的节点 ;长度为 48 位 , 及 6 个字节 . 一般用 16 进制数字加上冒号的形式来表示 ( 例如 : 08:00:27:03:fb:19)在网卡出厂时就确定了 , 不能修改 . mac 地址通常是唯一的 ( 虚拟机中的 mac 地址不是真实的 mac 地址 , 可能会冲突; 也有些网卡支持用户配置 mac 地址 )
我们可以通过ifconfig来查询我们的mac地址
inet:IP地址
netmask:子网掩码
broadcast:广播
ether:以太网
inet&netmask=子网