OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)

一、网络设备

  • 集线器(HUB)主要功能是对接收到的信号进行整形放大,以扩大网络的传输距离,同时把 所有节点集中在以它为中心的节点上,在物理层上实现局域网的互联,可以实现电气信号的恢复和整形。用 于将多台计算机连接在一起,以集线器当作网络的中心
  • 交换机:同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体那样, 进行无冲突的传输数据。它是基于 MAC 地址识别和完成以太网数据帧转发的网络设备。 它工作于 OSI 参考模型的第二层,即数据链路层
  • 网桥工作在数据链路层,网桥负责分析目的 MAC 地址字段是否在对方网络上,并据 此决定是否将报文转发到对方网络上。相比集线器,其优点是可以起到过滤作用。交换机 (Switch)就是一个多端口网桥
  • 路由器(Router)又称网关,是用于连接逻辑上分开的多个网络,可以隔离网络之间的广播数 据,是网络层设备,一般用于将两个或多个不同网络连接在一起。例如, 将局域网接入到互联网就需要用到路由器。所有访问互联网的流量均经过路由器,这样可 以屏蔽底层协议的不同,例如宽带接入常用ADSL协议,但家庭内部为以太网传输
  • 防火墙(Firewall)是在两个或多个网络之间用于设置安全策略的一个或多个系统的组 合。防火墙起到隔离异常访问的作用,仅允许授权的数据通过,从而保护了网络信息不受 非授权用户的存取
设备名称 工作协议层次 优 势 劣 势
集线器 物理层 工作在物理层,性价比高,接入设备可以收到 网络上所有报文。现在常用它来调试网络 在接入很多设备时,网 络性能会直线下降
交换机 数据链路层 隔离冲突域,每个端口都能达到标称的传输 速率,接入后一般不用配置 未隔离广播域
路由器 网络层 隔离广播域和冲突域,用于两个网络互联 一般价格较高,接口较 少,且需要手动配置
防火墙 大多为网络层及 网络层以上 可以按需隔离两个或多个网络之间的流量 一般配置较复杂

二、TCP/IP模型

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第1张图片

  • 数据链路层:接收和发送物理层数据
  • 网络层:处理数据网络分组及 IP 寻址等,包括 IP 协议、ICMP 协议和 IGMP 协议等
  • 传输层:主要为两台主机的应用程序之间提供端到端通信。主要有两个不同用途的传输 协议,TCP-传输控制协议,UDP-用户数据报协议。传输控制协议为主机提供可靠的端到 端传输,包括将数据分块交给网络层,并且确认收到分组,以及处理超时机制等,应用层 不再用特别处理这种确认机制。用户数据报协议则不用建立网络连接,直接将分组数据传 输到另一端,并没有确认机制,数据传输的可靠性由上层来保证
  • 应用层:处理上层的用户逻辑细节

三、数据链路层

以太网 

  • 以太网是最流行的局域网传输标准,是由施乐公司发明,并由施乐、英特尔和 DEC 公司组成的联盟发展形成的开放标准
  • 以太网是总线型结构,物理结构采用星状布线
  • 以太网是一种共享传输介质的广播传输技术,就是说网络上所有的设备均能检测到在网络上所有传输的帧。想在网络上传输数据的节点首先监听网络介质是否有数据传输,在检测到线路空闲时,节点开始传输数据并同时监听,确保不会和其他设备传输数据冲突。如果两个节点同时传输数据,监测到冲突后,想要传输数据的节点需要等待一个随机的时间周期 才能再次进行传输,这样就减少了再次发生冲突的可能性

