Linux网络 网络基础一
1. 计算机网络背景
1.1 网络发展
独立模式:计算机之间相互独立。
网络互联:多台计算机连接在一起,完成数据共享。
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起。
广域网WAN:将远隔千里的计算机都连在一起。
所谓“局域网”和“广域网”只是一个相对的概念,比如,我们有“天朝特色”的广域网,也可以看做一个比较大的局域网。
1.2 认识“协议”
“协议”是一种约定。
计算机之间的传输媒介是光信号和电信号,通过频率和强弱来表示0和1 这样的信息,要想传递各种不同的信息,就需要约定好双方的数据格式。
只要通信的两台主机,约定好协议就可以了吗?
并不行,只靠两台主机私下“约定”一个协议,还不足以保证整个网络环境下的互通,主要原因有:
-
多厂商、多系统的兼容性问题
市面上有无数家网卡、操作系统、路由器、交换机厂商,若只是两台主机私下约定,其他中间设备(交换机、路由器)和第三方主机就无法识别这个“自定义协议”。 -
缺乏统一的标准与认证
需要由权威组织(IETF、IEEE、ISO/IEC 等)定义并发布协议标准,经过广泛实现和测试,才能保证设备间真正“都能听懂”。 -
协议版本与扩展
标准协议会考虑向后兼容、扩展机制、安全性等;私有协议往往缺乏版本协商、安全加固和错误处理规范,容易在升级或异常情况下瘫痪。 -
中间节点的转发与互操作
数据在网络中经过多级路由器(网络层)、交换机(链路层),它们只认识标准协议头(如 IP 报头、Ethernet 帧头),无法处理“自定义格式”。
计算机生产厂商有很多,计算机操作系统也有很多,计算机网络硬件设备也有很多;如何让这些不同厂商之间生产的不同计算机能够相互通畅的通信?就需要约定一个共同的标准大家开遵守,这就是 网络协议。
2. 网络协议初识
2.1 协议分层
在逻辑上,我们认为,人和人,电话和电话在沟通。
真实情况:我们人其实在和电话沟通。在这个例子中,我们的协议只有两层;但是实际的网络通信会更加复杂,需要分更多的层次。
分层的最大好处在于“封装”。
3. OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
- 把网络从逻辑上分成了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机。
- OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输。
- 它的最大的优点就是将服务,接口和协议这三个概念明确的区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
但是它既复杂也不实用,一般使用TCP/IP五层(或四层)模型。
4. TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
物理层我们考虑的比较少,因此很多时候我们也称为TCP/IP四层模型。
一般而言:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器,它实现了从网络层到物理层;
- 对于一台交换机,它实现从数据链路层到物理层;
- 对于集线器,它只实现了物理层;
但是并不绝对,很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)。
网络通信的本质:就是贯穿协议栈的过程!
5. 网络传输基本流程
5.1 网络传输流程图
同一网段内的两台主机进行文件传输
两台计算机通过TCP/IP协议通讯的过程如下
TCP/IP通讯过程:
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器:
IP协议屏蔽了底层网络的差异化靠的就是工作在IP层的路由器。
IP实现了全球主机的软件虚拟层,一切皆是报文。
5.2 数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。
拓展:大部分协议的共性,面对封装和解包,才不会困惑
- 几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力
- 几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上一层的哪一个协议的能力。
数据封装:
- 网络协议栈的层状结构中,每一层都有协议
- 每层都要添加报头,报文 = 报头 + 有效载荷
- 通信的过程,本质就是不断封装和解包的过程
数据分用:
6. 网络中的地址管理
6.1 认识IP地址
IP协议有两个版本, IPv4和IPv6. 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
6.2 认识MAC地址
- MAC地址用来识别数据链路层中相连的节点。
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。
- 在网卡出厂时就确定了, 不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。