网络协议物理层,"地基"是怎么练成的
网络协议 数据链路层,“帧”建立统一新秩序
网络协议 网络层,万物归于IP
撰稿:未来侦察班
咨询:aynaixibaba
网络协议 网络层,万物归于IP
图片 | 华为技术社区
TCP/IP是必修课,物理层Phy、数据链路层、网络层、传输层、应用层五层... 本节接着聊网络层。
1. 网络层
从网络层开始,彻底摆脱硬件强相关,无论有线网、无线网、蓝牙PAN网络等,都可以通过ip地址互联互通,应用APP发包也只需要关心IP地址,不用知道对方的MAC地址等信息。
简单类比,家里用的电,无论是风力发电、太阳能、核能、或者火力发电,底层发电技术各式各样(物理层、数据链路层)。但只要去了电网(网络层),然后通过特高压输电线(运输层),就可以在庞大的电网中,将电力送到千家万户。用户不用关心是怎么发的电,怎么运输过来的。
2. 网络层详解
2.1 核心作用
网络层Network核心作用屏蔽物理层和数据链路层,网络设备可以动态分配ip地址,灵活组网。可以划分如下四个功能点:
逻辑寻址
路由选择
分组转发
网络诊断
2.2 协议数据单元
TCP/IP5层的PDU都有自己专属名称,网络层PDU称为数据包Packet。
IP数据包目前两个版本的,IPv4使用32位的4字节地址,IPv6使用128位的16字节地址,因此报文自然也不相同。一般场景下未明确描述的IP地址都是IPv4版本。
IPv4格式
网络层的协议数据单元PDU中,IP头长度可变,有效范围从20字节~60字节,
Version占用4bit位 4表示IPv4,6表示IPv6
IHL(Internet Header Length)网络头长度,控制IP报文包头长度,最小5(表示20字节),最大15(表示60字节)。
Type of Service简称TOS字段,服务类型
Total Length整个数据包的长度,最大65535但不能超过最大传输单元MTU
Identification,2字节标记数据包顺序,到65535最大值后归零重新计数,用于分片重组环节。Flags是否分片的标记,bit0表示是否分片,bit1表示是否是分片的最后一片。
Fragment Offset 用于分片重组,不受各分片接收顺序影响,还原整个数据包。
Time to Live即TTL 生命时间,表示数据包在网络网络中可以经过路由器最大数,减为0时丢弃。
Protocal协议1字节,表示ip数据包携带的数据单元使用什么协议解析,如ping包使用ICMP解析,使用协议号1。
Header Checksum数据包首部校验;
Source Address和Destination Address源ip地址和目的ip地址
IPv6格式
v6包头长度固定40字节,扩展头部不再严格限制长度,也遵循TLV(Type Length Value)格式更加灵活。
Version版本4bit和IPv4用法相同
Traffic class流量类型类似v4的type TOS字段
Payload Length有效字段长度,不包括头部
Next Header没有扩展头是指协议类型即解析有效字段的类型,和IPv4的protocol协议字段类似,有扩展头时指向扩展头类型。
Hop Limit跳数限制,和v4的TTL类似;使用跳数表示更为贴切。
Source Address和Destination Address源ip地址和目的ip地址,各自16个字节。
2.3 IP地址
ip地址版本IPv4、IPv6,局域网设备依然沿用IPv4,服务器地址已经悄悄支持ipv6版本。
IPv4划分为ABCDE 5类地址;
子网掩码可以改变网络可见范围,其长度32bit,和ipv4地址长度相同,也分为网络ID和主机ID两部分,不同的ip地址类型使用不同的掩码格式;和ip地址区别在于,没有固定的字段;局域网多使用255.255.255.0作为子网掩码。
当然在局域网中也可以人为调整子网掩码划分改变网络大小,比如10.0.0.x的A类地址路由器使用C类地址的子网掩码255.255.255.0。
每个类型的地址内部都有对应的广播地址,并且也可以使用有限广播地址255.255.255.255发送给本网络所有设备,如DHCP协议动态分配ip地址。
主机位同时也指明,当前网络可以容纳的主机数量,如常见的家用路由器C类地址局域网中,最多支持254个设备。
2.4 寻址
寻址简单点就是找到对方设备的过程,广域网靠ip地址逐跳搜索,局域网最终靠mac地址上门签收。
局域网寻址
局域网设备各自都维护ARP表(记录ip和mac地址对应关系),特点是不仅可以通过ip找到对方,也可以通过mac地址找到对方;
当A设备的arp表中已经保存B的ip和mac信息,直接在帧头的目的MAC地址填充B的MAC信息发送数据;
当A设备的arp表未保存B信息,先使用ARP协议在局域网中广播B的ip地址,等待B回复自己的mac地址信息,然后A更新自己的arp表,最后再将B的mac地址填充到帧头发送数据。
广域网寻址
广域网寻址就不同,MAC地址仅用于局域网内寻址,数据包穿过路由器后,MAC帧头的源mac地址会被替换成此路由器的MAC地址,目的mac地址换成相邻的下一跳路由器MAC地址;因为有规定,网络设备收到的数据包中MAC地址必须是自己直接相邻的设备,并且收到的帧中目的地址必须是自己否则丢弃。
上海的电脑要访问美国的Apple官网,无需知道它的mac地址,只需要对方域名/解析IP地址即可,中间会经过的很多路由器等设备,而这部分的层层MAC地址转换用户也是感知不到的。
特例,路由器级联的情况,属于局域网的范围,但是寻址却和广域网类似,每经过一个路由器需要替换原始的MAC源地址和目的地址信息。
2.5 封装和拆包
数据单元PDU传递的核心点在于,每一层都有自己的特定的签名,只是名字上不同而已,如前导码、包头、帧头等等,每层只检验自己层的签名。
封装过程:应用层和传输层PDU向下发送到网络层打上IP包头和包尾,到数据链路层再打上MAC帧头和帧尾,最后到达物理层加上前导码,编码成模拟信号后,最终发送出去。将上层的整个数据单元作为本层的数据部分“透明传输”给下层协议。
拆包过程:双绞线上的电信号和光纤上的光信号,到达物理层后,由模拟信号解码成数字信号,去掉前导码和帧首界定符,传递给MAC层后拆掉MAC的帧头帧尾,传递给网络层拆掉IP层包头包尾到达更高层处理。
类比物流运输场景,生鲜符合要求发食品检验证(高层协议)然后装车,物流卡车穿过高速公路需要高速收费卡(网络层包头包尾),而高速是不检查食品合格证,到达目的地后才需要复查食品安全(拆包数据校验),毕竟运输过程中也可能变质(丢包/干扰等现象)。
2.6 路由算法
分为静态路由和动态路由,静态路由依赖管理员手动配置,指定下一跳的明确地址,若网络拓扑改变需要重新配置。常见的动态路由算法
距离矢量算法搜索邻居设备,并交换邻居路由信息,适用于小型网络;
链路状态算法基于链路状态的内部网关协议(IGP),每台路由器独立构建全网拓扑图并通过SPF算法计算无环路径。
2.7 网络层协议家族
网络层的以IPv4/IPv6协议为基础,众多网络层协议可以分两类,直接以数据链路层建立的如ARP,和基于IP协议的如IGMP、ICMP等。
ARP地址解析协议 将IP地址解析成MAC协议,实际以MAC地址为基础,arp请求使用广播帧,相应使用单播帧。
数据链路层的目的mac地址(Destination MAC地址)为全FF的广播地址,网路层目标MAC地址(Target MAC地址)为全0地址。
3. 网络诊断
3.1 ICMP协议
ICMP全称Internet Control Message Protocol网络控制消息协议,传递网络状态信息和错误报告。常用的ping工具则是使用ICMP实现。ICMP是基于标准IP协议,单独的ICMP报文格式如下,包头固定的8字节,其中消息字段为可变长度。
3.2. 常见问题
IP地址ping不通,先检查双方的网络IP地址是否存在,ifconfig和ip addr网卡是否有多组IP地址;再检查系统防火墙策略是否拦截ping包;tcpdump抓包检查mac地址是否合法,尤其是自定义mac地址的设备。
IP地址丢失,检查物理链路状态,如RJ45网口指示灯是否正常亮,ifconfig查看网卡状态lower_up是否正常,再网卡总线如lspci,lsusb等确定是否存在。
欢迎评论区再补充 ...