网络

什么是网络

网络就是几部计算机主机或者是网络打印机之类的接口设备,通过网线或者是无线网络技术,将这些主机与设备连接起来,使得数据可以通过网络介质(网线以及其他网卡等硬件)来传输的一种方式

计算机网络组成组件

  • 节点:节点主要是具有网络地址(IP)的设备的统称
  • 服务器主机:就网络连接方向来说,提供数据以响应给用户的主机,都可以被称为是一台服务器
  • 工作站或客户端:任何可以在计算机网络输入的设备都可以是工作站,若以连接发起的方向来说,主动发起连接去要求数据的,就可以称为是客户端
  • 网卡:内置或者是外接在主机上面的一个设备,主要用于提供网络连接
  • 网络接口:利用软件设计出来的网络接口,主要是提供网络地址(IP)的任务
  • 网络形态拓扑:各个节点在网络上面的链接方式,一般讲的是物理连接方式
  • 网关:具有两个以上的网络接口,可以连接两个以上不同的网段的设备

计算机网络的范围

  • 局域网络(LAN)
  • 广域网络(WAN)

计算机网络协议:OSI七层协议

  • OSI七层协议各层次的相关性
    OSI_ layer.png

    依据定义来说,越接近硬件的阶层为底层 (layer 1),越接近应用程序的则是高层 (layer 7)。 不论是接收端还是发送端,每个一阶层只认识对方的同一阶层数据

  • OSI七层协议中数据的传递方式
    OSI_data_ transfer.png
  • OSI七层协议
分层负责内容
物理层定义传输设备的电压与信号,和数据帧转换比特流的编码方式,然后收发比特信号
数据链路层主要负责处理MAC数据帧,MAC是网络媒体所能处理的主要数据包裹,这也是最终被物理层编码成位串的数据
网络层负责定义IP与路由(计算机之间的联机建立、终止与维持等,数据封包的传输路径选择等等)
传输层定义发送端与接收端的连接技术(如TCP、UDP),同时包括该技术的封包格式,数据封包的传送、流程的控制、传输过程的侦测检查与复原重新传送等等
会话层主要定义两个地址之间的连接信道的连接与中断,也可建立应用程序之间的会话(如会话控制)
表示层将来自本地端应用程序的数据格式与网络的标准格式进行转换(数据加密在该层处理)
应用层应用层本身并不属于应用程序所有,仅定义应用程序如何进入该层的沟通接口

计算机网络协议:TCP/IP

其实TCP/IP也是使用OSI七层协议的观念,所以同样具有分层的架构,只是将它简化为四层

  • OSI与TCP/IP协议的相关性
    TCP:IP_layer.png

TCP/IP的网络接口层的相关协议

广域网使用的设备

  1. 传统电话拨号连接:通过PPP协议
  2. 整合服务数字网络(ISDN)
  3. 非对称数字用户环路(ADSL):使用PPPoE协议
  4. 电缆调制解调器

局域网使用的设备

1._以太网的速度与标准

名称(标准)速度网线等级
以太网(Ethernet)10Mbps-
快速以太网(Fast Ethernet,IEEE制定的100BASE-T标准)100MbpsCAT 5
G比特以太网(Gigabit Ethernet)1000MbpsCAT 5e/CAT 6

2._以太网的网线接头(交叉/直连线)
目前以太网上最常见的接头是RJ-45的网络接头,而RJ-45接头又因为每条蕊线的对应不同而分为568A与568B接头

接头名称/蕊线顺序12345678
568A白绿绿白橙白蓝白棕
568B白橙白绿白蓝绿白棕

虽然目前的以太网线有8蕊且两两成对,但实际使用的只有1、2、3、6蕊而已,其他的则是某些特殊用途的场合才会使用到。由于接头的不同网线又可分为两种:

  • 交叉线:一边为568A一边为568B的接头时称为交叉线,用在直接连接两台主机的网卡
  • 直连线:两边接头同为568A或同为568B时成为直连线,用在链接主机网卡与集线器之间的线缆

