学习笔记|计算机网络

本文以 OSI 七层模型为脉络,系统描述计算机网络协议及其作用、特点。

一、概述

1.概念

计算机网络主要由一些通用的、可编程的硬件互连 而成,通过这些硬件,可以传送不同类型的数据, 并且可以支持广泛和日益增长的应用。

  • 计算机网络不仅是软件概念,还包含硬件设备
  • 计算机网络不仅是信息通信,还可以支持广泛的应用

2.分类

1)作用范围

  • 广域网WAN (Wide Area Network)
  • 城域网MAN (Metro Area Network)
    • Metro:大都市的 adj.
    • 5km~50km
  • 局域网LAN (Local Area Network)
    • 1km之内

2)网络的使用者

  • 公用网络
  • 专用网络
    • 军队、银行、公司…

3.发展历史

1)互联网的发展历史

  • 第一阶段:单个网络ARPANET
    • 美国国防部最初建设
  • 第二阶段:三级结构互联网
  • 第三阶段 ISP(Internet Service Provider):网络服务提供商
    • 主干ISP:中国电信、移动、联通…
    • 地区ISP:北京移动、上海联通…

2)现代国际互联网的主要线路

live.infrapedia.com

3)中国互联网的发展历史

  • 1980,中国铁道部开始互联网实验

  • 1989,第一个公有网络建立运行

  • 1994,接入国际互联网

4)国内五个最大的公共网络

  • 中国电信互联网CHINANET

  • 中国联通互联网UNINET

  • 中国移动互联网CMNET

  • 中国教育与科研计算机网CERNET

  • 中国科学技术网CSTNET

5)互联网公司

  • 1996年,张朝阳创建搜狐
  • 1997年,丁磊创建网易
  • 1998年,王志东创建新浪
  • 1998年,马化腾、张志东创建腾讯
  • 1999年,马云创建阿里巴巴
  • 2000年,李彦宏创建百度

二、层次结构

1.层次结构设计的基本原则

1)为什么要使用层次结构设计

  • 计算机网络要解决的问题
    1. 保证数据通路顺畅
    2. 识别目的计算机
    3. 目的计算机状态
    4. 数据是否错误
  • 目的
    • 分层解决不同的问题

2)层次结构的例子

网络应用数据视频、文件、游戏靠近用户
数据可靠通信数据错误、重复
物理网络接入光电等物理特性靠近底层

3)层次结构设计的基本原则

  • 各层之间是互相独立的
  • 每一层要有足够的灵活性
  • 各层之间完全解耦

2.OSI七层模型

应用层为计算机用户提供接口和服务
表示层数据处理(编码解码、加密解密等)
会话层管理(建立、维护、重连)通信会话
传输层管理端到端的通信链接
网络层数据路由(决定数据在网络的路径)
数据链路层管理相邻节点之间的数据通信
物理层数据通信的光电物理特性

结果:

  • OSI在市场化过程中困难重重,TCP/IP在全球范围成功运行
  • OSI最终并没有成为广为使用的标准模型

原因:

  • OSI的专家缺乏实际经验

  • OSI标准制定周期过长,按OSI标准生产的设备无法及时进入市场

  • OSI模型设计的并不合理,一些功能在多层中重复出现

3.TCP/IP四层模型

应用层应用层HTTP / FTP / SMTP / POP3
表示层
会话层
传输层传输层TCP / UDP
网络层网络层IP / ICMP / ARP / RARP
数据链路层网络接口层Ethernet
物理层

传输方式:

发送方将数据层层封装后发送,接受方层层拆包后读取数据。

协议:

数据包的封装过程

传输单元:

层次协议数据单元(PDU)
应用层应用层数据 data、报文 message
表示层报文 message
会话层报文 message
传输层传输层数据段、报文段 Segment
网络层网络层数据包 Packet,又称分组
数据链路层网络接口层数据帧 Frame
物理层比特流 bit

三、网络拓扑

1.边缘部分

  • 用户所接触部分

2.核心部分

  • 主干部分,国家地区维护

3.现代互联网的网络拓扑

4.树状结构

5.客户-服务器(C/S)模式

6.对等连接(P2P)模式

四、计算机网络的性能指标

bitByteKBMBGBTBPBEB
名称比特位字节千字节兆字节吉字节太字节拍字节艾字节
比例8bit1024B1024KB1024MB1024GB1024TM1024PB
常用设备门电路寄存器高速缓存内存/硬盘硬盘云硬盘数据仓库

PS:字:

  • 有32位字和64位字。
  • 32位字等于4字节。
  • 字是计算机一次处理数据的最大单位

1.速率

  • 100M光纤 = 100Mbps = 100Mbit/s = (100/8)MB/s = 12.5MB/s

2.时延

  • 发送时延
  • 传播时延
  • 排队时延
  • 处理时延

1)发送时延

2)传播时延

3)排队时延

  • 数据包在网络设备中等待被处理的时间

4)处理时延

  • 数据包到达设备或者目的机器被处理所需要的时间

3.往返时间RTT

  • RTT(Route-Trip Time)是评估网络质量的一项重要指标
  • RTT表示的是数据报文在端到端通信中的来回一次的时间
  • 通常使用ping命令查看RTT

五、物理层

数据通信的光电物理特性

1.作用

  • 连接不同的物理设备
    • 主干ISP通过海底电缆连接
    • 路由器到主机通过网线连接
  • 传输比特流

1)连接介质

  • 双绞线(常见的为网线)

  • 同轴电缆

  • 光纤

  • 红外线

  • 无线(手机信号、Wi-Fi信号)

  • 激光

2)比特流

3)物理特性

物理层更多关注的是物理特性

  • 机械特性
  • 电气特性
  • 功能特性
  • 过程特性

