精华内容
下载资源
问答
  • 互联网协议 — ARP 地址解析协议

    千次阅读 2019-11-09 12:42:19
    目录 文章目录目录ARP 简述MAC 地址简述...ARP(Address Resolution Protocol,地址解析协议),是一个通过解析网络层 IP 地址来找寻数据链路层 MAC 地址的网络传输协议,它在 IPv4 中极其重要。ARP 最初在 1982...

    目录

    ARP 简述

    ARP(Address Resolution Protocol,地址解析协议),是一个通过解析网络层 IP 地址来找寻数据链路层 MAC 地址的网络传输协议,它在 IPv4 中极其重要。ARP 最初在 1982 年的 RFC 826 中提出并纳入互联网标准 STD 37。在 IPv6 中,使用的是 NDP(邻居发现协议)用于代替 ARP。

    ARP 的基本功能

    在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的 MAC 地址。而在 TCP/IP 协议中,网络层和传输层只关心目标主机的 IP 地址以及端口号。这就导致在以太网中使用 IP 协议时,数据链路层的以太网协议接到上层 IP 协议提供的数据中,只包含目的主机的 IP 地址。而没有 MAC 地址就无法最终定位目的主机,于是需要一种方法,根据目的主机的 IP 地址,获得其 MAC 地址。这就是 ARP 协议要做的事情。所谓地址解析(Address Resolution)就是主机在发送数据帧前将目标 IP 地址转换成目标 MAC 地址的过程

    在这里插入图片描述

    而在点对点链路中不会使用 ARP,实际上在点对点网络中也不会使用 MAC 地址,因为在此类网络中分别已经获取了对端的 IP 地址。

    注意:ARP 已经在很多网路层和数据链接层之间得以实现,包括 IPv4、Chaosnet、DECnet 和 Xerox PARC Universal Packet(PUP),使用 IEEE 802 标准。可见,ARP 不仅限于使用在 IPv4 网络,这一点从 ARP 的数据包结构设计中有体现出来。

    ARP 的数据包结构

    下图为以太网数据帧的报文首部:
    在这里插入图片描述

    • 以太网首部
      • 以太网目的地址和以太网源地址:表示目标设备和发送端设备的以太网地址。其中,目的以太网地址全为 1,即 FF:FF:FF:FF:FF:FF,为广播地址,在本地局域网内,所有的以太网接口都要接收这个数据帧。

      • 帧类型:表示以太网数据帧的数据类型。对于 ARP 来说这里是 0x0806,对于 IP 数据报文是 0x0800,还有 RARP(逆地址解析协议)是 0x8035。

    NOTE:如果以太网数据帧的帧类型是 ARP,那么数据部分就会拥有 ARP 首部。

    • 以太网 ARP 字段
      • ARP 首部

        • 硬件类型和协议类型:这两个字段用来描述 ARP 分组。前者表示 ARP 工作在什么类型的网络中,需要什么样的物理地址;后者则表示需要映射的协议地址类型。例如:用来描述 IPv4 时,则协议类型为 IP,硬件类型为以太网的物理地址。所以协议类型为 0x0800,硬件类型为 1,表示以太网地址。

        • 硬件地址长度和协议地址长度:用来描述 IPv4 时,分别表示 MAC 地址和 IP 地址的长度,分别为 6 字节和 4 字节。

        • 操作码:表示 ARP 数据包的操作类型。

          • 1:ARP 请求
          • 2:ARP 应答
          • 3:RARP 请求
          • 4:RARP 应答
      • 源硬件地址和目标硬件地址:与以太网首部中的目的以太网地址和源以太网地址重叠。

      • 源协议地址和目标协议地址:用来描述 IPv4 时,分别表示源设备 IP 地址和目的设备 IP 地址。

    NOTE 1:在发送 ARP 请求时,目标硬件地址是空着的(全为 0),因为 ARP 请求要请求的就是它的值,当目标设备请求收到后,就会把自己的硬件地址写到这个字段,并把操作码改成 2,再应答回去。

    NOTE 2:在 ARP 中,有效数据的长度为 28 个字节,不足以太网的最小长度 46 字节长度。所以需要填充字节,填充字节最小长度为 18 个字节。

    ARP 的工作原理

    在这里插入图片描述

    在每台安装有 TCP/IP 协议的电脑或路由器里都有一个 ARP 缓存表,表里的 IP 地址与 MAC 地址是一对应的,如下表所示。

    在这里插入图片描述

    工作流程:
    在这里插入图片描述

    下面以主机 A(192.168.38.10)向主机 B(192.168.38.11)发送数据为例:

    1. 当主机 A 发送数据时,会在自己的 ARP 缓存表中寻找是否有目的 IP 地址。如果找到就知道目标 MAC 地址为 00-BB-00-62-C2-02,直接把目的 MAC 地址封装入数据帧,然后通过数据链路层发送就可。

    2. 如果在 ARP 缓存表中没有找到目的 IP 地址,那么主机 A 就会在网络上发送一个广播(ARP Request),目标 MAC 地址是 FF.FF.FF.FF.FF.FF,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11 的 MAC 地址是什么?”

    ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 53.53.53.53 tell 192.168.200.10, length 28
    

    在这里插入图片描述

    1. 网络上其他主机并不响应 ARP 询问,只有主机 B 接收到这个帧时,才向主机 A 做出这样的回应(ARP Response):“ 192.168.38.11 的 MAC 地址是 00-BB-00-62-C2-02”,此回应以单播方式。这样,主机 A 就知道主机 B 的 MAC 地址,它就可以向主机 B 发送信息。

    在这里插入图片描述

    1. 更新自己的 ARP 高速缓存(ARP cache),下次再向主机 B 发送信息时,直接从 ARP 缓存表里查找就可。
      在这里插入图片描述

    NOTE:请求解析方收到 ARP 回应包之后,不会进行任何判断,就直接将对应的 MAC 地址存入自己的 ARP 缓存中,这也是 ARP 投毒攻击的产生原因。

    当协议栈中需要再次进行 IP 解析的时候,系统会自动到 ARP 缓存表中查找是否已经存在相应的 IP 表项,如果已存在则使用之,如果不存在,则执行解析流程,对指定的 IP 进行 ARP 解析。

    同时,ARP 缓存表采用老化机制,在一段时间内(一般为 20 分钟)如果表中的某一行没有使用,就会被过期删除,这样可减少缓存表的长度,加快查询速度。

    ARP 的客户端

    Linux 操作系统都会安装 ARP 客户端,操作如下:

    arp --help
    -a                       查看缓存中的所有项目
    -s, --set                设置一个新的 ARP 项目、不带任何参数表示查看静态 MAC 地址
    -d, --delete             人工删除一个静态项目
    -v, --verbose            be verbose
    -n, --numeric            don't resolve names
    -i, --device             specify network interface (e.g. eth0)
    -D, --use-device         read <hwaddr> from given device
    -A, -p, --protocol       specify protocol family
    -f, --file               read new entries from file or from /etc/ethers
    
    • 查看 ARP 缓存表
    [root@ctl-host ~]# arp -a
    ? (172.18.22.205) at 08:9e:01:fc:48:7d [ether] on br0
    ? (172.18.22.10) at 52:54:00:bd:23:9e [ether] on br0
    gateway (172.18.22.1) at ac:7e:8a:6c:41:c4 [ether] on br0
    
    • 查看 ARP 缓存表的详细信息
    [root@ctl-host ~]# arp -nv
    Address                  HWtype  HWaddress           Flags Mask            Iface
    172.18.22.205            ether   08:9e:01:fc:48:7d   C                     br0
    172.18.22.10             ether   52:54:00:bd:23:9e   C                     br0
    172.18.22.1              ether   ac:7e:8a:6c:41:c4   C                     br0
    Entries: 3	Skipped: 0	Found: 3
    
    • 增加一个静态的 ARP 表项
    $ arp –s 157.55.85.212  00-aa-aa-562-c6-09
    
    # 增加超时条目
    $ arp -s 211.161.17.21 00:00:00:00:00:00 temp
    
    • 禁用主机 ARP,要求配置静态 ARP 缓存才能通信:
    ip link set dev eth0 arp off
    

    ARP Proxy(代理)

    另外,当源主机和目的主机不在同一个局域网中时,即便知道对方的 MAC 地址,两者也不能直接通信,必须经过三层路由转发才可以。所以此时,源主机通过 ARP 协议获得的将不是目的主机的真实 MAC 地址,而是一台可以通往局域网外的路由器的 MAC 地址。于是此后源主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托 ARP 或 ARP 代理(Proxy)。这是设计好的网络特性,具体参考 RFC925 和 RFC1027。

    ARP proxy 可以在路由器上配置,从而代替默认网关,为子网实现三层转发,而子网内的设备仍然会认为自己在一个二层网络中。这种用途现在比较少。
    在这里插入图片描述

    在这里插入图片描述

    ARP proxy 还有个用途就是用于 NAT 设备的 ARP 应答。设备 X 访问设备 Y,当网络包走到路由器 C,路由器 C 首先也会发送 ARP 广播请求,来查询目的设备的 MAC 地址。但是由于 Y 设备与路由器 C 不在一个数据链路中,Y 设备收不到路由器 C 发出的 ARP 广播请求,因此需要 NAT 设备代答 ARP。这里也可以理解成,22 为一个虚拟的端口(72.3.4.55)提供 ARP 响应功能。这样数据包能接着发送到 NAT 设备,进而转发到设备 Y。

    在这里插入图片描述

    ARP Probe(探测)

    ARP 探测由 RFC5227 定义。当一个设备以任何方式获取了 IP 地址,想在一个数据链路中上线时,如果该数据链路中已经存在了一个相同 IP 地址的设备,那该设备上线将导致两个设备网络都不可用。为了防止该情况的发生,可以使用 ARP probe 判断当前网络是否已经有指定 IP 地址。

    在这里插入图片描述

    ARP 探测包本身也是一个普通的 ARP 请求(操作码 1),但是其 SPA 需要设置成 0.0.0.0。ARP cache 的更新内容来自于 SPA 和 SHA,由于 SPA 为空,ARP 探测包中的 ARP 数据是无效的,因此 ARP probe 数据包不会更新任何设备的 ARP cache。这是合理的,因为 ARP 探测本身就是一个不确定的行为,如果数据链路中已经有了相应的 IP 地址设备,自然也不希望在 ARP 探测时修改已有的 ARP entry。

    同样的,ARP 探测报文是一个广播报文,也就是说它的以太网报头中的目的 MAC 地址是 ff:ff:ff:ff:ff:ff。ARP 探测报的 TPA 设置成希望探测的 IP 地址,这样如果数据链路中已经有同 IP 的设备,收到探测包之后会给源设备发送 ARP 响应,而源设备也就知道了数据链路中存在相同 IP 地址的设备。

    ARP 探测如果没有发现 IP 被占用,通常会接着发送一个 GARP 来告知数据链路中的其他设备有关自己的 IP 地址和 MAC 地址。根据 RFC5227,这个时候的 GARP 应该是一个 ARP 请求(操作码 1)。

    在这里插入图片描述

    ARP Spoofing(欺骗)

    ARP 机制是一种 “无状态”、“无验证” 的协议,所以它很容易受到 ARP spoofing 攻击。ARP spoofing,即 ARP 欺骗,又称 ARP 投毒,是一种针对 ARP 的攻击方式。

    ARP 欺骗的运作原理是由攻击者发送假的 ARP 数据包到网络上,尤其是送到网关上。假设你的网关的 IP 地址是 192.168.0.2,MAC 地址为 00-11-22-33-44-55,那么你发送的数据都会从这个 MAC 地址经过,这时候我发送大量的 ARP 数据包,然而我的包是构造出来的,IP 依旧是你的 IP,但 MAC 地址却被我替换成了我的 MAC 地址。此时当你更新你的 ARP 缓存时,就会把我机器的 MAC 地址当成 192.168.0.2 的 MAC 地址,于是你的流量都到我这来了。

    所以 ARP 欺骗的目的是要让送至特定的 IP 地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行转送到真正的网关(Passive Sniffing,被动式数据包嗅探)或是篡改后再转送(Man-in-the-middle Attack,中间人攻击)。攻击者亦可将 ARP 数据包导到不存在的 MAC 地址以达到阻断服务攻击的效果。

    最理想的预防方式就是使用静态的 ARP 条目,对于网关:将所有的客户端的 MAC 以及对应 IP 进行静态绑定,防止攻击者假冒客户端。而对于普通客户端:绑定网关 MAC 地址,防止攻击者假冒网关;不过在大型网络不可行,因为 ARP 经常需要更新,另外一种方法,例如:DHCP snooping,网络设备可借由 DHCP 保留网络上各电脑的 MAC 地址,在伪造的 ARP 数据包发出时即可侦测到。此方式已在一些厂牌的网络设备产品所支持。

    GARP

    GARP(Gratuitous ARP),是一种特殊的 ARP 请求,ARP 数据包的 dstIP 和 srcIP 地址相同,并且 dstMAC 为全 0/f。显然 GARP 是一种自己发送给自己的数据报文,其目的是:旨在更新其它收到这个通告的主机的 ARP 缓存。这种不请自来的 ARP 通常用于在主机启动或更换网卡时通知其它主机,所以称之为 “免费 ARP”。

    因为 ARP 本身是无状态的。因此,就算设备没有发出 ARP 请求,如果该设备收到了其他设备发来的 ARP 数据包(包括 ARP 请求和响应),那么该设备还是会更新自身的 ARP cache。这就是 GARP 的实现背景。

    在这里插入图片描述

    作用

    1. Announcing a Node’s Existence(宣布节点存在):检测 IP 冲突。如果 GARP 请求接收到应答,说明当前网络上有另外一个和发送机器有相同 IP 的主机。
    2. Updating ARP Mapping(更新 ARP 映射):可以用来更新网络中当前机器的 ARP 缓存。如果机器重新配置了 IP 地址,那么 GARP 报文能够把新的 IP-MAC 匹配关系广播到网络中,接收到报文的机器更新自己的 ARP 缓存记录,这样就不会有因为 ARP 缓存失效导致的网络问题。
    3. Redundancy(冗余)

    Linux 系统中可以使用 arping 命令行来发送 Gratuitous ARP,让网络中所有主机更新当前机器的 ARP 记录:

    arping -A -I eth0 172.16.42.161
    

    这个命令就是把机器上 eth0 绑定的 MAC 地址和 172.16.42.161 作为 ARP 记录发送出去。

    Redundancy(冗余)

    GARP 的前两种应用场景详细大家都非常熟悉且易于理解,下面主要关注通过 GARP 实现的冗余网络。

    Redundancy(冗余)的目的是为了设计 HA(High-Availability,高可靠性)系统的 Failover(故障转移)。对于冗余,通常有两种情况:

    1. 仅 IP 冗余:有两个不同 MAC 的机器拥有同一个 IP 的时候。
    2. IP 和 MAC 地址都冗余:有两张不同的网卡都具有同一个 MAC 地址和 IP 地址,并连接到交换机的两个端口的时候。

    VIP 切换

    即:有两个不同 MAC 的机器拥有同一个 IP(VIP)的场景,典型应用就是 Keepalived 和 Pacemaker。下图很好的说明了通过 GARP 支撑 VIP 偏移的实现原理:在 VIP 漂移(IP 从一个 MAC Failover 到另外一个 MAC)后马上发送 GARP 刷新所有其他主机的 ARP 缓存。需要注意的是,有一些防火墙是不支持 GARP 流量的(防止使用 GARP 进行 ARP 欺诈),此时要考虑采用 VMAC(MAC 地址是在两个节点之间共享)来代替 GARP 方案。

    在这里插入图片描述

    :Keepalived 1.2.20 及更高版本支持下列 GARP 的配置设置:

     # delay for second set of gratuitous ARPs after transition to MASTER
        vrrp_garp_master_delay 10    # seconds, default 5, 0 for no second set
    
        # number of gratuitous ARP messages to send at a time after transition to MASTER
        vrrp_garp_master_repeat 1    # default 5
    
        # delay for second set of gratuitous ARPs after lower priority advert received when MASTER
        vrrp_garp_lower_prio_delay 10
    
        # number of gratuitous ARP messages to send at a time after lower priority advert received when MASTER
        vrrp_garp_lower_prio_repeat 1
    
        # minimum time interval for refreshing gratuitous ARPs while MASTER
        vrrp_garp_master_refresh 60  # secs, default 0 (no refreshing)
    
        # number of gratuitous ARP messages to send at a time while MASTER
        vrrp_garp_master_refresh_repeat 2 # default 1
    
        # Delay in ms between gratuitous ARP messages sent on an interface
        vrrp_garp_interval 0.001          # decimal, seconds (resolution usecs). Default 0.
    
        # Delay in ms between unsolicited NA messages sent on an interface
        vrrp_gna_interval 0.000001        # decimal, seconds (resolution usecs). Default 0.
    

    交换链路切换

    该场景中,有两张不同的网卡都具有同一个 MAC 地址和 IP 地址,并连接到交换机的两个端口。此时,尽管我们不需要考虑刷新主机的 ARP 缓存,但需要使用一个 GARP 来通知交换机进行重新选路(刷新交换机的 MAC table),继而才能通过新的 MAC 找到正确的通路。

    在这里插入图片描述

    参考文档

    https://www.jianshu.com/p/65710069d934
    https://www.cnblogs.com/littlehann/p/3735816.html
    https://juejin.im/post/59f1e319f265da430405db4a
    https://www.ibm.com/developerworks/cn/linux/l-arp/index.html

    展开全文
  • 互联网协议入门

    万次阅读 2019-04-17 08:08:59
    我们每天使用互联网,你是否想过,它是如何...互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。...

    我们每天使用互联网,你是否想过,它是如何实现的?

    全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?

    互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。

    下面就是我的学习笔记。因为这些协议实在太复杂、太庞大,我想整理一个简洁的框架,帮助自己从总体上把握它们。为了保证简单易懂,我做了大量的简化,有些地方并不全面和精确,但是应该能够说清楚互联网的原理。

     

    一、概述

    1.1 五层模型

    互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。

    用户接触到的,只是最上面的一层,根本没有感觉到下面的层。要理解互联网,必须从最下层开始,自下而上理解每一层的功能。

    如何分层有不同的模型,有的模型分七层,有的分四层。我觉得,把互联网分成五层,比较容易解释。

    如上图所示,最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做"应用层"(Application Layer),中间的三层(自下而上)分别是"链接层"(Link Layer)、"网络层"(Network Layer)和"传输层"(Transport Layer)。越下面的层,越靠近硬件;越上面的层,越靠近用户。

    它们叫什么名字,其实并不重要。只需要知道,互联网分成若干层就可以了。

    1.2 层与协议

    每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。

    大家都遵守的规则,就叫做"协议"(protocol)。

    互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。

    二、实体层

    我们从最底下的一层开始。

    电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。

    这就叫做"实体层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

    三、链接层

    3.1 定义

    单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?

    这就是"链接层"的功能,它在"实体层"的上方,确定了0和1的分组方式。

    3.2 以太网协议

    早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做"以太网"(Ethernet)的协议,占据了主导地位。

    以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。

    "标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。

    "标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

    3.3 MAC地址

    上面提到,以太网数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?

    以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

    每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。

    前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

    3.4 广播

    定义地址只是第一步,后面还有更多的步骤。

    首先,一块网卡怎么会知道另一块网卡的MAC地址?

    回答是有一种ARP协议,可以解决这个问题。这个留到后面介绍,这里只需要知道,以太网数据包必须知道接收方的MAC地址,然后才能发送。

    其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?

    回答是以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。

    上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。

    有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。

    四、网络层

    4.1 网络层的由来

    以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,上海的网卡就可以找到洛杉矶的网卡了,技术上是可以实现的。

    但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有成员人手一"包",不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。

    互联网是无数子网络共同组成的一个巨型网络,很像想象上海和洛杉矶的电脑会在同一个子网络,这几乎是不可能的。

    因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。("路由"的意思,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

    这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

    于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。

    网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

    4.2 IP协议

    规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。

    目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。

    习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

    互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

    但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。

    那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

    所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    4.3 IP数据包

    根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。

    但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?

    回答是不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

    具体来说,IP数据包也分为"标头"和"数据"两个部分。

    "标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。

    IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的"数据"部分,最长为65,515字节。前面说过,以太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

    4.4 ARP协议

    关于"网络层",还有最后一点需要说明。

    因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。

    所以,我们需要一种机制,能够从IP地址得到MAC地址。

    这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

    第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

    总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

    五、传输层

    5.1 传输层的由来

    有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

    接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

    也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

    "端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

    "传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。

    5.2 UDP协议

    现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。

    UDP数据包,也是由"标头"和"数据"两部分组成。

    "标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:

    UDP数据包非常简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    5.3 TCP协议

    UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

    为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

    因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

    TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    六、应用层

    应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

    "应用层"的作用,就是规定应用程序的数据格式。

    举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

    这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。

    至此,整个互联网的五层结构,自下而上全部讲完了。这是从系统的角度,解释互联网是如何构成的。下一篇,我反过来,从用户的角度,自上而下看看这个结构是如何发挥作用,完成一次网络数据交换的。

    展开全文
  • 互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。 用户接触到的,只是最上面的一层,根本没有感觉到下面的层。要理解互联网,必须从最下层开始,自下而上理解每一层的功能...

    一、概述

    1.1 五层模型

    互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。

    用户接触到的,只是最上面的一层,根本没有感觉到下面的层。要理解互联网,必须从最下层开始,自下而上理解每一层的功能。

    如何分层有不同的模型,有的模型分七层,有的分四层。我觉得,把互联网分成五层,比较容易解释。


    如上图所示,最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做"应用层"(Application Layer),中间的三层(自下而上)分别是"链接层"(Link Layer)、"网络层"(Network Layer)和"传输层"(Transport Layer)。越下面的层,越靠近硬件;越上面的层,越靠近用户。

    它们叫什么名字,其实并不重要。只需要知道,互联网分成若干层就可以了。


    1.2 层与协议

    每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。

    大家都遵守的规则,就叫做"协议"(protocol)。

    互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。


    二、实体层

    我们从最底下的一层开始。

    电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。


    这就叫做"实体层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。


    三、链接层

    3.1 定义

    单纯的0和1没有任何意义,必须规定解读方式:多少个电信号算一组?每个信号位有何意义?这就是"链接层"的功能,它在"实体层"的上方,确定了0和1的分组方式。

    3.2 以太网协议

    早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做"以太网"(Ethernet)的协议,占据了主导地位。

    以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。


    "标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。

    "标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

    3.3 MAC地址

    上面提到,以太网数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?

    以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。


    每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。


    前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

    3.4 广播

    定义地址只是第一步,后面还有更多的步骤。

    首先,一块网卡怎么会知道另一块网卡的MAC地址?

    回答是有一种ARP协议,可以解决这个问题。这个留到后面介绍,这里只需要知道,以太网数据包必须知道接收方的MAC地址,然后才能发送。

    其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?

    回答是以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。


    上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。

    有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。


    四、网络层

    4.1 网络层的由来

    以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,上海的网卡就可以找到洛杉矶的网卡了,技术上是可以实现的。

    但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有成员人手一"包",不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。这种设计是合理的,否则互联网上每一台计算机都会收到所有包,那会引起灾难。

    互联网是无数子网络共同组成的一个巨型网络,很像想象上海和洛杉矶的电脑会在同一个子网络,这几乎是不可能的。


    因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。("路由"的意思,就是指如何向不同的子网络分发数据包,这是一个很大的主题,本文不涉及。)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

    这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

    于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。

    网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

    4.2 IP协议

    规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。

    目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。


    习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

    互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

    但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。

    那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

    所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    4.3 IP数据包

    根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。

    但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?

    回答是不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

    具体来说,IP数据包也分为"标头"和"数据"两个部分。


    "标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。


    4.4 ARP协议

    关于"网络层",还有最后一点需要说明。

    因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。

    所以,我们需要一种机制,能够从IP地址得到MAC地址。

    这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

    第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

    总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。


    五、传输层

    5.1 传输层的由来

    有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

    接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

    也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

    "端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

    "传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。

    5.2 UDP协议

    现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。

    UDP数据包,也是由"标头"和"数据"两部分组成。


    "标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:


    UDP数据包非常简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    5.3 TCP协议

    UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

    为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

    因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

    TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。


    六、应用层

    应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

    "应用层"的作用,就是规定应用程序的数据格式。

    举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

    这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。



    七、一个小结

    先对前面的内容,做一个小结。

    我们已经知道,网络通信就是交换数据包。电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信。数据包的结构,基本上是下面这样:


    发送这个包,需要知道两个地址:

     * 对方的MAC地址
      * 对方的IP地址

    有了这两个地址,数据包才能准确送到接收者手中。但是,前面说过,MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发。


    上图中,1号电脑要向4号电脑发送一个数据包。它先判断4号电脑是否在同一个子网络,结果发现不是(后文介绍判断方法),于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。

    1号电脑把数据包发到网关A,必须知道网关A的MAC地址。所以,数据包的目标地址,实际上分成两种情况:


    场景 数据包地址
    同一个子网络 对方的MAC地址,对方的IP地址
    非同一个子网络 网关的MAC地址,对方的IP地址

    发送数据包之前,电脑必须判断对方是否在同一个子网络,然后选择相应的MAC地址。接下来,我们就来看,实际使用中,这个过程是怎么完成的。


    八、用户的上网设置

    8.1 静态IP地址

    你买了一台新电脑,插上网线,开机,这时电脑能够上网吗?



    通常你必须做一些设置。有时,管理员(或者ISP)会告诉你下面四个参数,你把它们填入操作系统,计算机就能连上网了:

    * 本机的IP地址
      * 子网掩码
      * 网关的IP地址
      * DNS的IP地址

    下图是Windows系统的设置窗口。


    这四个参数缺一不可,后文会解释为什么需要知道它们才能上网。由于它们是给定的,计算机每次开机,都会分到同样的IP地址,所以这种情况被称作"静态IP地址上网"。

    但是,这样的设置很专业,普通用户望而生畏,而且如果一台电脑的IP地址保持不变,其他电脑就不能使用这个地址,不够灵活。出于这两个原因,大多数用户使用"动态IP地址上网"。

    8.2 动态IP地址

    所谓"动态IP地址",指计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫做DHCP协议。

    这个协议规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做"DHCP服务器"。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。

    前面说过,如果两台计算机在同一个子网络,必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新加入的计算机不知道这两个地址,怎么发送数据包呢?

    DHCP协议做了一些巧妙的规定。

    8.3 DHCP协议

    首先,它是一种应用层协议,建立在UDP协议之上,所以整个数据包是这样的:


    (1)最前面的"以太网标头",设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。

    (2)后面的"IP标头",设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

    (3)最后的"UDP标头",设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。

    这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道"这个包是发给我的",而其他计算机就可以丢弃这个包。

    接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个"DHCP响应"数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

    新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。

    8.4 上网设置:小结

    这个部分,需要记住的就是一点:不管是"静态IP地址"还是"动态IP地址",电脑上网的首要步骤,是确定四个参数。这四个值很重要,值得重复一遍:

      * 本机的IP地址
      * 子网掩码
      * 网关的IP地址
      * DNS的IP地址

    有了这几个数值,电脑就可以上网"冲浪"了。接下来,我们来看一个实例,当用户访问网页的时候,互联网协议是怎么运作的。


    九、一个实例:访问网页

    9.1 本机参数

    我们假定,经过上一节的步骤,用户设置好了自己的网络参数:

     * 本机的IP地址:192.168.1.100
      * 子网掩码:255.255.255.0
      * 网关的IP地址:192.168.1.1
      * DNS的IP地址:8.8.8.8

    然后他打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。


    这意味着,浏览器要向Google发送一个网页请求的数据包。

    9.2 DNS协议

    我们知道,发送数据包,必须要知道对方的IP地址。但是,现在,我们只知道网址www.google.com,不知道它的IP地址。

    DNS协议可以帮助我们,将这个网址转换成IP地址。已知DNS服务器为8.8.8.8,于是我们向这个地址发送一个DNS数据包(53端口)。


    然后,DNS服务器做出响应,告诉我们Google的IP地址是172.194.72.105。于是,我们知道了对方的IP地址。

    9.3 子网掩码

    接下来,我们要判断,这个IP地址是不是在同一个子网络,这就要用到子网掩码。

    已知子网掩码是255.255.255.0,本机用它对自己的IP地址192.168.1.100,做一个二进制的AND运算(两个数位都为1,结果为1,否则为0),计算结果为192.168.1.0;然后对Google的IP地址172.194.72.105也做一个AND运算,计算结果为172.194.72.0。这两个结果不相等,所以结论是,Google与本机不在同一个子网络。

    因此,我们要向Google发送数据包,必须通过网关192.168.1.1转发,也就是说,接收方的MAC地址将是网关的MAC地址。

    9.4 应用层协议

    浏览网页用的是HTTP协议,它的整个数据包构造是这样的:


    HTTP部分的内容,类似于下面这样:

    GET / HTTP/1.1
      Host: www.google.com
      Connection: keep-alive
      User-Agent: Mozilla/5.0 (Windows NT 6.1) ......
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Encoding: gzip,deflate,sdch
      Accept-Language: zh-CN,zh;q=0.8
      Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
      Cookie: ... ...

    我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

    9.5 TCP协议

    TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

    TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

    9.6 IP协议

    然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

    IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

    9.7 以太网协议

    最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

    以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。


    9.8 服务器端响应

    经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

    根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的"HTTP请求",接着做出"HTTP响应",再用TCP协议发回来。

    本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。


    这个例子就到此为止,虽然经过了简化,但它大致上反映了互联网协议的整个通信过程。


    展开全文
  • 互联网协议基础知识

    千次阅读 2018-12-20 17:13:45
    互联网的本质就是一系列的网络协议,总称为“互联网协议”(Internet Protocol Suite)。 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。 2、互联网分层模型 互联网协议...

    一、网络通信原理

    引用自:
    阮一峰的网络日志----互联网协议入门(一)
    阮一峰的网络日志----互联网协议入门(二)
    OSI七层协议大白话解读
    网络七层协议解释
    漫谈网络通信——从OSI网络模型到TCP/IP协议族

    《TCP/IP详解 卷1:协议》读书笔记
    【老生常谈的】互联网协议
    TCP/IP协议(一)网络基础知识

    1、互联网协议

    互联网的本质就是一系列的网络协议,总称为“互联网协议”(Internet Protocol Suite)。

    互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

    2、互联网分层模型

    互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层


    在这里插入图片描述

    每层运行常见物理设备


    在这里插入图片描述
    在这里插入图片描述

    2.1 物理层(Physical Layer)

    物理层主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。

    它的主要作用是传输数据比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

    2.2 数据链路层(Datalink Layer)

    物理层为我们提供了在两台设备之间传输0和1的可能,但是只是单纯的传输0和1是没有意义的。链路层的作用是将这些01信号序列化,转化为有意义的数据帧。

    那么链路层是怎么工作的呢?它工作过程大概可以理解为三个部分,发送什么数据?发送给谁?怎么发送?

    2.2.1 以太网协议

    首先需要有一个规则来定义这些01电信号,使得这些电信号变得有意义,形成了统一的标准(标准就是协议),即以太网协议(Ethernet)。

    Ethernet规定:
    一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。


    在这里插入图片描述

    head包含(固定18字节)

    • 发送者(源地址,6个字节)
    • 接收者(目标地址,6个字节)
    • 数据类型(6个字节)

    data包含:(最短46字节,最长1500字节)

    • 数据包的具体内容

    "标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

    2.2.2 MAC地址

    以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。


    在这里插入图片描述

    每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。


    在这里插入图片描述

    前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以通过这个地址去向目标设备发送数据。

    2.2.3 广播

    知道了目标设备的MAC地址,但是怎么才能把把消息准确的发送给目标设备呢?其实解决方法很简单,发送数据时,将向网络中所有设备都发送这个消息,然后每一台设备自己来判断数据标头中包含的MAC地址是否和自己的MAC地址一致,如果一致就接收这个消息,如果不一致就不接收。这种发送数据的方式叫做“广播”。通过“广播”的方式就可以把一条数据发送到指定设备上了。


    在这里插入图片描述

    上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。

    有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。

    2.3 网络层(Network Layer)

    2.3.1 网络层的由来:

    以太网协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,上海的网卡就可以找到洛杉矶的网卡了。实际上,“广播”的方式只能在同一子网络内发送数据。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。

    因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用"路由"方式发送。("路由"的意思,就是指如何向不同的子网络分发数据包)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

    这就导致了"网络层"的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。

    于是,"网络层"出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。

    网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

    2.3.2 IP协议

    规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。

    目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。


    在这里插入图片描述

    习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

    互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址172.16.254.1,这是一个32位的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

    但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。

    那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

    所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    2.3.3 IP数据包

    根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。

    但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?

    回答是不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

    具体来说,IP数据包也分为"标头"和"数据"两个部分。


    在这里插入图片描述

    "标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。


    在这里插入图片描述

    IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的"数据"部分,最长为65,515字节。前面说过,以太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

    2.3.4 ARP协议

    关于"网络层",还有最后一点需要说明。

    因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的,但是我们不知道它的MAC地址。

    所以,我们需要一种机制,能够从IP地址得到MAC地址。

    这里又可以分成两种情况:
    第一种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议,通过“广播”的方式向子网络内所有设备发送一条数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,就做出回复,向对方报告自己的MAC地址,否则就丢弃这个包,这样就可以通过IP地址获取到MAC地址了。

    总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

    第二种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),网关通过路由协议再将数据发送到目标设备上。(网络通过路由器进行连接,形成互联网。路由器是网关,但是网关不一定是路由器。 )


    在这里插入图片描述

    如图,主机2想向主机4发送一条数据,必须先将数据发送至网关A,由网关A通过路由协议查询到主机4处于子网络B,网关A会将数据发送给网关B,网关B再将数据发送给主机4,这样便完成了主机2到主机4之间的通讯。

    至此,我们应该清楚了,在两台设备间通讯所必须的条件,首先我们需要判断两台设备是否处在同一子网络中,若在同一子网络,就可以利用ARP协议来获取MAC地址,得到目标IP和MAC地址,就可以发送数据。若不在同一子网络,则需要获取网关的MAC地址,将数据发送到网关,让网关来转发。现在我们就可以在互联网上任意两台设备间通讯了。

    2.4 传输层 (Transport Layer)

    有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

    接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

    也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用,这个参数就叫做"端口"(port)。它其实是每一个使用网卡的应用程序的编号,不同的应用程序在主机上发送或接收数据,都要通过不同的端口,以此来确定数据包是归那个应用程序所有。

    "端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

    "传输层"的作用,就是建立"端口到端口之间"的通信,最常用的协议是TCP、UDP协议。相比之下,“网络层"的功能是建立"主机到主机之间"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字”(socket)。有了它,就可以进行网络应用程序开发了。

    2.4.1 UDP协议(不可靠传输)

    现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。

    UDP数据包,也是由"标头"和"数据"两部分组成。


    在这里插入图片描述

    "标头"部分主要定义了发出端口和接收端口,"数据"部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的"数据"部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样:


    在这里插入图片描述

    UDP数据包非常简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    2.4.2 TCP协议(可靠传输)

    UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

    为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

    因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

    TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    TCP三次握手和四次挥手
    TCP(Transmission Control Protocol) 传输控制协议
    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
    位码即tcp标志位,有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)
    Sequence number(顺序号码) Acknowledge number(确认号码)


    三次握手
    在这里插入图片描述

    • 第一次握手:TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

    • 第二次握手:TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。

    • 第三次握手:TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。


      四次挥手
      在这里插入图片描述

    • 第一次挥手:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

    • 第二次挥手:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
      客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

    • 第三次挥手:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

    • 第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
      服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

    2.5 应用层(Application Layer)

    应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

    "应用层"的作用,就是规定应用程序的数据格式。

    举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。

    这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。


    在这里插入图片描述

    应用层中的应用软件分两种:客户/服务器和P2P体系结构

    • 客户/服务器(client/server)
      这种类型,就是我们很熟悉的客户端——服务器模型,客户端请求服务器,服务器响应客户端这样的一种方式进行“交流”

    • P2P
      也称为对等体系结构。P2P相当于每个人的电脑度可以当服务器,也可以当客户端,不单单限制于只能客户端访问服务器,你自己的计算机可以去访问别人的计算机上的内容,别的同样可以访问你计算机上的内容,这样达到一种共享的状态。

    常用协议:

    • HTTP超文本传输协议:这是一种最基本的客户机/服务器的访问协议;浏览器向服务器发送请求,而服务器回应相应的网页

    • DNS域名解析协议:DNS是一种用以将域名转换为IP地址的Internet服务

    • FTP文件传送协议:提供交互式的访问,基于客户服务器模式,面向连接 使用TCP可靠的运输服务

      主要功能:减少/消除不同操作系统下文件的不兼容性

    • TFTP简单文件传送协议:客户服务器模式,使用UDP数据报,只支持文件传输,不支持交互,TFTP代码占内存小

    • SMTP简单邮件传送协议:Client/Server模式,面向连接

      基本功能:写信、传送、报告传送情况、显示信件、接收方处理信件

    • TELNET远程登录协议:客户服务器模式,能适应许多计算机和操作系统的差异,网络虚拟终端NVT的意义

    • SNMP简单网络管理协议:SNMP模型的4个组件:被管理结点、管理站、管理信息、管理协议

      SNMP代理:运行SNMP管理进程的被管理结点

      对象:描述设备的变量

      管理信息库(MIB):保存所有对象的数据结构

    • DHCP动态主机配置协议:发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名 Options –可选参数字段,参考定义选择列表中的选择文件

    3、OSI七层模型

    在这里插入图片描述

    数据在网络中传输的过程:
    发送方通过各种封装处理,把数据转换成比特流的形式,比特流在信号传输的硬件媒介中传输,接收方再把比特流进行解封装处理。


    在这里插入图片描述

    展开全文
  • 互联网协议 — New IP 网络架构

    千次阅读 2020-05-01 22:22:02
    目录 文章目录目录TCP/IP 协议族 ...《互联网协议 — ARP 地址解析协议》 《互联网协议 — VRRP 虚拟路由器冗余协议》 《互联网协议 — HTTP 超文本传输协议》 《互联网协议 — DNS 域名系统》 ...
  • 什么是IP地址、IP协议

    万次阅读 多人点赞 2019-06-20 13:28:19
    互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IP Address),是分配给用户上网使用的网际协议(英语:Internet Protocol, IP)的设备的数字标签。 网络互联 网络...
  • 常用互联网协议之HTTP协议

    千次阅读 2019-03-25 17:45:43
    HTTP(超文本传输协议协议是一个标准,定义了web客户端如何与web服务端对话,以及服务端如何把数据传回客户端。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 一、重要概念 1....
  • 【网络协议】互联网协议入门(一)

    千次阅读 热门讨论 2013-12-15 20:33:59
    我们每天使用互联网,你是否想过,它是如何实现的?...互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网
  • 互联网协议以及网络分层

    千次阅读 2014-07-18 12:55:32
    一直以来对于互联网的各种分层以及协议不太明白,读书的时候没有好好学啊,看到一篇henhao
  • 互联网协议入门(一)

    千次阅读 2015-11-24 17:19:59
    前言 ...互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。 正文 一、概述
  • 网络通信协议(互联网协议)

    千次阅读 2019-08-19 15:00:13
    一、操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件...2.1 互联网的本质就是一系列的网络协议 一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用 像...
  • 目录 文章目录 目录 VLAN 的 “隔离” 工作原理 802.1q 数据帧头部 划分 VLAN 的方式 VLAN 的 “隔离” 工作原理 VLAN 技术通过...VLAN Tag 会插入到源 MAC 地址后面, IEEE 802.1Q 标准有这个格式定义和字段构成说明。
  • 网络基础知识(IP地址、端口、UDP协议、TCP协议)

    千次阅读 热门讨论 2021-05-20 22:06:03
    1、ip地址的概念:ip地址是指互联网协议地址,ip地址是ip协议提供的一种统一的地址格式,在网络中唯一标识一台主机。 2、ip地址的分类:ipv4和ipv6两类地址 3、ipv4与ipv6的区别: 端口 1、端口的本质:无符号16位...
  • 互联网打印协议

    千次阅读 2007-07-26 14:45:00
    下载本部分内容包括:• 互联网打印协议• LDAP:目录服务• 远程访问协议• 防火墙• IP安全第15章互联网打印协议作者:Tim Parker本章内容包括:• IPP历史• IPP和端用户• 使用H P的I P P实现互联网打印协议...
  • 互联网协议 — HTTP 超文本传输协议

    千次阅读 2017-02-19 16:12:29
    HTTP 协议 HTTP 协议工作原理 HTTP Request 请求行 Request Header HTTP Response 状态行 Response Header BodyHTTP 协议HTTP(Hyper Text Transfer Protocol 超文本传输协议), 用于 www 万维网服务器(Server-Side) ...
  • 互联网协议入门(二)

    千次阅读 2018-04-02 17:21:10
    上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想。 这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的。 七、一个小结 先对前面的内容...
  • (接上文) 七、一个小结 先对前面的内容,做一个小结。...发送这个包,需要知道两个地址:  * 对方的MAC地址  * 对方的IP地址 有了这两个地址,数据包才能准确送到接收者手中。
  • 深入解析互联网协议的原理

    千次阅读 2016-11-18 14:54:24
    我们每天都在使用互联网,更有很多的是依靠互联网来维持公司的正常运作、来维持人们的日常的生活,但你是否想过,互联网的信息传递是如何实现的呢?...互联网的核心是一系列协议,总称为"互联网协议
  • 互联网协议入门(网络分层)

    千次阅读 多人点赞 2018-05-29 16:52:39
    作者:阮一峰我们每天使用互联网,你是否想过,它是如何实现的?...互联网协议"(Internet ProtocolSuite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理...
  • 我们每天使用互联网,你是否想过,它是如何实现的?...互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网
  • IPv6 与 Segment Routing (分段路由,简称 SR)技术的结合,依靠 IPv6 地址的灵活性,通过 IPv6 报文头扩展支持隧道功能,从而取消了 MPLS 转发承载技术,将普通的 IP 转发和隧道转发统一,能够大幅减少网络协议,...
  • 一、互联网安全协议概述1.1 互联网协议体系TCP/IP协议的体系结构IP数据报格式及TCP/UDP报文段格式 Web技术构成:HTTP协议、HTML标记语言。 TCP/IP协议栈中安全机制的相对位置:网络层、运输层和应用层。1.2 互联网...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,114
精华内容 65,645
关键字:

互联网协议地址