计算机网络

2018/02/06 ComputerNetwork 共 6457 字,约 19 分钟

计算机网络

参考

计算机网络体系结构

img

1. 五层协议

  • 应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
    • 应用层旨在更方便应用从网络中接收的数据,重点关注TCP/IP协议中的HTTP协议
  • 传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
    • 传输层解决了传输质量的问题。
  • 网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
    • 网络层负责将数据传输到目标地址。目标地址可以使多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择。主要由 IP、ICMP 两个协议组成
  • 数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
    • 数据链路层定义了如何格式化数据进行传输,以及如何控制对物理介质的访问。通常提供错误检测和纠正,以确保数据传输的准确性。
    • 本层将比特数据组成帧,交换机工作在这层,对帧解码,并根据帧中包含的信息把数据发送到正确的接收方。数据链路层会将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收)
  • 物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
    • 主要作用是传输比特流(0101二进制数据),将比特流转化为电流强弱传输,到达目的后再转化为比特流,即常说的数模转化和模数转换。模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。
    • 网卡工作在这层。

2. OSI 7 层

新增的其中表示层和会话层用途如下:

  • 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
    • 解决不同系统之间通信语法问题,在表示层数据将按照网络能理解的方案进行格式化,格式化因所使用网络的不同而不同。
  • 会话层 :建立及管理会话。会话层作用是负责建立和断开通信连接,何时建立,断开连接以及保持多久的连接。

五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。

3. TCP/IP 4层

它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。

TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。

img

4. 数据在各层之间的传递过程

在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。

路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。

网络协议

各层网络对应的网络协议

链路层

基本问题

  1. 封装成帧:在网络层传下来的分组前后添加首部和尾部,以标记帧的开始和结束。

  2. 透明传输:防止数据部分出现和首部尾部相同的内容而误判帧界限,采用转义字符处理。

  3. 差错检测:常用循环冗余检验(CRC)来检查比特差错。

信道分类

  1. 广播信道:一对多通信,需要控制方法避免冲突(如信道复用技术、CSMA/CD 协议)。
  2. 点对点信道:一对一通信,使用PPP 协议进行控制。

信道复用技术

  1. 频分复用(FDM):不同主机使用不同频率带宽,同时通信。
  2. 时分复用(TDM):不同主机使用相同频率带宽,但在不同时间段通信。

CSMA/CD 协议

  • 载波监听多点接入/碰撞检测
    • 多点接入:总线型网络,多个主机共享信道。
    • 载波监听:发送前先监听信道是否空闲。
    • 碰撞检测:发送中如果检测到碰撞,则停止发送,采用截断二进制指数退避算法进行重传。

MAC 地址

  • 链路层地址,长度 48 位(6 字节),唯一标识网络适配器。
  • 每个网卡有一个 MAC 地址,设备若有多个网卡(如无线 + 有线),则有多个 MAC 地址。

局域网

  • 以太网、令牌环网、FDDI、ATM 等有线局域网技术,以太网为主流。
  • 局域网分类:
    • 总线型(早期)
    • 星型(主流,以太网)
    • 环型
    • 网状型

交换机

  • 自学习能力:记录 MAC 地址与端口的映射关系。
  • 具有存储转发功能,减少冲突,提高效率。

虚拟局域网(VLAN)

  • 通过逻辑划分局域网,不受物理位置限制,避免不必要的广播流量。
  • IEEE 802.1Q 标准,通过 4 字节 VLAN 标签 标识 VLAN 成员。

网络层

因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。

使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网际控制报文协议 ICMP(Internet Control Message Protocol)
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

IP

IP 协议有哪些作用?

①、寻址:每个连接到网络的设备都有一个唯一的 IP 地址。IP 协议使用这些地址来标识数据包的源地址和目的地址,确保数据包能够准确地传输到目标设备。

②、路由:IP 协议负责决定数据包在网络传输中的路径。比如说路由器使用路由表和 IP 地址信息来确定数据包的最佳传输路径。

