学习笔记|计算机网络
本文以 OSI 七层模型为脉络,系统描述计算机网络协议及其作用、特点。
目录
一、概述
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.TCP状态转换图
11.套接字和套接字编程
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
- 美国国防部最初建设
第二阶段:三级结构互联网
第三阶段 ISP(Internet Service Provider):网络服务提供商
- 主干ISP:中国电信、移动、联通…
- 地区ISP:北京移动、上海联通…
2)现代国际互联网的主要线路
3)中国互联网的发展历史
1980,中国铁道部开始互联网实验
1989,第一个公有网络建立运行
1994,接入国际互联网
4)国内五个最大的公共网络
中国电信互联网CHINANET
中国联通互联网UNINET
中国移动互联网CMNET
中国教育与科研计算机网CERNET
中国科学技术网CSTNET
5)互联网公司
1996年,张朝阳创建搜狐
1997年,丁磊创建网易
1998年,王志东创建新浪
1998年,马化腾、张志东创建腾讯
1999年,马云创建阿里巴巴
2000年,李彦宏创建百度
二、层次结构
1.层次结构设计的基本原则
1)为什么要使用层次结构设计
计算机网络要解决的问题
- 保证数据通路顺畅
- 识别目的计算机
- 目的计算机状态
- 数据是否错误
目的
- 分层解决不同的问题
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)模式
四、计算机网络的性能指标
bit | Byte | KB | MB | GB | TB | PB | EB | |
---|---|---|---|---|---|---|---|---|
名称 | 比特位 | 字节 | 千字节 | 兆字节 | 吉字节 | 太字节 | 拍字节 | 艾字节 |
比例 | 8bit | 1024B | 1024KB | 1024MB | 1024GB | 1024TM | 1024PB | |
常用设备 | 门电路 | 寄存器 | 高速缓存 | 内存/硬盘 | 硬盘 | 云硬盘 | 数据仓库 |
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 | 帧数据Data | FCS(CRC校验码) |
---|---|---|---|---|---|
长度 | 6 | 6 | 2 | 46~1500 | 4 |
有关类型:
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地址的分类
最小网络号 最大网络号 子网数量 最小主机号 最大主机号 主机数量 A 1 01111111:127 2^7-2 0.0.1 255.255.254 2^24-2 B 128.1 191.255 2^14-1 0.1 255.254 2^16-2 C 192.0.1 223.255.255 2^21-1 1 254 2^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 |
|
返回信息:
- 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 |
|
原理:
发送 ttl=1 的询问报文,返回原主机一个终点不可达差错报文
发送 ttl=2 的询问报文,返回原主机一个终点不可达差错报文
…
直到询问报文达到目的主机,告知原主机已成功接收
8.路由概述
1)网络层路由需要解决的问题
路由表是怎么来的?
下一跳地址是怎么来的?
下一跳地址是唯一的吗?
下一跳地址是最佳的吗?
路由器这么多,他们是怎么协同工作的?
==>需要一个好的算法解决这些事情
2)路由算法本质
网络拓扑转化为图
路由算法的要求:
算法是 正确的、完整的
算法在计算上尽可能的 简单
算法可以 适应网络中的变化
算法是 稳定的、公平的
3)自治系统(AS)
问题背景:
互联网的规模的非常大
互联网环境是非常复杂
==>对互联网进行划分
概念:
自治系统(Autonomous System)
一个自治系统(AS)是处于一个管理机构下的网络设备群
AS内部网络自行管理,AS对外提供一个或多个出(入)口
主干ISP就是一个主干AS,地区ISP就是一个地区AS
协议:
自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
自治系统外部路由的协议称为:外部网关协议(BGP)
9.内部网关协议之RIP协议
1)距离矢量(DV)算法
概念:
每一个节点使用两个向量𝐷𝑖和S𝑖
𝐷𝑖描述的是当前节点到别的节点的距离
S𝑖描述的是当前节点到别的节点的下一节点
运行:
每一个节点与相邻的节点交换向量𝐷𝑖和S𝑖的信息
每一个节点根据交换的信息更新自己的节点信息
交换过程:
A和B交换信息,计算 A通过B 到达B、C、D、E、F的距离,即:
B到A
+B到C、D、E、F
,计算后的距离和A到各点距离(Dai)
比较,取最小值,并更新Dai
向量值。并将 下一跳Sai
更新为 B以此类推,A继续和C交换信息…
2)RIP协议的过程
RIP(Routing information Protocol)协议
RIP协议是使用DV算法的一种路由协议
内容:
RIP协议把网络的跳数(hop)作为DV算法的距离
RIP协议 每隔30s 交换一次路由信息
RIP协议认为 跳数>15 的路由则为不可达路由
具体过程:
路由器初始化路由信息(两个向量𝐷𝑖和S𝑖)
对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
i. 检索本地路由,将信息中新的路由插入到路由表里面
ii. 检索本地路由,对于下一跳为X的,更新为修改后的信息iii. 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
**缺点:**故障信息传递慢
如果A宕机,B询问C,C询问B,一直循环到16跳,设置为不可达。
- 随便相信“隔壁老王”
- “自己不思考” “视野不够”
- 只看到相邻节点的信息,看不到更远的信息
特点:
实现简单,开销很小
限制了网络的规模
- 最大跳数为15跳
故障信息传递慢,更新收敛时间过长
10.Dijkstra(迪杰斯特拉)算法
Dijkstra算法是著名的图算法
Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题
“以起始点为中心,向外层层扩展”
具体过程:
初始化两个集合(S, U)(S为只有初始顶点点A的集合,U为其他顶点集合)
如果U不为空, 对U集合顶点进行距离的排序,并取出距离A最近的一个顶点B
i. 将顶点B的纳入S集合
ii.更新通过顶点B到达U集合所有点的距离(如果距离更小则更新,否则不更新)
iii. 重复2步骤
知道U集合为空,算法完成
11.内部网关路由协议之OSPF协议
1)链路状态(LS)协议
向所有的路由器发送消息
消息描述该路由器与相邻路由器的链路状态
- 更符合人类管理需要
- 链路状态 = 网络连接的代价
只有链路状态发生变化时,才发送更新信息
- RIP协议 每隔30秒交换路由信息
2)OSPF协议的过程
OSPF(Open Shortest Path First:开放最短路径优先)
OSPF 协议的核心是Dijkstra算法
利用LS协议和Dijkstra算法:
向所有的路由器发送消息
- 每个路由器都能获得网络中所有消息,即可获得“网络的完整拓扑”
- “网络的完整拓扑” 也称为 ”链路状态数据库“
- ”链路状态数据库“ 是全网一致的
- 每个路由器都可以运行Dijkstra算法,就可以找到自己到其他节点的最短路径
消息描述该路由器与相邻路由器的链路状态
- OSPF协议更加客观、更加先进
只有链路状态发生变化时,才发送更新信息
- 减少了数据的交换,更快收敛
五种消息:
问候消息(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位,每位各有不同的意义
标记 | 含义 |
---|---|
URG | Urgent: 紧急位,URG=1,表示紧急数据 |
ACK | Acknowledgement: 确认位,ACK=1,确认号才生效 |
PSH | Push: 推送位,PSH=1,尽快地把数据交付给应用层 |
RST | Reset: 重置位,RST=1,重新建立连接 |
SYN | Synchronization: 同步位,SYN=1 表示连接请求报文 |
FIN | Finish: 终止位,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~6报文
当收到1、2的确认消息
将窗口向前滑动
发送7、8两个报文
<2>累计确认
发送到1~6报文
若收到 5 的确认消息(如果1、2、3、4有丢报情况,不会发送 5 的确认报文)
说明1~5报文都已确认
向前滑动,发送其他报文
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位,每位各有不同的意义
标记 | 含义 |
---|---|
URG | Urgent: 紧急位,URG=1,表示紧急数据 |
ACK | Acknowledgement: 确认位,ACK=1,确认号才生效 |
PSH | Push: 推送位,PSH=1,尽快地把数据交付给应用层 |
RST | Reset: 重置位,RST=1,重新建立连接 |
SYN | Synchronization: 同步位,SYN=1 表示连接请求报文 |
FIN | Finish: 终止位,FIN=1 表示释放连接 |
2)连接建立
seq:序号
SYN:连接请求
ACK=1:确认号生效
ack:确认号(ack 之前的都收到了)
三次握手:
【发送方】发送连接请求(SYN=1)、报文序号(seq)
【接受方】被动建立连接,发送连接请求(SYN=1)、反馈确认号有效(ACK=1)、期待下次接收的序号(ack=x+1)、自己数据报的序号(seq)
【发送方】反馈确认号有效(ACK=1)、期待下次接收的序号(ack=y+1)、自己数据报的序号(seq)
3)为什么要三次握手
已经失效的连接请求报文传送到对方,引起错误
失效的请求报文,发送很久才到达接收方
接收方收到失效的请求报文,并回应发送方,此时发送方建立连接
如果只握手两次,那么失效的请求报文也会建立连接
对于发送方,接收到接收方的回应就可以建立连接
对于接收方,接收到发送的回应才算建立连接
9.TCP连接的释放
1)四次挥手(四次释放)
FIN=1:表示释放连接
过程:
发送方发送“释放连接”(FIN=1)、报文序号(seq)
接收方收到FIN=1后,确认收到序号(ACK=1)(表示已经收到”释放连接“)、报文序号
关闭等待期间,还可以进行数据传输。
- 因为释放连接请求是发送方发出来的,说明发送方已发送完数据
- 但是接收方不一定发送完数据,所以关闭等待期间是用来给发送方传输数据的
接收方数据发送结束后,发送“释放连接”(FIN=1)、并重复对第一次的序号进行确认(ACK=1)、
发送方发送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 可用状态。
问题自测:
为什么连接要三次握手,释放却需要四次挥手?
因为释放时,允许半关闭状态(FIN_WAIT_2)。相当于将 三次握手的第二次报文(ACK+SYN) 拆成了 四次挥手的第二三次报文(ACK,FIN)。
什么是半关闭状态?
主动关闭方,只能接受不能发送数据;被动关闭方可以发送数据。
最后一次 ACK 是谁发的?
主动关闭方发送的 ACK(确认被动关闭方的 FIN 报文)。
为什么需要 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)网络套接字和域套接字
网络套接字:要经过协议栈
域套接字:使用域套接字文件传输,适合单机通讯
九、应用层
会话层、表示层、应用层
1.概述
传输层以及以下的层提供完整的通信服务
应用层是面向用户的一层
1)常见的应用层协议
FTP | http | HTTPS | DNS | TELNET |
---|---|---|---|---|
21 | 80 | 443 | 53 | 23 |
2)UDP和TCP的应用层服务
UDP:【多媒体信息分发】视频、语音、实时信息(股票走势)
TCP:【可靠消息传输】金融交易、可靠通讯、MQ
2.DNS详解
DNS(Domain Name System:域名系统)
- 域:网络段
- 名:个体的名字
使用域名帮助记忆
1)格式
域名由点、字母和数字组成
点分割不同的域
域名可以分为顶级域、二级域、三级域
2)域名服务器
根域名服务器:知道所有顶级域名服务器的域名和IP,由各国和地区来维护
顶级域名服务器:由国家和地区来维护
域名服务器:由公司或者机构来维护
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)地址
http(s)😕/<主机>:<端口>/<路径>
- 端口:80
- 安全端口:443
2)可靠的数据传输协议
HTTP协议是可靠的数据传输协议
数据:文本、图片、音频、视频、文件、动图、(web内容)
3)web服务器
硬件部分:计算机、虚拟服务器
软件部分:Apacha
4)过程
接受客户端连接
接受请求报文
处理请求
访问web资源
构造应答
发送应答
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)请求报文与应答报文
请求报文的请求内容
1 |
|
状态码
状态码 | 含义 |
---|---|
200-299 | 成功状态码 |
300-399 | 重定向状态码 |
400-499 | 客户端错误状态码 |
500-599 | 服务端错误状态码 |
十、补充
1.二层交换机与三层交换机
什么是交换机(Switch)?
交换机是基于 MAC 地址传输的。
要求在同一网段。
比如:计算机 A、B 均用网线连接在同一台交换机上。
什么是二层交换机?
交换机是基于MAC地址转发的,只支持物理层和数据链路层协议,所以叫二层交换机。
什么是三层交换机?
支持物理层、数据链路层、网络层协议。
带有路由功能。
三层交换机(Switch)和路由器(Router)的区别?
路由器是基于 IP 转发的。
三层交换机具有 MAC 地址表和 IP 路由表。所以不仅可以处理 VLAN 内通信,还可以处理不同 VLAN 之间的数据包路由。
为什么需要三层交换机?
三层交换机功能是加快大型局域网络内部的数据的快速转发。
如果使用二层交换机,不同网段之间无法转发(公司不同部门设置不同的小局域网)。
如果使用路由器,由于接口数量有限和路由转发速度慢,将限制网络的速度和网络规模。