Data Linker Layer Authentication

标题可能不是很准确,这篇东东主要是想研究一下日常的上网中,ISP对我们的用户名和密码的验证的这个过程,发生了一些什么。由于查了不少资料发现这个过程大多是在链路层协议负责的,所以标题就先这样啦@_@。

下面列举下我自己平常的一些上网方式:

  • 宿舍网线拨号
  • WIFI + 网页验证

这两种方式大家都挺常用的,这里只讨论非NAT网络的,也就是你直接连接到ISP而不是通过路由什么的,先说拨号吧。

拨号上网

一般拨号的协议都是PPPoE,全称Point-to-point-on-Ethernet,顾名思义,在以太网上的PPP。PPP本身就是一个链路层的协议,不过我不大清楚用来连接它的线路应该是啥样的,而PPPoE的出现貌似就是为了保证在Ethernet上还能使用PPP的优势,因为Ethernet本身并不是点对对的,PPPoE就弄出了一个virtual point to point,这样,在用户的角度,和ISP之间的关系就好像是点对点了,ISP和用户都挺高兴,所以PPPoE广泛地被ISP们采用。

以下为个人猜想,错误请指出,谢谢!

先来看看一般的ISP架构, ISP的每一个组成可能都不止一台主机 :

接下来就按照这个图来讲讲整个拨号的过程吧。

1. 插上网线

插上网线后,你应该只能访问ISP架构中的有限内容,准确来说,你应该只能访问用户认证这个部分,其他部分对你来说都是不通的。

2. 拨号认证

这里以PPPoE为例,但协议本身的内容不少 ...

阅读全文

PPTP VPN Process

不久前因为StackOverflow上不去的缘故,找人借了下云梯VPN来用了一下,感觉很爽! 但是自己脑抽,随之而来的伴随了一个问题,云梯VPN的限制设备数量能否区分同一个私有网络下的不同设备,是如何区分的? 于是乎,就开始去各种找PPTP VPN的资料了,终于有点搞懂了,就通过这篇博文记下来吧。

以下文章中VPN如不特指皆为PPTP VPN。

首先找了个免费的VPN试了下,确认了在同一私有网络下不同设备用同一账号是可以连接上同一台VPN Server的,如果不能的话,我的问题也就没啥意义了。虽然这问题确实没啥意义,私有网络要实现共享VPN可以在出口的机器或者路由上建立Site to Site VPN就可以了,但是纯粹好奇,勿喷。。。

以前只是大概了解了一下VPN的原理,也没有去细究到协议的层次,这次就借着这个机会去好好了解了一下。

VPN的两种架构

  • Remote access VPN
  • Site-to-site VPN

Remote access VPN是我们平时个人用的比较多的那种,也就是你在网上买了个VPN,然后拿着账号密码和服务器名连接上了的种,这种就只能保证你自己的那台设备是连上VPN的,而Site-to-site VPN则更像是,如果你用了路由这样的设备,在该设备上拨了VPN,这样路由的私有网络就是一个Site,而路由连上的VPN服务器又构成了另外一个Site,所以是Site-to-site,这种方式就能保证你私有网络中的所有设备都连上了VPN。

个人感觉 ...

阅读全文

mov指令与内存

今天在啃《深入理解计算机系统》的时候遇到了下面这段代码:

movl 12(%ebp), %eax
imull 8(%ebp)
movl %eax, (%esp)
movl %edx, 4(%esp)

代码的作用就是将两个数的乘积存回栈顶。代码没有问题,让我疑惑的是书上这两句话:

存储两个寄存器的位置对小端机器来说是对的——寄存器 %edx 中的高位存在相对于 %eax 的低位偏移量为 4 的地方。 栈是向低地址方向增长的,也就是说低位在栈顶。

在考虑这两句话的时候,突然发现自己对 mov 的操作并不是特别的清楚,就去查了查,大致搞明白了一些。

mov指令

我们知道 mov 在 IA32 中有基础的三类操作,即 b,w,l。 而 mov 在使用时大致如下:

movb ...
阅读全文