文章目录
一.网络层与数据链路层
- 传输层为应用层数据报文提供传输策略,而网络层则为传输层数据报文提供网络传输路径规划(基于路由节点的路径规划),数据链路层则负责将网络层报文传送给局域网内的其他主机
二.IP协议报头
报文切片
-
由于数据链路层存在最大传输单元
MTU
(数据链路层报文的最大字节数),因此IP
协议会将传输层交付下来的数据报文进行分片,IP
协议分片描述字段:
-
同一组分片中,任意一个
IP
报文丢失,则对应的传输层报文整个会被网络层丢弃,因此如果传输层使用的是UDP
协议,IP
协议的分片操作会很大程度上增加网络报文的丢包概率 -
如果传输层使用的是
TCP
协议,IP
协议的分片大小则会影响TCP
协议对应用层报文的切片大小,称为MSS
(Max Segment Size)(MSS
为TCP
协议三次握手时双方协商的重要字段)
IP协议与路由器
- 报文在跨网络传输过程中必须经过路由器进行跨网络节点路由,
IP
协议的主要任务就是借助IP
地址在路由过程中为报文提供路径规划
- 路由器的本质也是一台主机,路由器中配置了多张网卡作为多个子网的数据报文收发中转站连接多个子网(一张网卡使用一个
IP
地址,因此一个路由器配置了多个IP
地址)
IP地址的结构与子网掩码
IP
地址分为两个部分, 网络号和主机号- 网络号: 用于标识不同地区网段(广义上的局域网)的字段
- 主机号: 用于标识同一网段内的不同主机
- 子网掩码和
IP
地址位数相同,其二进制序列由若干个前缀1
和若干个后缀0
构成,子网掩码前缀1
的个数取决于网络号的位数,子网掩码与IP
地址按位与就可以得到IP
地址对应的网络号,用于快速进行路由决策
数据报文路由的实现机制
-
每台主机的网络层内部都内置了路由表:
-
路由器根据数据报文的
IP
地址,借助子网掩码,就可以得到数据报文的传输目的主机的网络号,通过查表就可以确定数据报文的传输目的主机是否位于本路由器所在的子网中,若是则将数据报文传送到相应的局域网中,否则进行路由转发传输给其他网络 -
除了转发数据报文,路由器另外一个重要作用就是构建局域网,路由器通常为局域网中的
1
号主机,最先加入到局域网中,并且为后续加入局域网的主机分配私网IP
地址,同时完成路由表的增删改操作 -
普通用户在入网之前,整个网络(区域网段的划分和路由器节点网络的铺设)就已经被运营商精心构建好了
三.公网IP和私网IP
32
位的IP
字段可以表示 2 32 2^{32} 232个不同的IP
地址,因此全球公网IP
是有限的资源,主机想要使用公网IP
入网需要向特定机构申请公网IP
,一般来说,只有特定的企业服务器,重要的路由器等设备会申请公网IP
,其余大部分用户设备一般直接使用的是私网IP
,由路由器动态分配.- 主机的私网
IP
仅在其所在的局域网中具有唯一性,私网IP
和设备之间采用临时绑定的机制,设备入网时,其私网IP
由局域网中的路由器动态分配,公网IP
和私网IP
配合构建网络,解决了全球范围内公网IP
数量不足的问题 - 私网
IP
有特定的前缀以便和公网IP
作明确区分
公网IP主机与公网IP主机之间的跨网络通信
- 网络中大部分设备使用的都是私网
IP
,因此公网IP
主机和公网IP
主机之间的跨网络通信其实并不常见,绝大部分网络通信本质上是公网IP
主机和私网IP
主机之间的跨网络通信以及局域网通信 - 另外,由于私网
IP
无法在全网中唯一标识一台主机,因此私网IP
主机和私网IP
主机之间是无法直接通信的,两个私网IP
主机的通信必须借助公网服务器进行代理
四.数据链路层与局域网通信
数据链路层以太网协议
-
数据链路层的以太网协议报文分为两种类型,负责实现局域网内的主机通信:
-
在局域网通信中,报文发送方先会在局域网中进行
ARP
请求广播,报文接收方通过核对ARP
请求中的目的IP
地址字段,确认自己就是报文的接收方后,再通过RARP
应答报文将自己的MAC
地址广播到局域网中,报文发送方就可以获取到报文接收方的MAC
地址,报文接收方和报文发送方会互相将彼此的私网IP:MAC地址
缓存起来,双方就可以正常进行数据收发了
五.NAT技术实现私网IP主机与公网IP主机之间的跨网络通信
NAT技术的诞生背景
- 私网
IP
主机只要能够获得公网IP
主机的公网IP
,就可以将数据报文发送给公网主机,然而由于私网IP
在全网中不能唯一地标识一台主机,因此公网IP
主机想要将回应报文发送给某台私网IP
主机就需要借助其他技术
从私网主机到公网主机的NAT路由
从公网主机到私网主机的NAT路由
- 私网主机向某台公网主机首次发送数据或发起
TCP
链接时,路由器就会建立一张映射表来存储局域网内主机的私网IP+原端口号 : 路由器出口IP+原端口号
映射关系键值对 - 当局域网内多个主机都访问同一个公网服务器时,路由器则通过
局域网内主机的私网IP+原端口号 : 路由器出口IP+自定义的替换端口号
键值对来区分局域网内的主机(不同主机通过端口号来区分)
- 公网服务器向私网主机发送数据报文时,封装的
IP
地址为某台路由器的公网IP
地址,数据报文经过若干次查表路由后,到达特定局域网的路由器中,再经过最后一次查表就可以将数据报文交给局域网内特定的私网主机
- 总言之,数据报文从私网主机到公网主机的NAT路由过程中,源私网
IP
经过不断地转换后变为公网IP
;数据报文从公网主机到私网主机的NAT路由过程中,目的公网IP
经过不断地查表转换后变为特定局域网的私网IP
NAT技术的缺陷
- 公网主机无法主动向私网主机发起连接;
- 映射表的生成和销毁都需要额外开销;
- 通信过程中一旦NAT路由设备异常, 所有相关的
TCP
连接也都会断开;