MAC 寻址

  • 为了在以太网上传输报文,必须有一个寻址系统,也就是对计算机和网络接口命名的 方法。每一个计算机的网卡本身均有一个唯一标识,每一个网络接口都有一个物理地址, 这个地址就是 MAC 地址,这个地址也称为网卡物理地址。MAC 地址长度为 6 个字节,表 示为 12 个十六进制的数字。前 6 个数字为组织唯一标识符(OUI),是由 IEEE 组织分配的 3 个字节数字。剩下的 6 个数字由组织内部编号,企业组织内部需要保证任意两个网卡的 MAC 编号不能重复。在实际书写中,常用冒号来分隔每一个字节,Mac 地址例如: 08:00:27:26:c5:5d
  • 以太网是一种广播传输技术,网络上的所有节点均能检测到网络介质上传输的帧,但 一般只有自身 MAC 地址和帧目的 MAC 地址相同才会将内容复制到自己的缓冲区,交给 IP 层进一步检查 IP 信息。当网卡工作在混杂模式下时,会将所有侦听到的内容交给上层 软件处理,例如TcpDump抓包软件
  • 并不是所有的 MAC 地址网卡均能使用,有一些特殊的 MAC 地址,例如 FF:FF:FF:FF: FF:FF 是以太网广播地址。还有一段地址 01:00:5E:00:00:00-01:00:5E:7F:FF:FF 用于以太网组 播(在组播部分有详细描述)

冲突和冲突域

  • 当两个网络节点同时传输数据时就会发生冲突。以太网采用载波侦听及冲突检测回退 处理算法来处理冲突,冲突会导致网络传输效率降低,每次发生冲突,所有的传输都要停 止一段时间
  • 以太网的核心思想是使用共享的公共传输介质。它是一种广播性网络,任何节点帧的 发送和接收过程都使用载波监听多路访问/冲突检测(CSMA/CD)技术,来分配共享信道 的使用。在采用 CSMA/CD 技术的局域网中,帧的发送和接收过程如下:
    • ①计算机节点在准备传输数据时,首先要对信道进行监听
    • ②如果信道是空闲时则发送数据,否则继续监听直到信道空闲
    • ③发送数据帧的同时,还要继续监听信道,如果发生冲突,发送信息的节点就会停 止发送,同时发送端需要向通信信道发送阻塞信号,以通知其他节点已发生冲突。当若干节点同时检测到信道空闲并发送数据时,数据传输就会遭到破坏,即发生冲突。冲突检测 的过程为发送节点发送数据的同时,将其发送信号与总线上接收到的信号进行比较,如果 不一致,则有冲突发生
    • ④冲突发生后,随机延迟一段时间再重发,称为冲突退避。如果冲突经常发生则会 导致网络性能的快速下降
  • 第一层设备(HUB)不会隔离冲突域。二层及以上设备隔离冲突域。因此二层以上设备 将大大提高数据传输性能

广播域

  • 广播是发送到网络中所有节点的数据分组,广播以广播地址来识别,链路层广播地址 为 FF:FF:FF:FF:FF:FF。在广播时网络中的所有节点均收到该广播报文并做进一步处理。广 播域是指能收到广播报文的设备节点集合
  • 第一层设备(集线器)总是转发报文,不对数据进行过滤,将收到的所有信息转发到 另一分段。数据帧只是简单的重新生成和重新定时,因此不隔离广播域
  • 第二层设备(网桥和交换机)根据 MAC 地址转发数据帧,因此将网络划分为多个冲 突域。如果目标 MAC 地址不在本冲突域内,将转发数据帧。因此也不隔离广播域
  • 第三层设备(路由器)不会转发广播报文。路由器为广播域的边界

ARP 协议

  • ARP(Address Resolution Protocol)协议用于根据主机的 IP 地址来查询其网卡 MAC 地址。在以太网中,真正寻址的是 MAC 地址,但是在主机传输报文时所知道对端的地址 是 IP 地址。如何通过目标 IP 地址知道对方的 MAC 地址,这就是 ARP 协议的目标。ARP 协议通过向局域网中的所有主机发送广播来查询目标 IP 的 MAC 地址。当目标主机收到查 询请求后和本机 IP 地址比较,如果一致就通过单播响应查询请求,将自己的 MAC 和 IP 对应关系发送给请求源主机
  • 通常操作系统均有一个 arp 命令可以查询当前所保存的 ARP 缓存
  • 下图所示的是一个 ARP 查询请求。主机 A(10.0.2.15)向网络上发起广播查询请求, 询问目标 IP 为 10.0.2.2 的 MAC 地址。由于还不知道目标 MAC 地址,因此目标硬件地址为广播地址 FF:FF:FF:FF:FF:FF。当主机 B 收到 ARP 查询报文后,和自己 IP 地址进行比较 发现地址相同,则向主机 A 回送一个单播的 ARP 响应。主机 A 收到后就会更新自己的 ARP 缓存表。以后再次使用时将在缓存中查询。ARP 缓存表采用了老化机制,在一段时间内如 果缓存表中的某一个 MAC 没有使用,就会被删除,这样可以大大减少 ARP 缓存表的长度, 加快查询速度。

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第2张图片

