ip地址和子网掩码
引入
IP协议概述
IP的主要作用
IP网络的结构
IP头封装格式
MTU
MTU(Maximum Transmission Unit)是网络中一个物理或逻辑链路所能承载的最大数据包大小。它通常以字节为单位表示,常见的 MTU 值为 1500 字节。MTU 的大小取决于链路的类型和技术标准,例如以太网的 MTU 值为 1500 字节,而 PPPoE 的 MTU 值为 1492 字节。如果发送的数据包大小超过了 MTU 的大小,那么数据包将会被分片成多个碎片进行传输,从而降低传输效率和数据吞吐量。
MSS
MTU和MSS的关系
https://blog.51cto.com/fengjicheng/5177620
MSS(Maximum Segment Size,最大分节大小
)是 TCP 协议中一个参数,它表示每个 TCP 数据包的最大有效载荷大小。MSS 的大小通常是 MTU 减去 TCP 和 IP 头的长度(通常为 40 字节),因此在一个 MTU 大小为 1500 字节的网络中,MSS 值通常为 1460 字节。MSS 的大小对 TCP 连接的性能和稳定性有很大影响,因为它决定了每个 TCP 数据包的大小和数量。如果 MSS 的大小设置得太大,那么每个 TCP 数据包的大小就会很大,会导致网络拥塞和延迟增加。如果 MSS 的大小设置得太小,那么每个 TCP 数据包的数量就会很多,会导致网络负载增加和 TCP 连接效率降低。
常见问题:MTU和MSS配置不合理导致打不开某些网站
https://www.v2ex.com/t/940431#reply8
问题描述:
在Linux
系统里进行pppoe
拨号上网,拨号成功后会创建一个名为 ppp0
的网络接口
,这个网络接口
的IP
就是运营商分配的动态公网IP
,然后通过以下命令将这台Linux
作为其它设备
的网关
。
# 将来自 ppp0 接口的数据包进行源地址转换(SNAT),以便从该接口出去的数据包能够返回到正确的源地址
## -t nat:指定要配置的 iptables 表是 nat 表,该表用于进行 NAT 规则配置
## -A POSTROUTING:向 POSTROUTING 链(输出链)添加一条规则。POSTROUTING 链用于对从本地网络出去的数据包进行处理
## -o ppp0:指定规则应用于出口接口为 ppp0 的数据包
## -j MASQUERADE:指定要使用 MASQUERADE 动作,即进行源地址转换(SNAT)操作
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# 开启Linux内核的IP转发
sysctl -w net.ipv4.ip_forward=1
遇到的问题是其他设备
将这台Linux
作为网关
后大部分网站
都打不开
,但有个别网站
能打开
。
打不开的比如: https://www.jd.com
能打开的比如: https://mirrors.163.com
原因分析:
多半是MTU
和MSS
值设置有误
。
MTU
:WAN
口pppoe MTU
是1492
,LAN
口以太网是1500
。MSS
:现在网站前面经过层层网络转发
,包
的头太多
了,TCP自动协商最大分段量
基本不会成功
,所以要手动指定MSS
。
基本上就这2
个问题,按我的经验
判断,估计更大可能性是MSS
问题。
其实我们买的大多数路由器
,都默认
指定好了MSS
,不需要你们额外配置。所以很多人根本不知道,甚至不知道有MSS
这个概念,不知道非常正常。
但针对一些企业路由器
,MSS
是需要一开始
就必须要手动指定
的。不过自动配置MSS
这是趋势
,现在连 routeros/Mikrotik 的产品都会在 mange 处自动打上标记
并修改MSS
。
解决办法:
手动指定MSS(Maximum Segment Size,最大分节大小)
。
先设置MSS
为1460
还是不行,没想到MSS
现在1460
都不够用了,要1452
了。
# 在iptables 防火墙中配置 MSS调整规则,以避免 TCP 数据包过大而导致网络传输效率降低。
## -A FORWARD:向 FORWARD 链(转发链)添加一条规则。FORWARD 链用于对转发的数据包进行处理。
## -p tcp:指定规则应用于 TCP 协议的数据包。
## --tcp-flags SYN,RST SYN:指定规则应用于 SYN 标志和 RST 标志都设置为 1 的 TCP 数据包,即 TCP 连接建立时的 SYN 数据包。
## -j TCPMSS:指定要使用 TCPMSS 动作,即对 TCP 数据包进行 MSS 调整。
## --set-mss 1452:将 MSS 的值设置为 1452 字节,以避免 TCP 数据包的大小超过网络链路的 MTU(最大传输单元)值,从而导致数据包被分片,降低网络传输效率。
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1452
# 自动调整mss值--推荐
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
在 TCP 连接建立时,双方会交换 MSS 值
,以确定每个 TCP 数据包的最大有效载荷大小
。如果 TCP 数据包的大小超过
了网络链路
的 MTU
值,数据包
就会被分片
,降低网络传输效率。因此,通过调整 MSS
值,可以避免 TCP 数据包的大小超过网络链路的 MTU 值
。
首先,“转发
”不是由 masquerade(SNAT)
决定的,
masquerade(SNAT)
只是在“决定要转发
”之后做一些工作。
路由转发
是转发
,NAT
是 NAT
,在网络层面,属于完全两种类型
的操作。
家庭路由器
将这 2 步整合在一起
了,所以一般人并不了解,不清楚底层原理。
IP地址和地址映射
IP地址定义
网络层地址,ip地址是一组
32位
的2进制
数。
IP地址格式
IP地址规则
IP地址
包括网络地址
(前三段数字)和主机地址
(第四段数字)
前三段是网段
; 第四段是主机地址
.
IP地址结构
IP地址分类
IP地址分成了5类
IP地址分类用来划分不同的网络规模。
A类地址
B类地址
C类地址
D类地址(组播地址)
E类地址(科研用地址)
特殊地址
2进制
主机位全是1
,转换为10进制
数字为255
。
公网/私网地址
私网地址
继10.0.0.0/8
、172.16.0.0/24
、192.168.0.0/16
之后又诞生了第四个私有IPv4地址
,但100.64.0.0/10
是在服务商网络
内,不同之处在于只使用。100.64.0.0/10
,Shared address space
,是预留给ISP运营商
做NAT
用的。ISP运营商设备给用户分配100.64.0.0/10
内的IP,然后再在运营商设备上进行NAT,转换成公网IP。
子网掩码
子网掩码
用于计算出网络地址
,控制广播范围
。
[没啥用的小技巧]-IP地址中的0可以省掉
# 比如
127.1
192.168.1