摘要
IP协议提供的一种统一的地址格式。它为互联网上的每一个网络和主机分配一个逻辑地址所以IP地址也叫逻辑地址,用来屏蔽物理地址的差异,MAC地址每一个机器都有一个编码。IP地址是32位二进制数据分为4段每一段8位0~255来表示。通常是10进制的方式表示。凡是基于TCP/IP协议的智能设备都可以被分配IP地址。在同一个局域网中/本地局域网IP地址是唯一的。IP协议只是是网络之间的互联的协议。互联网/物联网的所有计算机网络实现相互通信的一套规则。规定了计算机在网络中进行通信时应当遵守的规则。所有设备只要是遵守IP协议就可以在网络中互联互通。
网关(路由)
Windows下默认就叫网关/网关就是路由/路由就是网关。默认的地址是192.168.25.1或者是192.168.25.254
IP地址
逻辑地址,标识网路中的主机,原则上一个网络中主机的IP地址是唯一的。逻辑地址是可变的。目的防止IP冲突。TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。
在 IP 协议里面需要有源地址 IP 和 目标地址 IP:
- 源地址IP,即是客户端输出的 IP 地址;
- 目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
因为 HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06 (十六进制),表示协议为TCP。
假设客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?
当存在多个网卡时,在填写源地址 IP 时,就需要判断到底应该填写哪个地址。这个判断相当于在多块网卡中判断应该使用哪个一块网卡来发送包。这个时候就需要根据路由表规则,来判断哪一个网卡作为源地址 IP。在 Linux 操作系统,我们可以使用 route -n 命令查看当前系统的路由表。
举个例子,根据上面的路由表,我们假设 Web 服务器的目标地址是 192.168.10.200 。
1. 首先先和第一条目的子网掩码( Genmask )进行 与运算,得到结果为 192.168.10.0 ,但是第一个条目的 Destination 是 192.168.3.0 ,两者不一致所以匹配失败。
2. 再与第二条目的子网掩码进行 与运算,得到的结果为 192.168.10.0 ,与第二条目的 Destination
192.168.10.0 匹配成功,所以将使用 eth1 网卡的 IP 地址作为 IP 包头的源地址。
那么假设 Web 服务器的目标地址是 10.100.20.100 ,那么依然依照上面的路由表规则判断,判断后的结果是和第三条目匹配。
第三条目比较特殊,它目标地址和子网掩码都是 0.0.0.0 ,这表示默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行。并且后续就把包发给路由器, Gateway 即是路由器的 IP 地址。
IP 报文生成
IPV4
IPv4地址的长度为32b(bit),分为4段,每段8位,用十进制数表示,每段数字范围为0~255,段与段之间用应为句点“.”隔开。例如某计算机IP地址为111.222.333.2。
分析IP地址的组成特点:250-255、200-249、0-199
IPv4正则表达式
/(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-4][0-9])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))/
IPV6:
IPv6的地址长度为128(bit),是IPv4地址长度的4倍。采用十六进制表示。IPv6有3种表示方法:
表示方法 | 格式 | 示例 |
冒分十六进制表示法 | 格式为X:X:X:X:X;X:X:X,其中每个X表示地址中的16b,以十六进制表示 | ABCD:FDEC:2425:AAAA:CBDA:34CC:CCCB:1234 这种表示方法中每个X的前导0都是可以省略的,例如ABCD:0000:2425:AAAA:0BDA:34CC:B000:1234-> ABCD:0:2425:AAAA:BDA:34CC:B000:1234 |
0位压缩表示法 | 在某些情况下,一段IPv6地址中可能包含很长一段0,可以把连续的一段0压缩为“::”。但是,为了保证地址解析的唯一性,地址中“::”只能出现一次 | EEE1:0:0:0:0:0:1001 ->EEE1::1001 0:0:0:0:0:0:E ->0:E 0:0:0:0:0:0:0: -> :: |
内嵌IPv4表示法 | 为了实现IPv4->IPv6的互通,IPv4地址会嵌入到IPv6地址中。此时,地址表示为X:X:X:X:X;X:d.d.d.d,前96b采用冒分16进制表示,后32b地址则使用IPv4地址中的点分法 | ::192.168.0.1与::ee:192.168.0.1 注压缩0法,在前96b中依然适用 |
IPv6地址特点
表示方法 | 格式 | 正则 |
十六进制表示法(包括前导0省略) | 纯数字格式-2000:0003:5522:8999:2333:0000:1232:0001 | ([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}:) |
纯字母格式--AAAA:BBBB:CCCC:DDDD;EEEE:FFFFF:AAAA | ||
数字字母组合格式--AAAA:67BB:22C:1111;2:1311:22AA | ||
格式中前面带0--AAAA:07BB:0000:0111;2:1011:220A | ||
格式中每一位前面每一位带0--0AAA:07BB:0000:0111;02:0011:020A | ||
全为0--0000:0000:0000:0000:0000:0000:0000:0000 | ||
格式中前面带0--AAAA:07BB:0000:0111;2:1011:220A | ||
多位0在中间--0AAA:0:0:0:0:0:020A | ||
多位0在前面--0:0:0:0:f0f:e1:f001:7009 | ||
多位0在后面--f0f:e1:f001:7009:0:0:0:0 | ||
全为0--0:0:0:0:0:0:0:0 | ||
全为0--000:0:0:0:0:0:0:0 | ||
全为0--00:0:0:0:0:0:0:0 | ||
全为0--0000:0:0:0:0:0:0:0 | ||
前导0省略位置便利 | ||
一个位置前导0省略-- | ||
ABCD:EEEE:DDDD:FFFF:11111:2222:3333:1 | ||
ABCD:EEEE:DDDD:FFFF:11111:2222:2:4444 | ||
ABCD:EEEE:DDDD:FFFF:11111:3:3333:4444 | ||
ABCD:EEEE:DDDD:FFFF:4:2222:3333:4444 | ||
ABCD:EEEE:DDDD:5:11111:2222:3333:4444 | ||
ABCD:EEEE:6:FFFF:11111:2222:3333:4444 | ||
ABCD:7:DDDD:FFFF:11111:2222:3333:4444 | ||
8:EEEE:DDDD:FFFF:11111:2222:3333:4444 | ||
其他位置前导0省略-- | ||
AB:EEE:0:FF:1:800:3333:444 | ||
AB:EEE:0:FF:1:800:3330:444 | ||
AB:EEE:0:FF:1:800:3300:444 | ||
AB:EEE:0:FF:4:800:3000:444 | ||
1111:EEE:0:FF:4:800:3000:444b | ||
0位压缩表示法(左起有6个位置用标准16进制表示) | ABCD:EFFF:2ccc:6789:ABCD:EF01:8.6.18.19 | (([0-9A-Fa-f]{1,4}:){6}(((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:[0-9A-Fa-f]{1,4}|:)) |
ABCD:EFFF:2ccc:6789:ABCD:EF01::ABCD | ||
ABCD:EFFF:2ccc:6789:ABCD:EF01:: | ||
0位压缩表示法(左起有5个位置用标准16进制表示) | ABCD:EFFF:2ccc:6789:ABCD::8.6.18.19 | (([0-9A-Fa-f]{1,4}:){5}(:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|((:[0-9A-Fa-f]{1,4}){1,2})|:)) |
ABCD:EFFF:2ccc:6789:ABCD::ABCD | ||
ABCD:EFFF:2ccc:6789:ABCD:: | ||
ABCD:EFFF:2ccc:6789:EF01::ABCD:EF01 | ||
0位压缩表示法(左起有4个位置用标准16进制表示) | ABCD:EFFF:2ccc:6789::ABCD:8.6.18.19 | (([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|((:[0-9A-Fa-f]{1,4}){1,3})|:)) |
ABCD:EFFF:2ccc:6789::8.6.18.19 | ||
ABCD:EFFF:2ccc:6789::ABCD | ||
ABCD:EFFF:2ccc:6789::ABCD:EF01 | ||
ABCD:EFFF:2ccc:6789::ABCD:EF01:EF01 | ||
ABCD:EFFF:2ccc:6789:: | ||
0位压缩表示法(左起有3个位置用标准16进制表示) | ABCD:EFFF:2ccc::8.6.18.19 | (([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|((:[0-9A-Fa-f]{1,4}){1,4})|:)) |
ABCD:EFFF:2ccc::6789:8.6.18.19 | ||
ABCD:EFFF:2ccc::6789:ABCD | ||
ABCD:EFFF:2ccc:6789::ABCD:EF01:8.6.18.19 | ||
ABCD:EFFF:2ccc::ABCD | ||
ABCD:EFFF:2ccc::ABCD:EF01 | ||
ABCD:EFFF:2ccc::ABCD:EF01:EF01 | ||
ABCD:EFFF:2ccc::ABCD:EF01:EF01:EF01 | ||
ABCD:EFFF:2ccc:: | ||
0位压缩表示法(左起有2个位置用标准16进制表示) | ABCD:EFFF::8.6.18.19 | (([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|((:[0-9A-Fa-f]{1,4}){1,5})|:)) |
ABCD:EFFF::6789:8.6.18.19 | ||
ABCD:EFFF::2ccc:6789:8.6.18.19 | ||
ABCD:EFFF::2ccc:2ccc:6789:8.6.18.19 | ||
ABCD:EFFF::ABCD | ||
ABCD:EFFF::ABCD:EF01 | ||
ABCD:EFFF:2ccc::2ccc:2ccc:ABCD | ||
ABCD:EFFF:2ccc::ABCD:EF01:EF01:EF01 | ||
ABCD:EFFF:2ccc::ABCD:EF01:EF01:EF01:EF01 | ||
ABCD:EFFF:: | ||
0位压缩表示法(左起有1个位置用标准16进制表示) | ABCD::8.6.18.19 | (([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|((:[0-9A-Fa-f]{1,4}){1,6})|:)) |
ABCD::6789:8.6.18.19 | ||
ABCD::2ccc:6789:8.6.18.19 | ||
ABCD::2ccc:2ccc:6789:8.6.18.19 | ||
ABCD::EFFF:2ccc:2ccc:6789:8.6.18.19 | ||
ABCD::ABCD | ||
ABCD::ABCD:EF01 | ||
ABCD::2ccc:2ccc:ABCD | ||
ABCD::ABCD:EF01:EF01:EF01 | ||
ABCD::ABCD:EF01:EF01:EF01:EF01 | ||
ABCD::ABCD:EF01:EF01:EF01:EF01:EFF1 | ||
ABCD:: | ||
0位压缩表示法(左起开始压缩) | ::8.6.18.19 | (:(((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|((:[0-9A-Fa-f]{1,4}){1,7})|:)) |
::6789:8.6.18.19 | ||
::2ccc:6789:8.6.18.19 | ||
::2ccc:2ccc:6789:8.6.18.19 | ||
::EFFF:2ccc:2ccc:6789:8.6.18.19 | ||
::EFFF:2ccc:2ccc:6789:6789:8.6.18.19 | ||
::ABCD | ||
::ABCD:EF01 | ||
::2ccc:2ccc:ABCD | ||
::ABCD:EF01:EF01:EF01 | ||
::ABCD:EF01:EF01:EF01:EF01 | ||
::ABCD:EF01:EF01:EF01:EF01:EFF1 | ||
::ABCD:EF01:EF01:EF01:EF01:EFF1:EFF1 |
IPv6正则表达式
((([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:))|
(([0-9a-fA-F]{1,4}:){6}(((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))){3})|:[0-9a-fA-F]{1,4}|:))|
(([0-9a-fA-F]{1,4}:){5}(:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|((:[0-9a-fA-F]{1,4}){1,3})|:))|(([0-9a-fA-F]{1,4}:){4}(((:[0-9a-fA-F]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))){3}))|((:[0-9a-fA-F]{1,4}){1,3})|:))|
(([0-9a-fA-F]{1,4}:){3}(((:[0-9a-fA-F]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))){3}))|((:[0-9a-fA-F]{1,4}){1,4})|:))|
(([0-9a-fA-F]{1,4}:){2}(((:[0-9a-fA-F]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))){3}))|((:[0-9a-fA-F]{1,4}){1,5})|:))|
(([0-9a-fA-F]{1,4}:){1}(((:[0-9a-fA-F]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))){3}))|((:[0-9a-fA-F]{1,4}){1,6})|:))|
(:(((:[0-9a-fA-F]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))){3}))|((:[0-9a-fA-F]{1,4}){1,7})|:))|
特殊的IP地址
地址类型 | IP地址号码 | 说明 |
网关地址 | 192.168.0.1/192.168.0.254 | 网关地址 |
广播地址 | 192.168.1.255 | |
子网掩码 | 255.255.0.0 | |
子网掩码 | 255.255.0.0 | |
子网掩码 | 255.255.255.0 | |
限制广播地址 | 255.255.255.255 | |
回环地址 | 127.0.0.1 | |
全部网段 | 0.0.0.0 | 表示任意一个地址 |
DNS地址 | 114.114.114.114 | |
DNS地址 | 233.5.5.5 | |
DNS地址 | 233.6.6.6 | |
DNS地址 | 1.2.4.8 | |
DNS地址 | 8.8.8.8 | |
DNS地址 | 202.106.0.20 | |
DHCP分配的地址 | 169.254.0.0 | 路由器假死(重启) |
组播地址 | 224.0.0.1 |
子网掩码
子网掩码是指一个32位字段的一个数值,利用这个字段来屏蔽原来网络地址的划分情况,从而能够获得一个范围较小的,可以实际使用的网络。
子网掩码好处
- 节约IP地址资源
- 减少广播域
- 减少寻址空间
- 利用子网掩码确定网段
- 利用子网掩码计算计算机主机
子网掩码分类
- A类:255.0.0.0:1111 1111.0000 0000.0000 0000.0000 0000
- B类:255.255.0.0
- C类:255.255.255.0
常见应用端口
通过端口,操作系统来区分不同应用。
端口号 | 应用 | 说明 |
21 | FTP服务 | |
22 | SSH服务 | |
23 | Telent服务 | |
25 | SMTP服务 | 邮件协议 |
53 | DNS服务 | |
109 | POP2服务 | |
110 | POP3服务 | |
143 | IMAP服务 | |
465 | SMTPS服务 | SSL协议 |
995 | POP3S服务 | SSL协议 |
993 | IMAPS服务 | SSL协议 |
80 | HTTP服务 | |
443 | HTTPS服务 | |
3306 | MYSQL服务 | |
3389 | 远程桌面 | |
8080 | 代理服务(tomcat) | |
6379 | Redis服务端口 |
forward 和 redirect 的区别?
Forward 和 Redirect 代表了两种请求转发方式:直接转发和间接转发。
直接转发方式(Forward):客户端和浏览器只发出一次请求,Servlet、HTML、JSP 或其它信息资源,由第二个信息资源响应该请求,在请求对象 request 中,保存的对象对于每个信息资源是共享的。
间接转发方式(Redirect):实际是两次 HTTP 请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个 URL 发出请求,从而达到转发的目的。
- 举个通俗的例子:
直接转发就相当于:“A 找 B 借钱,B 说没有,B 去找 C 借,借到借不到都会把消息传递给 A”;
间接转发就相当于:”A 找 B 借钱,B 说没有,让 A 去找 C 借”。