2.信道

1)概念

  • 信道是往一个方向传送信息的媒体
  • 一个通信电路包括一个接收信道和一个发送信道

2)信道分类

  • 单工通信信道
    • 只能一个方向通信,没有反方向反馈的信道
    • 有线电视、无线电收音机
  • 半双工通信信道
    • 双方都可以发送和接收信息
    • 不能双方同时发送,也不能同时接收
  • 全双工通信信道
    • 双方都可以同时发送和接收信息

3.分用-复用技术

  • 物理层所解决的问题

    • 多个计算机连接复用器,多个计算机连接分用器。通过复用器和分用器共享一条发送信道和接收信道,提高信道的利用效率
  • 所用到的技术(应用在物理层中)

    • 频分复用
    • 时分复用
    • 波分复用
    • 码分复用

六、数据链路层

管理相邻节点之间的数据通信

1.封装成帧

  • ”帧“ 是数据链路层的基本单位
  • 发送端 在网络层的一段数据前后 添加特定标记形成“帧”
  • 接收端根据前后特定标记识别出“帧”(物理层只传输比特流,不处理帧)
  • 帧首部和尾部是特定的控制字符(特定比特流)

2.透明传输

  • “透明”在计算机领域是非常重要的一个术语。
  • 透明传输指的是,无论上层交付给数据链路层什么数据,数据链路层都好像是看不见这个数据一样将这个数据传输出去。
  • 即使有控制字符在帧数据中,数据链路层也当做不存在的去处理。如何当作不存在呢?看下面的问题和处理。
  • **问题:**识别错误的帧

  • **处理:**对数据中的控制字符进行特殊处理(类似添加转移字符ESC)

3.差错检测

  • 物理层只管传输比特流,无法控制是否出错
  • 数据链路层负责起“差错监测”的工作

1)奇偶校验码

  • 在比特流最后一位,添加奇偶校验码(奇数为1,偶数为0)

  • **局限性:**同时出错两位,奇偶校验码不变

2)循环冗余校验码CRC

  • 一种根据传输或保存的数据而产生固定位数校验码的方法
  • 检测数据传输或者保存后可能出现的错误
  • 生成的数字计算出来并且附加到数据后面

模2除法:

  • 模 “2”除法是二进制下的除法
  • 与算术除法类似,但除法不借位,是“异或”操作
  • 异或:相同为0,不同为1
    • 0 xor 0 = 0
    • 1 xor 1 = 0
    • 0 xor 1 = 1
    • 1 xor 0 = 1

具体操作:

  • 选定一个用于校验的多项式G(x),并在数据尾部添加r个0

  • 将添加r个0后的数据,使用模“2”除法除以多项式的位串

  • 得到的余数填充在原数据r个0的位置得到可校验的位串

  • 接收端接收的数据除以G(x)的位串,根据余数判断出错

其他:

  • CRC的错误检测能力与位串的阶数r有关
    • 另:当G(x)变成 x+1 时,CRC变成奇偶校验码
  • 数据链路层只进行数据的检测,不进行纠正

3)最大传输单元MTU

  • 最大传输单元MTU(Maximum Transmission Unit)

  • 数据链路层的数据帧也不是无限大的

  • 数据帧过大或过小都会影响传输的效率

    • 以太网MTU一般为1500字节

    • 总时延=发送时延+排队时延+传播时延+处理时延

      • 过小影响发送时延
      • 过多影响处理时延

4)路径MTU

  • 路径MTU由链路中MTU的最小值决定

  • 该路径中,路径MTU为1492

5)以太网协议

<1>MAC地址
  • MAC地址(物理地址、硬件地址、以太网地址)
  • 每一个设备都拥有唯一的MAC地址
  • MAC地址共48位,使用十六进制表示
    • 例:30-B4-9E-ED-85-CA
    • 4 x 6 x 2 = 48位
<2>以太网协议
  • 以太网(Ethernet)是一种使用广泛的局域网技术

  • 以太网是一种应用于数据链路层的协议

  • 使用以太网可以完成相邻设备的数据帧传输

  • 以太网协议内容:

名称目的地址D.MAC源地址S.MAC类型Type帧数据DataFCS(CRC校验码)
长度66246~15004
  • 有关类型:

  • MAC地址表:

    • MAC地址 映射到 具体的硬件接口
  • 相邻设备的数据帧传输:(只能相邻节点)

    • A通过网卡发出数据帧
    • 数据帧到达路由器,路由器取出前6字节(目的地址)
    • 路由器匹配MAC地址表,找到对应的网络接口
    • 路由器往该网络接口发送数据帧
  • 若路由器不知道C的MAC地址:
    • 检查MAC地址表,发现没有C的信息
    • E将广播A的数据包到除A以外的端口
    • E将收到来自B、C的回应,并将地址记录

七、网络层

数据路由(决定数据在网络的路径)

1.IP协议

1)虚拟互联网络

  • 实际的计算机网络是错综复杂的
  • 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
  • 当网络中的主机使用IP协议连接时,则无需关注网络细节(重点关注端到端)

实际计算机网络:

虚拟互联网络:

2)IP协议

<1>作用
  • IP协议使得复杂的实际网络变为一个虚拟互连的网络
  • IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
  • IP协议解决了在虚拟网络中数据报传输路径的问题
<2>IP结构
  • IP地址长度为32位,常分成4个8位,用点分割
  • 点分十进制(0~255. 0~255. 0~255. 0~255)
