学习笔记|计算机网络

本文最后更新于:1 年前

目录

一、概述
  1.概念
  2.分类
   1)作用范围
   2)网络的使用者
  3.发展历史
   1)互联网的发展历史
   2)现代国际互联网的主要线路
   3)中国互联网的发展历史
   4)国内五个最大的公共网络
   5)互联网公司
二、层次结构
  1.层次结构设计的基本原则
   1)为什么要使用层次结构设计
   2)层次结构的例子
   3)层次结构设计的基本原则
  2.OSI七层模型
  3.TCP/IP四层模型
三、网络拓扑
  1.边缘部分
  2.核心部分
  3.现代互联网的网络拓扑
  4.树状结构
  5.客户-服务器(C/S)模式
  6.对等连接(P2P)模式
四、计算机网络的性能指标
  1.速率
  2.时延
   1)发送时延
   2)传播时延
   3)排队时延
   4)处理时延
  3.往返时间RTT
五、物理层
  1.作用
   1)连接介质
   2)比特流
   3)物理特性
  2.信道
   1)概念
   2)信道分类
  3.分用-复用技术
六、数据链路层
  1.封装成帧
  2.透明传输
  3.差错检测
   1)奇偶校验码
   2)循环冗余校验码CRC
   3)最大传输单元MTU
   4)路径MTU
   5)以太网协议
    <1>MAC地址
    <2>以太网协议
七、网络层
   1.IP协议
   1)虚拟互联网络
   2)IP协议
    <1>作用
    <2>IP结构
    <3>IP首部
  2.IP协议的转发流程
   1)逐跳(hop-by-hop)
   2)路由表
   3)IP协议的转发流程
  3.ARP协议与RARP协议
   1)ARP协议
   2)RARP协议
  4.IP地址的子网划分
   1)IP地址的分类
   2)127.0.0.1
   3)D类和E类
   4)子网划分
   5)子网掩码
   6)无分类编址CIDR
  5.网络地址转换的NAT技术
   1)边缘部分使用内网IP
   2)内网与外网
   3)三类内网IP
   4)问题
   5)网络地址转换NAT技术(NAPT技术)
  6.ICMP协议
   1)作用
   2)格式
   3)ICMP首部
   4)ICMP报文种类
    <1>差错报告报文
    <2>询问报文
  7.ICMP应用
   1)ping
   2)traceroute
  8.路由概述
   1)网络层路由需要解决的问题
   2)路由算法本质
   3)自治系统(AS)
  9.内部网关协议之RIP协议
   1)距离矢量(DV)算法
   2)RIP协议的过程
  10.Dijkstra(迪杰斯特拉)算法
  11.内部网关路由协议之OSPF协议
   1)链路状态(LS)协议
   2)OSPF协议的过程
  12.外部网关路由协议之BGP协议
   1)使用BGP原因
   2)BGP发言人(speaker)
八、传输层
  1.作用
  2.端口
  3.UDP协议详解
   1)位置
   2)UDP首部
   3)特点
  4.TCP协议详情
   1)位置
   2)特点
   3)结构
  5.可靠传输基本原理
   1)停止等待协议
    <1>内容
    <2>超时计时器
    <3>特点
   2)连续ARQ协议
    <1>滑动窗口
    <2>累计确认
   3)TCP的可靠传输
    <1>理想情况
    <2>可用窗口=0情况
    <3>超时重传情况
    <4>选择重传
  6.流量控制
   1)窗口
   2)坚持定时器
  7.拥塞控制
   1)流量控制与拥塞控制区别
   2)拥塞的判断
   3)慢启动算法
   4)拥塞避免算法
  8.TCP连接的建立
   1)TCP标记
   2)连接建立
   3)为什么要三次握手
  9.TCP连接的释放
   1)四次挥手(四次释放)
   2)等待计时器
  10.套接字和套接字编程
   1)套接字:{IP:Port}
   2)套接字编程
   3)网络套接字和域套接字
九、应用层
  1.概述
   1)常见的应用层协议
   2)UDP和TCP的应用层服务
  2.DNS详解
   1)格式
   2)域名服务器
  2.DHCP协议
   1)功能
   2)过程
  3.HTTP协议
   1)地址
   2)可靠的数据传输协议
   3)web服务器
   4)过程
   5)请求方法
   6)指定资源
   7)请求报文与应答报文

一、概述

1.概念

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

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

2.分类

1)作用范围

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

2)网络的使用者

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

3.发展历史

1)互联网的发展历史

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

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
数据链路层
物理层网络接口层Ethernet / ARP / RARP

传输方式:

image-20191009200710851

协议:image-20191009200732024

三、网络拓扑

1.边缘部分

  • 用户所接触部分

image-20191009201008167

image-20191009201029397

2.核心部分

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

image-20191009201156017

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

image-20191009201259956

4.树状结构

image-20191010122719702

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

image-20191010122857564

6.对等连接(P2P)模式

image-20191010122945634

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

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

PS:字:

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

1.速率

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

2.时延

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

1)发送时延

image-20191010125425975

2)传播时延

image-20191010141041380

