IPv4地址由32位二进制数表示,表示成十进制每8位点断开。其中第一部分为分类号,固定。然后是网络号,代表当前主机处在哪个网络之中,最后剩下来的是主机号,代表该主机是当前网络中哪一台。
ip地址分类
最大主机数的计算:
用主机号(2的次方)-2.
这个2:
一个代表全0,全0代表网络号。
一个代表全1.全1代表广播。意思就是网络中全体会议。广播用于同一链路中互连主机之间共享信息,不得跨越路由器
要想跨越路由器怎么办?
D类地址多用于多/组播,用于将包发送给组内特定所有主机,多/组播可穿透路由器
正因为 IP 分类存在许多缺点,所以后⾯提出了⽆分类地址的⽅案,即 CIDR 。
表示形式 a.b.c.d/x ,其中 /x 表示前 x 位属于⽹络号, x 的范围是 0 ~ 32 ,这就使得 IP 地址更加具有灵活性。
⽐如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是⽹络号,剩余的 8 位是主机号。
有另⼀种划分⽹络号与主机号形式,那就是⼦⽹掩码,掩码的意思就是0掩盖掉主机号,剩余的就是⽹络号
子网掩码 & IP地址 =网络号 ,注意按位相与
路由器根据网络号进行转发。
子网掩码的另一个作用,进行子网划分。
子网划分将主机号进一步拆分为 1.子网地址 2.子网主机地址
假设对C类地址: 192.168.1.0 进行划分。
子网掩码为:码 255.255.255.192 。即最后一个字节的前两位可用作子网号,由此00 01 10 11分为四个子网络
路由表记录着网络地址与下一跳地址。在主机和路由器上都有路由表。
发送IP包的时候,首先确定IP包的目标网络地址,再在路由表中找最长匹配的相同网络地址(无匹配的就发送至默认路由),下一跳发送到该地址。
举例说明:
默认一个特殊的IP127.0.0.1作为本地环回地址,代表本机。数据包不会流向网络,只在本机内流通。
数据链路的最大传输单元MTU是不同的,常见的以太网的MTU为1500字节。如4000字节的数据包要分成3个片。
所以当数据包大于这个大小的时候就要分片。
但因为IP不保证可靠性,一旦某个数据丢失整个IP数据包都作废,所以在TCP引入MSS在传输层TCP来分片,不由IP来分片
对于UDP协议,我们尽量不要发送一个大于MTU的数据报即可。
上网通常使用网址和域名,而不是IP地址。
DNS域名解析,可以将域名网址自动转换成具体的IP地址
DNS域名等级从高到低:
根域名服务器
顶级域名服务器(比如:com
权威域名服务器(xxx.com
域名解析过程:
常见的由迭代查询和递归查询两种。
按下图示例:
图下解释
在dns之前:
客户端先检查自己的浏览器缓存有没有,没有看操作系统缓存有没有,再没有看本机dns解析文件hosts有没有。三个都没有发起DNS请求:
我们知道了IP怎样寻址。但是在路由的过程中,点对点的寻址是在数据链路层完成的,而链路层的MAC物理地址才是他们的流通地址。
所以ARP主要解决IP地址到MAC地址的映射问题这样我知道了下一跳的IP就能通过ARP知道下一跳的具体物理地址。
ARP主要通过ARP请求和ARP响应两种包确定MAC地址。
在同一个子网内,主机广播发送ARP请求,问xxIP这个地址是谁的。
同一个子网内的设备收到ARP请求后,解析包的内容,这个包的目的地址如果和自己的IP地址一致,就将自己的MAC地址塞入ARP响应包返回给主机,告诉他xxIP这个地址是我的,我的MAC地址是xxxx。
然后操作系统会吧第一次ARP解析的结果缓存起来,下次他直接查缓存就能找到对应的IP和MAC。(注:有期限,定期清理,超出存储能力也会清理)
还有一个RARP协议,顾名思义,解决知道MAC但不知道IP的情况。解决方法一样,两次消息。通常用于小型嵌入式设备(如打印机)接入网络中的时候。
电脑通常通过DHCP动态获取IP地址。
全程使用UDP广播通信,但广播只限于同一局域网,如果需要转发到另一个网络中,岂不是每个网络都要配一个DHCP服务器?
DHCP中继代理,对不同网段IP地址分配可以用同一个DHCP服务器同一管理
实现的方式就是路由器扮演中继代理的角色,把广播的信号中继单播出去。
普通NAT没有什么意义,是公私有地址一对一映射。
私有网络内不同IP可以经由NAT路由器,映射为同一个共有IP地址,但是由于发来的端口号不同,所以包发回来的时候路由器还是能区分该转发回给谁。
ICMP 全称是 Internet Control Message Protocol,
ICMP报文类型
ping 命令执⾏的时候,源主机⾸先会构建⼀个 ICMP 回送请求消息数据包。
ICMP包中最重要的有两个字段:
每发出一个数据请求包,序号就会自加1。为了计算RTT,在发送报文的数据部分会插入时间戳。
然后开始封装:
ICMP协议将数据包交给IP层,IP层提取目的地址,加上自己的源地址等信息加上IP头。
然后继续向下到链路层,加上MAC头,加之前需要查MAC地址,所以这里可能需要用到ARP协议。再附加上一些控制信息。就可以发出去了。
接收方:
先拆MAC头,看对不对。接收帧,将IP包提取出来。IP层最终提取ICMP报文。
此时接收方会构建一个ICMP回送应答包,类型字段为0.