四、网络层之IP协议

  • 网络层协议主要包含IP协议、ICMP协议和IGMP协议。(ICMP协议在下面介绍,IGMP协议在后面的文章中介绍)
  • IP 协议是不可靠的、无连接的网络协议。不可靠是指它 不提供端对端或者逐跳的确认机制,不保证数据包成功传输到对端,其可靠性由上层协议 来保证。中间路由器如果检测到错误会丢弃报文,然后发送 ICMP 消息给源发起者。无连 接是指 IP 报文不保存后续报文信息

IP报文格式

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第3张图片

  • 版本号占4个比特,用于表示报文的版本号,IPv4 类型报文的版本号为 4
  • IP头长度占4个比特,用于表示 IP 消息头的 4 字节倍数长度,最小为 5,即 5×4 字 节,IP 消息头最小为 20 字节
  • 服务类型占8个比特,服务类型提供了服务质量的抽象参数,这些参数用于指导当经 过一个数据网络时的实际服务质量参数选择,现在大多数路由器未做实现
  • 报文总长度字段占 16 个比特(是包含报文包头和数据的整个报文的字节长度),允许 最大报文长度是 65535 字节(这么大的报文长度在网络上是不可能存在的)。所有主机必 须能接收至少为 576 字节大小的报文。这个尺寸可以承载 512 字节的数据加上 64 字节的包 头。假定目的主机可以接收大报文,那就推荐主机仅发送大于 576 字节的报文,大报文可 以提高网络数据传输带宽
  • 标识符占16个比特,发送者用于标识报文,可用于报文分片和组装
  • Flag占 3 个比特,用于分片控制
  • 分片偏移量占 13 个比特,用于表示报文所属的分片
  • 报文生存时间(Time to Live,TTL)占 8 个比特,这个字段指示报文在网络系统中的最大生存时间。每经过一个路由器,这个值减少处理时间的秒值。如果处理时间小于1, 则至少减1,如果这个字段值减少到零,则报文直接丢弃。TTL是报文的最大生存周期, 目的是将无法找到目的地的报文丢弃,约束报文的最大生命周期。因为现代路由器的处理 速度非常快,这个字段的含义已经演化为经过路由器的跳数
    • 生存时间是数据包生存时间的上限。它由数据包的发送者设定,在网络上每个点,当 数据包被处理的时候,逐渐递减。如果生存时间在数据包到达目的地址前达到 0 值,数据 包就被销毁。生存时间可以看作一个自我销毁时间限制。生存时间由发送者设置成允许数 据包在网络系统上存活的最大时间。如果数据包在因特网系统上的时间长于生存时间,则 数据包必须被销毁
    • 在 Internet 头部被处理的每个节点,该头部必须减小,以反映花在处理数据包上的时 间。即使无法获得实际花费时间的本地信息,该头部也必须减 1。时间以秒为单位衡量(比 如,值 1 表示 1 秒)。因此最大生存时间是 255 秒或者 4.25 分钟。由于处理数据包的每个 模块至少对 TTL 减 1,即使 它在小于 1 秒内处理完数据报,因此 TTL 只能被当作数据报可 以存在的时间上限
  • 协议号占 8 个比特,指示 IP 协议承载的内容类型,有各种各样的协议内容。例如, TCP 为 0x06,UDP 为 0x11,ICMP 为 0x01,等等
  • 包头校验和占 16 个比特,包头域中的值发生改变,例如 TTL,这个值在处理过程中 将重新计算和验证。校验和是 16 比特数据,是所有报文头的 16 比特之和,计算时,校 验和为 0。校验和用于检查报文传输是否正确,如果错误则直接丢弃,并不会发送 ICMP 差错消息,因为报头校验和只能检测出 IP 数据报的头部出现了错误,但并不知道头部的 源 IP 地址字段是否正确,如果源地址出现了错误,那么传输 ICMP 差错报告将没有任何 意义
    • 校验和提供了处理 IP 数据报使用到的信息被正确传输的确认,数据可能包含错误。 如果校验和验证失败了,IP 数据报就被检测到错误的实体立即丢弃
    • 如果 IP 头部改变,IP 头部校验和要重新计算。比如,生存时间的减少,IP 选项的增 加或者变化,或者由于分片。在 IP 级别的这个校验和用来防止 IP 头部的传输错误

