我们产生的报文会从发送缓冲区通过对应的传输层协议封装,此时可以通过报头来知道是主机的哪个端口。此时会将封装好的报文继续往下传递,通过网络层解决发送到哪个主机的问题。
IP = 目标网段+目标主机
我们以IPv4的网络报头来进行讲解
IP报头
这是IPv4的

IPv6的IP地址是128位,由20字节固定字段变为40字节的固定字段
4位版本
区分是IPv4还是IPv6
4位首部长度
IP头部是多少字节。和TCP的报头一样,最短是5*4=20字节,最长是15*4=60字节
8位服务类型
3位优先权字段(已经弃用),4位TOs字段,和1位保留字段(必须置为0).4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本.这四者相互冲突,只能选择一个.对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要
16位总长度
IP数据报整个占多少字节
16位标识
IP报文如果过长会进行分片,分片后为了区分是否是同一个报文的,会有标识,同一个报文的分片标识相同。
3位标准字段
第一位现在不用。第二位1标识禁止分片,如果长度超过限制就会被丢弃,因为无法分片。第三位标识更多分片,如果分片了话,最后一个分片置为0,其他的置为1
13位分片偏移
是分片在原报文里面的片偏移。
因为下一层数据链路层只会发送小于等于MTU(1500)的报文长度,所以会在IP层对可以分片的进行分片,不能分片的丢弃。
8位生存时间
数据报到达目的地的最大报文跳数,一般经过一个路由器次数就减一,一般是64,如果减到零还没到达就会舍弃,这个是为了防止路由循环。
8位协议
标识上层协议的类型
16位头部校验和
校验头部是否损坏
32位源地址和32位目的地址
表是发送端和目的端
选项字段
最多40字节
网段划分
IP地址分为 网络号+主机号
网络号相当于不同地区,主机号是不同地区的具体实体

路由器有DHCP技术,自动给网段里面新加入的电脑分配IP
将IP地址分为五类
五类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
这个分法也出现了问题,A、B类的网络号很少,导致会很快分完。且一个网络号很多的主机号,产生很多的浪费。
针对这个情况,出现了
子网掩码(CIDR)
使用一个32位的整数来表示子网掩码,通常是由连续n个1标识网络号,连续(32-n)个0标识主机号。通过按位与操作得到的就是网络号

可见让IP地址与上子网掩码得到的就是网络号,然后让0的部分从0增到全1就是主机号的范围
IP地址加子网掩码还有更简洁的标识范围,例如140.252.20.68/24,表示IP是140.252.20.68,子网掩码高位24个1,低位8个0。
子网掩码相当于是对网络号进行更细致的划分
特殊的IP地址
将主机地址全部设置为0,就成了网络号,代表这个局域网
将主机地址全部置为1,就成了广播地址,用于给链路中的所有主机发送数据报
127.*的用于网络环回,通常是127.0.0.1

IP地址的数量限制
我们知道,ip地址就只有32位整数(IPv4),那么就一共只有2^32,差不多43亿个,这意味着最多只能接入43亿的设备?
主要用三种方式来解决或缓解
动态分配IP地址,只有接入到网络里面的设备才会为其分配IP,同一个MAC地址的设备,接入网络里面的IP是不同的。
NAT技术(后面说)
IPv6 将IP地址扩展到128位,这样就根本用不完了。
私有IP地址和公网IP地址
私有IP
私有IP是用于公网IP内部使用的IP,一下的网络字段是私有IP
10.*,前8位是网络号,共16,777,216个地址
172.16*到172.31,前12位是网络号,共1,048,576个地址
192.168.,前16位是网络号,共65,536个地址
一个路由器它会有两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)
路由器的LAN口ip属于自己子网内的IP
不同路由器,子网IP都是一样的,使用私有地址,通常是192.168.1.1,子网内主机IP地址能重复,但是子网间IP可以重复
NAT
这个路由器,又会作为上级网络的一个主机,此时使用WAN口IP作为主机的IP。但私有IP是无法进入公网的,私有IP在各个子网都有使用,因此在报文传到路由器的时候,会进行地址转换,将私有IP转成这个路由器的WAN口IP,通过这种逐级替换,最后走到公网的过程就叫做NAT
返回数据要怎么转换呢?路由器内部会有一个NAT映射表,存储了要发送的内网ip+port和公网ip+port(即要访问的主机),返回时就会去查找这个映射从而返回到私网
因为有大量私有IP的使用,这基本解决了目前IP地址不够用的情况。
公有IP
公有IP是各个人已知的IP,全球独一份,我们可以持有公网IP加端口号访问到这个服务器。公网IP之间是可以直接通信的,我们也必须借助公网IP才能进行通信,私有IP无法进行通信,NAT技术也是必不可少的。
内网穿透
如果两个主机之间要建立数据交互,不借助公网的服务器是无法实现的。那么内网穿透就是让两个私网的主机同时连接一个公网的服务器,服务器通过两个私有主机身份匹配(看是不是你们两个要通信),如果是就会做一个传话筒帮你传数据。
更有甚者,可以直接尝试让双方进行公网IP的连接,如果连接成功,完全就不需要服务器的传话筒了。