一.报文:
1.4位版本号:IPv4和IPv6(其它可能是实验室版本).
2.4位首部长度:和TCP一样,可变长,带选项,单位是4字节.
3.8位服务类型
4.16位总长度:IP报头 + IP载荷
传输层是不知道载荷长度的,需要网络层来计算.
IP报文 - IP报头 = IP载荷 = TCP报文
TCP载荷 = IP载荷(TCP报文) - TCP报头
5.16位标识,3位标志位和13位偏移量共同表示IP数据报拆包组包的过程.
16位标识:拆出的多个包,16位标识是相同的.
13位偏移量:区分先后顺序,前一个包片偏移小,后一个大.
3位标志位:一个不用,一个表示是否允许拆包,最后一个表示结束标记(为0表示最后一个包).
6.8位生存时间(TTL)
单位是次,
有初始值(32/64/128),
每经过一个路由转发TTL 减1,
减到0(说明目标地址不存在)就丢弃
7.8位协议: 传输层使用哪种协议(TCP/UDP/KCP......)
8.16位首部校验和:只需校验IP首部即可,载荷部分有传输层自己的校验.
二.IP地址
1.IP地址:一个32位整数(4字节),使用点分十进制,使用三个点分出四段,每段表示一个字节(8个bit位)的大小(0~255)(无符号).
2.IP地址不够用的三种处理方法:
a.动态分配IP地址(DHCP):需要上网就分配IP,否则不分配.
b.NAT机制(网络地址转换):把IP地址分为内网IP和外网IP两大类.
1)内网IP:在一个局域网内不能重复.
10.*
172.16.* ~ 172.31.*
192.168.*
2)外网IP:不能重复.
3)要想进行网络通信,就要有一个带有外网IP的设备进行中转,此时就涉及到NAT机制,当数据报到达路由器的时候,路由器会将自己的外网IP替换掉原IP(内网IP),服务器不知道具体是那个主机和自己通信,只知道发送数据报的路由器的外网IP(只知道大概的范围,不知道具体的设备).对于NAT设备(路由器),触发NAT的时候会维护一个映射表.
4)NAT的缺点:
a)效率不高.
b)非常繁琐.
c)不方便自己访问局域网内的设备.
5)NAT的有点:纯软件实现.
c.IPv6:
1)IPv4:4字节,2^32(41亿9千万).
2)IPv6:16字节,2^128.
三.关于IP地址其它知识点:
a.IP地址的组成:
1)网络号:
2)主机号:
规定:同一个局域网内,网络号必须相同,主机号必须不同.不同的局域网,网络号必须不同.
b.IP地址中网络号和主机号的区分:
使用子网掩码来区分.
c.特殊IP地址:
1)将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网.
2)将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据报(只能使用UDP,不能使用TCP).
3)127.*的IP地址用于本机还回(loop back)测试,通常是127.0.0.1.
4)本机还回主要用于本机到本机的网络通信(系统内部未来性能,不会择网络的方式传输),对于开发网络通信的程序而言,常见的开发方式都是本机到本机的网络通信.
四.路由选择:
每个路由器内部有一个数据结构,称为路由表,数据报到达路由器的时候,就需要查询路由表(问路),如果查到了,就可以直接按照这个方向继续转发,如果没查到路由器会给一个默认的方向(下一跳地址),沿着默认的方向,往往走到上级路由器.