OSI模型各层详解
1. OSI概述
1.1 模拟器说明
1)模拟器的作用
搭建实验环境进行测试。
2)模拟器的类型
- PT:一般是学校中使用,命令不完整,且不能抓包
- GNS3:思科(CCNA,CCNP),命令行比较完整,可以抓包分析(运行IOS)
- EVE:思科(CCIE)
- ENSP:华为
1.2 集线器和交换机
1)集线器(HUB)
只是简单的将多个计算机串联起来(HUB带电源供电,以放大电信号)。HUB是物理层设备。
和HUB相连的所有主机都在一个冲突域内,所以同一时间只能有一个主机发送报文,而其他所有主机都只能接受。即某个时段,HUB接口中,只能有一个用户建立数据链路和目的端进行通信,而其他端口只能处于监听状态。
CSMA/CD:载波侦听多路访问/冲突检测 协议:是广播型信道中采用的一种随机访问技术的竞争型访问方法,是一种退让机制。
HUB集线器采用是是半双工通信机制。
2)交换机(Switch)
Switch和主机相连的每个接口都会把电信号(高低电频)转换为数字信号(100101010)。
交换机是拥有CPU、内存、缓存以及一系列芯片的,可以边缓存边转发,所以可以对从接口传入过来的数据进行处理。
Switch的每一个接口是一个冲突域,所以和交换机相连的所有主机都可以同时发送报文。
网桥:PC1 --> (电信号转换为数字信号) 网桥 (数字信号转换为电信号) --> PC2 (网桥还会对接收的信息进行纠错)
1.3 OSI七层模型概述
1)OSI七层&TCP/IP五层
- OSI七层:
- 应用层:文件、打印、消息、数据库和应用程序服务
- 表示层:数据加密、压缩和转换服务
- 会话层:对话控制
- 传输层:端到端连接
- 网络层:路由选择
- 数据链路层:成帧
- 物理层:物理拓扑
- TCP/IP五层图示:(TCP/IP四层是将数据链路层和物理层合并成了网络接口层)
2)对OSI七层各个层次的解释
- 第七层:应用层
- QQ、搜狗、思维导图等应用软件
- 第六层:表示层
- 转码的过程、压缩、应用软件之间的数据交互
- 第五层:会话层
- 迅雷下载、限速
- 应用层:数据 = PDU
- 第四层:传输层
- TCP、UDP
- TCP + 数据 = 段(segment)
- 第三层:网络层
- 路由、如何到达到对方
- IP + TCP + 数据 = 包(packet)
- 第二层:数据链路层
- MAC地址
- MAC + IP + TCP + 数据 = 帧(frame)
- 第一层:物理层
- 比特(bit)
2. 物理层(传输介质)
2.1 有线介质
2.1.1 双绞线
特点:电传输(线缆+水晶头)
- 传输距离:100m
- 传输介质:铜
- 误码率:线缆传输过程中受到干扰发生错误的比例
- 绞线的主要目的就是屏蔽信号,所以要绞在一起,绞的越紧抗干扰能力越强;全平的线容易受到干扰。
线缆的部分:
- 非屏蔽线:
- CAT5:五类线
- CAT5E:超五类线
- CAT6:六类线
- CAT6E:超六类线
- 建议使用六类线,部分六类线有屏蔽功能
- 屏蔽线:(屏蔽线外面有一层铝箔包裹,以屏蔽信号)
- CAT7:七类线
- 七类线默认就是屏蔽线,建议在机房环境下使用七类线
水晶头部分:(RJ45水晶头)
- 线序:线序从左到右
- 直通线和交叉线:
- 直通线:568B-568B、568A-568A
- 交叉线:568B-568A
- 通断规则:
- 4芯通:百兆(线序中的第1236通)
- 8芯全通:千兆(在应急情况下,可以将一根网线分成两个头,第1236和第4578)
- 设备连线标准:
- 老设备
- 交叉线:同接口相连(交换机接口-交换机接口,路由器接口-路由器接口,电脑接口-电脑接口)
- 直通线:异种接口相连(电脑接口属于路由接口)
- 现在的设备
- 直通和交叉随便插
- 老设备
POE设备:通过双绞线进行供电(类似一台2层或3层的交换机)
- 作用:供电 + 数据传输
- 支持:POE交换机
- 摄像头支持POE供电
- 无线路由器支持POE供电
- 图示:
2.1.2 光纤
特点:光传输(玻璃纤维,塑料)
- 不受电磁信号干扰
- 传输速率快:
- 1000M:G
- 10000M:TEN-G
- 100000M:E
- 传输距离大:
- 多模:2KM
- 类比于手电筒
- 单模:42KM
- 类比于激光
- 多模:2KM
- 光缆本身不值钱,但是接口比较贵(接口就是一个光模块)
2.2 无线介质(WiFi)
1)运营商网络
5G:
- 高频:波长比较短
- 干扰源:不容易受到干扰
- 特点:
- 价格贵
- 穿墙能力比较差
2.4G:
- 低频:波长比较长
- 干扰源:
- 电磁炉
- 蓝牙鼠标
- 电吹风
- 特点:穿墙能力比较好
2)无线路由器
- 把RJ45的有限网络,放出无线的信号。
3. 数据链路层
3.1 数据链路层概述
3.1.1 由来和功能
- 由来:单纯的数字信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思。
- 数据链路层的功能:
- 在数据链路层进行比特转换(电信号 --> 数字信号)
- 定义了数字信号的分组方式
3.1.2 以太网协议
以太网协议:
- 由来:早期许多公司都有自己的分组方式,后来形成了统一的标准,即以太网协议(ethernet)
- 规则:ethernet规定,MTU为1500字节
- 一组电信号构成一个数据帧
- 每一数据帧分为:报头head和数据data两部分
数据帧的构成:(head+data)
- head部分(固定的18个字节)
- 源地址:6字节
- 目的地址:6字节
- 数据类型+FCS(帧检测序列):6字节(2+4)
- data部分(最短46字节,最长1500字节)
- 帧的数据长度最小为 46 字节,最大为 1500 字节。
- 如果不足 46 字节时,会填充到最小长度。最大值也叫最大传输单元(MTU)
- 注意:
- head+data=(最短64字节,最长1518字节),如果超过最大限制就分片发送。
3.2 数据链路层:MAC子层+LLC子层
MAC Sub-layer(介质访问控制子层)
- 指定数据如何通过物理线路进行传输,并与物理层通信
LLC Sub-layer(逻辑链路控制子层)
- 对数据进行识别并纠错、重传(误码率)、协商速率等
- 若误码率较高,会直接将接口速率降低(如千兆变百兆),若再高,会将接口直接宕掉
- 全双共和半双共也是LLC子层协商的,正常情况下都是全双工,可以手动调
图示:
3.3 交换机与MAC地址
MAC地址组成:12个十六进制数字组成
- 前6位:厂商编号
- 后6位:流水线号
MAC地址表:MAC -> 接口
- 若交换机中的MAC表有目标MAC的记录:直接查表转发
- 若交换机中的MAC表没有目标MAC的记录:就发送给除了自己的所有接口(广播的方式)
- MAC地址表如果过大,内存可能会溢出
接口带宽:
- E:10M/100M
- F:100M
- G:1000M
- Ten-G:10000M
3.4 接口UP的方式(双UP和单UP)
- 物理层的UP
- 协议的UP
- 协议的UP是需要LLC子层来进行协商看能否UP起来的
- 双UP才能转发数据(接口和协议都UP)
3.5 双工
全双工:
- 收发能同时进行
半双工:
- 收发不能同时进行
- 如HUB集线器
4. 网络层
4.1 网络层概述
1)由来
大网络由一个个小的彼此隔离的局域网组成,以太网包只能在一个局域网内发送。
一个局域网是一个广播域,以太网的广播包只能在一个广播域内发送,跨广播域通信只能通过路由转发。
那么我们便要用一种方法来区分哪些计算机属于同一广播域,如果在同一广播域就采用广播的方式发送,如果不是同一广播域就采用路由的方式发送(向不同的广播域/子网发数据包)。
由此我们便引入一套新的地址来区分不同的广播域/子网,这套地址就叫做网络地址。
2)网络层的作用
- 网络层也叫Internet层,负责将报文从源端发送到目的端
- 网络层为网络中的设备提供逻辑地址
- 网络层负责数据包的寻径和转发
3)协议
- 路由器:三层设备,识别到IP地址
- 协议:
- IP:ipv4、ipv6
- ICMP:ping、tracert
- ARP:IP --> MAC(ARP是2层和3层之间的协议)
- RARP:MAC --> IP
- IGMP:组播加入协议
4.2 IP包
1)IP包概述
- 版本:
- ipv4:普及
- ipv6:下一代
- 报文长度
- 总长度
2)数据包切片
- 切片大小
- MTU默认1500字节
- 如果小包能通过,但是大包通过不了,就要考虑是否是MTU切片的问题了
- Flag位:
- 置0时能切片,置1时不能切片
- ping命令:
- ping -l 1440 -f 114.114.114.114
- -l 指明单个ICMP包大小,-f 设置不能切片
3)生存时间(TTL)
- TTL(Time To Live):
- TTL表示数据包在三层设备存活的时间
- TTL值表示IP包被路由器丢弃之前允许通过的最大网段数量。实际上TTL是IP数据包在网络中可以转发的最大跳数
- TTL是发送主机设置的,以防止数据包不断在IP网络上循环,转发IP数据包时,要求路由器至少将TTL减小1
- TTL的最大值是255,TTL的另一个推荐值是64
- 实现过程:
- TTL字段由IP数据包的发送者设置,在整个转发路径上,每经过一个路由器,路由器都把该TTL值减1,然后再将IP包转发出去
- 如果在IP包到达目的IP之前,TTL减少为0,路由器会将丢弃收到的到的TTL=0的IP包,并向IP包的发送者发送ICMP time exceeded消息
- TTL为0的响应报文,H3C、HUAWEI的设备默认是关闭的,如果需要探测则要将其开启
4.3 ICMP协议
ping和tracert会使用ICMP协议
ICMP的两个重要类型码(icmp-type)
- 请求码:8
- 应答码:0
路由跟踪:检测到的路径(三层)
- tracert -d 114.114.114.114
C:\Users\24698>tracert -d 114.114.114.114 通过最多 30 个跃点跟踪到 114.114.114.114 的路由 1 3 ms 1 ms 1 ms 192.168.1.1 2 20 ms 30 ms 5 ms 100.97.232.1 3 9 ms 5 ms 7 ms 111.38.4.157 4 10 ms 12 ms 11 ms 120.210.231.177 5 10 ms 13 ms 12 ms 120.193.121.38 6 11 ms 11 ms 13 ms 114.114.114.114 跟踪完成。
4.4 ARP协议
1)IP地址和MAC地址
- IP地址:源IP地址 --> 目的IP地址
- MAC和IP的对应:
- IP --> MAC:192.168.1.1 ac-f9-70-f8-db-ca 动态
2)ARP广播
- 访问内部网络中的主机:
- ARP广播:通过IP地址获取MAC地址
- 目的MAC地址:FF:FF:FF:FF:FF:FF
- 交换机接收到广播包:泛洪 --> 发送给除了接收接口之外的所有接口
- 发送目的地址为全F的广播包(呼叫IP为192.168.30.123的主机,把你的MAC地址告诉我)
- 目标主机收到后进行响应(123主机收到后,将自己的MAC地址作为响应报文的源MAC地址,对方的MAC作为目标MAC地址,并将对方MAC记入本地ARP表)
- 此时双方的ARP表中都有了彼此的MAC和IP对应的记录。以后的通信就可以直接查表发送数据了。
- ARP广播:通过IP地址获取MAC地址
- 访问外部网络(不是在同一个广播域)
- 访问网关:192.168.30.254
- 获取网关的MAC地址
- 通过ARP广播:FF:FF:FF:FF:FF:FF
- 然后网关对报文进行转发,将其转发到其他网段。
- 访问网关:192.168.30.254
3)ARP绑定
- 在Linux下:
- 新建/etc/ip-mac文件,写入IP与MAC的绑定信息
- 192.168.1.101 ac:f9:70:f8:db:aa
- 然后手动执行绑定:
- arp -f /etc/ip-mac
- 新建/etc/ip-mac文件,写入IP与MAC的绑定信息
- 在Windows下:
- 命令行执行:arp -s 192.168.1.101 ac:f9:70:f8:db:aa
4)ARP攻击(ARP欺骗、中间者攻击)
- 攻击:网络执行法官、聚生网管、P2P终结者
- 防御:使用ARP绑定即可杜绝这类攻击
5)ARP协议工作方式详细分析
- 假设:主机192.168.1.101/24 访问 192.168.1.102/24
- 首先通过IP地址和子网掩码来区分出自己所处的子网,然后进行判断:
- 同一子网:目标主机MAC,目标主机IP
- 不同子网:网关MAC,目标主机IP
- 分析101和102是否处于同一网络
- 同一网络(在这个案例中两者是同一网络)
- 不同网络:
- 先通过ARP获取网关的MAC地址,然后将包发送给网关,再由网关来转发。
- 同一网络(在这个案例中两者是同一网络)
- 这个包会以广播的方式在发送端所处的局域网内传输,所有的主机接收后拆开包:
- 若发现目标IP为自己就响应,返回自己的MAC,并在主机的ARP表中记录对方的MAC
- 若发现目标IP不是自己,则直接将包丢弃
4.5 IP地址
4.5.1 IP基础
基本常识:
- 网关地址:
- 家用级别:192.168.1.1
- 企业级别:192.168.1.254
- 私网和公网:
- 私网:可以任意使用,相对可以任意规划
- A类:10.0.0.0 - 10.255.255.255
- B类:172.16.0.0 - 172.31.255.255、172.16.0.0/12
- C类:192.168.0.0 - 192.168.255.255
- 公网:外网使用,运营商申请(自动分配、非固定或固定IP地址)
- 114.114.114.144、8.8.8.8等
- 私网:可以任意使用,相对可以任意规划
- 进制:
- BIN:二进制
- OCT:八进制
- HEX:十六进制
- DEC:十进制
掩码:
- 从左往右不能中断:
- 255.0.0.0 /8
- 255.255.0.0 /16
- 255.255.255.0 /24
- 255.255.255.255 /32
- 划分网络部分和主机部分:
- 192.168.1.1/24
- 192.168.1.1/16
网段:
- 同网段:
- 直接进行访问(必须要在同一个广播域下)
- 不需要通过中间的网关
- 不同网段:
- 发送给网关:同一个广播域(同一个交换机)
- 需要通过中间的网关
- 网段:192.168.30.0/24
- 网络地址:192.168.30.0
- 网络部分:192.168.30
- 主机部分为0
- 掩码:255.255.255.0
- 网络地址:192.168.30.0
专业名词:
- 现网:现实网络、运行网络
4.5.2 IP地址类型(主类地址,有类地址)
主类地址图示:
单播地址:能够配置使用的,可以一对一进行传递
- A类:
- 第一组:0XXX XXXX
- 范围:1-126(去掉特殊地址0和127)
- 默认情况:
- 主类、有类
- 掩码:/8
- B类:
- 第一组:10XX XXXX
- 范围:128-191
- 默认情况:
- 主类、有类
- 掩码:/16
- C类:
- 第一组:110X XXXX
- 范围:192-223
- 默认情况:
- 主类、有类
- 掩码:/24
组播地址:可以一对多
- 协议:UDP
特殊地址:特殊用途的
- 默认路由:0.0.0.0/0
- 本地环回地址:127.xx.xx.xx(访问这个IP就是访问自己)
- 网络地址:
- 比如对于172.16.100.1/16来说,172.16.0.0就是网络地址
- 网络部分不变,主机部分为0
- 用途:和掩码配合,标记网段
- 广播地址:
- 全局广播地址:(针对的是所有网段)
- 二层广播地址:FF:FF:FF:FF:FF:FF,交换机接收到二层广播会泛洪(转发给除了自己的所有接口)
- 三层广播地址:255.255.255.255,三层设备
- 本地广播地址:(针对特定的网段)
- 网络部分不变,主机部分为全1的地址,如192.168.100.255
- 全局广播地址:(针对的是所有网段)
4.5.3 IP地址类型(无类地址)
有类和无类IP地址:
- 有类:
- A类:掩码/8
- B类:掩码/16
- C类:掩码/24
- 无类:
- 掩码/1-32
A类地址:1.0.131.0/24
- A类的无类地址(1.0.131.0/24)
- A类的主类:掩码 /8
无类IP地址:
- 同网段:
- 网络地址和掩码一样:一定是在同网段
- 网络地址和掩码不一样:不一定不在同网段
- 路由器:具有隔离广播的功能(二层和三层广播)
- 掩码变长,可用的IP地址就会变少,网段的数量就会变多
特殊网段:
- 互连网段:/30
- 可用地址:2^(32-30)-2 = 2
- 互连地址,给网络设备使用的,如两个路由器相连
- 逻辑网段:/32
- loopback口
- 业务网段:
- 打印机、服务器、手机
4.5.4 子网的划分
子网划分的好处:
- 将一个大的广播域划分成几个小的广播域,减少网关设备所承载的负载量
- 有效的避免IP地址的浪费,是一个大的地址开年更加弹性和更加灵活的进行分配
若不划分子网:
- 会出现大量的局域网地址,同时向一个网关发送请求,会引起网关设备的负载过高
- 会引起局域网内的大量广播数据传送,形成广播风暴
- 会非常浪费地址空间,有可能只有两台主机或一台主机,就要分配一个C类地址
子网划分图示:
子网数的计算:
- 某网络中可用的主机地址:
- 2的N次方-2 (N表示IP地址中主机部分的二进制位数)
- 如202.96.23.0这个C类地址中有2的8次方个可用主机地址
- 某网络中的子网数:
- 2的N次方(N表示子网部分的二进制位数),如上面的子网就有2的3次方个
5. 传输层
5.1 传输层概述
5.1.1 TCP和UDP协议
TCP和UDP图示:
TCP和UDP的应用场景:
- TCP:可靠、面向连接,有虚拟管道的概念(构建在网络层之上)
- 公屏讨论区:TCP
- 收发邮件:TCP
- 发送邮件:SMTP(简单邮件传输协议),端口:25/tcp
- 接收邮件:POP3(邮局协议版本3),端口110/tcp
- UDP:不可靠,但具有及时性
- 直播语音+视频:UDP
5.1.2 查看应用端口号:(Windows中)
- 查看IP地址对应的链接
- netstat -nat | find '14.125.177.33'
- 查看PID对应的端口和地址
- netstat -nat | find '1778'
5.2 TCP报文首部详解
5.2.1 TCP首部图示
5.2.2 TCP报文首部各字段的解释
- Source Port Number:源端口
- 之所以占据16个bit位,是因为2的16次方正好可以标识65535个端口号
- Destination Port Number:目标端口
- Sequence Number:请求时附带的随机序列号
- Acknowledgement Number:应答时附带的序列号
- 在对方请求时附带的序列号的基础上加1
- Header Length:报文首部的长度
- 4个bits表示首部最长的长度为2个4次方,也就是可以标识15段,一段为4个字节,则最长长度为60个字节
- Reserved:报文的标识位,占据6bit,可表示6个flag
-
URG:报文段中发送的数据是否包含紧急数据,值为1时表示有紧急数据(后面的紧急字段只有当URG值为1时才生效)
- ACK:表示是否前面的确认号字段是否有效,ACK=1,表示有效(TCP规定,连接建立后,ACK必须为1)
- PSH:告诉对方收到该报文段收是否应该立即把数据推送给上层,如果为1,则表示对方应该立即把数据提交给上层,而不是缓存起来
- RST:与主机的连接出现了严重错误(如主机奔溃),必须释放连接,然后再重新建立连接(或者说上次发送的数据有问题,主机拒绝响应)
- SYN:在建立连接时使用,用来同步序号
- 当SYN为1,ACK为0时,表示这是一个请求连接的报文段
- 当SYN为1,ACK为1时,表示对方同意建立连接
- SYN为1,说明这是一个请求建立连接或同意建立连接的报文,只有在前两次握手中SYN才置1
- FIN:标记数据是否发送完毕,如果FIN=1,将相当于告诉对方,自己的数据已经发送完毕,对方可以释放连接了
-
- Windows Size:滑动窗口的大小
- 用以告知对方自己接受缓冲区的大小,以协商出一个合适的传输速率
- TCP Checksum:TCP的校验和,提供额外的可靠性
- Urgent Pointer:标记进制数据在字段中的位置
- Options:可选部分(这部分的最大长度为40Bytes)
- Data:数据部分
5.3 TCP的连接和断开(三次握手,四次挥手)
1)图示
2)关于2MSL
在四次挥手的最后阶段,客户端进入TIME_WAIT状态,继续等待2MSL的时间再完全断开连接。
在四次挥手的过程中,哪一方先调用close,哪一方就会在第三次挥手后继续等待2MSL的时间。
为什么要等待2MSL:MSL即为一个数据包在网络上存活的最长时间,即数据包从被发送到被接收所经历的最长时间;2MSL即为在四次挥手的第三次过程中,先发起中断连接的一方将会继续等待2倍MSL的时间后再完全中断tcp链接。等待2倍的MSL时间就是因为防止服务端没有收到最后一次的ACK,即在2MSL的时间内,若服务端没收到最后的ACK,在超过超时时间(MSL)后,服务端会认为客户端没收到第三次挥手中的FIN,这时服务端会再发一份FIN,这时一共经历了2MSL的时间,而客户端此时等待了2MSL的时间,正好可以接收这一次服务端重发的FIN请求,从而有效的保证了所有的请求和回应都会被对方接收。
5.4 TCP FSM(TCP的有限状态机)
TCP的有限状态机(TCP FSM)其实就是TCP的11中状态。