<3>IP首部
  • IP首部在IP数据报中

  • IP首部:

  • **版本:**占4位,指的是IP协议的版本,通信双方的版本必须一 致,当前主流版本是4,即IPv4,也有IPv6
  • **首部位长度:**占4位,最大数值为15,表示的是IP首部长度,单位是“32位字”(4个字节),也即是IP首部最大长度为60字节,最少长度20字节(5 x 32位 = 5 x 4字节)
  • **总长度:**占16位,最大数值为 65535,表示的是IP数据报总长 度(IP首部+ I P 数据)
    • 当总长度超过MTU,
  • **标志:**标志IP数据报是否可以分片
  • **片偏移:**若要分片,记录第几个偏移数据
  • **TTL:**占8位,表明IP数据报文 在网络中的寿命,每经过一个 设备,TTL减1,当TTL=0时, 网络设备必须丢弃该报文
  • **协议:**占8位,表明IP数据所携带的具体数据是什么协议的 (如:TCP、UDP等)
  • **首部校验和:**占16位,校验IP 首部是否有出错

2.IP协议的转发流程

1)逐跳(hop-by-hop)

  • 一跳一跳的转发到目的主机

2)路由表

  • 计算机或者路由器都拥有路由表

3)IP协议的转发流程

  • 从网络层来看,

  • 通过查询路由表,确定下一跳,并转发

  • 从网络层和数据链路层来看,

  • 通过路由表查询,确定下一跳,并交给数据链路层将下一跳转化成MAC地址,封装数据帧并发送

    • A --> E

    • E --> F

    • F --> C

  • 注意:

    • 数据帧每一跳的MAC地址都在变化
    • IP数据报每一跳的IP地址始终不变
    • ARP请求报文的MAC地址和IP地址都在变化

    上述 IP 均表示:源 IP 和 目的 IP。上述 MAC 均表示:源 MAC 和 目的 MAC。

3.ARP协议与RARP协议

协调网络层和数据链路层的配合工作

1)ARP协议

  • ARP(Address Resolution Protocol)地址解析协议

若ARP缓存表中没有缓存:

  • ARP缓存表没有缓存IP地址和MAC地址的映射关系

结构:

注意:

  • ARP缓存表是ARP协议和RARP协议运行的关键
  • ARP缓存表缓存了IP地址到硬件地址之间的映射关系
  • ARP缓存表中的记录并不是永久有效的,有一定的期限 (随着IP的变化而变化)

其他:

  • 在以太网协议中,如果类型为 0806,则发送的是 ARP 请求/应答。

  • ARP 请求报文的最后面,PAD 是填充字节,让 ARP 请求满足以太网协议的最小长度 46 的限制。

    PS:PAD 是填充的意思,iPad 是为了填充 iPhone 和 iMac。

2)RARP协议

  • RARP(Reverse Address Resolution Protocol)逆地址解析协议

    • 不常用
    • 使用场景:无盘主机,向ARP服务器广播,从而获取自己的IP地址

结构:

注意:

  • ®ARP协议是TCP/IP协议栈里面基础的协议
  • ARP和RARP的操作对程序员是透明的
  • 理解®ARP协议有助于理解网络分层的细节

4.IP地址的子网划分

1)IP地址的分类

  • 最小网络号最大网络号子网数量最小主机号最大主机号主机数量
    A101111111:1272^7-20.0.1255.255.2542^24-2
    B128.1191.2552^14-10.1255.2542^16-2
    C192.0.1223.255.2552^21-112542^8-2
  • A类子网数量 -2 是 00000000 01111111:127

  • B、C类子网数量 -1 是10000000.00000000:128.0 192.0.0【网络号全0】

  • 主机数量 -2 是 当前网络段【主机号全0】广播地址【主机号全1】

  • 特殊的主机号

    • 主机号全0表示当前网络段,不可分配为特定主机
    • 主机号为全1表示广播地址,向当前网络段所有主机发消息
    • 例子:1.2.3.4
      • 1.0.0.0(主机号全为0,表当前网络段)
      • 1.255.255.255(主机号全为1,表广播地址)
  • 特殊的网络号

    • A 类地址网络段全0(00000000)表示特殊网络
    • A 类地址网络段后7位全1(01111111:127)表示回环地址
    • B类地址网络段(10000000.00000000:128.0)是不可使用的
    • C类地址网络段(192.0.0)是不可使用的

2)127.0.0.1

127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何 一 个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远 不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在 安 装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络 协 议、基本数据接口等是否正常的。

3)D类和E类

D类:1110…

E类:1111…

4)子网划分

  • 将主机号拿出来一部分,当作网络号,叫子网号

5)子网掩码

作用:

判断某个IP的网络号(不算子网号)

特点:

  • 子网掩码和IP地址一样,都是32位
  • 子网掩码由连续的1和连续的0组成
  • 某一个子网的子网掩码具备网络号(网络号和子网号)位数个连续的1

例子:

  • 将网络号和子网号设为1,主机号设为0

  • IP和子网掩码进行 与运算

6)无分类编址CIDR

  • 现代网络划分的方式

  • CIDR中没有A 、B、C类网络号、和子网划分的概念

  • CIDR将网络前缀相同的IP地址称为一个 “CIDR地址块”

例子:

  • /25 表示前25位是网路前缀,后7位是主机号

  • 更多的前缀长度

问题:

1.某公司拥有100名员工,每人配备一个计算机,请问该公司应该申请 哪种网络段?

  • 分配一个 /25 的网络前缀的IP网络号就可以

2.某公司增加了100名员工,并且拆分成两个部门。

  • 申请一个 /24 为网络前缀的网络号,再在其中申请两个 /25 为网络前缀的网络号

  • **注:**小型网络称为 子网,中型网络称为 超网

**拓展:**某个城市的CIDR划分

5.网络地址转换的NAT技术

1)边缘部分使用内网IP

  • 一个家庭网关只有一个外网IP地址,家庭其他设备使用内网IP地址