③、分片和重组:当数据包过大无法在某个网络上传输时,IP 协议会将数据包分成更小的片段进行传输。接收端会根据头部信息将这些片段重新组装成完整的数据包。

IP 数据报格式

  • 版本 : 有 4(IPv4)和 6(IPv6)两个值
  • 首部长度 : 占 4 位,因此最大值为 15,最小值为 5(20 字节)
  • 区分服务 : 用来获得更好的服务,一般情况下不使用
  • 总长度 : 包括首部长度和数据部分长度
  • 生存时间 : TTL,防止数据报在网络中无限循环,值为 0 时丢弃
  • 协议 : 指定数据报的上层协议,如 ICMP、TCP、UDP 等
  • 首部检验和 : 检验数据报是否损坏,仅计算首部部分
  • 标识 : 用于分片,相同数据报的分片具有相同的标识符
  • 片偏移 : 标识分片的位置,单位为 8 字节

IP 地址编址方式

IP 地址的编址方式经历了三个阶段:

  • 分类
    • IP 地址 ::= {< 网络号 >, < 主机号 >}
    • A类,B类, C, D
  • 子网划分
    • IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
    • 要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0
  • 无分类
    • 无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
    • IP 地址 ::= {< 网络前缀号 >, < 主机号 >}

地址解析协议 ARP

ARP 负责从 IP 地址解析 MAC 地址。

  • 每个主机维护一个 ARP 缓存,存储 IP-MAC 映射表

  • 若缓存无目标 IP 地址,则通过广播发送 ARP 请求

  • 目标主机收到请求后,回复 ARP 响应并更新缓存

网络地址转换 NAT NAT 允许专用网内的主机通过公共 IP 访问互联网。 - 传统 NAT:一对一映射,限制同时在线的主机数量 - NAPT(端口映射):多个内部主机共用一个公共 IP,通过端口号区分

DNS

DNS通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

通俗的讲,我们更习惯于记住一个网站的名字,www.baidu.com,而不是记住它的ip地址,比如:167.23.10.2

A记录

定义www.example.com的ip地址
www.example.com.     IN     A     139.18.28.5;

上面的就是一条 DNS 记录,纯文本即可。

www.example.com 是要解析的域名。

A 是记录的类型,A 记录代表着这是一条用于解析 IPv4 地址的记录。

从这条记录可知,www.example.com的 IP 地址是 139.18.28.5。

CNAME

CNAME用于定义域名的别名,如下面这条 DNS 记录:

定义www.example.com的别名
a.example.com.          IN     CNAME   b.example.com.

这条 DNS 记录定义了 a.example.com 是 b.example.com 的别名。

用户在浏览器中输入 a.example.com 时候,通过 DNS 查询会知道 a.example.com 是 b.example.com 的别名,因此需要实际 IP 的时候,会去拿 b.example.com 的 A 记录。

当你想把一个网站迁移到新域名,旧域名仍然保留的时候;还有当你想将自己的静态资源放到 CDN 上的时候,CNAME 就非常有用。

AAAA 记录

A 记录是域名和 IPv4 地址的映射关系。和 A 记录类似,AAAA 记录则是域名和 IPv6 地址的映射关系。

MX记录

MX 记录是邮件记录,用来描述邮件服务器的域名。

在工作中,我们经常会发邮件到某个同事的邮箱。

比如说,发送一封邮件到 xiaoming@xiaoflyfish.com,那么如何知道哪个 IP 地址是邮件服务器呢?

这个时候就可以用到下面这条 MX 记录:

IN MX mail.xiaoflyfish.com

mail.xiaoflyfish.com 的 IP 地址可以通过查询 mail.xiaoflyfishcom 的 A 记录和 AAAA 记录获得。

NS 记录

NS记录是描述 DNS 服务器网址。从 DNS 的存储结构上说,Name Server 中含有权威 DNS 服务的目录。

也就是说,NS 记录指定哪台 Server 是回答 DNS 查询的权威域名服务器。