以太网络的传输协议:CSMA/CD

整个以太网的重心就是以太网卡。所以说,以太网的传输主要就是网卡对网卡之间的数据传递而已。每张以太网卡出厂时,就会赋予一个独一无二的卡号,那就是所谓的MAC。理论上,网卡卡号是不能修改的,不过某些笔记本电脑的网卡卡号是能够修改的。以太网卡之间的数据传递使用 IEEE802.3的标准CSMA/CD

集线器是一种网络共享介质设备。网络共享介质在单一时间点内,仅能被一台主机所使用。
CSMA/CD搭配集线器环境,它的传输情况要有以下流程:

  1. 监听介质使用情况:某主机要发送数据包前,需要对网络介质进行监听,确认没人使用后才能发出数据帧
  2. 多点传输:某主机所发送的数据会被集线器复制一份,然后发送给所有连接到此集线器的主机。但目标不匹配的主机会丢弃该数据帧
  3. 冲突检测:该数据帧附有检测能力,若其他主机也刚好同时间发送数据帧时,那么两主机就会各自随机等待一个时间,然后重新通过第一步再传送一次该数据帧

MAC的封装格式

  • CSMA/CD发送出去的数据帧,其实就是MAC。这个数据帧上面有两个很重要的数据:目标与来源的网卡卡号,网卡卡号简称MAC地址。可以把MAC想成是一个在网线上面传递的包裹,而这个包裹是整个网络硬件上面传送数据的最小单位。MAC数据帧的内容如下图:
    MAC_packet.png
  • MAC地址最小由00:00:00:00:00:00FF:FF:FF:FF:FF:FF(十六进制),这6bytes当中,前3bytes为厂商的代码,后3bytes则是该厂商自行定义的配置码。
  • 在MAC的传送中,仅在局域网络内生效,如果跨过不同子网,那么来源与目的的MAC地址就会跟着改变了。
  • 数据帧内的数据容量最大可达1500bytes,这是以太网络标准数据帧。而其最小数据为64bytes,这是为了实现冲突检测。

MTU(最大传输单位)

标准以太网数据帧可以传送的数据量最大可以到达1500bytes,这个数值就被我们称为MTU(最大传输单位)

集线器、交换机与相关机制

  1. 共享与否,集线器还是交换机
    交换机与集线器最大的差异,在于交换机内有一个特别的内存,这个内存可以记录每个switch port与其连接的PC的MAC地址,所以交换机(Switch)不是共享设备,且交换机(Switch)的每个端口(port)都有独立的带宽
  2. 全双工/半双工

    • 全双工:如果两端PC同时支持全双工时,那表示Input/Output均可达到10/100Mbps,总带宽则是20/100Mbps。全双工需要使用支持全双工的交换机,而使用共享带宽的集线器是不可能的
    • 半双工:表示Input/Output两者同一时间只能有一个能达到10/100Mbps,总带宽也是10/100Mbps
  3. 自动协调速度机制
    以太网卡是向下兼容的,所以Gigabit网卡可以与早期的10/100Mbps网卡连接而不出问题,而网络速度判断则如下:早期的Hub/Switch需手动切换,新的Hub/Switch支持Auto-negotiation,它可自动协调出最高传输速度来通信
  4. 自动分辨网线的交叉或直连接口
    Switch含有Auto MDI/MDIX的功能时,会自动分辨网线接口来调整连接。
  5. 信号衰减造成的问题
    电子信号是会衰减的,因素有网线长度,网线的折损程度等。
  6. 结构化布线
    所谓结构化布线指的是将各个网络的组件分别拆开,分别安装与布置到企业内部,则未来想要升级网络硬件等级或者是移动某些网络设备时,只需要更改机柜的相关配线架,以及末端的墙上的预留孔与主机设备的连接就能够达到目的了。