2)内网与外网

内网地址:

  • 内部机构使用(家庭的笔记本手机各种设备)
  • 避免与外网地址重复

外网地址:

  • 全球范围使用
  • 全球公网唯一

3)三类内网IP

  • 10.0.0.0~10.255.255.255(支持千万数量级设备)
  • 172.16.0.0~172.31.255.255(支持百万数量级设备)
  • 192.168.0.0~192.168.255.255(支持万数量级设备)

4)问题

  • 内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?

  • 解决办法:NAT技术

5)网络地址转换NAT技术(NAPT技术)

  • 网络地址转换NAT(Network Address Translation)
  • NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中
  • NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度

端口号(Port):

  • 通过端口号可以指定某个设备具体哪个进程在使用网络

具体操作:

  • 终端设备的 内网IP和端口号,通过路由器的 NAT技术,转换为 公网IP+新端口号
  • NAT技术的映射的表称为 NAT表 或者 NAPT表(P表端口)

6.ICMP协议

1)作用

  • 辅助IP协议进行数据传输的

  • 网际控制报文协议(Internet Control Message Protocol)

  • ICMP协议可以报告错误信息或者异常情况

2)格式

  • ICMP报文封装在IP数据报中,通过IP协议进行数据传输

  • 如果IP数据报传输的是ICMP报文,则在IP首部中的8位协议字段值是1

3)ICMP首部

  • 首部一共有32位

4)ICMP报文种类

<1>差错报告报文
  • 8位类型是类型的值
  • 8位代码是具体代码

<2>询问报文

7.ICMP应用

1)ping

1
2
# 返回信息
64 bytes from 39.156.69.79: icmp_seq=0 ttl=49 time=33.518 ms
  • 返回信息:

    • 64 bytes: IP数据报的长度(其中IP首部最少占20字节)
    • **icmp_seq=0:**echo_requst,请求次数
    • **ttl=49:**这个报文在网络中传输之后还剩下的寿命
    • **time=33.518 ms:**从请求到应答的时间
  • 用ping进行网络排查

    • ping回环地址127.0.0.1【本机地址】
    • ping网关地址192.168.0.1 或 192.168.1.1【路由器地址】
    • ping远端地址【检查ISP到内网的网络】

2)traceroute

  • Traceroute可以探测IP数据报在网络中走过的路程
1
2
traceroute baidu.com  # linux
tracert baidu.com # windows

原理:

  1. 发送 ttl=1 的询问报文,返回原主机一个终点不可达差错报文
  2. 发送 ttl=2 的询问报文,返回原主机一个终点不可达差错报文
  3. 直到询问报文达到目的主机,告知原主机已成功接收

8.路由概述

1)网络层路由需要解决的问题

  • 路由表是怎么来的?
  • 下一跳地址是怎么来的?
  • 下一跳地址是唯一的吗?
  • 下一跳地址是最佳的吗?
  • 路由器这么多,他们是怎么协同工作的?

==>需要一个好的算法解决这些事情

2)路由算法本质

  • 网络拓扑转化为图

路由算法的要求:

  • 算法是 正确的完整的
  • 算法在计算上尽可能的 简单
  • 算法可以 适应网络中的变化
  • 算法是 稳定的公平的

3)自治系统(AS)

问题背景:

互联网的规模的非常大

互联网环境是非常复杂

==>对互联网进行划分

概念:

  • 自治系统(Autonomous System)

  • 一个自治系统(AS)是处于一个管理机构下的网络设备群

  • AS内部网络自行管理,AS对外提供一个或多个出(入)口

  • 主干ISP就是一个主干AS,地区ISP就是一个地区AS

协议:

  • 自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
  • 自治系统外部路由的协议称为:外部网关协议(BGP)

9.内部网关协议之RIP协议

1)距离矢量(DV)算法

概念:

  • 每一个节点使用两个向量𝐷𝑖和S𝑖
  • 𝐷𝑖描述的是当前节点到别的节点的距离
  • S𝑖描述的是当前节点到别的节点的下一节点

运行:

  • 每一个节点与相邻的节点交换向量𝐷𝑖和S𝑖的信息

  • 每一个节点根据交换的信息更新自己的节点信息

交换过程:

  1. A和B交换信息,计算 A通过B 到达B、C、D、E、F的距离,即:B到A + B到C、D、E、F,计算后的距离和 A到各点距离(Dai)比较,取最小值,并更新 Dai向量值。并将 下一跳Sai 更新为 B
  2. 以此类推,A继续和C交换信息…

2)RIP协议的过程

  • RIP(Routing information Protocol)协议

  • RIP协议是使用DV算法的一种路由协议

内容:

  • RIP协议把网络的跳数(hop)作为DV算法的距离
  • RIP协议 每隔30s 交换一次路由信息
  • RIP协议认为 跳数>15 的路由则为不可达路由

具体过程:

  1. 路由器初始化路由信息(两个向量𝐷𝑖和S𝑖)

  2. 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)

    i. 检索本地路由,将信息中新的路由插入到路由表里面


    ii. 检索本地路由,对于下一跳为X的,更新为修改后的信息

    iii. 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表

  3. 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)

**缺点:**故障信息传递慢

  • 如果A宕机,B询问C,C询问B,一直循环到16跳,设置为不可达。
    • 随便相信“隔壁老王”
    • “自己不思考” “视野不够”
      • 只看到相邻节点的信息,看不到更远的信息

特点:

  • 实现简单,开销很小
  • 限制了网络的规模
    • 最大跳数为15跳
  • 故障信息传递慢,更新收敛时间过长

10.Dijkstra(迪杰斯特拉)算法

  • Dijkstra算法是著名的图算法
  • Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题
  • “以起始点为中心,向外层层扩展”

