【OSI】网络层 – IP 协议

网络层 - IP协议

网际协议(英语:Internet Protocol,缩写:IP;也称互联网协议)是用于分组交换数据网络的一种协议。

先来看一下本机的IP配置信息:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

ifcfg-eth0 : 其中的 if 表示interface 接口;cfg 表示config 配置;eth 表示以太网;0 表示即 0 号网卡

看下它的内容:

DEVICE=eth0
·
·
·
IPADDR=192.168.11.128
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
·
·

IP地址规则:点分字节,两点之间放的是一个字节可表示的十进制数(一个字节8个二进制位取值范围:0-255)

IPADDR

本机IP地址,包含网络号及本机在网络内的第多少号。

NETMASK

掩码;IPADDR 与 NETMASK 做二进制的按位与可以得到网络号(就就像你信封上的区县)。

如:192.168.11.128255.255.255.0 按位与 运算得到网络号: 192.168.11.0

那么 128 就是在 192.168.11.0 局域网内的第 128 号机器。

GATEWAY

网关;下一跳

看网关之前先来了解一下 路由表(路由表就是支持下一跳的),每一层都要表,在网络层有一个表叫 路由表

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.11.0     0.0.0.0         255.255.255.0     U     100   0      0 eth0
0.0.0.0         192.168.11.2      0.0.0.0         UG    100    0      0 eth0

注: 一般在网络命令中加 -n表示: 禁止显示字符串,纯数值显示。(如:localhost)

路由表就是为了支持下一跳的。

路由表的第一条记录就是来自刚才我们看到的 ifcfg-eth0 IP地址配置表,本行是网卡配置自动生成的。

第一行(本行根据ifcfg-eth0网卡配置自动生成的):

  • Destination=192.168.11.0 说明本机直连 192.168.11.0 这个局域网
  • Gateway=0.0.0.0 表示局域网内不需要中间人,数据包直接从 eth0 发出去,通过交换机就可以交换给我想通信的另外一台机器。中间是不需要路由跳转的。

第二行(默认网关):

  • Destination=0.0.0.0
  • Gateway=192.168.11.2 就是你家路由器的IP地址

一台设备相与另一台设备通信,就得先找到对方的 IP 地址,那么是怎么找到的呢? 其实使用的就是 下一跳

如:ping www.baidu.com 这个数据包是怎么发出去的呢?

ping www.baidu.com
PING www.a.shifen.com (180.101.49.12) 56(84) bytes of data.
64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=1 ttl=49 time=9.87 ms
64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=2 ttl=49 time=9.84 ms
64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=3 ttl=49 time=9.84 ms

拿目标IP地址 180.101.49.12route 表内的每一个条目的掩码做二进制按位与运算。即:

  • 180.101.49.12255.255.255.0 按位与得到 180.101.49.0192.168.11.0 不匹配,看下一条;
  • 180.101.49.120.0.0.0 按位与得到 0.0.0.00.0.0.0 匹配,那么就交给下一跳 192.168.11.2

因为走外网需要交给 192.168.11.2 即路由器,走内网就不需要直接从 eth0 发出去了。

如果目标IP地址是 192.168.11.1route 表内的每一个条目的掩码做二进制按位与运算。即:

  • 192.168.11.1255.255.255.0 按位与得到 192.168.11.0192.168.11.0 匹配,看下一跳是 0.0.0.0不需要网关直接就可以通信。
$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.11.0     *              255.255.255.0     U     100   0        0 eth0
default         192.168.11.2      0.0.0.0         UG    100   0        0 eth0

可以看到你家的路由器就是default。

那么本机是怎么根据 Gateway 交给 192.168.11.2的呢?

链路层

arp 表:

$ arp -a
? (192.168.11.128) at 00:50:56:f3:36:95 [ether] on eth0
? (192.168.11.2) at 00:50:56:ee:f0:fb [ether] on eth0

00:50:56:ee:f0:fb 就是路由器的 MAC 地址。这样就知道 192.168.11.2 的物理地址,交给 192.168.11.2 后,发现 MAC 地址是自己,但是IP 180.101.49.12 不是自己,就去找它的路由表,找到它的下一跳后,再去找路由表下一跳对应的 MAC 地址。

MAC 地址

$ arp -a

网络通信完整过程

$ arp -a
? (192.168.11.128) at 00:50:56:f3:36:95 [ether] on eth0
? (192.168.11.2) at 00:50:56:ee:f0:fb [ether] on eth0

# <arp d> 清空 192.168.11.2 的 MAC 地址
$ arp d 192.168.11.2 && curl www.baidu.com:80

curl 包:

$ tcpdump -nn -i eth0 port 80 or arp

image

ping 包:

$ tcpdump -nn -i eth0 port 80 or arp or icmp
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