下面是一个实 际报文示例

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第4张图片

IP地址分类

  • IP地址长度为32位,以4字节数字来表示。互联网的IP地址分为5类

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第5张图片

  • 第 1 类是A类地址,最高位必须是 0,然后是 7 比特的网络编号和 24 比特的本地地 址(主机号)。因为最高位为 0,所以总共有 128(2^{7})个 A 类网络地址
  • 第 2 类是B类地址,最高的两位是 10,紧接着是 14 比特的网络编号和 16 比特的本地 地址。这样就有 16384(2^{14})个 B 类网络地址
  • 第3类是C类地址,最高位为 110,有 21 位的网络编号和 8 位的本地地址,这样就有 2097152(2^{21})个 C 类网络地址。
  • 第4类是D类地址,是用于组播的 IP 地址,最高的 4 位是 1110,不再区分网络编号 和本地地址,这类地址不能用于设置物理接口地址
  • 第5类是E类,是保留地址,未做规定,因此一般不使用该类地址
  • A、B、C 类IP是单播地址,报文转发一般是基于目的IP地址。D 类(组播地址)报文转发是基于源地址和目标地址组合

特殊 IP 地址块

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第6张图片

  • 有一些地址用于固定的用途,其中私有地址(Private address)是保留地址,属于非注册地址,专门为组织机构内部使用
  • 另外,路由器不能路由源地址为 0 和 127 开头的报文,也不应该路由目的地址为 0 和 127 开头的报文
  • “127.0.0.0/8”表示本地回环地址。真实的网卡IP地址中不能以十进制“127”作为开 头,该类地址中数字 127.0.0.1 到 127.255.255.255 用于回路测试。一般采用 127.0.0.1 代表本 机 IP 地址,用浏览器访问“http://127.0.0.1”就可以测试本机中配置的 Web 服务器
  • 网络ID的第一个 8 位组也不能全置为“0”,全“0”表示本地网络
  • 每一个字节都为 0 的地址“0.0.0.0”对应于当前主机
  • IP地址中的每一个字节都为 1 的 IP 地址“255.255. 255.255”是当前子网的广播地址
  • IP 地址中凡是以“1111”开头的 E 类 IP 地址都保留用 于将来和实验使用

寻址和分片

IP协议实现了两个基本功能:寻址和分片

  • 寻址是指IP模块在报头中带有地址来传 输 IP 报文到目的地址。传输路径的选择称为路由,这些在路由部分来阐述
  • 分片是指当这些大报文在通过小报文传输网络时,会将大报文分片传输

服务类型、生存时间、选项和校验和

IP 协议使用4个主要机制来提供服务:服务类型、生存时间、选项和校验和

  • 服务类型用来指示要求的服务质量。服务类型是一个抽象的整套参数,这些参数指定 了组成因特网的网络中提供的服务选择。这个服务指示类型在选路的时候被路由器用来为 某一个特定的网络、下一个网络或者下一个网关选择真实的传输参数。服务类型用于 IP 服务质量选择。服务类型通过一组参数(优先级、延迟、吞吐和可靠性)来指定。这组参 数被映射成数据报传输中的特定网络的真实服务参数。在大多数网络中服务类型并没有特 别的使用
  • 生存时间是数据报可以生存的时间上限。它由发送者设置,由经过路由的地方处理。 如果报文生存时间为零,则丢弃此数据报
  • 选项提供了在某些情况下需要或有用的控制功能,但是大多数情况下是不必要的。选 项包括时间戳、安全和特殊选路等
  • 报头校验和用于保证数据的正确传输。如果校验出错,则抛弃整个数据报。IP 协议并 没有提供可靠传输机制,没有端对端或者逐跳(hop-by-hop)的确认机制。没有数据的错 误控制,只有一个头部校验和,没有重传,没有流控。检测到的错误可以通过 IP 控制消 息协议(ICMP)来报告,该协议在 IP 协议模块中必须实现

