本文根据《鸟哥的Linux私房菜-服务器架设篇》总结,会继续完善,欢迎大家评论交流,如果有错误或不足之处希望大家能够指正
网络
网络就是几部计算机主机或者是网络打印机之类的接口设备,通过网线或者是无线网络技术,将这些主机与设备连接起来、使得数据可以通过网络介质(网线以及其他网卡等硬件)来传输的一种方式。
计算机网络组成组件
- 节点(node):具有网络地址(IP)的设备的统称,如:一般PC
- 服务器主机(server):以网络连接的方向来说,提供数据以“响应”给用户的主机
- 工作站(workstation)或客户端(client):以网络连接的方向来说,主动发起连接去“要求”数据的,可以成为客户端
- 网卡(Network Interface Card, NIC):内置或者是外接在主机上面的一个设备,主要用于提供网络连接
- 网络接口:利用软件设计出来的网络接口,主要是提供网络地址(IP)的任务
- 网络形态或拓扑(topology):各个节点在网络上面的连接方式,一般讲的数物理连接方式
- 网关(gateway):具有两个以上的网络接口,可以连接两个以上不同的网段的设备,如:IP路由器
计算机网络的范围
- 局域网络(Local Area Network, LAN)
- 广域网(Wide Area Network, WAN)
计算机网络协议:OSI 七层协议
注意:
协议层从物理层开始,分别对应Layer 1到Layer 7。
其中Layer2 数据链路层是比较特殊的一层,因为本层又分两个子层进行数据的转换操作。在偏硬件介质部分,主要负责MAC(Madia Access Control),我们称这个数据包裹为MAC数据帧。在偏向软件的部分则是由逻辑连接层(Logical Link Control, LLC)所控制。主要在多任务处理来自上层的数据包数据(packet)并转成MAC格式,负责的工作包括信息交换、流量控制、失误问题的处理。
计算机网络协议:TCP/IP 协议
- 应用程序阶段:打开浏览器,在浏览器的地址栏中输入网址,按下“Enter”键。此时网址信息与相关数据会被浏览器包成一个数据,并向下传给 TCP/IP 的应用层。
- 应用层:由应用层提供的 HTTP 通信协议,将来自浏览器的数据封装起来,并给予一个应用层报头,再向传输层丢去。
- 传输层:由于 HTTP 为可靠连接,因此将数据丢入 TCP 封装内,并给予一个 TCP 封装的报头,向网络层丢去。
- 网络层:将 TCP 数据封装到 IP 数据包内,在给予一个 IP 报头(主要就是来源与目标的 IP),向网络接口层丢去。
- 网络接口层:如果使用以太网络时,此时 IP 会依据 CSMA/CD 的标准,封装到 MAC 数据帧中,并给予 MAC 帧头,再转成比特流后,利用传输介质发送到远程主机上。
TCP/IP 的网络接口层相关协议
广域网使用的设备
- 传统电话拨号连接:通过PPP协议
- 整合服务数字网络(Integrated Services Digital Network, ISDN)
- 非对称数字用户环路(Asymmetric Digital Subscriber Line, ADSL):使用PPPoE协议
- 电缆调制解调器(Cable Modem)
局域网使用的设备 -- 以太网
以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。以太网与IEEE802.3系列标准相类似。
包括标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)和10G(10Gbit/s)以太网。它们都符合IEEE802.3。
以太网的网线接头分为交叉线和直连线
以太网络的传输协议:CSMA/CD
以太网的传输主要是网卡对网卡之间的数据传递
CSMA/CD 个人简单理解为:判断什么时候可以发送数据出去(避免冲突),且发送的数据为 MAC。
以下来源百度:
其原理简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发
它的主要目的是:提供寻址和媒体存取的控制方式,使得不同设备或网络上的节点可以在多点的网络上通信而不相互冲突。
控制规程的核心问题:解决在公共通道上以广播方式传送数据中可能出现的问题(主要是数据碰撞问题)
控制过程包含四个处理内容:监听、发送、检测、冲突处理
有人将CSMA/CD的工作过程形象的比喻成很多人在一间黑屋子中举行讨论会,参加会议的人都是只能听到其他人的声音。每个人在说话前必须先倾听,只有等会场安静下来后,他才能够发言。人们将发言前监听以确定是否已有人在发言的动作称为"载波监听";将在会场安静的情况下每人都有平等机会讲话成为“多路访问”;如果有两人或两人以上同时说话,大家就无法听清其中任何一人的发言,这种情况称为发生“冲突”。发言人在发言过程中要及时发现是否发生冲突,这个动作称为“冲突检测”。如果发言人发现冲突已经发生,这时他需要停止讲话,然后随机后退延迟,再次重复上述过程,直至讲话成功。如果失败次数太多,他也许就放弃这次发言的想法。通常尝试16次后放弃。
MAC 的封装格式
上面提到的CSMA/CD发送出去的数据帧,就是MAC。这个数据帧有两个特别重要的数据,就是目标与来源的网卡卡号,因此我们又简称网卡卡号为MAC地址。
可以简单的理解为:MAC是一个在网线上传递的包裹,而这个包裹是整个网络硬件上面传送数据的最小单位。MAC 包含了 IP 数据包,且IP数据包包含 TCP 数据包
注意:在这个MAC的传送中,仅在局域网内生效,如果跨过不同的子网,那么来源与目的的硬件地址就会跟着改变了。这是因为变成不同的网卡交流了,所以卡号当然不同
集线器与交换器
集线器是一种网络共享介质设备,交换器(OSI第二层的交换器)为交换式的集线器,非共享设备。
TCP/IP 的网络层相关数据包与数据
IP 数据包的封装
IP 分为 IPv4 和 IPv6,其中 IPv4 的地址仅有32位,IPv6 可以达到128位,目前最为普遍的是 IPv4。IP 数据包可以达到65535 bytes,再比MAC大的情况下,操作系统会对 IP 进行拆解的动作
- Version(版本)
- IHL(Internet Header Length, IP 报头的长度)
-
Type of Server(服务类型)
- PPP:表示此 IP 数据包的优先级,目前很少使用
- D:若为0表示一般延迟(delay),若为1表示为低延迟
- T:若为0表示一般传输量(throughput),若为1表示高传输量
- R:若为0表示一般可靠度(reliability),若为1表示高可靠度
- UU:保留尚未使用
- Total Length(总长度)
- Identification(识别码)
-
Flags(特殊标志)
- D:若为0表示可分段,若为1表示不可分段
- M:若为0表示 IP 最后分段,若为1表示非最后分段
- Fragment Offset(分段偏移)
- Time To Live(TTL,生存时间)
-
Protocol Number(协议代码)
- ICMP
- IGMP
- GGP
- IP
- TCP
- EGP
- UDP
- Header Checksum(报头校验码)
- Source Address(来源的 IP 地址)
- Destination Address(目标的 IP 地址)
- Options(其他参数)
Padding(补齐项目)
路由
路由表:每台主机都有自己的路由表,当主机想要发送数据时,参考的就是路由表(Route table)。
跨网段传送数据的流程:
- 查询 IP 数据包的目标 IP 地址
- 查询是否位于本机所在的网络路由表中
- 查询默认路由(Default Gateway)
- 送出数据包值 Default Gateway 后,不理会数据包流向,有服务器分析路由信息继续处理
IP 的分类、种类
如上图,IP分为五种等级,其中前三个等级较常用,Class D 是用来作为组播(multicast)的特殊功能之用(最常用在大批计算机的网络还原),Class E 则为保留网段。
IPv4又分为两个种类,分别为:
- Public IP:公共 IP,经由 Inter NIC 所统一规划的 IP,只有这种 IP 才可以连接上Internet
- Private IP:私有 IP 或保留 IP,不能直接连上 Internet 的 IP,主要用于局域网络内的主机连接规划
Loopback IP 网段: 属于 Class A的网络,为lo网络,lo网络是当初被用来作为测试操作系统内部循环所用的一个网络,同事也能够提供给系统内部原本就需要使用网络接口的服务(daemon)所使用。简单的说在没有安装网卡时想测试机器上的服务器环境,就可以使用用了,例如 127.0.0.1
IP 的取得方式
- 直接手动配置(static)
- 通过拨号取得
- 自动取得网络参数(DHCP)
子网与CIDR(Classless Interdomain Routing)
上图我们看到了 子网掩码(Netmask)和 IP 各个分类的关系,从中可以观察到子网掩码的取值和 Net_ID 是相关的。当我们想要更多网段时,可以将 Class C 继续进行子网的划分,且子网划分同样和 Net_ID 相关。
将 Class C 分成两个子网示例:
原本:
11000000.10101000.0000000.00000000 Network:192.168.0.0
11000000.10101000.0000000.11111111 Broadcast:192.168.0.255
其中 Net_ID 为:11000000.10101000.0000000
Netmask:255.255.255.0
划分之后:
11000000.10101000.0000000.0 0000000 Network:192.168.0.0
11000000.10101000.0000000.1 1111111 Broadcast:192.168.0.255
其中 Net_ID 为:11000000.10101000.1
Netmask:255.255.255.128
第一个子网
11000000.10101000.0000000.0 0000000 Network:192.168.0.0
11000000.10101000.0000000.0 1111111 Broadcast:192.168.0.127
Netmask:255.255.255.128
第二个子网
11000000.10101000.0000000.1 0000000 Network:192.168.0.128
11000000.10101000.0000000.1 1111111 Broadcast:192.168.0.255
Netmask:255.255.255.128
注意:Class C 中 Net_ID 是24位,如果 Net_ID 位26位分多少网段呢?因为26 - 24 = 2,2^2 = 4,因此分为4个网段,同理可以计算其他网段。
如果 Net_ID 为16则由192开头的 Class C 降为 Class B,这种打破原本 IP 等级的方式(通过 Netmask 的规范)就被称为无类别域间路由(CIDR)
IP 与 MAC:网络接口层的 ARP 与 RARP 协议
APR(Address Resolution Protocol,网络地址解析)协议,RARP(Revers ARP,反向网络地址解析)协议。
当我们想要了解某个 IP 配置与哪张以太网卡时,我们的主机就会对整个局域网发送出 ARP 数据包,对方收到 ARP 数据包就会返回他的 MAC 给我们,之后开始传递数据。因为每次请求比较麻烦,因此使用 ARP 协议取得目标 IP 与他的网卡卡号后,就会将该笔记录写入我们的主机 ARP table 中(内存内的数据),这个 ARP table 是动态信息(一般记录20分钟)
ICMP 协议
ICMP(Internet Control Message Protocol,即因特网信息控制协议):是一个错误检测与报告的机制,最大的功能是确保我们的网络连接状态与连接的正确性。ICMP是网络层的重要数据包之一,不过是通过 IP 数据包来进行数据传送的(纳入到了 IP 数据包中)
TCP/IP 的传输层相关数据包与数据
网络层的 IP 数据包只负责将数据送到正确的目标主机去,数据包的接受已经正确接受是传输层的任务之一。传输层有两个重点,一个是面向连接的 TCP 数据包,一个是无连接的 UDP 数据,数据能不能正确的被送达目的地,与这两个数据包有很大的关系。
面向连接的可靠 TCP 协议
- Source Port & Destination Port(源端口 & 目标端口)
- Sequence Number(数据包序号)
- Acknowledge Number(回应序号)
- Data Offset(数据补偿)
- Reserved(保留)
-
Code(Control Flag,控制标志码)
- URG(Urgent):若为1,代表该数据宝为紧急数据包
- ACK(Acknowledge):若为1,代表这个数据包为响应数据包
- PSH(Push function):若为1,代表要求对方立即传送缓冲区内的其他对应数据包,而无须等待缓冲区满了才送
- RST(Reset):如果为1,表示连接会被马上结束,而无须等待终止确认手续。
- SYN(Synchronous):若为1,表示发送端希望双方建立同步处理,也就是建立连接。主动连接到对方
- FIN(Finish):若为1,表示传送结束通知对方,等待对方响应
- Window(滑动窗口)
- Checksum(确认校验码)
- Urgent Pointer(紧急数据)
- Option(任意数据)
Padding(不足字段)
通信端口(Port):如果 A (port:1025) 要找 B 谈事情,先根据 B 的门牌号(IP)找到他家,再根据 B 的信息(比如他在家里的代号为2026,则Port:2026),找到他,然后和他一个人谈事情
特权端口(Privileged Ports):规范好的固定 port,这些 port number 通常小于 1024,且是提供给许多知名的网络服务软件用的(比如古代皇帝的名字,平民就要避讳)
TCP 的三次握手
- 数据包发起
- 数据包接收与确认数据包发送
- 回送确认数据包
- 取得最后确认
网络是双向的,所以不论是服务端还是客户端,都必须通过一次 SYN 和 ACK 来建立连接,所以总共会进行三次交谈。
无连接的 UDP 协议
TCP 需要互动确认是否都在线,UDP 不需要确认
UDP 比较适合需要实时反应的一些数据流,例如影响实时传输软件等。
网络防火墙与 OSI 七层协议
利用一些防火墙机制与软件来进行数据包报头的分析,并且设定分析的规则,当发现某些特定的 IP 、特定的端口或者是特定的数据包信息(SYN/ACK等),那么就讲该数据包丢弃,这就是最基本的防火墙原理
以 OSI 七层协议来说,每一层可以阻挡的数据有:
- 第二层:可以针对来源与目标的MAC进行阻挡
- 第三层:主要针对来源与目标的 IP,以及 ICMP 的类别(type)进行阻挡
- 第四层:针对 TCP/UDP 的端口进行阻挡,也可以针对 TCP 的状态(code)来处理
连上 Internet 前的准备事项
在 Internet 上面使用的是 TCP/IP 通信协议,需要用 Public IP 连接上 Internet
IP 地址、主机名与 DNS 系统
IP 地址是由32位二进制数字组成,虽然我们使用时已经简化为十进制,但是仍然不好记忆。计算机都有自己的主机名称,将主机名称与 IP 对应起来,这样连接主机只要记住主机名就可以了。将主机与 IP 对应的系统,就是鼎鼎有名的的 DNS(Domain Name System)了。也就是 说,DNS 的主要功能就是在进行“主机名称与该主机 IP 的解析”,一项协议,比如:主机名(域名)为:www.baidu.com IP为:180.97.33.107(不确定),很显然www.baidu.com 比 IP 容易记忆,我们访问 www.baidu.com时,DNS就会自动帮我们解析主机名,获取 IP,连接到主机。 在 Linux 中,DNS 主机 IP 的设定在/etc/resolv.conf 这个文件里面
连上 Internet 的必要网络参数
- IP
- Netmask
- Network
- Broadcast
- Gateway
- DNS