ip报文解析
4位版本:一般是4表示通信的ip版本号是ipv4还是ipv6
4位首部长度:数值*4=ip报头长度 取值范围为[0101,1111], 报头长度就是[5*4=20,15*4=60]
8位服务类型(TOS):4位TOS位段和3位优先权字段和一位保留字段
4位TOS相当于给路由器转发路径选择提供策略,只能选择一个,最小延时(速度快),最大吞吐量(数据多),最高可靠性(避免丢包),最小成本。
16位总长度:表示ip报文整体长度
8位生存时间:报文在网络中生存时间,表示报文可以经过路由转发的次数,一般为64 每被转发一次,数字减1,防止出现路由循环。
8位协议:把ip的有效载荷交给上层的UDP/TCP等哪个协议
16位首部校验和:校验数据报 头部 在传输中是否出错。
32位源ip地址/32位目的ip地址:源ip和目的ip
ip报头是c语言的结构体
报头和有效载荷如何分离?
固定长度和自描述字段结合,读取20个字节,再读取首部长度计算出报头长度,报头长度-20字节,剩下的部分即为选项的长度。
网络底层是字节流吗?
不是,由ip协议可知实际上是报文流,tcp上层经过处理才变成了字节流的模样。
套接字socket的ip和端口号分别哪层报文?
ip地址保存在ip报文中,端口号保存在tcp/udp报文中。在路由过程中,只会用到网路层,看不到端口号。
为什么应用成要把点分十进制的ip转为4个字节?
ip报文ip就是4个字节
ip地址组成
ip地址=网络号+主机号
网段号:保证相互连接的两个网段具有不同的标识
主机号:同一个网段内,主机有相同的网络号,有不同的主机号
路由器本质上是也是一台主机,也有自己的ip地址,一般为主机号为1
路由器至少连接两个子网,路由器也就相当于同时在两个子网中,立即路由器有多个ip地址,网络号不一样,主机号为1
路由器的功能:ip报文转发,构建子网(给子网内部的设备分配ip地址)
DHCP技术:自动给子网内新增主机节点分配ip地址,避免手动管理ip的不便。
路由器带有DHCP功能, 可以看做一个DHCP服务器。
过去提出一种划分ip的方法
局限性:浪费ip地址
申请了一个B类网络,一个子网可以支持2^16-2主机允许,但实际上不可能达到这个数量。
CIDR解决方案
(Classless Interdomain Routine)
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
子网掩码也是一个32位的正整数,通常用一串0结尾
ip地址和子网进行按位与操作,得到的结果就是网络号
网络号和主机号划分与这个ip地址是A类还是B类,C类无关
通过子网掩码计算网络号
主机数为0,和255的不分配给主机
140.252.20.0作为网络号代表局域网
140.252.20.255作为广播用于给所有主机发数据包
子网掩码如何解决问题ip浪费问题?
网络号的位数不再固定,当子网掩码的1变多时,网络号变长,ip地址变少。0变多时,网络号变短,ip地址变少
如当子网掩码变255.255.255.240(ff ff ff f0)
网络号就变成 140.252.20.60
子网地址范围 140.252.20.64~140.252.20.79
子网掩码在路由器中,当ip报文转发时,路由器会子网掩码计算出网络号
增加ip利用上限
动态分配ip地址:只给接入网络的设备分配ip地址,同一个mac地址的设备,每次接入互联网中,得到的ip地址不一定是相同的
ipv6:新的协议,用16个字节128来表示ip地址(ipv4 是 4个字节 32位)
NAT技术
公网ip和私有ip
ip资源划分:
不同国家有国际路由器,且有地址划分
将源ip替换成每个路由器的wan口ip
NAT计数,私有ip不断被替换
路由
mac地址
区分同一局域网的不同的主机
ARP:ip地址转换为mac地址
arp报文
nat:将私有ip转为公有ip
nat在替换时,不仅仅会替换ip还会替换ip地址