TCP/IP协议栈
IP
IP数据报
IP数据报格式
网络层传输单元: 分组 是IP数据报切下来的小单元
数据部分是传输层的报文段,这里不作为重点,
主要研究IP数据报首部
字节:words 位 bit
20 × 32 Byte(B)
IP数据报首部格式
https://www.zhihu.com/question/53780216 感谢大佬解答
首部长度 (长): 4位 0000~1111 总共可以表示16个数字
首部长度的单位是4字节: 若 首部长度为8 , 则实际上首部长度大小5×4Byte = 20B
∵报头的 (总宽为20Byte)
首部长度字段的最小值为5
⭐问题: 为什么这里首部长度1bit 代表是4字节呢 ???
其中首部长度这个首部字段表示了IP头部的总长度,但它不是直接表示,
这里的首部长度 借助4位 表示的是整个IP数据报首部大小
区分服务:优先级,希望获得哪种服务
生存时间TTL:分组的寿命,每经过一个路由器,生存时间-1,防止无法交付的数据报无限的在链路中兜圈子
协议: 数据部分的协议
首部检验和:检验首部
IP数据报分片
封装时 IP分组封装到数据帧后,IP分组就成了数据部分,此时该部分不能大于MTU (最大传输单元) -Maximum Transmission Unit (1500字节)
简而言之:IP数据报整体 <=MTU
当数据帧的数据部分超过MTU, 此时 结合 数据帧的数据部分(IP分组)的首部 对数据进行分片
IP分组首部 分片 = 标识 + 标志 + 片偏移
IP数据报分片过程
IP数据报 头:存放了分片信息
IP数据报 数据部分: 被分片的小羊羔
片偏移量 : 当前片段的数据部分开始数字 / 8 字节
IP数据报的三种传播方式
单播 - 一对一 / 点对点
广播 - 一对所有
组播(多播) - 一对多 (UDP)
需要组播路由器的支持 - 具有复制功能的路由器
这种路由器既能支持单播,也能支持组播
问题:怎么在R2组播路由器分发的时候,怎么同时发给属于这一组的所有主机呢? - 怎么找到组
IP组播地址
一个D类地址 = 一个组播组 ,只能作为目标地址
源地址只能是单播地址
基于UDP, 尽最大努力交付
硬件组播
局域网范围内 决定 给那些主机,怎么给这些主机传播数据报
组播也需要组播MAC地址
组播MAC地址开头:01-00-5E
MAC地址是由IP组播 组的地址最后23位转换
转化方法: ⭐
01-00-5E开头
后23位追加到开头后,把23位每四位写成一个数 (转十六进制)
存在问题:同一组内的IP地址不一样,但是映射成同一MAC地址
所以还要在IP层进行软件过滤
IGMP协议与组播路由选择协议
通过IGMP协议,判断该组播路由器所连局域网当中,是否还有可以接受组播数据报的 主机
组播路由选择协议:路由器之间的路径选择
IP地址
后来由于IP地址不够满足使用了,引入了子网的划分,后来引入了超网
分类的IP地址
互联网中的ip地址
绿色: 无编号网络,无名网络
红色: LAN
一个路由器不同接口可以连接不同网络
特殊IP地址
0.0.0.0 本网范围内表示主机
0.0.0.1 本网内特定主机
255.255.255.255 本网范围内发广播
私有IP地址
私有IP地址如何和外部通信呢 - NAT技术
网络地址转换NAT
专用网 ->因特网 LAN->WAN
因特网->专用网 WAN->LAN
分类的IP地址
把一个很大的地址空间分成几类
1B=8bit
A类网络编号 全1和全0不能使用 ; 主机号 全1和全0不能使用
B类地址 网络号全0不能使用 ; 主机号 全1和全0不能使用
C类地址 网络号全0不能使用 ; 主机号 全1和全0不能使用
子网的划分
将主机号部分的高位地址作为子网号
子网掩码
外部是看不见本单位内的子网划分的,所以当外部传入145.13.3.10的时候,只能找到对应路由器 如何找到路由器的子网对应客户端呢? – 子网掩码
使用方法: 目的IP地址 和 子网掩码 逐位相与 =子网网络地址
不同掩码划分在CIDR技术中会进一步讲解
子网掩码练习题
255.255.255.255 本网范围内发广播
主机所在的子网号180.80.76.0
剩下主机号的位数全为1即可
利用子网掩码进行分组转发
是否直接交付:目的IP与子网掩码计算后,得到的地址 与某一子网地址一致,直接交付
若不是直接交付,就是特定路由: 找到路径 找到路径后去检查他的下一跳,直至找到,或全部找完
默认路由: 是在找不到无能为力了
生存时间结束: 丢弃 ,报告转发分组出错
构成超网
无分类编址CIDR
引入变长子网掩码, 主机多的时候,分配一个较短的子网掩码,主机少的时候,分配一个较短的子网掩码
/20 : 前20位 作为网络前缀, 32-20=12 剩下12位作为主机号
CIDR地址块:网络前缀相同的连续IP地址
CIDR的子网掩码:前缀有多少位,就有多少个1
构成超网
将多个子网聚合成一个大的子网(超网)
方法:将网络的前缀缩短
修改网络前缀 /n ,n为最大重复长度
最长前缀匹配
前缀越长 : 地址块越小 -> 主机位数越少
在符合条件的情况下, 选择最精确的那个,前缀最长的那个
B
CIDR技术中心,
子网号是可以全0和全1的 所以不用减
主机号 全0代表本网络,全1代表广播地址
主机如何获得IP地址
静态配置
动态配置 - DHCP服务器
DHCP协议: 应用层协议 ,基于UDP
但是是网络层的基础
DHCP在通信过程中,用的都是广播方式
IPV6
NAT,CIDR都是延缓IPV4的消耗速度,但是现在仍然不够用了
升级后的IPV6可以支持QoS,更好的解决网络延迟和阻塞
IPV6数据报格式
IPV4 : 首部长度字段, 总长度字段
IPV6:有效载荷长度 :扩展首部+数据部分的大小
每一个扩展首部内,都有一个下一个首部字段
基本首部 - 扩展首部1, - 扩展首部2 … - 扩展首部n - 数据部分
数据部分是上层传来的报文段
跳数限制: 生存时间.
IPV4 和 IPV6对比
因为IPV6在路由器内不能分片,只能在主机上分片
所以IPV6在传输过程中,太大了超过MTU,会返回ICMPV6分组过大的差错报文
IPV6地址表示形式
不采用点分十进制
采用冒号十六进制记法
IPV6基本地址类型
IPV6向IPV4过渡的策略
双栈协议 - 双通道
一个通道接受IPV4,一个通道接受IPV6
隧道技术 - 封装转化
把IPV6作为数据存入IPV4的数据部分,伪装成IPV4
移动IP
区分:
动态IP :使用DHCP协议在局域网内部的主机,动态的获得一个IP地址
移动IP : IP地址不变,但登陆地理位置发生改变
A给B家里寄信,但是B在公司,于是在家里的B妈妈就转发给了在公司的B
移动IP核心: 地理位置变化, IP不变
ARP高速缓存(IP与MAC地址的映射)
发送数据的过程
ip地址(逻辑地址),mac地址(物理地址)
网络层:加头
加上源主机IP和目的IP
链路层:加头加尾
加上源MAC地址和目的MAC地址
怎么获得目的MAC地址呢? --ARP
ARP存储的都是一个局域网内的IP和MAC对应
在一个局域网LAN内部
第一次建立IP与MAC之间的联系
广播发送源IP 目的IP 源MAC地址 FF-FF-FF-FF-FF-FF代表广播分组
然后符合目的IP的主机 会应答源IP的MAC地址
在两个局域网LAN之间
目的IP和自己的子网掩码按位相与,判断是否在这个网关内
先检查ARP内有没有IP和MAC的映射
无
查询当前默认网关(与外界沟通的路由器)的MAC地址
到了新的局域网LAN内,源IP不变,目的IP不变,但是源MAC地址和目的MAC地址会发生变化
为什么交换机走5不走4,参考交换机那一节
ARP例题
ICMP+IGMP
处于网络层和传输层之间,起到桥梁的作用
更好的转发IP数据报,提高交付成功的机会
ICMP
丢弃差错数据后,需要发送ICMP报文,
支持主机或路由器 实现 差错(异常)报告 和 网络探寻
ICMP报文是IP数据报的数据部分
ICMP差错报文
ICMP差错报文分类
无法向上层交付 - 终点不可达
发送速度过快(拥塞)而丢弃报文 - 源点抑制 (现在用的很少了)
超过生存时间 - 时间超过
发送过程中,数据超过生存时间隔壁 / 终点在规定时间内没有收到数据 就不要了
首部字段错误 - 参数问题
没有找到最合适的路由器 - 重定向
ICMP差错报文数据字段
不应发送ICMP差错报文情况
ICMP属于IP数据报的数据部分**.ICMP自己出错 不发出错报文**
如果出错,只对第一个分片发ICMP出错报文
组播: 一对多, 区分广播:一对所有
组播地址的数据报,不发送ICMP 广撒网负责捞鱼就行了,不需要哪些鱼跑了
特殊地址,不发ICMP出错报文
ICMP 询问报文
ICMP应用 - ping
IGMP 网际组管理协议
是否有主机参加了/退出了某组播组
- IGMP管理组播主机
如何判断组播组内,哪些是需要这份数据的主机呢?
-组播路由选择协议使用
IGMP工作两阶段
加入组播组 :
申请 - 批示,公式
监察 - 更新成员名单
组播路由器只知道,有没有组织的人,但是具体组织有多少人是秘密
组播路由选择协议
一个组播里面的成员是动态变化的
可以加入也可以离开
组播路由选择协议的核心:找到以源节点为根节点的组播转发树
路由转发协议
https://blog.csdn.net/AKUANer/article/details/105913310
网络层设备
路由器
转发:从一个输入端口转发到一个输出端口
路由选择:宏观上,选择一个合适的路径
如果是路由分组: 收到RIP分组或者OSPF分组,则把分组送往路由选择处理器 ,查询转发表后 ,再输出
若是数据分组,则直接查询转发表,再输出
路由器输入端口
物理层:接受比特流
数据链路层:根据协议封装成帧,再去掉帧头帧尾上交网络层
网络层:先判断是路由分组还是数据分组
路由分组 ->路由选择处理机 , 数据分组 ->直接查转发表
然后分组排队等候查表和转发
路由器输出端口
输出端口: 队列溢出是造成分组丢失的最大原因
物理层,链路层,网络层 三层设备区别
物理层设备:来什么转发什么
中继器,集线器
链路层设备:能隔离冲突域
网桥,交换器
网络层设备:能隔离冲突域,能隔离广播域
路由器