3)排队时延

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

4)处理时延

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

3.往返时间RTT

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

五、物理层

数据通信的光电物理特性

1.作用

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

1)连接介质

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

image-20191010145105630

  • 同轴电缆

image-20191010145154049

  • 光纤

  • 红外线

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

  • 激光

2)比特流

image-20191010145516729

3)物理特性

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

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

2.信道

1)概念

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

2)信道分类

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

3.分用-复用技术

  • 物理层所解决的问题

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

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

六、数据链路层

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

1.封装成帧

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

2.透明传输

  • 透明”在计算机领域是非常重要的一个术语
  • 即是控制字符在帧数据中,但是要当做不存在的去处理
  • 问题:识别错误的帧

image-20191010215315768

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

image-20191010215610041

3.差错检测

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

1)奇偶校验码

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

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

    • image-20191010222430292

2)循环冗余校验码CRC

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

模2除法:

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

image-20191010223101599

具体操作:

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

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

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

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

其他:

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

3)最大传输单元MTU

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

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

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

    • 以太网MTU一般为1500字节

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

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

4)路径MTU

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

  • 该路径中,路径MTU为1492

    • image-20191010225746501

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
  • 有关类型:image-20191011092525938
  • MAC地址表:
    • MAC地址 映射到 具体的硬件接口
    • image-20191011092741725
  • 相邻设备的数据帧传输:(只能相邻节点)
    • A通过网卡发出数据帧
    • 数据帧到达路由器,路由器取出前6字节(目的地址)
    • 路由器匹配MAC地址表,找到对应的网络接口
    • 路由器往该网络接口发送数据帧
    • image-20191011093511017
  • 若路由器不知道C的MAC地址:
    • 检查MAC地址表,发现没有C的信息
    • E将广播A的数据包到除A以外的端口
    • E将收到来自B、C的回应,并将地址记录
    • image-20191011100445860

七、网络层

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

1.IP协议

1)虚拟互联网络

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

实际计算机网络:

image-20191011163032749

虚拟互联网络:

image-20191011163106375

2)IP协议

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

image-20191011164401428

  • 版本:占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)

  • 一跳一跳的转发到目的主机
  • image-20191011193357970

2)路由表

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

3)IP协议的转发流程

  • 从网络层来看,
  • 通过查询路由表,确定下一跳,并转发
    • image-20191011195127369
    • image-20191011193619951
  • 从网络层和数据链路层来看,

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

    • image-20191011195201094

    • A –> Eimage-20191011195232557

    • E –> Fimage-20191011195338042

    • F –> Cimage-20191011195358678

  • 注意:
    • 数据帧每一跳的MAC地址都在变化
    • IP数据报每一跳的IP地址始终不变

3.ARP协议与RARP协议

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

1)ARP协议

  • ARP(Address Resolution Protocol)地址解析协议
  • image-20191011201006955
  • image-20191011201027772

若ARP缓存表中没有缓存:

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

结构:

image-20191014083821988

注意:

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

2)RARP协议

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

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

结构:

image-20191014083908186

注意:

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

4.IP地址的子网划分

1)IP地址的分类

  • image-20191014103622888

  • 最小网络号最大网络号子网数量最小主机号最大主机号主机数量
    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)子网划分

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

  • image-20191021185057952

5)子网掩码

作用:

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

特点:

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

例子:

  • 将网络号和子网号设为1,主机号设为0image-20191021185448806
  • IP和子网掩码进行 与运算

    image-20191021185504523

6)无分类编址CIDR

  • 现代网络划分的方式

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

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

  • image-20191021190142596

例子:

  • image-20191021190217591

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

  • 更多的前缀长度image-20191021190449413

问题:

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

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

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

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

  • image-20191021191044220

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

拓展:某个城市的CIDR划分

image-20191021191130297

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

1)边缘部分使用内网IP

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

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请求外网的服务,外部怎么知道具体是哪个设备在请求的?

  • image-20191021193041055

  • 解决办法:NAT技术

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

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

端口号(Port):

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

具体操作:

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

6.ICMP协议

1)作用

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

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

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

2)格式

  • image-20191021194633202

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

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

    image-20191021205146256

3)ICMP首部

  • 首部一共有32位

image-20191021194700318

4)ICMP报文种类

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

image-20191021210053793

<2>询问报文

image-20191021210349753

7.ICMP应用

1)ping

  • image-20191021210825161trace

    # 返回信息
    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数据报在网络中走过的路程
traceroute baidu.com  # linux
tracert baidu.com     # windows

原理:

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

image-20191022103313448

8.路由概述

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

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

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

2)路由算法本质

  • 网络拓扑转化为图
  • image-20191022110446293

路由算法的要求:

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

3)自治系统(AS)

问题背景:

互联网的规模的非常大

互联网环境是非常复杂

==>对互联网进行划分

概念:

  • 自治系统(Autonomous System)

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

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

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

协议:

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

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交换信息…

image-20191023161043361

2)RIP协议的过程

  • RIP(Routing information Protocol)协议

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

内容:

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

具体过程:

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

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

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

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

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

    image-20191024101613929

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