五、网络层之ICMP协议

  • 网络层协议主要包含IP协议、ICMP协议和IGMP协议。(IP协议在上面介绍,IGMP协议在后面的文章中介绍)
  • ICMP 协议使用 IP 协议进行传输报文,是一种面向无连接的协议,用于报告传输出错 及控制信息。它对于网络传输具有极其重要的意义,因此每一个网络层模块必须实现该协议
  • ICMP 提供一致标准的出错报告信息。发送的出错报文返回到原始发送数据的设备, 发送设备及进程随后可根据 ICMP 报文确定发生错误的类型,并确定如何才能更好地处理 失败的数据包,例如减缓发送、重新发送或者停止发送。ICMP 唯一的功能是报告问题, 纠正错误的功能由发送方根据实际情况判断处理
  • 我们在网络管理中经常会使用到 ICMP 协议,比如我们经常使用 ping 命令,这个 “ping”的过程实际上就是发送 ICMP 查询报文,并根据接收报文判断网络是否可达的过程。 还有“traceroute”命令也是基于 ICMP 协议的,用来探测网络报文的经过路径

ICMP概述

  • 在 Internet 系统中,IP 协议被用作主机到主机的数据报服务。网络连接设备称为路由 器。这些路由器通过网关到网关协议或动态路由协议相互交换用于控制的信息。在数据报 传输过程中,可能会遇到一些传输问题,为了报告在数据报传输过程中遇到的错误,网关 或目的主机使用 ICMP 协议来和源主机通信。它使用 IP 协议作为底层支持,好像它是一 个高层协议,但实际上它是网络层的一部分,任何网络层模块的实现必须实现 ICMP 协议
  • ICMP 消息在以下几种情况下发送:当数据报不能到达目的地时;当网关已经没有缓 存去转发;当网关能够引导主机在更短路由上发送
  • IP 并非设计为绝对可靠,这些控制消息的目的是当网络出现问题的时候能提供反馈信 息,而不是使 IP 协议变得绝对可靠。而且并不保证数据报或控制信息能够返回。一些数据报仍将在没有任何报告的情况下丢失。如果需要高可靠性,使用 IP 的高层协议必须实 现自己的高可靠性控制处理
  • ICMP 信息通常报告在处理数据报过程中的错误。若要避免信息无限制地返回,对于 ICMP 消息不会再有 ICMP 消息发送,而且 ICMP 信息只在处理数据报偏移量为 0 时发送, 即数据报的第一个分片报文错误时发送

报文格式

  • ICMP 消息使用最基本的 IP 报文头。在 IP 报文头指明协议为 ICMP(0x01),数据位置 的第一个 8 位是 ICMP 类型域,这个值决定了其后内容的格式。任何标记“未使用”的域 用于以后的扩展,现在必须设置为零,但接收时并不使用(除了计算校验和)。除非明确 的单独说明格式,ICMP 报文格式如下

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第7张图片

  • 类型:一个8位类型字段,表示ICMP数据包类型,现在支持的类型共10种
  • 代码:一个8位代码域,表示指定类型中的一个功能,如果一个类型中只有一种功能,代码域置为0
  • 校验和:数据包中 ICMP 部分的一个 16 比特检验和,从 ICMP 消息的 ICMP 类型 开始的 16 位数据的反码之和计算得出。在计算校验码时,校验和设置为零。这些零在发 送时会被计算出的校验和取代

报文分类

  • ICMP 报文大致可分为3类:差错报文、请求报文和响应报文
类型 含义 请求报文 响应报文 差错报文
0 echo 响应消息   *  
3 目的不可达报文     *
4 源抑制消息     *
5 重定向消息     *
8 echo 请求消息 *    
11 超时消息     *
12 参数问题消息     *
13 时间戳请求消息 *    
14 时间戳响应消息   *  
15 信息请求消息 *    
16 信息响应消息   *  