总结:我们现在知道要有网络,就必须要有网络相关的硬件,而目前最常见的网络硬件接口为以太网,包括网线、网卡、Hub/Switch等。而以太网上面的传输使用网卡卡号为标准的MAC数据帧,配合CSMA/CD的标准来传送数据帧,这就是硬件部分。

TCP/IP的网络层相关数据包与数据

前面所讲都是硬件部分,在软件部分,Internet其实就是TCP/IP这个通信协议的通称,Internet最重要的就是IP。

IP数据包的封装

目前因特网环境的IP有两种版本,一种是目前使用最广泛的IPv4,一种则是预期未来会热门的IPv6。IPv4记录的地址由于仅有32位,预计在2020年前后就会分配完毕。未避免这个问题,就有IPv6的产生,IPv6的地址可以达到128位,可以多出 2^96 倍的地址数量,这样的IP数量几乎是用不完的。本文主要谈到的IP都是指当前的IPv4。
IP数据包可以达到65535(2^16)bytes,在比MAC大的情况下,我们的操作系统会对IP进行拆解的动作。IP封装报头数据绘制如下图:
IP_packet.png

上图每一行所占用的位数为32bits

  • Version(版本)
  • IHL(Internet Header Length,IP包头的长度)
  • Type of Service(服务类型)
  • Total Length(总长度)
  • Identification(识别码)
  • Flags(特殊标志)
  • Fragment Offset(分段偏移)
  • Time To Live(TTL,生存时间)
  • Protocol Number(协议代码)
  • Header Checksum(报头校验码)
  • Source Address(来源IP地址)
  • Destination Address(目标IP地址)
  • Options(其他参数)
  • Padding(补齐项目)

你只要知道IP报头里含有TTL、Protocol、来源地址与目标地址也就够了。

IP地址的组成与分级

  • IP的组成是32bits的数值,也就是由32个01组成的一连串数字,不过因为人类对于二进制不怎么熟悉,所以就将32bits分为4小段,每段含有8个bits,将8个bits换算成十进制,并且每段中间以小数点隔开,就成里目前大家熟悉的IP书写模样了(XXX.XXX.XXX.XXX)。
  • 所以IP可以由0.0.0.0一直到255.255.255.255。这串数字其实还可以分为Net_ID(网络号码)与Host_ID(主机号码)两部分。
  • 在一般的内网IP地址中(Class C),前面三组数字是网络号码,最后一组为主机号码。由此得出同一个网络的定义:在同一个物理网段(所有主机都是使用同一个网络设备连接在一起)内,主机的IP具有相同的Net_ID,并且具有独特的Host_ID,那么这些IP群就是同一个网络内的IP网段。
  • 同一个Net_ID内不能具有相同的Host_ID,否则会发生IP冲突,可能会造成两部主机都没有办法使用网络。
  1. IP在同一网络的意义

    • Net_IDHost_ID的限制
      在同一个网段内,Net_ID是不变的,而Host_ID则是不可重复的,此外,Host_ID在二进制的表示法中,不可同时为0或1,因为全为0表示整个网段的地址,而全为1则表示广播的地址
    • 在局域网内通过IP广播传递数据
      在相同物理网段的主机如果使用相同的网络IP范围(不可重复),则这些主机都可以通过CSMA/CD的功能直接在局域网内用广播进行网络的连接,亦即可以直接网卡对网卡传递数据(通过MAC数据帧)。
    • 使用不同局域网在相同物理网段的情况
      在同一个物理网段之内,如果两部主机使用不同的IP网段地址,则由于广播地址的不同,导致无法通过广播的方式来进行连接,此时需要通过路由器(Router)来进行沟通才能将两个网络连接在一起。
    • 网络的大小
      Host_ID所占用的位越大,亦即Host_ID数量越多时,表示同一个网络内可用于设定主机IP数量越多。
  2. IP的分级
    Inter NIC将整个IP网段分为五种等级:

    • Class A: 0.xx.xx.xx ~ 127.xx.xx.xx
    • Class B: 128.xx.xx.xx ~ 191.xx.xx.xx
    • Class C: 192.xx.xx.xx ~ 223.xx.xx.xx
    • Class D: 224.xx.xx.xx ~ 239.xx.xx.xx
    • Class E: 240.xx.xx.xx ~ 255.xx.xx.xx

    上面只需要记忆前三种等级即可

