网络层:完成了路由选择和地址管理
(1)4位版本:标识是IPV4版本 0100
(2)4位首部长度:二进制数字计算出来的是数值,需要给计算出来的数值 * 4,才表示首部占用的字节数量
(3)8位服务类型:前三位描述的是优先级,但是已经弃用了
中间4位分别代表最小延时、最大吞吐量、最高可靠性、最下成本
最后一位为保留位
(4)16位总长度:最大标识ip数据报的长度为 2 16 2^{16} 216,即65536字节
考虑问题:
UDP数据长度为 2 16 2^{16} 216字节,IP协议在传输UDP数据的时候,是否需要IP协议进行分片传输?
TCP数据是严格按照MSS的大小进行传输的,IP协议在传输TCP数据的时候,是否需要IP协议进行分片传输?
(5)16位标识:标识ip分片是属于哪一个数据包的
3位标志:第一位:保留位
第二位:禁止分片
第三位:1:后面还有分片
0:后面没有分片了
13位片偏移:分片相当于在原始数据当中的偏移量
回忆前提:MTU
MTU是数据链路层对到达数据链路层数据大小的规定。数据链路层进行发送数据时,是严格按照MTU进行发送数据的,数据大小不会超过MTU。
数据链路层就会要求网络层ip协议给数据链路层递交的数据大小不能超过MTU
如果IP协议传输的数据大于数据链路层对于数据的限制(MTU),IP协议就需要将数据进行分片传输。将大于MTU的数据报进行切分,以满足MTU的要求。
分片在网络当中进行传输的时候,不同的分片有可能走不同路由。分片到达对端主机的时候,有可能不是按照发送的顺序到达的。
IP协议对到达网络层的数据一定要有一个认知:当前的ip数据报是一个分片,还是一个完整的数据报。ip协议段当中的16位标识中3位标志和13位片偏移会进行确定。
13位片偏移:最大能表示的数字为 2 13 2^{13} 213,即8192,但是这只是一个数值,并不是数据包当中偏移的字节数量,偏移的字节大小 = 13位偏移计算的数值 * 2 3 2^3 23(8)
回答上面考虑的问题:
UDP是整条数据交付给网络层,UDP协议的最大传输数据大小是 2 16 2^{16} 216字节,有可能UDP递交给网络层的数据已经超过了MTU。
UDP整条交付的数据大小大于MTU,则网络层需要对UDP数据进行分片传输。将UDP数据分成不同的小片进行传输
UDP整条交付的数据大小小于MTU,则网络层不需要对UDP数据进行分片传输。
由于TCP在三次握手的过程当中已经协商了各自传输的最大报文段长度,而各自的最大报文段长度是由各自的MTU计算的来的。MSS + TCP_header + IP_header <= MTU。双方在协商的时候,采用了最小的MSS。
TCP在传输数据到网络层的时候,是严格按照MSS进行传输的。传输到网络层的数据一定是小于MTU。
分片丢了会重发分片还是所有数据一起重发?
有分片,则代表一定是UDP数据进行分片了
分片:传输一定是UDP数据+UDP协议是不保证可靠+IP协议也是不保证可靠
重发只能从应用层协议出发重传,所有数据一起重发
(6)8位生存时间:TTL,允许IP数据报最大经历的路由器数量
TTL = 64:ip数据报最大经过路由器64次转发
路由器每转发一次,TTL进行减1,如果TTL为0,还没有到达对端主机,则该ip数据报被网络丢弃,不会再进行转发。有效预防了循坏路由。
(7)8位协议:标识当前的ip数据报传递给传输层的哪一个协议。
虽然说一个端口只能被一个进程所绑定,但是一个端口可以被TCP和UDP进程同时绑定
(8)16位首部校验和:校验数据在传输过程当中是否失真
ipv4版本的ip地址
ip地址:本质是unit32_t的整数(无符号32位整数)
ip地址 = 网络号 + 主机号
网络号:可以在网络中标识一个子网,一个子网当中会有多个ip地址
主机号:在一个子网当中标识一个主机
最高一位固定为0,后7位为网络号,24位为主机号
网络号的范围:共 2 7 2^7 27 = 128 个子网
主机号范围:一个子网共 2 24 2^{24} 224 = 16777216 个ip地址
最高两位固定为10,14位网络号,16位主机号
网络号范围:共 2 14 2^{14} 214 = 16384 个子网
主机号范围:一个子网共 2 16 2^{16} 216 = 65536 个ip地址
最高三位固定为110,网络号21位,主机号8位
网络号范围:共 2 21 2^{21} 221 = 2097152 个子网
主机号:一个子网共 2 8 2^8 28 = 256 个ip地址
更加精细化地划分子网,一个子网当中的ip地址,可以比C类IP地址少,可以定义子网当中的IP地址数量
子网掩码:本质也是uint32_t的整数,子网掩码总是最高位到低位需要有连续的1存在
网络号 = 子网掩码 & ip地址
子网掩码取反 = 当前子网的主机(ip地址)数量
子网掩码取反有多少位1,则表示主机号使用多少个比特位
现在的IP地址都是经过CIDR方式分配的,不存在A类,B类,C类IP地址的说法!
IP地址是路由器设备给连接上的机器分配的,分配IP地址的时候,会分配上子网掩码。
路由选择是在为网络数据选择合适的设备进行转发
路由器上面的网口:WAN / LAN
WAN:是当前路由器连接上级路由器的网口
LAN:是子网内机器连接本路由器的网口
(网络数据的目的IP & 路由项的子网掩码)和当前路由项的网络号进行比对
对比上来,说明当前的数据是想要递交给当前路由项当中的某一个机器的(隐含的意思为:目的主机和当前的源主机在同一个子网下)
没有对比上,则最终会通过默认网关,发送到上级路由
网络层在进行选路,但是具体怎么从机器到相邻设备传输,网络层并没有关注。