差错报文

  • 网络出现异常情况时,就需要发送一份差错报文,该报文始终包含源报文的 IP 首部 和产生 ICMP 差错报文的 IP 数据报的前 8 个字节。这样接收 ICMP 差错报文的主机就会把 它与某个特定的协议(根据 IP 数据报首部中的协议字段来判断)和用户进程(根据包含 在 IP 数据报前 8 个字节中的 TCP 或 UDP 报文首部中的 TCP 或 UDP 端口号来判断)联 系起来
  • 以下各种情况即使出错也不会导致产生 ICMP 差错报文:
    • ①ICMP 差错报文
    • ②目的地址是广播地址或组播地址
    • ③作为链路层广播的数据报
    • ④不是 IP 分片的第一片
    • ⑤源地址不是单个主机的数据报文,也就是说源地址不是零地址、环回地址、广播 地址、组播地址或 E 类地址
  • 以下针对 ICMP 差错报文的类型进行分析:
    • ①ICMP 目的不可达消息。如果路由器因为没有去往目的地址路由而不能转发报文,则路由器必须产生目的不可达消息,是代码域为零(网络不可达)的 ICMP 消息。 如果报文需要转发到的主机,已经转发到最后一跳路由器(主机直连的网络),路由器判 断不能到达目的主机,则路由器必须产生代码域为 1 的目的不可达 ICMP 消息(主机不 可达)
    • ②ICMP 重定向消息。网关 G1 从所连接的网络的一个主机上收到 IP 报文。网关 检查路由表获知下一个路由器 G2 的地址和目的地址网络 X。如果 G2 和源主机在同一个网 络上,那重定向报文将发给主机。重定向消息告知主机发往目的网络 X 直接发往 G2 是最 短路径
    • ③ICMP 超时消息。IP 数据包中有一个字段生存时间(Time to live,TTL),生存时 间值在每一个机器处理报文时都会减少,直到减到 0 时该 IP 数据包被丢弃。此时,路由 器将发送一个 ICMP 超时消息给源主机
    • ④源抑制消息。当主机经过路由器发送数据到另一主机时,如果速度达到路由器或 者链路的饱和状态,路由器发出一个 ICMP 源抑制消息。路由器不应该产生源抑制消息, 因为实践表明对减少网络带宽没有价值
    • ⑤参数问题。如果网关或主机处理报文时发现一个消息头参数问题,在它不能完成 处理这个报文时,必须丢弃这个报文。例如,不正确的选项。网关或主机通过参数错误消 息通知源主机。这个消息仅用于如果错误引起报文丢弃的情况

查询报文、响应报文

  • ICMP ECHO 消息。用于进行通信的主机或路由器之间,判断发送数据包是否成功 到达对端的消息。可以向对端主机发送 ECHO 请求消息,接收对端主机回来的 ECHO 应 答消息
  • ICMP 地址掩码消息。主要用于主机或路由器想要了解该网络中主机数量的情况。 可以向那些主机或路由器发送 ICMP 地址掩码请求消息,然后通过接收 ICMP 地址掩码应 答消息获取子网掩码信息
  • ICMP 时间戳消息。可以向主机或路由器发送 ICMP 时间戳请求消息。接收到的数 据(时间戳)的消息在回复时再带上另外一个时间戳返回。时间戳是自午夜 UT 时间的 32 位毫秒值。现在已经很少使用

ping

  • ping 是利用 ICMP ECHO 请求消息,产生一个 ECHO 响应消息。ping 使用 ICMP 报头,并使用填充字节填满报文。当源主机向目标主机发送了 ICMP 回显请求数据包 后,它期待着目标主机的应答。目标主机在收到一个 ICMP 回显请求数据报文后,它 会交换源、目的主机的 IP 地址,然后将收到的 ICMP 回显请求数据报文中的数据部分 原封不动地封装在自己的 ICMP 回显应答数据报文中,然后发回给发送 ICMP 回显请 求的一方。如果校验正确,发送者便认为目标主机的 IP 层服务正常,也即 IP 层连接 畅通
  • 当使用 ping 来诊断和测试网络时,一般通过以下步骤来执行:
    • 首先 ping 本机 IP。判断本地接口是否启动以及工作正常
    • 其次 ping 网关地址。根据响应判断局域网工作是否正常,结束时会有最小/平均/ 最大来回时间统计和报文是否丢失统计
    • 最后 ping 目的主机地址。判断本机和目标主机之间的路由是否正确以及目的主机 是否工作正常