IP的种类与取得方式

IPv4有两种IP类别:

  • Public IP:公共IP,经由 Inter NIC 所同一规划的IP,有这种IP才可以连上 Internet。
  • Private IP:私有 IP或保留 IP,不能直接连上 Internet 的 IP,主要用于局域网络内的主机连接规划。

私有IP分别在A、B、C三个Class当中各保留一段作为私有IP网段:

  • Class A:10.0.0.0 ~ 10.255.255.255
  • Class B:172.16.0.0 ~ 172.31.255.255
  • Class C:192.168.0.0 ~ 192.168.255.255

这三段 IP 并不能直接作为 Internet 上面的连接使用,它们有以下限制:

  • 私有 IP 的路由信息不能对外散播
  • 使用私有 IP 作为来源或目的地址的数据包,不能通过 Internet 来传送
  • 关于私有 IP 的参考记录(如 DNS),只能限于内部网络使用

私有 IP 连接 Internet:设定一个简单的防火墙加上 NAT(Network Address Transfer)服务,你就可以通过IP伪装来使你的私有IP的计算机也可以连上Internet了。

  1. 特殊的 Loopback IP 网段
    还有一个奇怪的 Class A 的网络,即lo网络,lo网络是当初用来作为测试操作系统内部循环所用的一个网络,同时也能够提供给系统内部原本就需要使用网络接口的服务所使用。

这个网段在127.0.0.0/8这个 Class A,而且默认的主机(localhost)的IP就是127.0.0.1

  1. IP的取得方式
  • 直接手动配置(static)
  • 通过拨号取得
  • 自动取得网络参数(DHCP)

Netmask、子网与 CIDR(Classless Interdomain Routing)

  1. Netmask

    • 实现子网划分的参数是 Netmask(Subnet mask,子网掩码)。IP网段可以分为Net_IDHost_ID,既然Net_ID是不变的,那就假设它所占据的位已经被用完了(全部为1),而Host_ID是可变的,就将它想成是保留着(全部为0)。所以Netmask表示为255.255.255.0(十进制)。掩码即起到掩码的作用。
    • Host_ID全部为0以及全部为1是不可使用的,因为Host_ID全部为0的时候表示IP是该网段的Network(网络),至于全部为1的时候就表示该网段最后一个IP,也称为Broadcast(广播)
  2. 子网划分
    实现子网的划分的方式就是控制 Netmask 为1的位数,为1的位即为Net_ID,其后为0的位即为Host_ID
  3. 无类别域间路由 CIDR(Classless Interdomain Routing)
    一般来说,我们知道 Network 和 Netmask 之后,就可以定义出该网络的所有IP了,因为由 Netmask 可以推算出 Broadcast 的 IP。因此我们常常会以 Network 以及 Netmask 来表示一个网络:192.168.0.0/24(因为Net_ID共有24个bits)。

某些特殊情况下,我们反而将Net_ID借用来作为Host_ID,这样就能将多个网络写成一个了。这种打破原本IP代表等级的方式(通过Netmask的规范)就被称为无类别域间路由(CIDR)

路由概念

两个不同网段的数据无法通过广播来实现数据的传递,此时就需要经过IP的路径选择(routing)功能来。
通过Net_ID可以发现两主机是否在同一网段,而不在同一网段的两主机要发送数据时主要参考路由表(Route table),每台主机都有自己的路由表。
不同网段主机数据传递流程:

  1. 查询IP数据包的目标IP地址
  2. 查询是否位于本机所在的网络路由表中(通过与本机IP比较Net_ID判断,不在同一网络则进行后面步骤)
  3. 查询默认路由(Default Gateway)(没有查找到合适路由条目的情况)
  4. 送出数据包至 Default Gateway 后,不理会数据包流向

