网络层解决的问题:将数据从一台主机发送到另一台主机。
路由器:配有IP地址,又能进行路由控制
节点:主机与路由器的统称
TCP协议:为IP协议提供策略支持,IP协议拥有通信的能力,TCP通过自己的决策,保证了IP协议在通信时的可靠性。同时TCP还负责将数据交付到上层的应用层。
IP协议:知道目的IP地址,经过路径选择,将数据跨网络传送到对端主机的功能。
路径选择是靠路由器实现的,前提是路由器的路由表已经建立。
IP协议报头与TCP相似。除了报头选项字段后长度固定为20字节。读取前20字节后,通过4位首部长度可以找到报头的总大小
与TCP相似,这个4位首部长度每单位是4字节,所以报头长度最大为60字节(选项最大为40字节)
再根据报头的16位总长度获取到IP协议报头+有效载荷的总长度。
综上,上述两个字段实现IP协议报头与有效载荷的分离
UDP中有16位UDP总长度
TCP中没有类似字段,因为TCP是面向字节流的。TCP只是将有效载荷拷贝到缓冲区即可,至于报文之间的区分由上层来做。
IP协议需要16位总长度,因为IP报文在网络中以一批一批的IP数据报发送,接受时需要处理每一个IP报文的有效载荷,不能出现粘包问题,需要区分不同的IP报文,需要16位总长度字段。
IP协议报头上的8位协议字段:表示上层协议类型编号,系统根据这个编号来将有效载荷传递给上层的协议。
8位服务类型
3位优先权字段(弃用),4位TOS字段,1位保留字段(设置为0)。
TOS字段分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。
注意:这些字段互相冲突,只能选择一个。eg:对于ssh选择最小延时,ftp选择最大吞吐量等等
8位生存时间
记录一个IP报文可以经过的节点总数,每经过一个节点,生存时间-1,当生存时间为0时报文自动丢弃
16位首部校验和
对收到的IP报文进行校验,当报文出错后,报文丢弃。重传文体靠TCP决策
32位源IP与目的IP
源地址与目的地址:在套接字中将自己的IP地址和对端IP地址填写到sockaddr_in结构体中,IP地址根据这两个地址进行通信。
IP可以进行跨网络通信,首先要把数据从本机送到与本机直接相连的主机上。(数据链路层MAC协议)
其中MAC携带的最大有效载荷长度mtu不能超过1500字节,mtu包含了IP的报头+IP有效载荷
如果超过1500字节(MTU),IP须将数据分片发送。
如果分片发送,到对端IP协议还需要进行组装。
注意:每一片都有IP报头。
16位标识
唯一标记主机发送的报文,如果IP报文在数据链路层分片,每片的标识都是相同的,代表属于一个IP报文。
13位片偏移
分片后,相对IP报文开始处的偏移量(当前片在原报文的位置)
正常情况组装时:
判断所有片都收到是根据3位标志字段:
根据13位片偏移和3位标志字段来判断是否丢包:
- 根据片偏移从小到大排列完毕后,如果第一片片偏移不为0,代表首报文丢失。
- 如果最后一片标志位第三位不为0,代表最后一片报文丢失。
- 当前报文的片偏移量+当前报文长度=下一片报文的片偏移量,根据这个公式来判断中间报文是否丢包。
注意:
如果一个报文分太多片,会增加丢包概率。分片这种情况是少概率事件。
为了减少IP传输时分片,传输层要控制传递数据的大小。TCP在3次握手时双方会建立MSS(最大传输尺寸)
IP的构成:
目的IP=目标网络+目的主机。这样划分为了提高检索效率。
eg:IP协议将数据从A主机跨网络发送给B
首先,先找到B主机所在的网络,其次在网络中找到B主机。
这种将网络分成不同局域网方便检索的模式就是网段划分。
通过设置网络号和主机号可以标记互联网的唯一 一台主机
DHCP
自动给子网内新增的主机分配IP地址,不需要手动分配IP。(一般路由器自带这项服务,所以路由器又称DHCP服务器)。
粗粒度划分5类IP
如果IP首位为0,直接去A类网络找下一个子网,不需要从其他类找,提高了检索效率。
类似的区分其他不同类网络,根据下一个比特位来确定。
eg:A类网络IP中还有7位网络号,说明在A类网络下最多还可以有2^7个局域网。
子网掩码
随着网络发展,上述划分局限性越来越明显,IP浪费很严重。
eg:
申请B类网络,理论上一个子网上可以拥有6万多个主机,实际上一个子网不可能有这么多主机,其他空余主机位置全部被浪费了。
这里引出CIDR划分方法(子网掩码)
eg:
主机IP地址:192.168.3.10
子网掩码(mask):255.255.255.0
192.168.3.10 & 255.255.255.0=192.168.3.0(网络号)
每一个子网都具有子网掩码和网络号。
目的IP与当前子网的子网掩码&后找到对应网络号,与路由器中每个子网的网络号对比,找下一个子网。重复上述过程,直到找到对应主机。
①、缺省子网掩码
也叫默认子网掩码,即未划分子网,对应的网络号的位都置 1 ,主机号都置 0 。
未做子网划分的IP地址:网络号+主机号
A类网络缺省子网掩码: 255.0.0.0,用CIDR表示为/8
B类网络缺省子网掩码: 255.255.0.0,用CIDR表示为/16
C类网络缺省子网掩码: 255.255.255.0,用CIDR表示为/24
②、自定义子网掩码
将一个网络划分子网后,把原本的主机号位置的一部分给了子网号,余下的才是给了子网的主机号。其形式如下:
做子网划分后的IP地址:网络号+子网号+子网主机号
如:192.168.1.100/25,其子网掩码表示:255.255.255.128
25个1
子网掩码:11111111.11111111.11111111.10000000=255.255.255.128
特殊的IP地址
IP地址的数量限制
IP地址(IPV4)是4字节32位一共有2^32个IP地址,大约43亿左右。
由于特殊IP地址存在数量要比43亿还要小
CIDR(子网掩码)在一定程度上缓解了IP浪费文体,但还是IP地址相对于全球还是不够用。
以下三种方式解决
所有IP地址=公网IP+私网IP
网络规定,公网IP与私网IP相互独立,没有交集。
上述范围的IP地址是私网IP,其余IP地址都是公网IP。
局域网IP是可以重复的,因为使用的网络并不是公网IP,而是路由器设备构建出的局域网。所以私有IP不能出现在公网上,否则会出现歧义。
一般来讲,局域网的1号主机就是路由器。
路由器是连接多个局域网的设备。
对于本局域网的网口IP称为LAN口(局域网的子网IP),当路由器想要访问外网时网络接口称为WAN口。这个网络路由器的WAN口可能作为下一个网络LAN口。
跨网络通信的细节如下:
在通过局域网路由器时,目的IP不变
源IP替换为路由器的WAN口地址
将数据从主机发送到服务器:
服务器将处理数据发送回主机涉及MAC协议,先空开不谈。
之所以这样发送网络数据,是因为IP地址不足。
所以:每一台网络中的设备都有路由表
link-local指的是默认路由,如果路由表查不到时,会交给默认路由进行发送。
数据在发送时先在本机上查找路由表,如果查到了同属于同一局域网,则不需要路由器转发。如果查不到,说明发送的不在一个局域网,需要路由转发离开局域网(默认路由)。