一、基本概念
数据包结构
相关设备
-
中继器
- 功能
- 物理层
- 连接同一网络的多个网段
- 功能
-
集线器
- 是一个多端口的中继器
- 特点
- 物理层,共享型设备
- 安全性低
- 容易引发广播风暴
-
网桥
- 定义
- 二层路由器,根据MAC地址转发帧
- 将两(多)个局域网连起来
- 网桥通常用于联接数量不多、同一类型的网段
- 定义
-
交换机
- 特点
- 数据链路层
- 根据mac地址进行数据转发
- 有效抑制广播风暴
- 转发延迟小,效率高
- 与集线器对比
- 交换机每个端口属一个冲突域
- 集线器所有端口都属一个冲突域
- 交换机的前身是网桥
- 交换机用硬件完成
- 网桥用软件完成
- 过滤/学习/转发帧的任务
- 特点
-
网关
- 定义
- 协议转换器
- 实现不同协议网络之间的互连
- 一个网络连接到另一个网络的关口
- 实质上是一个网络通往其他网络的关口(IP地址)
- 路由器有多个网关(地址)
- 定义
-
路由器
- 功能
- 连接多个网络的设备
- 将不同网络的数据信息进行转换
- 为IP包传输分配最合适的路径
- 数据通道功能
- 转发决定
- 背板转发
- 输出链路调度
- 数据控制功能
- 与相邻路由器之间的信息交换
- 系统配置
- 系统管理
- 特点
- 网络层
- 根据IP进行寻址转发数据包
- 功能
二、物理层
功能
- 通过物理手段将计算机连接起来
- 光缆
- 电缆
- 双绞线
- 无线电波
- 规定网络的电气属性,负责传送0和1的电信号
- 电脑网卡接口
- 收发点信号
- 解读成0/1序列
三、数据链路层
功能 & 定义
- 位于物理层上方,确定了0和1的分组方式
- 单独的0和1没有意义
- 须规定解读方式
- 多少电信号算一组
- 每个信号位有何意义
- 负责解读电信号0和1组成的分组数据包(即帧)
以太网协议
规范电信号分组方式 / 解读方式的协议
-
协议规定
- 一组电信号构成一个数据包(帧)
- 帧组成
- 标头
- 数据
- 尾部
- 整个帧长度
- min: 64字节
- max: 1518字节
- 数据过长,须分割成多个帧发送
-
标头
- 组成:包含数据包的一些说明项
- 发送者
- 接受者
- 数据类型
- 长度:固定18字节
- 最初7个字节称序言
- 每个字节内容都是0xAA
- 作用
- 让接收设备调整接收频率
- 以便与发送设备频率一致
- 时钟复原
- 组成:包含数据包的一些说明项
-
数据
- 内容:数据包的具体内容
- 长度
- min: 46字节
- max: 1500字节
-
尾部
- 检验序列
- 检验数据传输是否发生错误
- 类型
- CRC:循环冗余校验码
- 奇偶校验
MAC地址
- 定义
- 又称硬件地址(物理地址)
- 即是网卡的地址
- 网卡出产都有一个唯一的mac地址
- 长度48位,通常用12十六进制数表示
- 有了mac地址,就可以定位网卡和数据包的路径
- 如何将数据包从发送方送到接收方
- 原始方式: 广播
- 向局域网内所有计算机发送
- 让每台机判断,是否为接收方
- 转发表
- 原始方式: 广播
PPP协议
- 定义
- 用户PC和ISP进行通信时所使用的数据链路层系恶意
问题
- 是只有交换机维护一张mac转发表,还是局域网中每台机都有转发表
- mac地址与ip地址
四、网络层
网络层由来
- 单纯靠mac地址,广州的网卡即可找到北京的网卡
- mac地址的设计无层次性
- 即无类似ip地址的网络号设计
- 多个局域网无法顺畅连接
- 交换机mac地址与局域网内的计算机mac地址毫无关联
- 判断数据包是否在该局域网,需遍历转发表或广播
- 一旦网络中的计算机太多
- 要么维护一张很大的转发表
- 要么造成广播风暴
- 即无类似ip地址的网络号设计
- 寻找问题的方案:必须区分哪些mac地址属于同一个网络
- mac地址做不到的原因
- mac地址本身只与产商有关
- mac地址与所处网络无关
- 网络层解决了该问题
- mac地址做不到的原因
- mac地址与ip地址逻辑上无联系
- MAC地址绑定在网卡上
- ip是管理员/运营山分配
网络层的作用
- 引进一套新的地址
- 区分不同的计算机(mac地址)是否属于同一个子网络
- 寻找确定计算机所在的子网络
- mac则将数据包送到该子网络中的目标网卡
- 先ip选择网络,再mac选择目标网卡
IP协议
-
定义
- 规定网络地址的协议
-
作用
- 为每台计算机分配ip地址
- 确定哪些地址在同一个网络
-
协议类别
- IPV4
- IPV6
-
地址分类概要
- ( A B C D E )
- 主机号全为0
- 表示本网络本身
- 主机号全为1
- 表示本网络的广播地址
- 32位全为0
- 表示本网络上的本主机
- 32位全为1
-
表示整个tcp/ip网络的广播地址
-
-
特点(主要讨论IPv4)
- 32位组成
- 0.0.0.0 -- 255.255.255.255
- 地址分网络号、主机号
- 32位组成
-
相关概念
-
子网掩码
- 作用
- 判断两台计算机是否属于同一个子网络
- 将ip地址的网络部分全部置1,主机部分置0
- 每个ip有一个子网掩码
- 如何判断两个ip地址属同一网络
- ip地址与各自的子网掩码进行AND运算
- 将两个and运算结果进行比较
- 结果相同则在同一网络
- 反之,不在同一网络
- 作用
-
划分子网
CIDR
-
NAT
- 定义
- 网络地址转换
- 专用网络地址 转 公用地址
- 在局域网中使用私有地址,联网时转而使用全局ip地址的技术
- 特点
- 大大节省ip地址的消耗
- 隐藏内部网络结构,降低内部网络受攻击的风险
- 私有ip地址网段
- A类: 1个 =》 10.0.0.0 - 10.255.255.255
- B类:16个 =》 172.16.0.0 - 172.31.255.255
- C类:256个=》 192.168.0.0 - 192.168.255.255
- 定义
-
VPN
-
IP数据包
-
组成
- 标头(首部)
- 首部前半部分
- 首部后半部分
- 可选字段,长度可变
- 提供错误检测及安全等机制
- 长度为20 - 60字节
- 数据
- 最长65515字节
- 标头(首部)
IP数据包总长度最长为65535字节
IP数据包直接放在以太网数据包的“数据”部分
-
IP数据包传输
- 需通过路由器的接力
- 每个主机和路由都存在有一个路由表
为IP包指明路线 - 路由选择算法:生成路由表
RIP
BGP
-
由于以太网数据包中的数据部分,最长1500字节
- IP数据包大于1500字节,则需拆包,分开发送
- 首部前半部分
- 固定长度,20字节
- 首部格式重要字段
- 版本
- ip协议的版本
- 占4位
- 首部长度
- 占四位,最大进制数值是15
- 该字段所表示数的单位:32位字
- 一个32位字长是4字节
- 例
1111 : 15 * 4 = 60字节
0101 : 5 * 4 = 20字节
- 总长度
- 定义: 首部长度 + 数据长度
- 占16位,最大长度 2^16 - 1 = 65535字节
- 标识
- 占16位
- 一个计数器
- 每产生一个数据报就加1
- 并不是序号
- 标志
- 占三位,目前只有两位有意义
- 最低位记为MF
- 1:表示后面还有分片
- 0
- 表示后面没有分片
- 该片为最后一片
- 中间位为DF
- 1
- 不允许分片
- 0
- 允许分片
- 1
- 片偏移
- 占13位
- 以8个字节为偏移单位
- 指出该片在原分组中的相对位置
- 每个分片长度是8字节的整数倍
- 首部检验和
- 占16位
- 只校验分组的首部
- 不校验数据部分
- 生存时间TTL
- 占8位
- 数据报在网络中可通过的路由器数的最大值
- TTL被减为0,则该分组必须被丢弃
- 协议
- 占8位
- 指出分组是使用何种协议
- 6:TCP
- 17:UDP
- 源地址字段
- 4字节
- 目的地址字段
- 4字节
- 版本
- 三个长度标记
- 首部长度:4B
- 总长度:1B
- 片偏移:8B
相关协议
- ARP协议
- 在局域网中,通过目标ip地址得到目标mac地址的协议
- ICMP协议
- 特点
- ip协议的补充
- 介于网络层和传输层
- 基于ip协议
- icmp包封装在IP包中
- 功能
- 传输网络诊断信息
- ICMP包类型
- 错误信息
- 源头冷却
- 源主机向目的主机传送数据过快
- 目的主机无法快速处理
- 此时发送该类型ICMP包,请求源主机温柔点~
- 目的地无法到达
- 路由器接收到一个没法进一步接力的ip包时发出该类型ICMP包
- 超时
- TTL(IPv4)随经过的路由器而递减
- 当TTL值减为0时,IP包超时
- 重新定向
- 路由器收到不应该收的ip包
- 此时路由器向源主机发送该类型ICMP包
- 提醒源主机修改路由表
- 源头冷却
- 咨询信息
- 回音
- ping
- 使用流程
1、使用ping命令
2、向目标主机发送ICMP包(Echo询问类型)
3、目标主机接收到ICMP包
4、目标主机回复ICMP(Echo询问类型)
- 回音
- 错误信息
- 特点
- 路由选择协议
-
内部网关协议IGP
- 目标
- 路由器之间不断交换路由信息
- RIP
- 定义
- 基于距离向量的路由选择协议
- 优劣
- 简单
- 只适用于小型互联网
- 特点
仅和相邻路由器交换信息
交换的信息:自己的路由表
按固定时间间隔交换路由信息:30秒
-
工作原理
- 刚工作时,只知道直接连接的网络的距离
若干次更新后,所有路由都知道各个网络的路径地址
通过路由收敛,得到正确的路由选择信息
- 定义
- OSPF
- 定义
- 开放最短路径优先
- 克服RIP缺点
- 原理简单,实现复杂
- 与RIP的不同
- 向域内系统所有路由器发送信息
- 发送的信息
- 与本路由器相邻所有路由器的链路状态
- 链路状态发生变化时,用洪泛法发送信息
- 全局
- RIP知道
- 所有网络的距离
- 下一条路由器
- RIP不知道
- 全网的拓扑结构
- RIP知道
- OSPF更新过程收敛得快
-
流程
- 定义
- 目标
-
外部网关协议EGP
- BGP
-
五、传输层
-
传输层的由来
- mac和ip解决了在互联网任意两台机上建立通信的问题
- 但没有解决在两台机上的进程间建立通信的问题
-
传输层的功能
- 建立端口到端口的通信
- 顺序控制
- 重发控制
- 流量控制
- 拥塞控制
- 提高网络利用率
- 对比:网络层
- 建立主机到主机的通信
- 识别TCP/IP或UDP/IP通信
- 五个信息
- 源ip
- 目标ip
- 协议号
- 源端口号
- 目标端口号
- 五个有一个不同,视为其他通信
- 五个信息
- 建立端口到端口的通信
-
传输层协议
-
UDP协议
- 组成
- 标头: 定义了发出端口/接收端口
- 数据
- udp数据包全放在IP数据包的数据部分
- 长度
- 标头
- 8个字节
- udp数据包总长度不超过65535字节
- 标头
- 优点
- 简单
- 易实现
- 缺点
- 可靠性差
- 数据包发送后,无法知道对方是否收到
- 可靠性差
- 组成
-
TCP协议
- 组成
- 标头
- 数据
- 长度
- TCP数据包没有长度限制
- 通常tcp数据包不会超过IP数据包
- 可近似认为,是有确认机制的UDP协议
- 每发一个数据包,都要求确认
- 收不到确认,则重发
- 优点
- 可靠性高: 能确保数据不会遗失
- 缺点
- 过程复杂
- 实现困难
- 耗较多资源
- 组成
-
TCP VS. UDP
- 可靠 —— 不可靠
- 面向连接 —— 面向无连接
- udp:用于对高速传输和实时性有较高要求的通信
- IP电话
- 多播与广播通信
- 基于广播的协议
- RIP
- DHCP
- tcp
- 传输控制协议
- udp
- 用户数据包协议
-
常用端口号
- 20:FTP-DATA
- 21:FTP-CONTROL
- 22:SSH
- 23:TELNET
- 25:SMTP
- 53:DNS
- 80:HTTP
-
-
TCP流通信
- 背景
- 计算机数据本质是有序的0/1序列
- 0/1序列如以byte为单位,就叫做文本流
- 目标
- 实现端到端的可靠通信
- 确保数据到达的顺序与文本流顺序相符
- 实现形式
- 虚拟了文本流的通信
- 在不同计算机间进行文本流的交互
- 流的要点:次序
- 保持TCP包的次序
- 防止片段碎片化
- 如何确保可靠 & 顺序
- ACK回复 & 重传
- 接收方每收到一个片段后,发送一个ACK回复片段给发送方
- 收到片段序号为L
- 则ACK回复片段的回复号为L + 1
- 发送方一定时间内未收到ACK回复,则重新发送该片段
- 接收方每收到一个片段后,发送一个ACK回复片段给发送方
- 滑动窗口
- 特点
- 同时应用于接收方和发送方,收发双方各有一个滑动窗口
- 片段位于滑窗中时,表示tcp正在处理该片段
- 滑窗越大,同时处理的片段数目越多
- 对于“不那么乱”的片段
- 利用缓存保存下来
- 期望在一定时间内补充上之前的片段
- 对于“乱得厉害”的片段
- 拒绝,不发送对应的ack
- 实现:滑窗
- 特点
- ACK回复 & 重传
- 滑动窗口
- 累计ACK回复
- tcp协议并不是每个片段都发送ACK回复
- 一般利用一个ack回复通知连续多个片段的成功接收
- 收到片段且应该回复ack时,会故意延迟一段时间
- 滑窗结构
- 流量控制
- 窗口
- 累计ACK回复
- 重新发送
- 目的
- 实现tcp片段传输的可靠性
- 重新发送机制
- 超时重新发送
- 快速重新发送
- 目的
- tcp拥塞控制
- tcp片段头部格式
- 组成
- 出发端口、目的地端口
- 序号:使数据片段整理成文本流
- ack位:设定后,回复号才有效
- ack回复号
- 说明接收方期待接收的下一个片段
- 最后接收到的片段序号 + 1
- SYN,占一位
-
FIN,占一位
- 组成
- 背景
-
TCP控制
-
组成
-
重传控制
-
连接管理
-
滑窗
-
流量控制
-
拥塞控制
-
-
Nagle算法
- 目的
- 提高网络利用率
- 解决糊涂窗口综合症
- 定义
- 发送端有该发送的数据
- 该发送的数据很少
- 进行延迟发送的一种处理机制
- 满足条件则发送
- 已发送的数据都已经收到确认应答时
- 可以发送最大段长度(MSS)的数据时
- 目的
-
流量控制 vs. 拥塞控制
- 流
- 收发双方点对点通信量的控制
- 抑制发送端数据的速率,以便接收端来得及接收
- 点对点的局部性问题
- 拥
- 确保通信子网有传送待传数据的能力
- 防止过多数据注入到网络中
- 络不至于过载
- 全局性问题
- 前提:网络能承受现有网络负荷
- 控制网络传输的效率
- 确保通信子网有传送待传数据的能力
- 流
-
拥塞控制方法
-
慢开始 & 拥塞避免
- 快重传 & 快恢复
-
-
-
tcp连接的建立与断开
- 建立连接
- 目的
- 连接双方交换初始序号ISN
- 第一个片段序号随机生成
- 交换实现形式
- 通过SYN片段实现
- 连接双方交换初始序号ISN
- 过程:三次握手
-
本质:双方互发含有自己的ISN的syn片段
-
- 总结
- SYN = 1, seq = x
- SYN = 1, ACK = 1, seq = y, ack = y + 1
- ACK = 1, seq = x + 1, ack = y + 1
- 目的
- 连结通信
- 功能
- 两段进程利用该连接进行通信
- 功能
- 断开连接
连接终结通过特殊片段FIN
-
为什么要四次,而不合并
- tcp连接允许单向关闭
- 某端已经可以关闭,但另一端不一定可以
-
为什么要等2MSL
- 保证A发送的最后一个ACK报文段能够到达B
- 防止已失效的连接请求报文段 出现在本连接中
-
过程:四次握手
- 连接双方交换了四个片段
- 两个FIN
-
个ACK
- 连接双方交换了四个片段
-
总结
- FIN = 1, seq = u
- ACK = 1, seq = v, ack = u + 1
- FIN = 1, ACK =1, seq = w, ack = u + 1
- ACK = 1, seq = u + 1, ack = w + 1
ACK, SYN, FIN都一定等于1
-
tcp连接状态管理
- 建立连接
六、应用层
-
应用层协议
- www
- ftp
- DHCP
- DNS
- 功能:将网址转为ip地址
- DNS服务器
- 网络中进行域名解析的一些服务器
- 特点
- 基于udp,应用层
- HTTP
-
dhcp
- 基本概念
- 工作在应用层,基于udp协议
- 功能 & 作用
- 动态分配IP地址
- 协议规定
- 每个子网络,会有一台机负责管理本网络的所有IP地址
- 新的计算机加入网络
- 向dhcp服务器发送一个dhcp请求
- 申请IP地址和相关网络参数
- 申请步骤
- 基本概念
-
dhcp申请步骤:
- 发dhcp包
- 帧头部
- 发出方MAC地址
- 接收方MAC地址
- 未知,填入FF-FF-FF-FF-FF-FF
- ip头部
- 发出方ip
- 未知,填入0.0.0.0
- 接收方ip
- 未知,填入255.255.255.255
- 发出方ip
- udp头部
- 发出方端口: 68
- 接收方端口: 67
- 以广播形式发送
- 帧头部
- dhcp服务器接收包
- 检测到ip
- 发出方:0.0.0.0
- 接收方:255.255.255.255
- 明白该包是发给自己的
- 检测到ip
- 读取dhcp包
- 分配ip地址
- 回送一个DHCP响应包
- 帧头部
- 发出方mac地址
- 接收方mac地址
- 已知
- ip头部
- 发出方ip
- 已知
- 接收方ip
- 已知,但尚未配置
- 仍填入255.255.255.255
- 发出方ip
- udp头部
- 发出方端口:67
- 接收方:68
- 帧头部
- 发dhcp包
-
http
目的: 解决文件传输的问题
定义: web文档传输协议
特点: 明确区分哪端是客户端,哪端是服务器端
-
实现
- 请求: 生成针对目标web服务器的http请求报文
- 回复: 对请求的内容的处理,并回传
- 过程
-
URI vs. URL
- URI
- Uniform Resource Identifier
- 统一资源标识符
- 符串表示某一互联网资源
- URL
- Uniform Resource Locator
- 统一资源定位符
- 表示资源的地点
- URL 是 URI的子集
- URI
-
格式
- 起始行
- 只有一行
- 是请求/回复最重要的信息
- 请求起始行:想要什么
- 回复起始行:发生什么
- 头信息
- 多行
- 每行含一对键值对
- 主体
- 具体的资源
- http协议请求
- 起始行
-
请求方法类别
- GET
- 将特定资源传送给客户端
- 传输一些不重要的数据
- url?变量名 = 变量值
- POST
- 向服务器端提交数据
- 使用post,url不再被改写,且数据位于http请求主体
- PUT
- 传输文件
- 类似FTP文件上传
- 要求在请求报文的主体包含文件内容
- 并保存到请求URI指定的位置
- 不带验证机制
- DELETE
- 删除文件
- 与put相反
- 不带验证机制
- HEAD
- 和GET方法一样
- 获得报文首部
- 不返回报文主体部分
- 用于确认URI的有效性及资源更新的日期时间
- OPTIONS
- 用来查询针对请求URI指定的资源支持的方法
- 查询支持的请求方法
- TRACE
- 追踪路径
- GET
-
报文类别
- 请求报文
- 组成
- 请求方法
- 请求URI
- 协议版本
- 可选的请求首部字段
- 内容实体
- 组成
- 响应报文
- 组成
- 协议版本
- 状态码
- 原因短语
- 用以解释状态码
- 可选的响应首部字段
- 实体主体
- 组成
- 请求报文
-
状态码类别
- 1XX
- 信息性状态码
- 接收的请求正在处理
- 2XX
- 成功状态码
- 请求正常处理完毕
- 相关状态码
- 200:ok
- 请求被正常处理
- 204:No Content
- 请求处理成功
- 但没有资源需要返回
- 206:Partial Content
- 范围请求
- 对资源某一部分的请求
- 200:ok
- 3XX
- 重定向状态码
- 需要进行附加操作以完成请求
- 相关状态码
- 301:Moved Permanently
- 永久性重定向
- 资源的URI已更新
- 客户端请更新书签引用
- 302:Found
- 临时性重定向
- 表示资源的URI已临时定位到其他位置
- 希望用户本次能使用新URI访问
- 301:Moved Permanently
- 4XX
- 客户端错误状态码
- 服务器无法处理请求
- 相关状态码
- 400:Bad Request
服务器无法理解请求
表示报文中存在语法错误 - 401:Unauthorized
- 表示请求需通过http认证
- 第一次返回401,本页面需认证
- 第二次返回401,认证失败
- 403:Forbidden
- 对请求资源的访问被拒绝访问
- 404:Not Found
- 服务器上没有请求的资源
- 400:Bad Request
- 5XX
- 服务器错误状态码
- 服务器处理请求出错
- 相关状态码
- 500:Internal Server Error
- 内部资源出现故障
- 503:Service Unavailable
- 服务器暂处于超负载或正在进行停机维护
- 500:Internal Server Error
- 302:重新定向
- 资源这里没有,但知道另一个地方有
- 404:无法找到
- 找不到想要的资源
- 1XX
-
无状态
- 定义
- 每次请求-回复,都重新建立tcp
- 尽管已做优化,但依然保持无状态特性
- 致使服务器无法知道上次请求和本次请求来自同一个客户端
- 每次请求都是一个全新的请求
- 协议自身不对请求和响应之间的通信状态进行保存
- 每次请求-回复,都重新建立tcp
- 定义
-
使http保持状态
- Cookie
-
使http持久连接
- 目的
- 节省流量
- 防止造成无谓的tcp连接的建立和断开
- 持久连接宗旨
- 一次tcp连接后可进行多次请求和响应
- 管线化
- 一次发送多个请求,不等待响应
- 目的
-
Socket抽象层
- 定义
- 传输层之上,应用层之下
-
连接过程
- 定义
七、串联总结
- 网络通信就是交换数据包
- 发送包需要两个地址
- 对方的mac地址
- 对方的ip地址
- 发送包需判断对方是否在同一个子网络
- 同一子网
- 对方的mac地址
- 对方的ip地址
- 不同子网
- 网关的ip地址
-
对方的ip地址
- 同一子网
- 发送包需要两个地址