具体过程:

  1. 初始化两个集合(S, U)(S为只有初始顶点点A的集合,U为其他顶点集合)

  2. 如果U不为空, 对U集合顶点进行距离的排序,并取出距离A最近的一个顶点B

    i. 将顶点B的纳入S集合

    ii.更新通过顶点B到达U集合所有点的距离(如果距离更小则更新,否则不更新)

    iii. 重复2步骤

  3. 知道U集合为空,算法完成

11.内部网关路由协议之OSPF协议

1)链路状态(LS)协议

  • 向所有的路由器发送消息

  • 消息描述该路由器与相邻路由器的链路状态

    • 更符合人类管理需要
    • 链路状态 = 网络连接的代价
  • 只有链路状态发生变化时,才发送更新信息

    • RIP协议 每隔30秒交换路由信息

2)OSPF协议的过程

  • OSPF(Open Shortest Path First:开放最短路径优先)

  • OSPF 协议的核心是Dijkstra算法

利用LS协议和Dijkstra算法:

  1. 向所有的路由器发送消息
    • 每个路由器都能获得网络中所有消息,即可获得“网络的完整拓扑”
    • “网络的完整拓扑” 也称为 ”链路状态数据库“
    • ”链路状态数据库“ 是全网一致的
    • 每个路由器都可以运行Dijkstra算法,就可以找到自己到其他节点的最短路径
  2. 消息描述该路由器与相邻路由器的链路状态
    • OSPF协议更加客观、更加先进
  3. 只有链路状态发生变化时,才发送更新信息
    • 减少了数据的交换,更快收敛

五种消息:

  • 问候消息(hello)

    • 维护该路由器到其他路由器的可达性的
  • 数据链路数据库描述信息

    • 用于隔壁路由器发送自己的所有链路状态信息
  • 链路状态请求信息

    • 用于向隔壁路由器请求链路状态数据库
  • 链路状态更新信息

    • 特别频繁的一个消息
    • 每个路由器若更新链路状态,即通过此消息广播到整个网络
  • 链路状态确认信息

过程:

对比:

RIP协议OSPF协议
从邻居看网络整个网络的拓扑
在路由器之间累加距离Dijkstra算法计算最短路径
频繁、周期更新、收敛很慢状态变化更新、收敛很快
路由间拷贝路由信息路由间传递链路状态,自行计算路径

12.外部网关路由协议之BGP协议

  • BGP(Border Gateway Protocol: 边际网关协议)
  • BGP协议是运行在AS之间的一种协议

1)使用BGP原因

  • 互联网的规模很大
  • AS内部使用不同的路由协议

  • AS之间需要考虑除网络特性以外的一些因素(政治、安全…)
    • AS2不想让AS1通过它传递信息给AS4
    • AS1不想讲敏感信息通过AS2传递

因为以上种种原因的限制:

  • BGP协议能够找到一条到达目的比较好的路由
  • 而不是最短的路由(Dijkstra算法计算的才是最短路由)

2)BGP发言人(speaker)

  • BGP并不关心内部网络拓扑
  • AS之间通过BGP发言人交流信息
  • BGP Speaker可以人为配置策略
    • 网络可以人为地干预
    • 可以让你经过我的AS,也可以不让你经过我的AS

BGP发言人就是AS的边界路由器:

八、传输层

管理端到端的通信链接

1.作用

  • 网络层提供了一个虚拟的互联网络,解决数据传输走向问题

  • 解决进程与进程的通信

2.端口

  • 使用端口(Port)来标记不同的网络进程
  • 端口(Port)使用16比特位表示(0~65535)

3.UDP协议详解

  • UDP(User Datagram Protcol:用户数据报协议)

  • UDP是一个非常简单的协议

    • 收到Data后,不拆分不合并,直接封装到UDP协议报文中

1)位置

  • 应用层数据直接封装成UDP数据报的数据,不做任何处理

2)UDP首部

  • **16位源端口号:**原机器使用网络的进程(C/S模式,客户端和服务端提前准备约定好的。)

  • **16位目的端口号:**目的机器使用网络的进程(C/S模式,客户端和服务端提前准备约定好的。)

  • **16UDP长度:**最小是8(UDP首部)

  • 16位UDP校验和: 检测UDP数据报在传输中是否发生错误

3)特点

  • UDP是无连接协议
    • 无需提前建立连接
  • UDP不能保证可靠的交付数据
    • 无法保证数据在网络中是否丢失
  • UDP是面向报文传输的
    • 不对报文做任何处理
  • UDP没有拥塞控制
  • UDP首部开销非常小(UDP首部最少8个字节)

4.TCP协议详解

  • TCP(Transmission Control Protocol:传输控制协议)

  • TCP协议是计算机网络中非常复杂的一个协议

1)位置

2)特点

  • TCP是 面向连接 的协议

    • TCP需要通信先要建立连接
  • TCP的一个连接有两端(点对点通信)

  • TCP提供 可靠的 传输服务

  • TCP协议提供 全双工的 通信

  • TCP是面对 字节流的 协议

    • 将数据视为字节流,进行拆分合并

3)结构

传输层的UDP协议固定8字节

传输层的TCP协议首部最少20字节,最多60字节(4字节 x 15)

网络层的IP协议固定20字节

序号:

  • 范围:0~2^32-1
  • 一个字节一个序号
  • 数据首字节序号

确认号:

  • 0~2^32-1
  • 一个字节一个序号
  • 期望收到数据的首字节序号

例:

  • 501为序号,601为确定号

  • 确认号为N:则表示N-1序号的数据都已经收到

数据偏移:

  • 占4位:0~15,单位为:32位字
  • 数据偏离首部的距离