缺点:故障信息传递慢

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

image-20191024102301211

特点:

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

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

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

具体过程:

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

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

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

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

    iii. 重复2步骤

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

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

1)链路状态(LS)协议

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

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

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

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

2)OSPF协议的过程

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

  • OSPF 协议的核心是Dijkstra算法

利用LS协议和Dijkstra算法:

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

五种消息:

  • 问候消息(hello)

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

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

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

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

过程:

image-20191024112347045

对比:

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

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

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

1)使用BGP原因

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

image-20191026111608900

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

image-20191026111901222

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

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

2)BGP发言人(speaker)

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

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

image-20191026113108236

八、传输层

管理端到端的通信链接

1.作用

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

  • 解决进程与进程的通信

    image-20191026122143012

2.端口

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

image-20191026123101353

3.UDP协议详解

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

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

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

1)位置

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

image-20191026123643210

2)UDP首部

image-20191026123808984

  • 16位源端口号:原机器使用网络的进程

  • 16位目的端口号:目的机器使用网络的进程

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

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

3)特点

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

4.TCP协议详情

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

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

1)位置

image-20191026185010471

2)特点

  • TCP是 面向连接 的协议

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

  • TCP提供 可靠的 传输服务

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

  • TCP是面对 字节流的 协议

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

3)结构

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

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

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

image-20191026190452841

序号:

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

确认号:

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

例:

  • 501为序号,601为确定号

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

image-20191027113155486

数据偏移:

  • 占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~2^16-1
  • 窗口指明允许对方发送的数据量 【流量控制】

紧急指针:

  • 紧急数据(URG = 1)

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

TCP选项:

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

5.可靠传输基本原理

1)停止等待协议

<1>内容
  • 无差错情况

image-20191029143239995

  • 发送的消息丢失

    image-20191029143527784

  • 确认消息丢失image-20191029145516706

  • 确认消息很久才到image-20191029145522747

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

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

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

2)连续ARQ协议

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

image-20191029151432401

<2>累计确认
  1. 发送到1~6报文
  2. 若收到 5 的确认消息
  3. 说明1~5报文都已1确认
  4. 向前滑动,发送其他报文

image-20191029151703556

3)TCP的可靠传输

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

image-20191029164843819

<2>可用窗口=0情况

image-20191029165004512

<3>超时重传情况
  • 因为23、24没有收到确认,25、27收到确认
  • 从23开始重传

image-20191029165043496

<4>选择重传
  • 选择重传需要指定需要重传的字节
  • 每一个字节都有唯一的32位序号【见 TCP中序号】
  • 重传的字节序号放在TCP选项中
  • 因为数据偏移的最大值限制了TCP首部的长度
    • 因为加入了TCP首部,所以序号发生偏移
    • TCP首部最长60字节,固定长度20字节
  • so:TCP选项最长40字节,每个序号32位,即可放10个序号
    • 序号标记一段字节的边界

image-20191029184330212

6.流量控制

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

具体时间轴:

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

image-20191029190256494

1)窗口

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

2)坚持定时器

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

7.拥塞控制

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

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

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

2)拥塞的判断

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

3)慢启动算法

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

4)拥塞避免算法

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

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

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

x轴:轮次

y轴:报文数据量

image-20191029191643049

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)连接建立

image-20191029192334432

  • seq:序号
  • SYN:连接请求
  • ACK=1:确认号生效
  • ack:确认号

三次握手:

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

3)为什么要三次握手

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

image-20191029193641635

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

image-20191029193649716

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

    image-20191029194139047

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

9.TCP连接的释放

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

image-20191029194342695

  • 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.套接字和套接字编程

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

1)套接字:{IP:Port}

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

TCP连接由两个套接字组成

TCP
={Socket1:Socket2}
={{IP:Port}{IP:Port}}

2)套接字编程

服务端:

image-20191104145654973

客户端:

image-20191104145723299

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

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

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

九、应用层

会话层、表示层、应用层

1.概述

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

1)常见的应用层协议

FTPhttpHTTPSDNSTELNET
21804435323

2)UDP和TCP的应用层服务

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

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

2.DNS详解

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

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

    image-20191104164454394

1)格式

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

  • 点分割不同的域

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

image-20191104163603625

image-20191104163632023

image-20191104164426892

2)域名服务器

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

image-20191104164558774

2.DHCP协议

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

1)功能

  • 即插即用联网

    • 自动分配临时IP

    • 临时IP有租期存在

2)过程

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

image-20191104165548826

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)指定资源

在地址中指定资源

  • https:// xxx.com/class/355.html
    • class/355.html:第355个课程
  • https:// xxx.com/?sort=0&unlearn=0&page=2
    • sort=0:不排序
    • unlearn=0:不显示未学习
    • pge=2:第二页

7)请求报文与应答报文

image-20191104204626796

请求报文的请求内容

# <a name="165">请求内容</a>
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服务端错误状态码

本博客所有文章均个人原创,除特别声明外均采用 CC BY-SA 4.0协议,转载请注明出处!

 目录

致敬李文亮及各路英雄好汉!