4位版本号(version):
指定IP协议的版本,对于IPv4来说,就是4。(现在常用的是IPv4,还有就是6位版本号,IPv6,现在用得少)
4位首部部长度(header length):
IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。(和TCP类似,都是可变的,带有选项的).
8位服务类型(Type Of Service):
其实有效的只有4位(4位TOS分别表示:
最小延时,最大吞吐量,最高可靠性,最小成本…同一时刻,只能取一种状态 ,可以把这里TOS比喻成切换形态(向变身一样,[迪迦的三种形态切换这种]))
16位总长度(total length):
IP数据报整体占多少个字节。单个IP数据报最大长度不能超过64k
如果要构成一个更长的数据报,(比如搭载的载荷部分已经超过了64k)怎么办?
==>那就是IP协议自身实现了分包和组包这样的操作,下面三个字段就是用来分包和组包的
16位标识(id):
唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
3位标志字段:
第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
13位分片偏移(framegament offset):
是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
8位生存时间(Time To Live,TTL):
数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。(就是说这个IP数据报在网络上还能存在多久,IP数据报每经过一个路由器,TTL就会减一,如果减到0了,就说明这些包里面的IP地址,可能永远都到不了了,不能让他在网络上无休止的转发(占用硬件资源),到0就把他丢了)
8位协议:
表示上层协议的类型。(传输层使用的哪种协议,TCP或者UDP都有不同的取值)
16位头部校验和:
使用CRC进行校验,来鉴别头部是否损坏。(就是用来校验数据是否正确)
32位源地址和32位目标地址:
表示发送端和接收端。对于IPv4来说,一个IP地址本质上是32 位的整数…通常用"点分十进制"这样的方式来表示这个IP地址…三个点把32位整数分成4个部分,每个部分1个字节,每个部分的取值就是0 ~ 255(8个1就是255)
像这个:192.168.0.1 ,给人看的通常就是点分十进制,给机器存储的IP,在底层任然是按照4个字节整数来表示的
IP地址主要分成了两个部分:网络号(描述当前的网段信息[局域网的标识])+主机号(区分了局域网内部的主机…)
要求: 同一个局域网里,主机之间的网络号是相同的,主机号不能一样,两个相邻的局域网(同一个路由器连接的),网络号也是不同的…
其实这是不固定的,这里引入了"子网掩码"这样的概念,来表示多少个bit位是网络号
子网掩码
,也是一个32位,点分十进制的整数,他的左侧都是1,右侧都是0(不会 0 1混着排列),左边的这些1就表示哪些是网络号,剩下0就表示哪些位是主机号
一些特殊的IP地址:
1:如果IP的主机号全0,该IP就表示网络号(局域网里的一个正常设备,主机号不能设为0)
2:如果IP主机号全为1,该IP就表示"广播地址",往往广播地址上发的消息,整个局域网中都能找到
3:IP地址是127开头的,该IP都表示"环回IP",表示自己主机
4:IP地址是10开头,192.168开头,172.16 - 172.31开头,表示该IP地址是一个局域网内部的IP(内网IP),剩下的都是外网IP(直接在广域网上使用的IP)
要求外网IP一定是唯一的,每个外网IP都会对应到唯一的一个设备,内网IP只是在当前局域网中是唯一的,不同的局域网里,可以有相同的内网IP的设备
让每个设配分配一个唯一的IP地址,全这么多设备,咋个分?
让每一个设备连上网的时候,才有IP,不连网就没有IP,让这个IP给别人用的人用,但是这个方案不能从根本上解决问题(设备没减少,IP也没有增加)
让多个设备共用同一个IP(外网IP),在当前的网络环境(就像是一个学校的学生都填一个学校的收货地址)
把网络分成了内网(局域网)和外网(广域网),要求外网IP必须表示唯一的设备,同时内网中的若干设备,可以共用一个外网IP(就是内网可以重复出现,只有在当前局域网才是唯一的)
IPv6在报头中使用了一个更长字段来表示IP地址
16个字节,128位
每个数字都是一个十六进制的数字(4bit),每个冒号分割了两个字节,最大的问题就是,IPv6和IPv4不兼容,不然可能就更多的用IPv6了
也就是规划路径,两个设备之间,要找出一条通道,能够完成传输的过程,所以就得认识路.
IP协议的路由选择也是类似的,IP数据报中的目的地址,就表示了这个包要发到哪里,如果当前路由器不认识,就会告诉你一个大致方向,去那里之后再问,越来越近,就到了…
通过6个字节来表示源地址 和 目的地址,这个要比IPv4长了6w多倍…
这里的地址称为"mac地址"
mac地址
做到了每个设备是为一的(每个网卡都是唯一的)
mac地址和IP地址同时使用,表示不同的功能:
IP用来表示一次传输过程中的起点和终点(不考虑NAT的情况,一个IP数据报中的源IP和目的IP是固定的)
mac用来表示传输过程中,任意两个相邻节点之间的地址(一个以太网数据帧,在每次转发过程中,源mac 和 目的mac都会改变)
一个以太网数据帧能够承载的数据范围,这个范围取决于硬件设备
以太网是和硬件也密切相关的,其他硬件设备,对应数据链路层协议,可能又不一样,MTU也不相同
数据链路层考虑的是相邻节点之间的数据传输,考虑这个细节的时候要关注交通工具是啥,
如果数据报超过了MTU咋办?
IP层分包
是一个应用层协议,就是域名解析
IP地址不好记,就使用一串英文单词,来表示这个IP地址,是一一对应关系