TCP标记:

  • 占6位,每位各有不同的意义
标记含义
URGUrgent: 紧急位,URG=1,表示紧急数据
ACKAcknowledgement: 确认位,ACK=1,确认号才生效
PSHPush: 推送位,PSH=1,尽快地把数据交付给应用层
RSTReset: 重置位,RST=1,重新建立连接
SYNSynchronization: 同步位,SYN=1 表示连接请求报文
FINFinish: 终止位,FIN=1 表示释放连接

窗口:

  • 占16位:0~216-1
  • 窗口指明允许对方发送的数据量 【流量控制】

紧急指针:

  • 紧急数据(URG = 1)

  • 指定紧急数据在报文的位置

TCP选项:

  • 最多40字节
    • 因为TCP报文最多60字节,其中TCP首部最少20字节
  • 支持未来的拓展

5.可靠传输基本原理

1)停止等待协议

<1>内容
  • 无差错情况

  • 发送的消息丢失

  • 确认消息丢失

  • 确认消息很久才到

<2>超时计时器
  • 遇到丢失问题则超时重传

  • **【超时定时器】:**每发送一个消息,都需要设置一个定时器

<3>特点
  • 停止等待协议是最简单的可靠传输协议
  • 停止等待协议对 信道的利用效率 不高
    • 发送方每发送消息,都要等待确认消息回来,没有收到确认消息就一直等待确认消息。

2)连续ARQ协议

  • ARQ(Automatic Repeat reQuest:自动重传请求)
<1>滑动窗口
  1. 发送1~6报文
  2. 当收到1、2的确认消息
  3. 将窗口向前滑动
  4. 发送7、8两个报文

<2>累计确认
  1. 发送到1~6报文
  2. 若收到 5 的确认消息(如果1、2、3、4有丢报情况,不会发送 5 的确认报文)
  3. 说明1~5报文都已确认
  4. 向前滑动,发送其他报文

3)TCP的可靠传输

  • TCP的可靠传输基于连续ARQ协议
  • TCP的滑动窗口以字节为单位
<1>理想情况

<2>可用窗口=0情况

<3>超时重传

超时了就要从头重传,比较低效。

  • 23、24没有收到确认,25、27收到了,但接收方不能确认 25、27。
  • 23 定时器超时,发送方不知道哪些包丢失了,只能从 23 开始全部重传。

<4>选择重传

SACK(Selective Acknowledgment)

接收方会返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了。

举个例子:

第一个报文丢失,剩下的 7 个报文都被收到了。

当收到 7 个报文的任何一个的时候,接收方会返回一个带 SACK 选项的 ack,告知发送方自己收到了哪些乱序报文。

  • 选择重传不能累积确认,和停止等待协议相同,需要逐个报文确认。
  • 窗口内的报文,收到哪个就确认哪个(带 SACK 选项的 ack),乱序的报文将被缓存。
  • 直到窗口内最小的序号的报文被确认(可能超时重传),才交付上层,右移滑动窗口。

具体过程:

其他细节:

  • 选择重传需要指定需要重传的字节

  • 每一个字节都有唯一的32位序号【见 TCP中序号】

  • 重传的字节序号放在TCP选项中

  • 因为数据偏移的最大值限制了TCP首部的长度

    • 因为加入了TCP首部,所以序号发生偏移
    • TCP首部最长60字节,固定长度20字节
  • so:TCP选项最长40字节,每个序号32位,即可放10个序号

    • 序号标记一段字节的边界

<5> 快速重传
  • 超时重传中,23号报文,因为在定时器超时,还没有接受到确认报文,判断23号报文丢失,才开始重传。有没有办法在接收方发现报文丢失,就立刻进行重传呢?(比超时重传效率高)
  • 快速重传机制,实现了另外的一种丢包评定标准,即如果接收方连续收到3次dup ack = 23报文的序号,发送方就认为这个 seq 的包(23号报文)丢失了,立刻进行重传。

4)综合举例

【报文丢失】

  • 发送方发送 1、2、3 号报文。接收方收到 2、3 号报文。
  • 此时是不会对 2、3 号报文进行确认的。2、3 号报文放入缓冲区(等待累积确认)不交付给上层。

【快速重传】(此处换成超时重传也可以)

  • 根据TCP协议的规定,当接收方收到乱序片段时,需要重复发送 ack = 1号报文序号,表示 ack 以前的都收到了,ack 之后的还未收到。
  • 发送方可能还会继续发送 4 号报文。接收方再次重复发送 ack = 1号报文序号。当发送方收到三次重复报文,便认为该报文丢失,进行 快速重传

【累积确认】

  • 接收方收到快速重传的 1 号报文,此时才对 1、2、3、4 号报文进行确认,并交付给上层。只需要回复 ack = 4 号报文序号 + 1 即可表示,前面的报文都收到了。

6.流量控制

  • 流量控制指让发送方发送速率不要太快
  • 流量控制是使用滑动窗口来实现的

具体时间轴:

  • seq:序号
  • ACK=1:确认号有效
  • ACK=0:报文中不包含确认信息,忽略确认号字段
  • ack:确认号(确认号之前的数据已经收到)
  • rwnd:窗口

1)窗口

  • 占16位:0~216-1
  • 窗口指明允许对方发送的数据量

2)坚持定时器

  • 当接收到窗口为0的消息,则启动坚持定时器
  • 坚持定时器每隔一段时间发送一个窗口探测报文

7.拥塞控制

  • 一条数据链路经过非常多的设备
  • 数据链路中各个部分都有可能成为网路传输的瓶颈

1)流量控制与拥塞控制区别

  • 流量控制考虑 点对点 的通信量的控制
  • 拥塞控制考虑 整个网络 ,是全局性的考虑