TraceRoute

  • TraceRoute 程序用于侦测源主机和目的主机之间所经过的路由情况,可以跟踪路由数 据包在 IP 网络上传输到一个指定主机的路径,参数含义如表 7-4 所示。它利用 IP 协议的 生存时间(TTL)字段来试图引发网关 ICMP 超时响应。在每个网关的路径上发送 ICMP 超时响应到源主机上。源主机发送的报文 TTL 从 1 开始逐渐增加,直到收到 ICMP 回显请 求响应消息或达到最大跳数值为止。这意味着已经到达主机或者超过 30 跳了。默认每一 个相同的 TTL 会发 3 个探测报文,如果路径不同会都输出。如果在 5 秒钟没有响应则会以 星号(*)显示
  • 唯一必须的参数是目的主机 IP 地址。可选参数有探测包长度,默认为 60 字节。测试 中发现很多路由器对于 UDP 数据如果是 TTL 原因数据丢包不会发 ICMP 超时差错消息, 而对 ICMP 请求会返回 ICMP 超时响应。因此在使用时,建议使用-I 参数来指明使用 ICMP 协议来发起请求
  • 在 Windows 下可以使用 tracert 替代,但不需要指定使用的协议。功能基本相同
  • traceroute命令参数含义如下:
参 数 含 义
-I --icmp 使用 ICMP ECHO 请求来进行 traceroute
T 使用 TCP SYN 请求来 traceroute,使用端口 80
-z 两个探测报文之间的最小等待时间(默认为 0),在 0 和 10 秒之间。如果数字小于 10,单位为秒,如果大于 10,那数字就是以毫秒为单位
-q nqueries 每一跳发送的探测报文数量。默认是 3
-w waittime 设置等待响应消息的时间。默认是 5 秒
-m 设置最大的跳数,默认为 30 跳
-n 不解析 IP 地址为域名

六、传输层协议

  • 互联网的传输协议主要有传输控制协议 TCP 和用户数据报协议 UDP 两种协议。路由 器一般工作在 IP 层,不处理传输层协议,但智能路由器一般带有防火墙功能,需要处理端口号。因此这里简要介绍端口号。

UDP报文

  • UDP 报文非常简单,仅在 IP 报文上增加了 8 字节数据,并且在传输数据之前不需要 首先建立连接,远程主机在接收到数据后也不需要确认,因此网络通信开销比较小。下图所示为 UDP 消息的报文格式

  • 源端口:是发送者进程使用的端口,占有 16 比特,因此合法范围为 1~65535
  • 目的端口:是接收者进程使用的端口,和源端口一样占用 16 比特,一般特权用户使 用 1~1024,非特权用户使用其他端口
  • UDP报文长度:包含 UDP 消息包头和数据的总长度
  • UDP校验和:用于验证传输数据是否正确。这个字段是可选的,如果字段为 0,就不 进行校验

TCP

  • 另外一个传输层协议是传输控制协议(TCP),和 UDP 协议完全相同的部分是使用了源端口号和目的端口号,不同的是提供了可靠的数据传送。传输数据之前需要进行 3 次握手连接,并在传输的中间过程进行确认。这带来了一些便利,例如保证了数据到达目标地址,如果没有到达将立即重传。但这同时也带来了一些创建网络连接的开销。
  • 路由器一般少处理IP层以上的内容,这里不再详述TCP协议,请参考RFC793

七、通信案例

OpenWrt开发:20---网络基础知识(TCP/IP模型、通信案例)_第8张图片

主机A发送报文到主机C的各层协议模块工作过程:

