# 简介

# 网络协议

  • 网络协议泛指计算机之间进行通信时需要遵守的规则。
  • 网络协议有很多种,用途也不同。例如:网络层的 ARP 协议常用于主机寻址,应用层的 HTTP 协议常用于 Web 服务。

# 服务器

:指网络中的某些主机,可以为其它主机提供某种服务。

  • 服务器通常要保持运行,以持续提供服务。
  • 不同用途的服务器通常采用不同的通信协议,比如采用 FTP 协议时,称为 FTP 服务器。

服务器常见的几种工作模式:

  • 客户端/服务器模式(Client/Server ,C/S)

    • 运行一个或多个主机作为服务器,再运行一个或多个主机作为客户端。
    • 客户端连接到服务器之后,便可以享受其提供的服务、功能。
  • 浏览器/服务器模式(Browser/Server ,B/S)

    • 属于 C/S 模式。使用特制的浏览器软件作为客户端,例如 Web 浏览器。
  • 点对点(Peer to Peer ,P2P)

    • 两个主机之间通信时身份对等,有相同的能力,而不区分服务器、客户端。
    • 大量 P2P 主机可组成 P2P 网络。与 C/S 网络相比,没有主机专门担任服务器,去中心化。
    • 线上到线下(Online to Offline ,O2O)的名字与 P2P 相似,但概念不同。

# ARP

:地址解析协议(Address Resolution Protocol),可以根据主机的 IP 地址查询到它的 MAC 地址,常用于局域网的主机寻址。

  • 属于网络层协议。

# ICMP

:因特网控制报文协议(Internet Control Messages Protocol),用于测试网络是否连通、网络延迟。

  • 属于网络层协议,是 IP 协议的一部分,基于 IP 协议寻址。
  • 原理:
    • 向目标主机发送一个 ICMP 报文,根据收到回复的时间间隔就可以知道通信延迟。
      • ICMP 报文的头部用 1 个字节记录了该报文的生存期(Time To Live ,TTL)。
      • ICMP 报文每经过一跳路由器,TTL 的值就会被减一,当 TTL 为零时路由器就会丢弃该报文。
    • 如果没收到回复,则原因可能是:
      • 网络不连通
      • 目标主机不允许 ICMP 通信

# DHCP

:动态主机配置协议,用于给一些主机动态分配 IP 地址,广泛应用于企业单位的局域网中。

  • 属于应用层协议,基于 UDP 通信。

  • IP 地址的分配方法分为静态和动态两种。手动配置主机的 IP 就属于静态分配。

  • 客户端使用 DHCP 服务的过程分为以下四步:(此时客户端与服务器通过 UDP 协议通信,一般使用受限广播报文)

    1. Request :客户端广播 discover 报文。
    2. Reply :服务器收到 discover 报文后会广播 offer 报文,包括准备分配的 IP 地址、默认网关等信息。
    3. Request :客户端收到 offer 报文后就广播 request 报文,表示请求使用这个 IP 地址。
    4. Reply :服务器收到 request 报文后就广播 ack 报文即确认报文,将 IP 地址分配给客户端。
  • DHCP 服务器的主要配置内容:

    • 作用域:指 DHCP 服务器所管理的 IP 地址的范围,通常为一个连续网段。
    • 排除范围:指作用域内一些不被 DHCP 服务器分配的 IP 地址。
    • 地址池:作用域内排除掉不分配的 IP 地址,剩下的就是地址池。
    • 租约:客户端只能租用 IP 地址一段时间。
  • 如果主机请求 DHCP 服务超时,则可以为自己分配 169.254.0.0/16 子网下的一个随机 IP 。

    • 这称为链接本地地址(Link-Local Address),是一种 B 类私有地址,只能在内网使用。
    • 主机给自己分配 IP 时,需要通过 ARP 协议检查该 IP 在当前内网是否已被使用。
    • 如果一个内网没有 DHCP 服务器,则可以让每个主机使用 Link-Local Address 地址相互通信。

# NAT

:网络地址转换(Network Address Translation)。用于在两个网络之间通信时,将来自前一个网络的 IP 转换成后一个网络的有效 IP 。

  • 常见用途:
    • DNAT(Destination NAT):当 NAT 网关收到公网发来的 IP 包时,将 IP 包中的目的 IP 从公网 IP 转换成私网 IP ,然后转发给对应的私网主机。
    • SNAT(Source NAT):当 NAT 网关收到私网主机向公网发送的 IP 包时,将 IP 包中的源 IP 地址从私网 IP 转换成公网 IP ,然后转发到公网。
  • NAT 网关一般是一台服务器,工作在网络层(与 proxy 不同)。
    • NAT 网关内至少有两张网卡,分别连接私网和公网。
    • NAT 网关一般给私网内的主机分配 10.0.0.0、172.16.0.0、192.168.0.0 三种范围的私有网络地址,并保存一些可用的公网 IP 地址。
    • NAT 网关上维护了一张 NAT 表,记录了每个私网 IP 与公网 IP 的转换关系。如果经过 NAT 网关的 IP 包中的 IP 地址不在 NAT 表中,就丢弃该报文。
  • NAT 网关的分类:
    • 静态 NAT(Static NAT):NAT 表事先写好,不再变化。这样可以直接实现 DNAT 。
    • 动态地址 NAT(Pooled NAT):NAT 表可以动态变化。这样不能实现 DNAT 。
    • 端口多路复用(Port Address Translation ,PAT):所有私网主机共用一个外网 IP ,只是连接到 NAT 网关的不同端口上。NAT 网关与公网通信时,使用的不同端口号代表了不同的私网主机,转换 IP 包中的 IP 地址和端口号。