PPP协议详解:点对点链路配置与认证

需积分: 5 0 下载量 70 浏览量 更新于2024-06-13 收藏 632KB PPT 举报
"ATEN_PPT_chap06_V1.4.ppt - 介绍PPP协议,包括其基本概念、发展历史、优点、组成、认证机制以及链路建立过程" 在IT领域,PPP(Point-to-Point Protocol)协议是用于在点对点链路上建立数据链路层连接的重要协议。本资料主要回顾了第05章关于广域网的连接类型和封装协议,并详细介绍了第06章的PPP协议内容。 首先,PPP协议是设计用于点对点通信的,如用户通过拨号电话线接入Internet时广泛使用的协议。它不仅支持同步或异步串行链路,还支持多种网络层协议,如IP、IPX、AppleTalk等,具备错误检测能力,能进行网络层地址协商,并且提供了用户认证功能,允许数据压缩。 PPP协议的发展源于SLIP(Serial Line Internet Protocol),SLIP在20世纪80年代中期被提出,但因其封装格式简单、不支持参数协商、仅支持IP协议以及缺乏校验功能而逐渐被PPP取代。1989年,PPP协议被提出,并在1994年成为Internet标准,由RFC1661等多个RFC文档定义。 PPP协议的建立过程包括多个阶段,其中LCP(Link Control Protocol)负责协商链路参数,如最大接收单元MRU、压缩协议等。此外,PPP协议还引入了PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)两种认证方式,以确保链路的安全性。PAP是简单的明文密码认证,而CHAP则更安全,采用三次握手的挑战-应答机制,密码在网络上传输时不以明文形式出现。 PPP协议的帧格式包含一个起始标志、协议字段、信息字段以及多个校验字段,确保数据的正确传输。多链路PPP(MLPPP)则是将多个物理链路捆绑成一个逻辑链路,以提供更高的带宽和容错能力。 配置PPP协议涉及设置接口、启用认证方式、协商参数等步骤。在实际网络环境中,理解并掌握PPP协议的这些方面对于网络管理员来说至关重要,因为它对于远程访问服务、广域网连接的建立与维护起到关键作用。通过学习本章内容,读者可以深入了解PPP协议的工作原理及其在实际应用中的配置方法。

pytorch代码如下:class LDAMLoss(nn.Module): def init(self, cls_num_list, max_m=0.5, weight=None, s=30): super(LDAMLoss, self).init() m_list = 1.0 / np.sqrt(np.sqrt(cls_num_list)) m_list = m_list * (max_m / np.max(m_list)) m_list = torch.cuda.FloatTensor(m_list) self.m_list = m_list assert s > 0 self.s = s if weight is not None: weight = torch.FloatTensor(weight).cuda() self.weight = weight self.cls_num_list = cls_num_list def forward(self, x, target): index = torch.zeros_like(x, dtype=torch.uint8) index_float = index.type(torch.cuda.FloatTensor) batch_m = torch.matmul(self.m_list[None, :], index_float.transpose(1,0)) # 0,1 batch_m = batch_m.view((-1, 1)) # size=(batch_size, 1) (-1,1) x_m = x - batch_m output = torch.where(index, x_m, x) if self.weight is not None: output = output * self.weight[None, :] logit = output * self.s return F.cross_entropy(logit, target, weight=self.weight) classes=7, cls_num_list = np.zeros(classes) for , label in train_loader.dataset: cls_num_list[label] += 1 criterion_train = LDAMLoss(cls_num_list=cls_num_list, max_m=0.5, s=30) criterion_val = LDAMLoss(cls_num_list=cls_num_list, max_m=0.5, s=30) for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device, non_blocking=True), Variable(target).to(device,non_blocking=True) # 3、将数据输入mixup_fn生成mixup数据 samples, targets = mixup_fn(data, target) targets = torch.tensor(targets).to(torch.long) # 4、将上一步生成的数据输入model,输出预测结果,再计算loss output = model(samples) # 5、梯度清零(将loss关于weight的导数变成0) optimizer.zero_grad() # 6、若使用混合精度 if use_amp: with torch.cuda.amp.autocast(): # 开启混合精度 loss = torch.nan_to_num(criterion_train(output, targets)) # 计算loss scaler.scale(loss).backward() # 梯度放大 torch.nn.utils.clip_grad_norm(model.parameters(), CLIP_GRAD) # 梯度裁剪,防止梯度爆炸 scaler.step(optimizer) # 更新下一次迭代的scaler scaler.update() 报错:File "/home/adminis/hpy/ConvNextV2_Demo/models/losses.py", line 53, in forward return F.cross_entropy(logit, target, weight=self.weight) File "/home/adminis/anaconda3/envs/wln/lib/python3.9/site-packages/torch/nn/functional.py", line 2824, in cross_entropy return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) RuntimeError: multi-target not supported at /pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:15

2023-05-29 上传