Internet 协议及应用

#理论基础复习起来还是有点枯燥的,不过理论知识是非常重要的,不然如果不懂得其中的原理,生搬硬套的话很快就会忘记的#

一、网络层协议

IPv4地址 (唯一识别网络中不同的主机 )

1.IP地址的表示:
二进制:32b
十进制:点分十进制( 每8位为1组,共4组,用"."隔开

2.IP地址的分类
  1. 固定位:IP地址分为A、B、C、D、E五类,其中A、B、C类是常用的,D类用于多播,E类保留用于实验和未来使用。每一类IP地址的固定位不同,用于标识网络号和主机号的分界。

  2. 第一个十进制的范围:对于A、B、C类IP地址,第一个十进制数的范围分别是:

    • A类:1-126

    • B类:128-191

    • C类:192-223

  3. 网络号占____位,主机号占____位:

    • A类IP地址:网络号占8位,主机号占24位。

    • B类IP地址:网络号占16位,主机号占16位。

    • C类IP地址:网络号占24位,主机号占8位。

  4. 能容纳最多的主机个数:

    • A类IP地址:可以容纳 2^{24}−2 个主机(减去网络地址和广播地址)。

    • B类IP地址:可以容纳 2^{16}−2 个主机。

    • C类IP地址:可以容纳 2^^{}{8}−2 个主机。

 

3.特殊的IP地址

说明:特殊地址不能分配普通主机使用

 子网技术 

子网技术是一种将一个较大的网络划分为多个较小的子网络的技术,主要用于优化网络管理、提高性能和增强安全性。

子网技术的定义

子网技术是将一个基于类别的网络(如A类、B类或C类网络)进一步划分为多个更小的子网。这些子网在逻辑上是独立的,但物理上仍然属于同一个主网络

 子网划分的原因

  • 优化网络管理:通过将网络划分为多个子网,可以更灵活地分配IP地址,便于对不同部门或区域进行管理。

  • 提高网络性能:减少广播域的大小,降低广播流量对网络的影响,从而提高网络的整体性能。

  • 增强安全性:子网之间通过路由器隔离,可以限制网络攻击的范围,增强网络的安全性

子网划分的方法

        两级结构变 三级结构

       借用n位来划分子网,则可以划分出2^{n}个子网;主机号剩余m位,则该子网最多容纳
2^{m}-2台主机
-2是什么呢?
是除了每个子网都有其 特定的网络地址和广播地址
假如每个子网有14台计算机,且子网掩码是255.255.255.240,那么,我们知道可设置的子网数量为
2^{4} = 16 > 14,而其中的两个用于网络地址和广播地址,则刚刚好等于16,而子网掩码规定
DQN(Deep Q-Network)是一种使用深度神经网络实现的强化学习算法,用于解决离散动作空间的问题。在PyTorch中实现DQN可以分为以下几个步骤: 1. 定义神经网络:使用PyTorch定义一个包含多个全连接层的神经网络,输入为状态空间的维度,输出为动作空间的维度。 ```python import torch.nn as nn import torch.nn.functional as F class QNet(nn.Module): def __init__(self, state_dim, action_dim): super(QNet, self).__init__() self.fc1 = nn.Linear(state_dim, 64) self.fc2 = nn.Linear(64, 64) self.fc3 = nn.Linear(64, action_dim) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x ``` 2. 定义经验回放缓存:包含多条经验,每条经验包含一个状态、一个动作、一个奖励和下一个状态。 ```python import random class ReplayBuffer(object): def __init__(self, max_size): self.buffer = [] self.max_size = max_size def push(self, state, action, reward, next_state): if len(self.buffer) < self.max_size: self.buffer.append((state, action, reward, next_state)) else: self.buffer.pop(0) self.buffer.append((state, action, reward, next_state)) def sample(self, batch_size): state, action, reward, next_state = zip(*random.sample(self.buffer, batch_size)) return torch.stack(state), torch.tensor(action), torch.tensor(reward), torch.stack(next_state) ``` 3. 定义DQN算法:使用PyTorch定义DQN算法,包含训练和预测两个方法。 ```python class DQN(object): def __init__(self, state_dim, action_dim, gamma, epsilon, lr): self.qnet = QNet(state_dim, action_dim) self.target_qnet = QNet(state_dim, action_dim) self.gamma = gamma self.epsilon = epsilon self.lr = lr self.optimizer = torch.optim.Adam(self.qnet.parameters(), lr=self.lr) self.buffer = ReplayBuffer(100000) self.loss_fn = nn.MSELoss() def act(self, state): if random.random() < self.epsilon: return random.randint(0, action_dim - 1) else: with torch.no_grad(): q_values = self.qnet(state) return q_values.argmax().item() def train(self, batch_size): state, action, reward, next_state = self.buffer.sample(batch_size) q_values = self.qnet(state).gather(1, action.unsqueeze(1)).squeeze(1) target_q_values = self.target_qnet(next_state).max(1)[0].detach() expected_q_values = reward + self.gamma * target_q_values loss = self.loss_fn(q_values, expected_q_values) self.optimizer.zero_grad() loss.backward() self.optimizer.step() def update_target_qnet(self): self.target_qnet.load_state_dict(self.qnet.state_dict()) ``` 4. 训练模型:使用DQN算法进行训练,并更新目标Q网络。 ```python dqn = DQN(state_dim, action_dim, gamma=0.99, epsilon=1.0, lr=0.001) for episode in range(num_episodes): state = env.reset() total_reward = 0 for step in range(max_steps): action = dqn.act(torch.tensor(state, dtype=torch.float32)) next_state, reward, done, _ = env.step(action) dqn.buffer.push(torch.tensor(state, dtype=torch.float32), action, reward, torch.tensor(next_state, dtype=torch.float32)) state = next_state total_reward += reward if len(dqn.buffer.buffer) > batch_size: dqn.train(batch_size) if step % target_update == 0: dqn.update_target_qnet() if done: break dqn.epsilon = max(0.01, dqn.epsilon * 0.995) ``` 5. 测试模型:使用训练好的模型进行测试。 ```python total_reward = 0 state = env.reset() while True: action = dqn.act(torch.tensor(state, dtype=torch.float32)) next_state, reward, done, _ = env.step(action) state = next_state total_reward += reward if done: break print("Total reward: {}".format(total_reward)) ``` 以上就是在PyTorch中实现DQN强化学习的基本步骤。需要注意的是,DQN算法中还有很多细节和超参数需要调整,具体实现过程需要根据具体问题进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值