Gateway/Router:网关/路由器的功能就是在负责不同网络之间的数据包转递(IP Forwarding)。你的主机与你主机配置的 Gateway 一定要在同一个网段内。

每一台主机里面都会存着一个路由表,数据的传递将依据这个路由表进行传送。而一旦数据包经由路由表的路由条目发送出去后,那么主机本身就不再管数据包的流向了,因为该数据包的流向将是下一台主机(一般是路由器)来进行传送,而该主机在传送时也是依据自己的路由表来判断该数据包应该经由哪里传送出去。

观察主机路由

路由很重要,而且路由一旦设置错误,将会造成某些数据包完全无法正确的送出去。每一台主机都有自己的路由表,观察路由表的命令是route

[root@www ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref  Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0      0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0      0 lo
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0      0 eth0

# 上面输出的数据共有八个字段,你需要注意的有几个地方:
# Destination :其实就是 Network 的意思;
# Gateway     :就是该接口的 Gateway 那个 IP 啦!若为 0.0.0.0 表示不需要额外的 IP;
# Genmask     :就是 Netmask 啦!与 Destination 组合成为一部主机或网域;
# Flags       :共有多个旗标可以来表示该网域或主机代表的意义:
#               U:代表该路由可用;
#               G:代表该网域需要经由 Gateway 来帮忙转递;
#               H:代表该行路由为一部主机,而非一整个网域;
# Iface       :就是 Interface (接口) 的意思。

该命令的输出结果第一栏是“目的地的网络”,最后一栏为“要去到这个目的地要使用哪一个网络接口”。万一我们要传送的数据包目的地 IP 不在路由规则里,那么就会将数据包传送到“default”所在的那个路由规则去。所以几乎每一台主机都有一个 Default Gateway 来帮它们负责所有非网络内的数据包转递。

IP与MAC:网络接口层的ARP与RARP协议

  • 事实上用于传递数据的是以太网。以太网主要是用网卡卡号(MAC),那这两者(IP与MAC)势必存在一种关联,那就是ARP(Address Resolution Protocol,网络地址解析)协议,以及RARP(Revers ARP,反向网络地址解析)
  • 当我们想要了解某个IP配置于哪张以太网卡上时,我们的主机会对整个局域网发出ARP数据包,对方收到ARP数据包后就会返回它的MAC给我们。我们的主机就知道对方所在的网卡,就能开始传递数据来了。且ARP协议取得目标IP与它的网卡卡号后,就会将该笔记录写入我们主机的 ARP table 中(内存内的数据),记录20分钟。
  • 取得本机的网卡卡号(MAC)用ifconfig命令;取得ARP表格内的IP/MAC对应数据使用arp命令,该命令打印的记录是动态信息(一般保留20分钟)。

ICMP协议

ICMP的全称是 Internet Control Message Protocol,即因特网信息控制协议。基本上,ICMP是一个错误检测与报告的机制,最大功能就是可以确保我们网络的连接状态与连接的正确性。ICMP同样是通过IP数据包来进行数据传送的。
利用ICMP检测网络状态的命令有:pingtraceroute

TCP/IP的传输层相关数据包与数据

网络层的IP数据包只负责将数据送到正确的目的主机去,但这个数据包到底会不会被接受,或者是有没有被正确接收,那就不是IP的任务了,那是传输层的任务之一。传输层有两个重点:一个是面向连接的TCP数据包,一个是无连接的UDP数据包。

面向连接的可靠的TCP协议

结合之前的概念,总结下MAC、IP与TCP的数据包之间的相关性如图:
TCP_correlation.png

TCP数据包的报头如图:
TCP_packet.png
各个项目如下:

  • Source Port & Destination Port(源端口 & 目标端口)
  • Sequence Number(数据包序号)
  • Acknowledge Number(回应序号)
  • Data Offset(数据补偿)
  • Reserved(保留)
  • Code(Control Flag,控制标志码)
    进行网络连接时说明连接状态。这个字段共有6bits,分别代表6个句柄(其中 ACK/SYN 很重要,如TCP三次握手的概念就与之相关)
  • Window(滑动窗口)
  • Checksum(确认校验码)
  • Urgent Pointer(紧急数据)
  • Options(任意数据)
  • Padding(补足字段)
  1. 通信端口
    在TCP报头数据中,16位的来源与目标端口很重要。由于是16位,因此目标与来源端口最大可达 65535(2^16) 号。网络是双向的,服务器与客户端要达成连接的话,两边应该要有一个对应的端口来达成连接信道。端口的作用也就是用于确认所要连接的某台主机的服务。
  2. 特权端口

    • Internet 上面已经有很多规范好的固定 port,这些 port number 通常小于 1024,且是提供给许多知名的网络服务软件用的(如 WWW 服务,80 端口)。在Linux中,这些信息存储在/etc/services文件内。
    • 小于1024以下的端口要启动时,启动者的身份必须要是 root 才行,所以才叫做特权端口。如果是 Client(客户端)主动向 Server(服务端)请求数据,那么 Client 的 port number 就使用随机一个大于 1024 且没有在使用的 port number 即可。
  3. Socket Pair
    由于网络是双向的,要达成连接的话需要服务器与客户端均提供了 IP 与端口才行。因此我们常常将这个成对的数据称为 Socket Pair。

    • 来源 IP + 来源端口(Source Address + Source Port)
    • 目的 IP + 目的端口(Destination Address + Destination Port)
      由于 IP 与端口常常连着一起说明,因此网络寻址常常用“IP:Port”来说明。

TCP的三次握手

TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的,其中最重要的就是三次握手的功能。在建立TCP连接之前必须通过三个确认的动作:

  1. 数据包发起:Client --> SYN=1
  2. 数据包接收与确认数据包传送:Server --> SYN=1,ACK=1
  3. 回送确认数据包:Client --> ACK=1
  4. 取得最后确认

重点:网络是双向的

无连接的UDP协议

UDP的全称是 User Datagram Protocol,即用户数据报协议。UDP不提供可靠的传输模式。UDP报头数据如图:
UDP_packet.png
相较于TCP,UDP速度更快,数据更多。UDP传输协议并不考虑连接要求、连接终止与流量控制等特性。所以使用的情况是当数据的正确性不是很重要的时候(如网络摄影机)。

网络防火墙与 OSI 七层协议

数据包的头部上面已经有这么多的重要信息,那么就可以利用一些防火墙机制与软件来进行数据包报头的分析,并且设定分析的规则,当发现某些特定的IP、特定的端口或者特定的数据包信息(SYN/ACK等),那么就将该数据包丢弃,这就是最基本的防火墙原理。

连上Internet前的准备事项

IP 地址、主机名与 DNS 系统

IP不便于人类记忆,于是就有了主机名,把主机名与IP对应起来的系统就是 Domain Name System(DNS)。DNS 服务的最大功能就是进行“主机名与该主机IP的解析”的一项协议。
我们在计算机键入网址访问指定主机时,需要向 DNS 服务器查询 Host Name 对应 IP 的信息。那么 DNS 服务器的所在IP就得提前设定好,在Linux中,这个设定在/etc/resolv.conf文件里。

连接 Internet 的必要网络参数

  • IP
  • Netmask
  • Network(可通过 IP/Netmask 自动计算)
  • Broadcast(可通过 IP/Netmask 自动计算)
  • Gateway
  • DNS

标签: Linux, 鸟哥的Linux私房菜

添加新评论