网络层协议
网络层的核心工作内容是:地址管理和路由选择
其中最常用的就是IP协议.IP协议又分为 IPv4 和 IPv6,负责给设备分配地址、数据包路由转发.在此我仅介绍IPv4协议原理
IP协议格式

- 4位版本号
- 指定IP协议的版本号,我们现在演示的是IPv4,也就是4
- 4位头部长度
- 表示IP头部的长度是多少个32bit,长度即该值*4的字节数.4bit表示的最大数字是15,因此IP头部最大长度为60字节
- 8位服务类型
- 虽然是8位,但因为历史遗留问题,实际只有4bit有效
- 在4bit中,只有一个值为1,其它三个值都为0.这4bit的意义如下
- D(Delay):低延迟
传输过程中,尽量花更短的时间 - T(Throughput):高吞吐量
单位时间中,尽量传输更多的数据 - R(Reliability):高可靠性
传输过程中,尽量保证数据不丢失 - C(Cost):低费用
传输过程中,尽量选择最低成本的链路
- D(Delay):低延迟
- 16位总长度
- 整个IP数据报的长度(头部加数据),最大为64kb
IP数据包内置了拆包组包的功能(通过16位标识,3位标志,13位片偏移实现).当传输数据较大时回自动拆包,接收方会自动组包
- 整个IP数据报的长度(头部加数据),最大为64kb
- 16位标识
- 同一个数据报的分片会有吧相同的标识.通过该标识来确定是否为同一个数据
- 3位标志
- 表示该数据是否是分片,是否是该数据的最后一个分片
- 每一位的具体意义如下:
0. 第零位:保留,必须为0- 第一位:若为1表示非分片;为0表示为分片
- 第二位:若为1表示后面还有分片;为0表示该数据的最后一片
- 13位片偏移
- 类似于TCP中的序列号,通过片偏移可以确定分片数据的正确顺序
- 8位生存时间TTL
- 描述了一个数据包最多可经历几个路由器,每经过一个路由器就减一,为0时丢弃数据
- 8位协议
- 说明载荷中的协议类型.如TCPUDP这样
- 16位首部检验和
- 只检验首部数据,不包含载荷.且每经过一个路由器 TTL 会减少,得重新计算
- 32位源IP地址
- 32位目的IP地址
IPv4
IP地址就像是你的住址,可变.通过IP地址能大抵确认你在哪一块地区
而MAC地址就像是你的身份证,不可变.通过MAC地址能精确找到你
在局域网中,可以仅通过MAC地址来进行通信,相当于在小区里找一个人.但是当通信升级到广域网时,再使用MAC地址来找会发现很困难,因为此时面对的不是一个小区,而是一整个国家.故在广域网通信时,都得结合IP地址来找人在哪个地方,再通过MAC地址来在这一小块区域中找到对应的人
- IPv4格式
IP地址是一个32位的二进制数.通常被分割为4个8位二进制数:例如11000000.10101000.00000001.00000001代表的就是192.168.1.1
IPv4的数量也很好计算.32位二进制数表示的最大值为2^32,大约43亿.43亿虽然看起里很大,但人均分配IPv4地址仅为0.2个.因此IPv4地址是远远不够使用的
-
分配方式
由于IP地址远远不够使每一个设备都有不重复的IP地址.而为了让每一个设备都能通过IP通信,就有了主要的两种分配方式- 动态分配
设备上网时才分配IP.不上网时就回收IP
这种方法只能在较小的程度上减轻IP不够用的问题.本质上只是提高了IP地址的利用效率 - NAT机制(主要)
NAT的主要机制在下- 不强求每个设备都有独立的公网IP地址
- 约定,每个局域网中的IP不能重复
- 约定,不同局域网中的IP允许重复
NAT机制在很大程度上解决了IPv4地址不够用的问题.但其也有一个弊端.就是不同局域网的设备不能直接通信,必须借助公网IP中转才能通信
#mermaid-svg-fP36z5EYAmd1GEDt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fP36z5EYAmd1GEDt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fP36z5EYAmd1GEDt .error-icon{fill:#552222;}#mermaid-svg-fP36z5EYAmd1GEDt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fP36z5EYAmd1GEDt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fP36z5EYAmd1GEDt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fP36z5EYAmd1GEDt .marker.cross{stroke:#333333;}#mermaid-svg-fP36z5EYAmd1GEDt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fP36z5EYAmd1GEDt p{margin:0;}#mermaid-svg-fP36z5EYAmd1GEDt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fP36z5EYAmd1GEDt .cluster-label text{fill:#333;}#mermaid-svg-fP36z5EYAmd1GEDt .cluster-label span{color:#333;}#mermaid-svg-fP36z5EYAmd1GEDt .cluster-label span p{background-color:transparent;}#mermaid-svg-fP36z5EYAmd1GEDt .label text,#mermaid-svg-fP36z5EYAmd1GEDt span{fill:#333;color:#333;}#mermaid-svg-fP36z5EYAmd1GEDt .node rect,#mermaid-svg-fP36z5EYAmd1GEDt .node circle,#mermaid-svg-fP36z5EYAmd1GEDt .node ellipse,#mermaid-svg-fP36z5EYAmd1GEDt .node polygon,#mermaid-svg-fP36z5EYAmd1GEDt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fP36z5EYAmd1GEDt .rough-node .label text,#mermaid-svg-fP36z5EYAmd1GEDt .node .label text,#mermaid-svg-fP36z5EYAmd1GEDt .image-shape .label,#mermaid-svg-fP36z5EYAmd1GEDt .icon-shape .label{text-anchor:middle;}#mermaid-svg-fP36z5EYAmd1GEDt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fP36z5EYAmd1GEDt .rough-node .label,#mermaid-svg-fP36z5EYAmd1GEDt .node .label,#mermaid-svg-fP36z5EYAmd1GEDt .image-shape .label,#mermaid-svg-fP36z5EYAmd1GEDt .icon-shape .label{text-align:center;}#mermaid-svg-fP36z5EYAmd1GEDt .node.clickable{cursor:pointer;}#mermaid-svg-fP36z5EYAmd1GEDt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fP36z5EYAmd1GEDt .arrowheadPath{fill:#333333;}#mermaid-svg-fP36z5EYAmd1GEDt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fP36z5EYAmd1GEDt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fP36z5EYAmd1GEDt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fP36z5EYAmd1GEDt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fP36z5EYAmd1GEDt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fP36z5EYAmd1GEDt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fP36z5EYAmd1GEDt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fP36z5EYAmd1GEDt .cluster text{fill:#333;}#mermaid-svg-fP36z5EYAmd1GEDt .cluster span{color:#333;}#mermaid-svg-fP36z5EYAmd1GEDt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fP36z5EYAmd1GEDt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fP36z5EYAmd1GEDt rect.text{fill:none;stroke-width:0;}#mermaid-svg-fP36z5EYAmd1GEDt .icon-shape,#mermaid-svg-fP36z5EYAmd1GEDt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fP36z5EYAmd1GEDt .icon-shape p,#mermaid-svg-fP36z5EYAmd1GEDt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fP36z5EYAmd1GEDt .icon-shape .label rect,#mermaid-svg-fP36z5EYAmd1GEDt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fP36z5EYAmd1GEDt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fP36z5EYAmd1GEDt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fP36z5EYAmd1GEDt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} NAT转换
NAT转换
NAT转换
NAT转换
NAT转换
NAT转换
路由器110.10.10.1
路由器210.10.10.2
公网
PC1192.168.1.1
PC2192.168.1.2
PC3192.168.1.3
PC4192.168.1.4
PC5192.168.1.5
PC6192.168.1.6
- 动态分配
NAT原理
上图展示了路由器通过NAT转换来做到一个路由器IP可以让多个设备进行网络通信.实现原理是路由器中的NAT映射表
- NAT映射
路由器会对进入网关的数据包进行重新封装.主要是切换源IP和源端口,伪装该数据是由路由器发送的
#mermaid-svg-jHfHURRXj6d5RdDP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jHfHURRXj6d5RdDP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jHfHURRXj6d5RdDP .error-icon{fill:#552222;}#mermaid-svg-jHfHURRXj6d5RdDP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jHfHURRXj6d5RdDP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jHfHURRXj6d5RdDP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jHfHURRXj6d5RdDP .marker.cross{stroke:#333333;}#mermaid-svg-jHfHURRXj6d5RdDP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jHfHURRXj6d5RdDP p{margin:0;}#mermaid-svg-jHfHURRXj6d5RdDP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jHfHURRXj6d5RdDP .cluster-label text{fill:#333;}#mermaid-svg-jHfHURRXj6d5RdDP .cluster-label span{color:#333;}#mermaid-svg-jHfHURRXj6d5RdDP .cluster-label span p{background-color:transparent;}#mermaid-svg-jHfHURRXj6d5RdDP .label text,#mermaid-svg-jHfHURRXj6d5RdDP span{fill:#333;color:#333;}#mermaid-svg-jHfHURRXj6d5RdDP .node rect,#mermaid-svg-jHfHURRXj6d5RdDP .node circle,#mermaid-svg-jHfHURRXj6d5RdDP .node ellipse,#mermaid-svg-jHfHURRXj6d5RdDP .node polygon,#mermaid-svg-jHfHURRXj6d5RdDP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jHfHURRXj6d5RdDP .rough-node .label text,#mermaid-svg-jHfHURRXj6d5RdDP .node .label text,#mermaid-svg-jHfHURRXj6d5RdDP .image-shape .label,#mermaid-svg-jHfHURRXj6d5RdDP .icon-shape .label{text-anchor:middle;}#mermaid-svg-jHfHURRXj6d5RdDP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-jHfHURRXj6d5RdDP .rough-node .label,#mermaid-svg-jHfHURRXj6d5RdDP .node .label,#mermaid-svg-jHfHURRXj6d5RdDP .image-shape .label,#mermaid-svg-jHfHURRXj6d5RdDP .icon-shape .label{text-align:center;}#mermaid-svg-jHfHURRXj6d5RdDP .node.clickable{cursor:pointer;}#mermaid-svg-jHfHURRXj6d5RdDP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-jHfHURRXj6d5RdDP .arrowheadPath{fill:#333333;}#mermaid-svg-jHfHURRXj6d5RdDP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jHfHURRXj6d5RdDP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jHfHURRXj6d5RdDP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jHfHURRXj6d5RdDP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-jHfHURRXj6d5RdDP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jHfHURRXj6d5RdDP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-jHfHURRXj6d5RdDP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jHfHURRXj6d5RdDP .cluster text{fill:#333;}#mermaid-svg-jHfHURRXj6d5RdDP .cluster span{color:#333;}#mermaid-svg-jHfHURRXj6d5RdDP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jHfHURRXj6d5RdDP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-jHfHURRXj6d5RdDP rect.text{fill:none;stroke-width:0;}#mermaid-svg-jHfHURRXj6d5RdDP .icon-shape,#mermaid-svg-jHfHURRXj6d5RdDP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-jHfHURRXj6d5RdDP .icon-shape p,#mermaid-svg-jHfHURRXj6d5RdDP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-jHfHURRXj6d5RdDP .icon-shape .label rect,#mermaid-svg-jHfHURRXj6d5RdDP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-jHfHURRXj6d5RdDP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-jHfHURRXj6d5RdDP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-jHfHURRXj6d5RdDP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 源IP:192.168.1.1
源端口:2000
目的IP:8.8.8.8
目的端口:80
源IP:10.10.10.1
源端口:1234
目的IP:8.8.8.8
目的端口:80
源IP:10.10.10.1
源端口:1234
目的IP:8.8.8.8
目的端口:80
主机A
IP:192.168.1.1
路由器
IP:10.10.10.1
保存新的NAT映射
192.168.1.1:2000<-->10.10.10.1:1234
公网
服务器
IP:8.8.8.8
此时路由器中会存一个NAT映射表,当外部有数据发向路由器的指定端口时,会自动修改数据包的源IP和源端口
当服务器返回给主机A数据包时,路由器会检查目的IP和端口,若满足NAT映射表则自动修改
#mermaid-svg-wWLwDf5rYD6O4I2z{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wWLwDf5rYD6O4I2z .error-icon{fill:#552222;}#mermaid-svg-wWLwDf5rYD6O4I2z .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wWLwDf5rYD6O4I2z .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wWLwDf5rYD6O4I2z .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wWLwDf5rYD6O4I2z .marker.cross{stroke:#333333;}#mermaid-svg-wWLwDf5rYD6O4I2z svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wWLwDf5rYD6O4I2z p{margin:0;}#mermaid-svg-wWLwDf5rYD6O4I2z .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z .cluster-label text{fill:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z .cluster-label span{color:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z .cluster-label span p{background-color:transparent;}#mermaid-svg-wWLwDf5rYD6O4I2z .label text,#mermaid-svg-wWLwDf5rYD6O4I2z span{fill:#333;color:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z .node rect,#mermaid-svg-wWLwDf5rYD6O4I2z .node circle,#mermaid-svg-wWLwDf5rYD6O4I2z .node ellipse,#mermaid-svg-wWLwDf5rYD6O4I2z .node polygon,#mermaid-svg-wWLwDf5rYD6O4I2z .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wWLwDf5rYD6O4I2z .rough-node .label text,#mermaid-svg-wWLwDf5rYD6O4I2z .node .label text,#mermaid-svg-wWLwDf5rYD6O4I2z .image-shape .label,#mermaid-svg-wWLwDf5rYD6O4I2z .icon-shape .label{text-anchor:middle;}#mermaid-svg-wWLwDf5rYD6O4I2z .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wWLwDf5rYD6O4I2z .rough-node .label,#mermaid-svg-wWLwDf5rYD6O4I2z .node .label,#mermaid-svg-wWLwDf5rYD6O4I2z .image-shape .label,#mermaid-svg-wWLwDf5rYD6O4I2z .icon-shape .label{text-align:center;}#mermaid-svg-wWLwDf5rYD6O4I2z .node.clickable{cursor:pointer;}#mermaid-svg-wWLwDf5rYD6O4I2z .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wWLwDf5rYD6O4I2z .arrowheadPath{fill:#333333;}#mermaid-svg-wWLwDf5rYD6O4I2z .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wWLwDf5rYD6O4I2z .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wWLwDf5rYD6O4I2z .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wWLwDf5rYD6O4I2z .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wWLwDf5rYD6O4I2z .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wWLwDf5rYD6O4I2z .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wWLwDf5rYD6O4I2z .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wWLwDf5rYD6O4I2z .cluster text{fill:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z .cluster span{color:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wWLwDf5rYD6O4I2z .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wWLwDf5rYD6O4I2z rect.text{fill:none;stroke-width:0;}#mermaid-svg-wWLwDf5rYD6O4I2z .icon-shape,#mermaid-svg-wWLwDf5rYD6O4I2z .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wWLwDf5rYD6O4I2z .icon-shape p,#mermaid-svg-wWLwDf5rYD6O4I2z .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wWLwDf5rYD6O4I2z .icon-shape .label rect,#mermaid-svg-wWLwDf5rYD6O4I2z .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wWLwDf5rYD6O4I2z .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wWLwDf5rYD6O4I2z .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wWLwDf5rYD6O4I2z :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 源IP:8.8.8.8
源端口:80
目的IP:10.10.10.1
目的端口:1234
源IP:8.8.8.8
源端口:80
目的IP:10.10.10.1
目的端口:1234
源IP:8.8.8.8
源端口:80
目的IP:192.168.1.1
目的端口:2000
主机A
IP:192.168.1.1
路由器
IP:10.10.10.1
保存的NAT映射
192.168.1.1:2000<-->10.10.10.1:1234
公网
服务器
IP:8.8.8.8
以上便是在NAT中,内网设备如何给外网设备发送的接收消息的数据处理流程
IPv6
- IPv6的协议格式和IPv4一模一样
IPv4和IPv6在使用感知上没有任何不同.就比如你自己上网,不专门去查IP你也不知道你用的是IPv4还是IPv6
IPv6完全可以理解为IPv4的升级版
在IPv4中,我们会遇到可用地址不多,人均只有0.2个IPv4地址.但在IPv6中,由于把4个字节表示升级为了16个字节,其可表达的数就已经达到了恐怖的2^128,约等于3.4* 10^38.这个数字甚至足够给地球上的每一粒沙子都分配一个IPv6地址
由于IPv6的可用地址非常多,故在通信中,不会像IPv4那样频繁使用NAT机制.而是真正的实现端到端直连
不过现在IPv6的普及率还很低,现在IPv6普及程度最高的国家就是中国
网段划分
前面说到什么局域网广域网的.这些是如何区分的呢?
对于一个IP,我们会把它分为主机号和网络号.区分规则很简单,前面的是主机号,后面的网络号.
网络号:同一个局域网中,所有设备的IP地址的网络号必须相同;两个相邻局域网,网络号也必须不同
主机号:同一个局域网中,所有设备的IP地址的主机号必须不同
当一个IP有相同的主机号192.168.1时,192.168.1.100和192.168.1.101就是在同一个网段内,而主机号后面的100和101就是网络号了
但并不是所有的IP地址前面三组数据都是网络号,这个依靠的是子网掩码进行区分
当我们在电脑上cmd里输入一个ipconfig时,一个网络接口会有以下信息
bash
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : 192.168.11.200
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.11.1
其中有熟悉的IPv4地址,还有暂时不了解的子网掩码和默认网关
- 什么是子网掩码?
对于上面255.255.255.0.我们转换为二进制会发现是11111111.11111111.11111111.00000000
其实子网掩码的设定就是二进制前面都为1,后面都为0.比如11111111.11111111.11110000.00000000,这个对应的子网掩码就是255.255.240.0
在某些设备上配置网络时,会要求以192.168.1.1 /24 这样的格式进行配置.其中/24就代表的子网掩码,该子网掩码有24个1,即255.255.255.0
- 分块间隔
子网掩码区分IP是局域网还是广域网靠的就是计算该网络号在不在分块间隔中
分块间隔计算公式是256-二进制不全为1的子网掩码对应值=分块间隔
对于子网掩码255.255.255.0.其二进制不全为1的值是0,说明从0开始,每隔一个256都是属于同一个局域网
例如主机号是192.168.0.0 /24 每个256都是同一个局域网.即192.168.0.0 ~ 192.168.0.255为一个局域网.到了192.168.1.0就不是同一个局域网了
再例如主机号是192.168.0.0 /20 子网掩码是255.255.240.0 不全为1的子网掩码为240,因此分块间隔是256-249=16.即192.168.0.0~192.168.15.255为一个局域网,到了192.168.16.0就不再是同一个局域网了
还是以192.168.0.0 /24 为例子.当局域网内的一个主机想要向192.168.0.100通信时,由于该IP属于局域网内,故可以直接通过路由器/交换机通信.但如果向192.168.1.100通信时,由于该IP不属于同一个局域网内,设备就会把这个请求发给网关(也就是路由器),让路由器把这个请求交给广域网中的设备处理
#mermaid-svg-gzmzWgLweJziPtl5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gzmzWgLweJziPtl5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gzmzWgLweJziPtl5 .error-icon{fill:#552222;}#mermaid-svg-gzmzWgLweJziPtl5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gzmzWgLweJziPtl5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gzmzWgLweJziPtl5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gzmzWgLweJziPtl5 .marker.cross{stroke:#333333;}#mermaid-svg-gzmzWgLweJziPtl5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gzmzWgLweJziPtl5 p{margin:0;}#mermaid-svg-gzmzWgLweJziPtl5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gzmzWgLweJziPtl5 .cluster-label text{fill:#333;}#mermaid-svg-gzmzWgLweJziPtl5 .cluster-label span{color:#333;}#mermaid-svg-gzmzWgLweJziPtl5 .cluster-label span p{background-color:transparent;}#mermaid-svg-gzmzWgLweJziPtl5 .label text,#mermaid-svg-gzmzWgLweJziPtl5 span{fill:#333;color:#333;}#mermaid-svg-gzmzWgLweJziPtl5 .node rect,#mermaid-svg-gzmzWgLweJziPtl5 .node circle,#mermaid-svg-gzmzWgLweJziPtl5 .node ellipse,#mermaid-svg-gzmzWgLweJziPtl5 .node polygon,#mermaid-svg-gzmzWgLweJziPtl5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gzmzWgLweJziPtl5 .rough-node .label text,#mermaid-svg-gzmzWgLweJziPtl5 .node .label text,#mermaid-svg-gzmzWgLweJziPtl5 .image-shape .label,#mermaid-svg-gzmzWgLweJziPtl5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-gzmzWgLweJziPtl5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gzmzWgLweJziPtl5 .rough-node .label,#mermaid-svg-gzmzWgLweJziPtl5 .node .label,#mermaid-svg-gzmzWgLweJziPtl5 .image-shape .label,#mermaid-svg-gzmzWgLweJziPtl5 .icon-shape .label{text-align:center;}#mermaid-svg-gzmzWgLweJziPtl5 .node.clickable{cursor:pointer;}#mermaid-svg-gzmzWgLweJziPtl5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gzmzWgLweJziPtl5 .arrowheadPath{fill:#333333;}#mermaid-svg-gzmzWgLweJziPtl5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gzmzWgLweJziPtl5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gzmzWgLweJziPtl5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gzmzWgLweJziPtl5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gzmzWgLweJziPtl5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gzmzWgLweJziPtl5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gzmzWgLweJziPtl5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gzmzWgLweJziPtl5 .cluster text{fill:#333;}#mermaid-svg-gzmzWgLweJziPtl5 .cluster span{color:#333;}#mermaid-svg-gzmzWgLweJziPtl5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gzmzWgLweJziPtl5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gzmzWgLweJziPtl5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-gzmzWgLweJziPtl5 .icon-shape,#mermaid-svg-gzmzWgLweJziPtl5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gzmzWgLweJziPtl5 .icon-shape p,#mermaid-svg-gzmzWgLweJziPtl5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gzmzWgLweJziPtl5 .icon-shape .label rect,#mermaid-svg-gzmzWgLweJziPtl5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gzmzWgLweJziPtl5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gzmzWgLweJziPtl5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gzmzWgLweJziPtl5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 主机A想要访问8.8.8.8,由于该网段不在同一个局域网,故交给网关(路由器)进行跨网段转发
路由器收到后将该请求转发到路由器的广域网中(通常可以理解为公网)
主机A
IP:192.168.0.100
子网掩码:255.255.255.0
默认网关:192.168.0.1
路由器
局域网IP:192.168.10.1
广域网IP:10.10.10.1
公网
- 古早的网段划分方式
最早网段是按照ABCDE五类网段这样的方式进行分类的
分类过程如下
| 类别 | 地址范围 | 默认子网掩码 | 网络位 | 主机位 | 特点 | 常见用途 |
|---|---|---|---|---|---|---|
| A 类 | 1.0.0.0 ~ 126.255.255.255 | 255.0.0.0 | 8 位 | 24 位 | 网络少,主机多 | 大型网络 |
| B 类 | 128.0.0.0 ~ 191.255.255.255 | 255.255.0.0 | 16 位 | 16 位 | 网络和主机数量适中 | 中型网络 |
| C 类 | 192.0.0.0 ~ 223.255.255.255 | 255.255.255.0 | 24 位 | 8 位 | 网络多,主机少 | 小型局域网 |
| D 类 | 224.0.0.0 ~ 239.255.255.255 | 无 | 无 | 无 | 组播地址 | 视频会议、直播 |
| E 类 | 240.0.0.0 ~ 255.255.255.255 | 无 | 无 | 无 | 保留实验 | 科研实验 |
由于该分段方式会浪费大量网段,故现今不再主流使用
- 特殊网段
| 网段段 | 用途 |
|---|---|
| 127.0.0.0/8 | 回环地址,本机测试 |
| 10.0.0.0/8 | A类私有内网地址 |
| 172.16.0.0/12 | B类私有内网地址 |
| 192.168.0.0/16 | C类私有内网地址 |
路由选择
前面我们知道当主机不知道目的IP在哪时会发往路由器,那么路由器又是怎么找到对应的目的服务器的呢?
其实,路由器有自己的一套规则
当主机把数据交给路由器时,路由器会查询路由表.假设有一个路由表是下面这样的
| 目标网络 | 下一跳 | 出接口 |
|---|---|---|
| 192.168.1.0/24 | 直连 | G0/0 |
| 10.0.0.0/8 | 1.1.1.2 | G0/1 |
| 0.0.0.0/0 | 100.1.1.1 | G0/2 |
当目标IP是8.8.8.8时,前面两条地址都不匹配,于是就走默认路由,即0.0.0.0/0
直接把这个数据包传递给它的上一级路由器,如果上一级路由器还是没在路由表里找到,那么就继续把数据传递给上级路由器的再上一级
- 假设一个武汉某家庭的主机想要把数据发送到广东,那么路由过程大概如下
#mermaid-svg-Ir6aXOIpk8ZqiOqO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .error-icon{fill:#552222;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .marker.cross{stroke:#333333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO p{margin:0;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .cluster-label text{fill:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .cluster-label span{color:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .cluster-label span p{background-color:transparent;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .label text,#mermaid-svg-Ir6aXOIpk8ZqiOqO span{fill:#333;color:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .node rect,#mermaid-svg-Ir6aXOIpk8ZqiOqO .node circle,#mermaid-svg-Ir6aXOIpk8ZqiOqO .node ellipse,#mermaid-svg-Ir6aXOIpk8ZqiOqO .node polygon,#mermaid-svg-Ir6aXOIpk8ZqiOqO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .rough-node .label text,#mermaid-svg-Ir6aXOIpk8ZqiOqO .node .label text,#mermaid-svg-Ir6aXOIpk8ZqiOqO .image-shape .label,#mermaid-svg-Ir6aXOIpk8ZqiOqO .icon-shape .label{text-anchor:middle;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .rough-node .label,#mermaid-svg-Ir6aXOIpk8ZqiOqO .node .label,#mermaid-svg-Ir6aXOIpk8ZqiOqO .image-shape .label,#mermaid-svg-Ir6aXOIpk8ZqiOqO .icon-shape .label{text-align:center;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .node.clickable{cursor:pointer;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .arrowheadPath{fill:#333333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Ir6aXOIpk8ZqiOqO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Ir6aXOIpk8ZqiOqO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Ir6aXOIpk8ZqiOqO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .cluster text{fill:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .cluster span{color:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Ir6aXOIpk8ZqiOqO rect.text{fill:none;stroke-width:0;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .icon-shape,#mermaid-svg-Ir6aXOIpk8ZqiOqO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .icon-shape p,#mermaid-svg-Ir6aXOIpk8ZqiOqO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .icon-shape .label rect,#mermaid-svg-Ir6aXOIpk8ZqiOqO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Ir6aXOIpk8ZqiOqO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Ir6aXOIpk8ZqiOqO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Ir6aXOIpk8ZqiOqO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 发送到广东的数据包
路由表中没有通往广东的信息
默认传递给上级路由器
路由表中没有通往广东的信息
默认传递给上级路由器
路由表中没有通往广东的信息
默认传递给上级路由器
路由表中没有通往广东的信息
默认传递给上级路由器
路由表中有通往广东的信息
主机
家庭路由器
小区路由器
区级路由器
市级路由器
省级路由器
广东路由器
更规范的路由流程
#mermaid-svg-HkCSB68x6iGEc9ra{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HkCSB68x6iGEc9ra .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HkCSB68x6iGEc9ra .error-icon{fill:#552222;}#mermaid-svg-HkCSB68x6iGEc9ra .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HkCSB68x6iGEc9ra .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HkCSB68x6iGEc9ra .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HkCSB68x6iGEc9ra .marker.cross{stroke:#333333;}#mermaid-svg-HkCSB68x6iGEc9ra svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HkCSB68x6iGEc9ra p{margin:0;}#mermaid-svg-HkCSB68x6iGEc9ra .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HkCSB68x6iGEc9ra .cluster-label text{fill:#333;}#mermaid-svg-HkCSB68x6iGEc9ra .cluster-label span{color:#333;}#mermaid-svg-HkCSB68x6iGEc9ra .cluster-label span p{background-color:transparent;}#mermaid-svg-HkCSB68x6iGEc9ra .label text,#mermaid-svg-HkCSB68x6iGEc9ra span{fill:#333;color:#333;}#mermaid-svg-HkCSB68x6iGEc9ra .node rect,#mermaid-svg-HkCSB68x6iGEc9ra .node circle,#mermaid-svg-HkCSB68x6iGEc9ra .node ellipse,#mermaid-svg-HkCSB68x6iGEc9ra .node polygon,#mermaid-svg-HkCSB68x6iGEc9ra .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HkCSB68x6iGEc9ra .rough-node .label text,#mermaid-svg-HkCSB68x6iGEc9ra .node .label text,#mermaid-svg-HkCSB68x6iGEc9ra .image-shape .label,#mermaid-svg-HkCSB68x6iGEc9ra .icon-shape .label{text-anchor:middle;}#mermaid-svg-HkCSB68x6iGEc9ra .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HkCSB68x6iGEc9ra .rough-node .label,#mermaid-svg-HkCSB68x6iGEc9ra .node .label,#mermaid-svg-HkCSB68x6iGEc9ra .image-shape .label,#mermaid-svg-HkCSB68x6iGEc9ra .icon-shape .label{text-align:center;}#mermaid-svg-HkCSB68x6iGEc9ra .node.clickable{cursor:pointer;}#mermaid-svg-HkCSB68x6iGEc9ra .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HkCSB68x6iGEc9ra .arrowheadPath{fill:#333333;}#mermaid-svg-HkCSB68x6iGEc9ra .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HkCSB68x6iGEc9ra .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HkCSB68x6iGEc9ra .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HkCSB68x6iGEc9ra .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HkCSB68x6iGEc9ra .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HkCSB68x6iGEc9ra .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HkCSB68x6iGEc9ra .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HkCSB68x6iGEc9ra .cluster text{fill:#333;}#mermaid-svg-HkCSB68x6iGEc9ra .cluster span{color:#333;}#mermaid-svg-HkCSB68x6iGEc9ra div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HkCSB68x6iGEc9ra .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HkCSB68x6iGEc9ra rect.text{fill:none;stroke-width:0;}#mermaid-svg-HkCSB68x6iGEc9ra .icon-shape,#mermaid-svg-HkCSB68x6iGEc9ra .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HkCSB68x6iGEc9ra .icon-shape p,#mermaid-svg-HkCSB68x6iGEc9ra .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HkCSB68x6iGEc9ra .icon-shape .label rect,#mermaid-svg-HkCSB68x6iGEc9ra .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HkCSB68x6iGEc9ra .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HkCSB68x6iGEc9ra .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HkCSB68x6iGEc9ra :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
主机A
目标是否同网段?
ARP获取目标MAC
直接发送
发送给默认网关
路由器查询路由表
是否存在匹配路由?
最长前缀匹配
确定下一跳
TTL减1
重新封装MAC
转发到下一台路由器
丢弃数据包
数据链路层
前面我们说过数据链路层的作用,即负责两个相邻节点的数据转发
在了解数据链路层中的协议前,我们应该先知道什么是MAC地址
MAC地址
- MAC地址是什么?
MAC地址也被称为物理地址,是用来标识网络设备物理硬件的地址,是网卡出厂自带的唯一硬件编号.简单来说,它就是你电脑的身份证,你的电脑上的MAC地址只属于你,不可重复,也不可修改.但由于一个电脑上通常具有多个网卡,而每一个网卡都有一个MAC地址,故你的电脑很可能有多个不同的MAC地址 - 查看自己的MAC地址
windows电脑可在cmd中输入ipconfig /all来查看自己各网卡对应的MAC地址
bash
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . : lan
描述. . . . . . . . . . . . . . . : RZ608 Wi-Fi 6E 80MHz
物理地址. . . . . . . . . . . . . : 50-C2-E8-F8-ED-A3
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
IPv4 地址 . . . . . . . . . . . . : 192.168.1.134(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
DHCP 服务器 . . . . . . . . . . . : 192.168.1.1
DNS 服务器 . . . . . . . . . . . : 192.168.1.1
TCPIP 上的 NetBIOS . . . . . . . : 已禁用
可以看到我电脑无线网卡的MAC地址是50-C2-E8-F8-ED-A3
MAC是由48位二进制数组成的,通常写成12位十六进制.相较于IPv4,MAC地址的数量还足以给每一个电子设备分配独立的MAC地址.
在网络通信中,MAC地址常用于同一局域网内进行通信,而IP地址常用于跨网段通信.
简单来说:IP管外网,MAC管内网
- 特殊MAC地址
广播数据报地址:FF:FF:FF:FF:FF:FF
发送⼀个⼴播数据报,对同⽹段所有主机发送数据报
以太网帧
- 以太网帧格式
6位目的MAC地址|6位源MAC地址|2位类型|数据|4位CRC - 2位类型:帧协议类型字段有3个值,分别对应IP,ARP,RARP
- 4位CRC:CRC效验码,用于确认数据无误
MTU
MTU表示的是最大传输单元,即链路能一次发的最大数据包字节长度
对于以太网,默认MTU为1500字节.其中包含:IP头(20)+TCP头(20)+数据(1460)
当一个IP数据包的小于MTU时,路由器可以直接将数据封装成一个帧一次发送
当数据包大于MTU时,路由器会进行分片操作,将大的数据包切分成一个个小的数据包发送
其它协议
数据链路层中最常见的是以太网帧.但以下常用协议也属于数据链路层
- WIFI
- 蓝牙
- 5G