目录
IP报头格式
网段划分
特殊的IP地址
IP地址的数量限制
私有IP地址和公网IP地址
路由
IP报文分片
1.粗粒度谈谈分片
a. 确保将所有的分片全部聚到一起(相同的标识)
b. 片偏移排序(完成组转)
2.分片细节
数据链路层
MAC地址
mac帧
局域网的通信原理
IP报头格式
IP协议的本质工作:提供一种能力,将数据跨网络从A主机发送到B主机!
用户需要的是:提供一种能力,将数据可靠的跨网络从A主机送到B主机
IP=目标网络+目标主机
1.报头和有效载荷如何分离?固定长度+自描述字段(首部+总),报头20个字节
2.如何将有效载荷交付给上层?报头中的8位协议
网段划分
- 分类划分法:A、B、C、D、E
- 子网掩码
IP地址分为两部分,网络号和主机号
- 网络号:保证相互连接的两个网段具有不同的标识。
- 主机号:同一网段内,主机之间具有相同的网络号,但是必须要有不同的主机号
- 不同的子网其实就是把网络号相同的主机放到一起。
- 如果在子网中新增一台之际,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。
- 路由器的本质也是一个子网的主机,也要配置IP地址。
- 为了实现跨网段传输,路由器一定至少要连接两个子网 ,也就相当于同时在两个子网,因此路由器可以配置多个IP。
- 路由器一般是一个子网中的第一台设备,一般他的IP地址都是:网络号.1。
- 路由器的功能,ip报文的转发,不仅仅如此,还构建了子网(局域网)。
手动管理子网内的IP,是一个相当麻烦的事情。
- 有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。
- 一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器。
过去曾经提出一种划分网络号和主机号的方案,把所有的IP地址分为五类,如下图所示:
- A类 0.0.0.0 到 127.255.255.255
- B类 128.0.0.0 到 191.255.255.255
- C类 192.0.0.0 到 223.255.255.255
- D类 224.0.0.0 到 239.255.255.255
- E类 240.0.0.0 到 247.255.255.255
随着Internet的迅速发展,这种划分方案的局限性很快就显现出来了,大多数组织都申请B类网络地址,因为B类网络号和主机号都比较多,好申请,导致B类地址很快就分配完了,而A类却浪费了大量地址。
例如 , 申请了一个 B 类地址 , 理论上一个子网内能允许 6 万 5 千多个主机 . A 类地址的子网内的主机数更多 . 然而实际网络架设中, 不会存在一个子网内有这么多的情况 . 因此大量的 IP 地址都被浪费掉了 .
针对这种情况 提出了心得划分方案,成为CIDR
- 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
- 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
- 将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
- 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
例如
理论上上述划分一个子网可容纳256台主机,但是 .0 和 .255两个IP地址分别被用来当网络号, 广播地址,因此实际可容纳的254台主机。
那么一个IP地址对应的网络号要怎么计算出来呢?
IP地址:140.252.20.68 == 140.252.20. 0100 0100
子网掩码:255.255.255.240 == 255.255.255.1111 0000
两者进行&运算即可
特殊的IP地址
- 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
- 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
- 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0
IP地址的数量限制
CIDR(Classless Interdomain Routing):
- 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
- 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
- 将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
- 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
- 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到 的IP地址不一定是相同的;
- NAT技术(后面会重点介绍):私有地址不断被替换的过程;
- IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及;
私有IP地址和公网IP地址
- 10.*,前8位是网络号,共16,777,216个地址
- 172.16.到172.31.,前12位是网络号,共1,048,576个地址
- 192.168.*,前16位是网络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)
从内网到公网的过程中,不断用路由器的WAN口IP替换src ip地址 ,这个技术就做NAT技术。
那么为什么要使用NAT技术呢?IP地址不足,不同子网可以用相同的内网IP.
路由
目标网络 下一跳的路由器 子网掩码 U正在使用G表示路由器
查路由表的方法
拿着目标主机的IP & Genmask == Destination 进行比对
- 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
- 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
- 依次反复, 一直到达目标IP地址
实际上,在一台主机中,报文并没有通过网络层直接发出去,而是交给了自己的下一层协议(数据链路层),而数据链路层,不能一次发送过大的报文!要求上层不能给其交付过大的报文,上限要求即下图所示mtu的值
IP报文分片
1.粗粒度谈谈分片
前置问题:怎么知道一个IP报文是被分片了呢?片偏移!=0 || 更多分片==1
a. 确保将所有的分片全部聚到一起(相同的标识)
组装过程如何识别是否有丢失分片
- 丢第一个:如果不存在偏移量为0的,便是丢失了第一个
- 丢中间:如果偏移量+分片长度不等于下一个分片的偏移量,便是丢失了中间分片
- 丢最后:如果不存在3位标志,第三位为0的话,就代表最后一个分片丢失了
b. 片偏移排序(完成组转)
但是实际上,并不建议分片,会增加丢包概率,组装失败,报文需要进行重发
2.分片细节
假设一个3000字节的IP报文,进行分片,需分成3个,大小分别为1500,1500,40
因为每个分片,都需要添加报头(20字节),后续才能根据标识进行组装.
数据链路层
直接相连的主机之间,进行数据交付的问题
MAC地址
在同一个局域网中,区分特定的主机
mac帧
1. mac帧如何做到解包和封装?
定长报文
2.如何做到分用
mac帧只在局域网中有效,转发是由IP报头进行决策。
mtu是mac帧有效载荷的大小
传输层--MSS
数据链路层--MTU
局域网的通信原理
可能会发生数据碰撞 ---》碰撞避免算法
局域网中,主机越多,发生数据碰撞的概率就越高;因此,我们可以划分碰撞域,减少局域网碰撞,这便是交换机的作用。