Linux网络基础
- 1 网络背景
- 1.1 网络发展
- 1.2 局域网和广域网
- 2 认识“协议”
- 2.1 网络协议分层(高内聚,低耦合思想)
- 2.1.1 高内聚,低耦合简单理解
- 2.1.2 协议分层的简单例子
- 3 OSI七层模型
- 3.1 TCP/IP五层(或四层)模型
- 3.2 网络与系统不分家
- 4 网络传输基本流程
- 4.1 对封装的理解
- 4.2 分用的理解
- 4.3 同一局域网内两台主机进行文件传输
- 4.3.1局域网通信原理
- 4.4 同一网段两主机进行数据传输
- 5 网络中的地址管理
1 网络背景
1.1 网络发展
Internet的最早起源于美国国防部高级研究计划署DARPA(Defence Advanced Research Projects Agency)的前身ARPAnet(阿帕网),该网于1969年投入使用。由此,ARPAnet成为现代计算机网络诞生的标志。
从六十年代起,由ARPA提供经费,联合计算机公司和大学共同研制而发展起来的ARPAnet网络。最初,ARPAnet主要是用于军事研究目的,它主要是基于这样的指导思想:网络必须经受得住故障的考验而维持正常的工作,一旦发生战争,当网络的某一部分因遭受攻击而失去工作能力时,网络的其他部分应能维持正常的通信工作。ARPAnet在技术上的另一个重大贡献是TCP/IP协议簇的开发和利用。作为Internet的早期骨干网,ARPAnet的试验并奠定了Internet存在和发展的基础,较好地解决了异种机网络互联的一系列理论和技术问题。
1983年,ARPAnet分裂为两部分,ARPAnet和纯军事用的MILNET。同时,局域网和广域网的产生和逢勃发展对Internet的进一步发展起了重要的作用。其中最引人注目的是美国国家科学基金会 NSF(National Science Foundation)建立的NSFnet。NSF在全美国建立了按地区划分的计算机广域网并将这些地区网络和超级计算机中心互联起来。
独立模式:早期,计算机之间是相互独立的。
网络互联:一开始是由于军事需要,将多台计算机连接在一起,完成数据共享。
1.2 局域网和广域网
局域网(Local Area Network),简称LAN,是指在某一区域内由多台计算机互联成的计算机组。
广域网(Wide Area Network),简称WAN,是一种跨越大的、地域性的计算机网络的集合。通常跨越省、市,甚至一个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可以是小型的广域网。
局域网和广域网只是相对来说的。
比如:局域网是在某一区域内的,而广域网要跨越较大的地域,那么如何来界定这个区域呢?例如,一家大型公司的国内总公司位于北京,而分公司遍布全国各地,如果该公司将所有的分公司都通过网络联接在一起,那么一个分公司就是一个局域网,而整个总公司网络就是一个广域网。
如果这个公司在全球范围内每个国家都有相应的总公司,而真正的总公司在美国,前者的就是局域网,后者就是广域网。
2 认识“协议”
计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议。
举个生活中的例子:
现在有一个场景下,只能说汉语。
A同学只会说汉语,B同学只会说英语,C同学也只会说汉语。
那么A同学和B同学之间就无法进行正常的沟通,A同学能和C同学进行沟通。如果一群人都说汉语,那么B同学在这个大环境下只能被迫遵守使用汉语这个约定,否则无法正常进行沟通。
同样地,在计算机网络中,如果有人不遵守相关的协议,那么就无法进行正常通信。
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
例如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。当然,对于不相容终端,除了需变换字符集字符外还需转换其他特性,如显示格式、行长、行数、屏幕滚动方式等也需作相应的变换。
2.1 网络协议分层(高内聚,低耦合思想)
2.1.1 高内聚,低耦合简单理解
先了解一下 什么是高内聚,什么是低耦合。
从字面来看,内聚,是一个模块内部各成分之间相关联程度的度量
耦合,两个或多个事物之间相互影响的程度。
那么高内聚,低耦合简单理解来说就是:
一个模块内部各成分之间相关联程度非常高,而模块与模块之间的影响程度是非常低的。
2.1.2 协议分层的简单例子
来看一个打电话的简单例子
这里有两个协议,一个是汉语协议,一个是电话机协议。
如果用“高内聚,低耦合思想”去设计的话,就要把它们分为两个模块,一个模块是“语言层”,一个模块是“通信设备层”。
分层的好处是便于封装,封装了语言层,那么只需要提供相应的接口给用户使用即可。封装了通信设备层,也同理。
每一层都只关注自己同层的功能,只使用下层的接口,任何一层出现问题,都不会直接影响另一层,减少后期开发者的维护成本。
从逻辑上来讲每层之间是直接在和同层之间进行通信的。
但是从物理上来讲,需要用到一方需要从上层传到底层,再由底层传到另一方的底层,另一方的底层再从下往上接收信息。
下图展示了当一层协议发生变化时,不会影响到下一层
3 OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,
是一个逻辑上的定义和规范;把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七 个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.
3.1 TCP/IP五层(或四层)模型
TCP/IP全称是“Transmission Control Protocol/Internet Protocol”,中文意思为“传输控制协议/网际协议”。TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等,集线器(Hub)工作在物理层.
数据链路层(网卡层): 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准,网卡层的标准可以不一样。交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等.
网络编程主要就是针对应用层.
如下图所示:由OSI七层模型简化的TCP/IP五层模型
因为物理层用的比较少,也称为TCP/IP四层模型
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器, 它实现了从网络层到物理层;
对于一台交换机, 它实现了从数据链路层到物理层;
对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
3.2 网络与系统不分家
操作系统包含了进程管理,文件系统,内存管理,驱动管理。教科书或者教学过程中,把网络和系统分开了。其实不应该分开,因为整个网络协议栈中最核心的部分(传输层和网络层)是属于操作系统层面的,由于Linux下一切皆文件,网络协议是隶属于的文件系统中的,所以网络与系统是不分家的。
但是操作系统可以有很多类型,处理文件系统的方案不同,而操作系统中的网络协议只能有一种,这也就是要分开教学的原因。
TCP/IP这个名称的由来也是因为网络协议栈中最核心的部分(传输层和网络层)最具有代表性的协议是TCP和IP。
4 网络传输基本流程
在整个TCP/IP模型中,每一层发送的数据包由数据和协议组成。
协议叫做报头,数据叫做有效载荷。
数据包=报头+有效载荷
发送数据,每一层都要对接收到的数据进行添加报头,这一行为叫做封装。
接收数据,每一层需要对接收到的数据进行报头和数据的分离,这一行为叫做分用。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链 路层叫做帧(frame).
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation).
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议 字段” 将数据交给对应的上层协议处理.
4.1 对封装的理解
下图是数据封装过程:
封装:从应用层到物理层,每一层都要在上数据加上数据报头
数据报头中包含了报头多长,载荷有多长,上层协议是什么等信息,方便接收方解包。
4.2 分用的理解
下图是分用的过程:
分用:封装的逆过程,从物理层到应用层,按照协议解包后,再发给上层对应的协议。上层协议很多,要用对应的协议进行解包。
4.3 同一局域网内两台主机进行文件传输
4.3.1局域网通信原理
局域网中所有主机都可以通讯,一个主机发数据,所有主机都能收到。在链路层,有一个mac地址,用来唯一标识一个网卡。
怎么实现定位?
在链路层会将目标主机的mac地址添加在报头中。
发送的数据每一台主机都能收到,当主机收到数据,会进行解包,在链路层会分析报头的mac地址,是否与当前主机的mac地址匹配。不匹配的主机将数据丢弃,匹配的主机会继续往上解包数据。
局域网通讯原理
经过一层,都会要给数据加上报头,最终发送出数据。在局域网中的数据都能收到数据,收到数据的主机会在链路层分析报头是否与当前主机mac地址匹配,不匹配将数据丢弃,匹配继续向上解包,每次向上发送数据要确定是发送给哪个协议。最终会在应用层收到最终的数据。
如果多台主机同时往局域网中发送数据时,会发生数据碰撞,会导致数据变成垃圾数据,导致没法进行通信。在链路层会检测数据碰撞的垃圾数据,然后会让源主机重发数据。在计算机中有一种算法可以避免冲突。
广播:mac地址设为全1,所有主机都匹配。
4.4 同一网段两主机进行数据传输
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
路由器横跨两个局域网,是两个局域网的主机。 于是路由器可以收到一个局域网的数据,再向另外一个局域网发送数据。
5 网络中的地址管理
认识IP地址
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地址).
在Linux中可使用ifconfig命令来查看