Linux_网络_网络层协议 IP(报文结构,报头字段,网段划分,子网掩码,公网IP与私网IP,路由转发)
网络层解决的问题:将数据从一台主机发送到另一台主机。路由器:配有IP地址,又能进行路由控制节点:主机与路由器的统称文章目录1. IP协议IP协议报头字段1. IP协议TCP协议:为IP协议提供策略支持,IP协议拥有通信的能力,TCP通过自己的决策,保证了IP协议在通信时的可靠性。同时TCP还负责将数据交付到上层的应用层。IP协议:知道目的IP地址,经过路径选择,将数据跨网络传送到对端主机的功能。路
网络层解决的问题:将数据从一台主机发送到另一台主机。
路由器:配有IP地址,又能进行路由控制
节点:主机与路由器的统称
1. IP协议
TCP协议:为IP协议提供策略支持,IP协议拥有通信的能力,TCP通过自己的决策,保证了IP协议在通信时的可靠性。同时TCP还负责将数据交付到上层的应用层。
IP协议:知道目的IP地址,经过路径选择,将数据跨网络传送到对端主机的功能。
路径选择是靠路由器实现的,前提是路由器的路由表已经建立。
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协议将有效载荷传递给上层(分用)
IP协议报头上的8位协议字段:表示上层协议类型编号,系统根据这个编号来将有效载荷传递给上层的协议。
4位版本
指定IP协议的版本,对于IPV4来讲为4。
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协议)
MTU
其中MAC携带的最大有效载荷长度mtu不能超过1500字节,mtu包含了IP的报头+IP有效载荷
如果超过1500字节(MTU),IP须将数据分片发送。
如果分片发送,到对端IP协议还需要进行组装。
注意:每一片都有IP报头。
16位标识
唯一标记主机发送的报文,如果IP报文在数据链路层分片,每片的标识都是相同的,代表属于一个IP报文。
13位片偏移
分片后,相对IP报文开始处的偏移量(当前片在原报文的位置)
正常情况组装时:
- 先根据16位标识符,找到所有标识符相同的报文
- 再根据偏移量从小到大排列,将所有片拼接起来。
判断所有片都收到是根据3位标志字段:
3位标志字段
- 第一位保留
- 第二位为1代表禁止分片(如果此时超过mtu会直接丢弃报文)
- 第三位表示更多分片,如果分片,每片报文第三位设置为1代表后序还有分片,整个报文的最后一片这个字段设置为0,代表最后一片。(不分片的报文这一位设置为0)
根据13位片偏移和3位标志字段来判断是否丢包:
- 根据片偏移从小到大排列完毕后,如果第一片片偏移不为0,代表首报文丢失。
- 如果最后一片标志位第三位不为0,代表最后一片报文丢失。
- 当前报文的片偏移量+当前报文长度=下一片报文的片偏移量,根据这个公式来判断中间报文是否丢包。
注意:
如果一个报文分太多片,会增加丢包概率。分片这种情况是少概率事件。
为了减少IP传输时分片,传输层要控制传递数据的大小。TCP在3次握手时双方会建立MSS(最大传输尺寸)
2. 网段划分
IP的构成:
目的IP=目标网络+目的主机。这样划分为了提高检索效率。
eg:IP协议将数据从A主机跨网络发送给B
首先,先找到B主机所在的网络,其次在网络中找到B主机。
这种将网络分成不同局域网方便检索的模式就是网段划分。
网段划分的方式
- 同一个子网其实是把相同的网络号主机放到一起。不同网络号的主机属于不同的子网。
- 同一个子网不同主机的主机号不同,但网络号相同。
通过设置网络号和主机号可以标记互联网的唯一 一台主机
DHCP
自动给子网内新增的主机分配IP地址,不需要手动分配IP。(一般路由器自带这项服务,所以路由器又称DHCP服务器)。
粗粒度划分5类IP
如果IP首位为0,直接去A类网络找下一个子网,不需要从其他类找,提高了检索效率。
类似的区分其他不同类网络,根据下一个比特位来确定。
eg:A类网络IP中还有7位网络号,说明在A类网络下最多还可以有2^7个局域网。
- 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
子网掩码
随着网络发展,上述划分局限性越来越明显,IP浪费很严重。
eg:
申请B类网络,理论上一个子网上可以拥有6万多个主机,实际上一个子网不可能有这么多主机,其他空余主机位置全部被浪费了。
这里引出CIDR划分方法(子网掩码)
- 引出子网掩码来区分网络号与主机号
- 子网掩码是32位正整数,通常以0结尾
- 将IP地址与子网掩码&操作,可以得到网络号
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地址的主机号全0,代表网络号,表示这个局域网,eg:192.0.0.0
- IP地址的主机号全1,代表广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
- 127.*的IP地址用于本地环回,通常是127.0.0.1
IP地址的数量限制
IP地址(IPV4)是4字节32位一共有2^32个IP地址,大约43亿左右。
由于特殊IP地址存在数量要比43亿还要小
CIDR(子网掩码)在一定程度上缓解了IP浪费文体,但还是IP地址相对于全球还是不够用。
以下三种方式解决
- 动态分配IP地址,只给接入网络的主机分配IP地址(因此同一MAC地址设备,每次上网时IP地址可能不同)
- NAT技术:地址转化协议
- IPV6(IPV6与IPV4不兼容,IPV6使用16字节128位来表示一个IP地址)
3. 公网IP与私网IP
所有IP地址=公网IP+私网IP
网络规定,公网IP与私网IP相互独立,没有交集。
- 10.*开头的IP是私网IP,前8位是网络号,共有16777216个地址。
- 172.16——172.31,前12位是网络号
- 192.168.*开头,前16位是网络号
上述范围的IP地址是私网IP,其余IP地址都是公网IP。
局域网IP是可以重复的,因为使用的网络并不是公网IP,而是路由器设备构建出的局域网。所以私有IP不能出现在公网上,否则会出现歧义。
一般来讲,局域网的1号主机就是路由器。
路由器是连接多个局域网的设备。
对于本局域网的网口IP称为LAN口(局域网的子网IP),当路由器想要访问外网时网络接口称为WAN口。这个网络路由器的WAN口可能作为下一个网络LAN口。
跨网络通信的细节如下:
在通过局域网路由器时,目的IP不变
源IP替换为路由器的WAN口地址
将数据从主机发送到服务器:
服务器将处理数据发送回主机涉及MAC协议,先空开不谈。
之所以这样发送网络数据,是因为IP地址不足。
4. 路由转发
IP地址转发基本思路:以数据从主机A到主机B来看
所以:每一台网络中的设备都有路由表
link-local指的是默认路由,如果路由表查不到时,会交给默认路由进行发送。
数据在发送时先在本机上查找路由表,如果查到了同属于同一局域网,则不需要路由器转发。如果查不到,说明发送的不在一个局域网,需要路由转发离开局域网(默认路由)。
更多推荐
所有评论(0)