当一个 DNS 查询看到 NS 记录的时候,会再去 NS 记录配置的 DNS 服务器查询,得到最终的记录。如下面这个例子:

a.com.     IN      NS      ns1.a.com.
a.com.     IN      NS      ns2.a.com.

当解析 a.com 地址时,我们看到 a.com 有两个 NS 记录,所以确定最终 a.com 的记录在 ns1.a.com 和 ns2.a.com 上。

从设计上看,ns1 和 ns2 是网站 a.com 提供的智能 DNS 服务器,可以提供负载均衡、分布式 Sharding 等服务。

比如当一个北京的用户想要访问 a.com 的时候,ns1 看到这是一个北京的 IP 就返回一个离北京最近的机房 IP。

上面代码中 a.com 配置了两个 NS 记录。

通常 NS 不会只有一个,这是为了保证高可用,一个挂了另一个还能继续服务。

通常数字小的 NS 记录优先级更高,也就是 ns1 会优先于 ns2 响应。

配置了上面的 NS 记录后,如果还配置了 a.com 的 A 记录,那么这个 A 记录会被 NS 记录覆盖。

ARP协议

ARP即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。

ARP协议的工作过程

首先,每个主机都会有自己的ARP缓存区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系

当源主机要发送数据时,首先检测ARP列表中是否对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包

当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果存在,则覆盖然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址

源主机收到ARP响应包后,将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据,如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

ICMP

1. Ping

Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

2. Traceroute

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。

Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。

  • 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
  • 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
  • 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
  • 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

网络地址转换 NAT

NAT 允许专用网内的主机通过公共 IP 访问互联网。

  • 传统 NAT:一对一映射,限制同时在线的主机数量
  • NAPT(端口映射):多个内部主机共用一个公共 IP,通过端口号区分

路由器分组转发流程

  • 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
  • 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
  • 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  • 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  • 报告转发分组出错。

img

路由选择协议

互联网分为多个自治系统(AS),每个 AS 运行独立的路由协议。

  • 自治系统内部路由协议:RIP、OSPF
  • 自治系统间路由协议:BGP

内部网关协议 RIP

  • 基于距离向量算法,度量单位为跳数(最大 15)

  • RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。仅和相邻路由器交换路由表

  • 采用 3 分钟超时机制,未收到更新则标记为不可达

  • 缺点:最大跳数 15 限制了网络规模,收敛速度慢

内部网关协议 OSPF

  • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。
  • 采用链路状态算法,使用 Dijkstra 最短路径算法
  • 所有路由器共享一致的网络拓扑结构

外部网关协议 BGP

  • 用于 AS 之间的路由选择

  • 不能保证最优路径,仅寻找较优路径

  • 每个 AS 通过 BGP 发言人交换路由信息

  • BGP 采用 TCP 连接进行通信

QA

IPV4 地址不够如何解决?

  • DHCP:动态主机配置协议,动态分配 IP 地址,只给接入网络的设备分配 IP 地址,因此同一个 MAC 地址的设备,每次接入互联网时,得到的 IP 地址不一定是相同的,该协议使得空闲的 IP 地址可以得到充分利用。
  • CIDR:无类别域间路由。CIDR 消除了传统的 A 类、B 类、C 类地址以及划分子网的概念,因而更加有效地分配 IPv4 的地址空间,但无法从根本上解决地址耗尽的问题。
  • NAT:网络地址转换协议,我们知道属于不同局域网的主机可以使用相同的 IP 地址,从而一定程度上缓解了 IP 资源枯竭的问题,然而主机在局域网中使用的 IP 地址是不能在公网中使用的,当局域网主机想要与公网主机进行通信时,NAT 方法可以将该主机 IP 地址转换为全球 IP 地址。该协议能够有效解决 IP 地址不足的问题。
  • IPv6:作为接替 IPv4 的下一代互联网协议,其可以实现 2 的 128 次方个地址,而这个数量级,即使给地球上每一粒沙子都分配一个 IP 地址也够用,该协议能够从根本上解决 IPv4 地址不够用的问题。

Search

    Table of Contents