2)拥塞的判断

  • 报文超时则认为是拥塞
  • (报文超时不一定是拥塞,可能网络故障)

3)慢启动算法

  • 由小到大逐渐增加发送数据量
  • 每收到一个报文确认,就加一
    • 数据量指数增长
    • 1、2、4、8、16、…【增长到慢启动阈值(ssthresh)】
  • 到达阈值后,执行拥塞避免算法

4)拥塞避免算法

  • 维护一个拥塞窗口的变量

  • 只要网络不拥塞,就试探着拥塞窗口调大,每次加一

    • 1、4、8、16(慢启动)
    • 17、18、19(调大拥塞窗口)

x轴:轮次

y轴:报文数据量

8.TCP连接的建立

1)TCP标记

  • 占6位,每位各有不同的意义
标记含义
URGUrgent: 紧急位,URG=1,表示紧急数据
==ACK====Acknowledgement: 确认位,ACK=1,确认号才生效==
PSHPush: 推送位,PSH=1,尽快地把数据交付给应用层
RSTReset: 重置位,RST=1,重新建立连接
==SYN====Synchronization: 同步位,SYN=1 表示连接请求报文==
==FIN====Finish: 终止位,FIN=1 表示释放连接==

2)连接建立

  • seq:序号
  • SYN:连接请求
  • ACK=1:确认号生效
  • ack:确认号(ack 之前的都收到了)

三次握手:

  1. 【发送方】发送连接请求(SYN=1)、报文序号(seq)
  2. 【接受方】被动建立连接,发送连接请求(SYN=1)、反馈确认号有效(ACK=1)、期待下次接收的序号(ack=x+1)、自己数据报的序号(seq)
  3. 【发送方】反馈确认号有效(ACK=1)、期待下次接收的序号(ack=y+1)、自己数据报的序号(seq)

3)为什么要三次握手

  • 已经失效的连接请求报文传送到对方,引起错误
  1. 失效的请求报文,发送很久才到达接收方

  1. 接收方收到失效的请求报文,并回应发送方,此时发送方建立连接

  1. 如果只握手两次,那么失效的请求报文也会建立连接

  • 对于发送方,接收到接收方的回应就可以建立连接
  • 对于接收方,接收到发送的回应才算建立连接

9.TCP连接的释放

1)四次挥手(四次释放)

  • FIN=1:表示释放连接

过程:

  1. 发送方发送“释放连接”(FIN=1)、报文序号(seq)
  2. 接收方收到FIN=1后,确认收到序号(ACK=1)(表示已经收到”释放连接“)、报文序号
  3. 关闭等待期间,还可以进行数据传输。
    • 因为释放连接请求是发送方发出来的,说明发送方已发送完数据
    • 但是接收方不一定发送完数据,所以关闭等待期间是用来给发送方传输数据的
  4. 接收方数据发送结束后,发送“释放连接”(FIN=1)、并重复对第一次的序号进行确认(ACK=1)、
  5. 发送方发送ACK=1,表示已收到接收方连接释放信号

2)等待计时器

主动释放连接的一方,端口被占用

2MSL

  • MSL(Max Segment Lifetime): 最长报文段寿命

  • MSL建议设置为2分钟

为什么需要等待2MSL?

  • 为了确保发送方的ACK可以到达接收方
    • 不是为了确认报文,因为最后一个报文没有确认
    • 2MSL时间内没有收到,则接收方会重发【报文在网络中最长存活时间】
  • 确保当前连接的所有报文【之前的】都已经过期。【超过最长存活时间】

10.TCP状态转换图

实线:主动连接、主动关闭的一端。

虚线:被动连接、被动关闭的一端。

细线:主动端和被动端同时发送。

**CLOSED:**初始状态。

**LISTEN:**服务器端某个SOCKET处于监听状态,可以接受连接。

**SYN_SENT:**这个状态与SYN_RCVD遥相呼应,客户端已发送SYN报文,等待服务器回复 SYN、ACK。

SYN_RCVD: 接收 SYN 并回复 SYN、ACK,等待客户端回复 ACK(三次握手的最后一个报文)。 在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂。 此种状态时,当收到客户端的ACK报文后,会进入到ESTABLISHED状态。

**ESTABLISHED:**连接已经建立。

FIN_WAIT_1和FIN_WAIT_2 都是等待对方的FIN报文。区别在于:

**FIN_WAIT_1:**当 socket 在 ESTABLISHED 状态时,想主动关闭连接,向对方发送了 FIN 报文后,该 socket 进入到 FIN_WAIT_1 状态。如果FIN_WAIT_1状态下,收到对方同时带 FIN 标志和 ACK 标志的报文时,可以直接进入到 TIME_WAIT 状态,而无须经过 FIN_WAIT_2 状态。

**FIN_WAIT_2:**当对方回应ACK后,该 socket 进入到 FIN_WAIT_2 状态。正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到, FIN_WAIT_2 状态可用 netstat 看到。**称之为半连接或半关闭状态。**该状态下的socket只能接收数据,不能发。

TIME_WAIT: 收到了对方的FIN报文,并发送出了 ACK 报文,等 2MSL 后即可回到 CLOSED 可用状态。

CLOSING: 这种状态较特殊,属于一种较罕见的状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT: 表示在等待关闭。当对方关闭一个 socket 后发送 FIN 报文给自己,系统会回应一个 ACK 报文给对方,此时则进入到 CLOSE_WAIT 状态。接下来,查看是否还有数据发送给对方,如果没有可以 close这个 socket,发送 FIN 报文给对方,即关闭连接。所以在 CLOSE_WAIT 状态下,需要关闭连接。

