学习笔记|计算机网络
本文以 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)现代国际互联网的主要线路
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 之间的数据包路由。
为什么需要三层交换机?
- 三层交换机功能是加快大型局域网络内部的数据的快速转发。
- 如果使用二层交换机,不同网段之间无法转发(公司不同部门设置不同的小局域网)。
- 如果使用路由器,由于接口数量有限和路由转发速度慢,将限制网络的速度和网络规模。