IP地址
结构:
由32位二进制数组成,通常用点分的形式被分为四个部分,每个部分1byte,最大值为255。
从功能的角度看,ip地址由两部分组成,网络号和主机号。网络号标识了ip所在的网段,主机号标识了在该网段中的唯一的一台主机。二者的区分又需要与掩码配合使用,例如192.168.1.2/24,24表示掩码255.255.255.0,将掩码与ip进行按位与操作,获得了192.168.1.0即为该主机所在网段。
将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网
将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包
网段的划分:
假如一个组织申请到的网段是122.1.1.0/24,组织有三个部门,A部门有125台主机需要上网,B,C部门各有60台主机上网。首先将网段分为两个部分122.1.1.128/25和122.1.1.0/25,这两个网段都可以容纳126台主机(有一个网络号和一个广播地址),将第一个网段分配给A部门,再对第二个网段划分,分为122.1.1.0/26和122.1.1.64/26,这两个网段刚好够B,C部门使用。
分类:
私有ip和公网ip
因为公网ip的最大数量只有42亿多,数量远远不够,需要使用NAT技术解决这个问题。简单来讲一下NAT技术,运营商路由器连接了公网,我们在连接运营商的路由器后,就会加入到该路由器所组织的一个局域网中,这个局域网中的ip都是私有ip。当有主机要访问公网的服务器时,会在NAT网关建立映射(NAT网关会维护一张映射表,将源ip(私有ip),源端口和访问的外网服务器ip记录下来),将ip的请求报文中的源ip替换为公网ip,相当于运营商替我们访问了外网的服务器然后将返回的响应根据映射表发送给私有ip。
注意:
私有ip不能直接访问公网ip;
不同局域网间的私有ip可以有相同;
路由器有两种端口,WAN连接公网(也可能是上一层路由器组织的局域网),LAN连接局域网
IP协议格式
- 版本:IP的版本,4就代表了IPv4
- 首部长度:该值的大小*4就是IP首部的字节数,因此首部长度最大是15*4=60byte
- 服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位 TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个
- 总长度:整个报文的字节数大小
- 标识:主机发送的报文的唯一标识,如果主机发送的报文被分片,那么所有的分片的标识都是相同的
- 标志:标志的第一位保留;第二位是0表示可以分片,是1表示禁止分片;如果进行分片,所有分片的报文除了最后一个第三个标志位是1,其余的都是0,用来标识分片报文的结束
- 片偏移:是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片 在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了)
- 生存时间:表示报文可以进行的最大跳数,每次递交到路由器后都会减1,如果路由器收到生存时间小于1的报文会直接丢弃
- 协议:表示上层协议
- 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏
- 32位源地址和32位目标地址: 表示发送端和接收端
为什么分片?分片的影响有什么?
因为数据链路层的有效载荷不能太大,最大不超过1500byte,有效载荷越大,数据在传输的过程中越容易发生数据碰撞。分片后,有一个分片丢失,整个报文都会丢失,所以不建议分片。
路由
路由是指数据在复杂的网络中找到通往目的主机的路线。
路由的实现离不开路由器。
路由器其实就是一个子网的主机,其ip一般都是该子网的网络号,有两个功能:实现ip报文的转发,构建子网(局域网)。
路由器自己会维护一张路由表,路由器收到数据包后会查看目的ip,将该ip依次与Genmask作按位与运算,然后与Destination对比,如果符合就直接发送给目标主机或者路由器,如果不符合就发送给默认路由。
假设某主机上的网络接口配置和路由表如下:
假如有一个数据包目的ip是192.168.10.8,就会将该数据包交给端口eth0;
假如有一个数据包目的ip是10.96.0.155,路由器发现没有端口对应这个ip,就交给default的端口eth0