LAST_ACK: 该状态是被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报文。当收到 ACK 报文后,即可以进入到 CLOSED 可用状态。

问题自测:

  1. 为什么连接要三次握手,释放却需要四次挥手?

    因为释放时,允许半关闭状态(FIN_WAIT_2)。相当于将 三次握手的第二次报文(ACK+SYN) 拆成了 四次挥手的第二三次报文(ACK,FIN)

  2. 什么是半关闭状态?

    主动关闭方,只能接受不能发送数据;被动关闭方可以发送数据。

  3. 最后一次 ACK 是谁发的?

    主动关闭方发送的 ACK(确认被动关闭方的 FIN 报文)。

  4. 为什么需要 TIME_WAIT 状态?

    确保被动关闭方,可以收到主动关闭方的最后一次 ACK 应答(确认被动关闭方的 FIN 报文)。

    如果被动关闭方没有收到 ACK 应答,会超时重传 FIN 报文。

    主动关闭方又收到了 FIN 报文,则表示最后一次 ACK 应答丢失。在 2MSL 时间内重传 ACK。(MSL:Maximum Segment Lifetime)

11.套接字和套接字编程

  • 使用端口(Port)来标记不同的网络进程
  • 端口(Port)使用16比特位表示(0~65535)

1)套接字:{IP:Port}

  • 套接字(Socket)是抽象概念,表示TCP连接的一端
  • 通过套接字可以进行数据发送或接收

TCP连接由两个套接字组成

1
2
3
TCP
={Socket1:Socket2}
={{IP:Port}{IP:Port}}

2)套接字编程

服务端:

客户端:

3)网络套接字和域套接字

网络套接字:要经过协议栈

域套接字:使用域套接字文件传输,适合单机通讯

九、应用层

会话层、表示层、应用层

1.概述

  • 传输层以及以下的层提供完整的通信服务
  • 应用层是面向用户的一层

1)常见的应用层协议

FTPhttpHTTPSDNSTELNET
21804435323

2)UDP和TCP的应用层服务

UDP:【多媒体信息分发】视频、语音、实时信息(股票走势)

TCP:【可靠消息传输】金融交易、可靠通讯、MQ

2.DNS详解

  • DNS(Domain Name System:域名系统)

    • 域:网络段
    • 名:个体的名字
  • 使用域名帮助记忆

1)格式

  • 域名由点、字母和数字组成

  • 点分割不同的域

  • 域名可以分为顶级域、二级域、三级域

2)域名服务器

  1. 根域名服务器:知道所有顶级域名服务器的域名和IP,由各国和地区来维护
  2. 顶级域名服务器:由国家和地区来维护
  3. 域名服务器:由公司或者机构来维护

2.DHCP协议

  • DHCP(Dynamic Host Configuration Protocol: 动态主机设置协议)
  • DHCP是一个局域网协议
  • DHCP是应用UDP协议的应用层协议

1)功能

  • 即插即用联网

    • 自动分配临时IP

    • 临时IP有租期存在

2)过程

  • DHCP服务器监听默认端口:67
  • 主机使用UDP协议广播 DHCP发现报文
  • DHCP服务器发出 DHCP提供报文
  • 主机向DHCP服务器发出 DHCP请求报文
  • DHCP服务器回应并提供IP地址

3.HTTP协议

  • HTTP(HyperText Transfer Protocol: 超文本传输协议)

1)地址

2)可靠的数据传输协议

  • HTTP协议是可靠的数据传输协议

  • 数据:文本、图片、音频、视频、文件、动图、(web内容)

3)web服务器

硬件部分:计算机、虚拟服务器

软件部分:Apacha

4)过程

  1. 接受客户端连接
  2. 接受请求报文
  3. 处理请求
  4. 访问web资源
  5. 构造应答
  6. 发送应答

5)请求方法

  • GET:获取制定服务器资源
  • POST:提交数据到服务器
  • DELETE:删除指定的服务端资源
  • UPDATA:更新指定的服务端资源
  • PUT
  • OPTIONS
  • PATCH
  • HEAD
  • TRACE

6)指定资源

在地址中指定资源

7)请求报文与应答报文

请求报文的请求内容

1
2
3
4
5
6
7
8
# 请求内容
POST https://coding.imooc.com HTTP/1.1
Accept-Encoding: gzip
Accept-Language: zh-CN
{
"sort": 0,
"unlearn": 0,
"page": 2 }

状态码

状态码含义
200-299成功状态码
300-399重定向状态码
400-499客户端错误状态码
500-599服务端错误状态码

十、补充

1.二层交换机与三层交换机

什么是交换机(Switch)?

  • 交换机是基于 MAC 地址传输的。
  • 要求在同一网段。
  • 比如:计算机 A、B 均用网线连接在同一台交换机上。

什么是二层交换机?

  • 交换机是基于MAC地址转发的,只支持物理层和数据链路层协议,所以叫二层交换机。

什么是三层交换机?

  • 支持物理层、数据链路层、网络层协议。
  • 带有路由功能。

三层交换机(Switch)和路由器(Router)的区别?

  • 路由器是基于 IP 转发的。

  • 三层交换机具有 MAC 地址表和 IP 路由表。所以不仅可以处理 VLAN 内通信,还可以处理不同 VLAN 之间的数据包路由。

为什么需要三层交换机?

  • 三层交换机功能是加快大型局域网络内部的数据的快速转发。
  • 如果使用二层交换机,不同网段之间无法转发(公司不同部门设置不同的小局域网)。
  • 如果使用路由器,由于接口数量有限和路由转发速度慢,将限制网络的速度和网络规模。

学习笔记|计算机网络
https://www.aimtao.net/computer-network/
Posted on
2019-10-09
Licensed under