例如在主机A上执行ping  192.168.6.102

  • ①在主机A按照ICMP协议组装ICMP请求报文。在组织ICMP请求完成后,使用IP协议来发送报文
  • ②在IP层发送报文时,首先查看目标地址路由是否可达,如果路由不可达那就退出,并提示“Network is unreachable”等类似的错误。这里的IP地址配置为同一子网,因此路由可达。那就首先查看目标IP的MAC地址是否在本机的缓存上,如果存在,则使用目标MAC将报文直接封装为第二层的帧,再经物理层信号编码发往网络传输介质上
  • ③如果 ARP 缓存中没有目标 IP 地址,那就发送 ARP 广播来请求目标 IP 的 MAC 地 址。目标 MAC 地址填写为广播地址 FF:FF:FF:FF:FF:FF。ARP 数据帧经物理层线路进入交 换机端口,交换机通常会进行源 MAC 地址学习和目的端口查找,如果找不到目标 MAC 所在的网口,则在除报文源端口外的全部端口广播 ARP 查询请求。此时主机 B 和 C 均收 到 ARP 查询请求,主机 B 发现目 IP 地址和本机地址不同,则静悄悄地丢弃,不做进一步处 理。主机 C 收到 ARP 查询请求后判断和本机 IP 地址相同,则 C 响应 ARP 请求,将主机 C 的 IP 地址和 MAC 地址的对应关系以单播形式回送给主机 A。这时交换机可以再次学习到 C 的 MAC 地址与端口对应关系,在下次 ARP 查询和传送数据时就不再对所有端口进行广播
  • ④如果主机 A 收到主机 C 的 MAC 地址的 ARP 查询响应,那就将目的 MAC 填写为 C 的 MAC 地址,源 MAC 填写为自己的 MAC 地址,封装为二层帧数据中交给物理层来发 送。当再次进行主机 A 向主机 C 发送数据,将直接使用缓存中 C 的 MAC 地址进行封装, 不再进行 MAC 地址的 ARP 广播查询
  • ⑤如果此时主机 C 恰好关机,主机 A 没有收到 ARP 响应消息,那就提示用户 “Request timed out”或“Destination Host Unreachable”等信息
  • ⑥当主机 C 收到数据帧之后,首先判断目标 MAC 地址是否和本机匹配,如果不匹 配则静悄悄地丢弃,不做任何处理。如果和本机 MAC 相同则交给 IP 层进行处理。IP 层收 到报文后,首先判断目的 IP 地址是否和本机 IP 相同,如果不同则丢弃报文;如果相同则 交给上层协议处理,这里交给 ICMP 协议模块来处理。这样报文便单向处理完成。响应报 文和请求报文一样,也是同样的发送及处理过程

主机A发送报文到主机E的各层协议模块工作过程:

例如在主机A上执行ping  8.8.8.8

  • ①如果主机 A 路由查询判断到达目标主机必须通过下一跳网关地址。那进行 ARP 查询时,就查询网关地址的 MAC 地址。路由器将响应 ARP 请求,将自己的 MAC 地址和 IP 发送回来
  • ②如果主机 A 在进行路由查询时,发现目标主机直接经过网卡设备可以到达,例如 主机 A 的默认路由配置为接口路由,没有配置默认网关地址。那进行 ARP 查询时,就直 接请求目标 IP 的 MAC 地址。如果路由器 D 有 ARP 代理功能,将会响应 ARP 请求,并将 自己的 MAC 地址和目标 IP 对应起来
  • ③主机 A 收到网关的 ARP 响应报文后,目标 IP 地址不变,将目标 MAC 填写为网 关 MAC 地址,然后将数据帧经过物理网卡发送到链路上
  • ④主机 D 收到报文后,进行 MAC 地址检查,如果目标 MAC 地址和自己的 MAC 地址匹配,则进一步转到 IP 层进行处理。IP 模块判断目标 IP 地址不是本机 IP 地址,如 果主机 D 没有配置为路由器,那就直接丢弃这个报文;如果主机 D 配置为路由器,则将 报文交给 IP 转发模块进行处理。IP 转发模块会将报文 TTL 减一,并再次进行路由查询过 程和 ARP 查询过程,然后将数据报文转发到离目标地址 E 更近的一个路由器上。在中间 转发的过程中,数据报文的目标 IP 地址和源 IP 地址始终不变,源 MAC 地址和目标 MAC 地址在每一跳中均根据其物理连接进行修改

你可能感兴趣的:(OpenWrt开发)