V2Ray配置教程
V2Ray 配置教程V2Ray 是继 Shadowsocks(R)后又一个体验很棒、功能非常强大的科学上网工具,近年来受到网友的广泛关注和喜爱。敏感时期,基本上只有 V2ray 伪装 或 trojan 能提供十分稳的服务,推荐使用。
本教程详细介绍 V2ray 的特点,安装和配置过程,让读者能迅速上手和使用 V2ray。在本文基础上,建议网友继续阅读 V2ray 高级技巧:流量伪装,以及最新出炉的VLESS 协议和 XTLS 黑科技,体验更稳的上外网方式。v2ray 客户端下载请访问:V2ray 客户端。
V2Ray 简介V2Ray是近几年十分流行的网络工具,其功能强大,用途不限于突破防火墙,但因其能有效翻墙而广为人知。V2Ray有如下大放异彩的特点:
开源。V2Ray是Project V的核心工具,源代码开源;
多协议支持。传输层支持 TCP、mKCP、WebSocket 等,上层协议支持 Socks、Shadowsocks、以及自定义的VMess等;
多入口和多出口。V2Ray可同时支持多个入站和出站协议,每个协议独立工作;
多平台支持。原生支持 Windows、Linux、Ma ...
Linux 的启动流程
Linux 的启动流程作者: 阮一峰
日期: 2013 年 8 月 17 日
半年前,我写了《计算机是如何启动的?》,探讨 BIOS 和主引导记录的作用。
那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。
这个部分比较有意思。因为在 BIOS 阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。所以,这个部分与程序员的关系更密切。
我主要关心的是 Linux 操作系统,它是目前服务器端的主流操作系统。下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉。
第一步、加载内核
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
以我的电脑为例,/boot 目录下面大概是这样一些文件:
$ ls /boot
config-3.2.0-3-amd64
config-3.2.0-4-amd64
grub
initrd.img-3.2.0-3-amd64
initrd.img-3.2.0-4-am ...
DNS 原理入门
DNS 原理入门作者: 阮一峰
日期: 2016 年 6 月 16 日
DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。
本文详细介绍 DNS 的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解 DNS。
一、DNS 是什么?DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出 IP 地址。你可以把它想象成一本巨大的电话本。
举例来说,如果你要访问域名math.stackexchange.com,首先要通过 DNS 查出它的 IP 地址是151.101.129.69。
如果你不清楚为什么一定要查出 IP 地址,才能进行网络通信,建议先阅读我写的《互联网协议入门》。
二、查询过程虽然只需要返回一个 IP 地址,但是 DNS 的查询过程非常复杂,分成多个步骤。
工具软件dig可以显示整个查询过程。
$ dig math.stackexchange.com
上面的命令会输出六段信息。
第一段是查询参数和统计。
第二段是查询内容。
上面结果表示,查询域名math.stackexch ...
Unix 目录结构的来历
Unix 目录结构的来历作者: 阮一峰
日期: 2012 年 2 月 6 日
Unix(包含 Linux)的初学者,常常会很困惑,不明白目录结构的含义何在。
举例来说,根目录下面有一个子目录/bin,用于存放二进制程序。但是,/usr 子目录下面还有/usr/bin,以及/usr/local/bin,也用于存放二进制程序;某些系统甚至还有/opt/bin。它们有何区别?
长久以来,我也感到很费解,不明白为什么这样设计。像大多数人一样,我只是根据《Unix 文件系统结构标准》(Filesystem Hierarchy Standard),死记硬背不同目录的区别。
昨天,我读到了 Rob Landley 的简短解释,这才恍然大悟,原来 Unix 目录结构是历史造成的。
话说 1969 年,Ken Thompson和Dennis Ritchie在小型机 PDP-7 上发明了 Unix。1971 年,他们将主机升级到了 PDP-11。
当时,他们使用一种叫做 RK05 的储存盘,一盘的容量大约是 1.5MB。
没过多久,操作系统(根目录)变得越来越大,一块盘已经装不下了。于是,他们加上了 ...
为什么寄存器比内存快?
为什么寄存器比内存快?作者: 阮一峰
日期: 2013 年 10 月 14 日
计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。
同样都是晶体管存储设备,为什么寄存器比内存快呢?
Mike Ash写了一篇很好的解释,非常通俗地回答了这个问题,有助于加深对硬件的理解。下面就是我的简单翻译。
原因一:距离不同
距离不是主要因素,但是最好懂,所以放在最前面说。内存离 CPU 比较远,所以要耗费更长的时间读取。
以 3GHz 的 CPU 为例,电流每秒钟可以振荡 30 亿次,每次耗时大约为 0.33纳秒。光在 1 纳秒的时间内,可以前进 30 厘米。也就是说,在 CPU 的一个时钟周期内,光可以前进 10 厘米。因此,如果内存距离 CPU 超过 5 厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在 CPU 内部,当然读起来会快一点。
距离对于桌面电脑影响很大,对于手机影响就要小得多。手机 CPU 的时钟频率比较慢(iPhone 5s 为 1.3GHz),而且手机的 ...
User space 与 Kernel space
User space 与 Kernel space作者: 阮一峰
日期: 2016 年 12 月 2 日
学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间)。
简单说,Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。
Kernel space 可以执行任意命令,调用系统的一切资源;User space 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称 system call),才能向内核发出指令。
str = "my string" // 用户空间
x = x + 2
file.write(str) // 切换到内核空间
y = x + 4 // 切换回用户空间
上面代码中,第一行和第二行都是简单的赋值运算,在 User space 执行。第三行需要写入文件,就要切换到 Kernel space,因为用户不能直接写文件,必须通过内核安排。第四行又是赋值运算,就切换回 ...
根域名的知识
根域名的知识作者: 阮一峰
日期: 2018 年 5 月 9 日
域名是互联网的基础设施,只要上网就会用到。
它还是一门利润丰厚的生意,所有域名每年都必须交注册费,这是很大的一笔钱。
这些钱交到了哪里?到底谁控制域名的价格?为什么有的域名注册费很贵,有的便宜?……今天,我就来谈谈这些与根域名(root domain)相关的知识。
一、ICANN全世界域名的最高管理机构,是一个叫做 ICANN (Internet Corporation for Assigned Names and Numbers)的组织。它的总部在美国加州。
它原来是美国商务部下面的一个非盈利机构,所以有人说,美国政府控制了全世界的域名,这种说法是有根据的。2016 年,美国政府宣布,ICANN 不再隶属于商务部,成为一个自我管理的独立机构。但是可想而知,美国政府依然对它有绝对影响。
ICANN 负责管理全世界域名系统的运作。它的一项主要工作,就是规定顶级域名(top level domain,简写为 TLD)。
二、TLD所谓顶级域名(TLD),就是最高层级的域名。简单说,就是网址的最后一个部分。比如,网址www ...
理解字节序
理解字节序作者: 阮一峰
日期: 2016 年 11 月 22 日
1.
计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。
举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。
大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。
同理,0x1234567的大端字节序和小端字节序的写法如下图。
2.
我一直不理解,为什么要有字节序,每次读写都要区分,多麻烦!统一使用大端字节序,不是更方便吗?
上周,我读到了一篇文章,解答了所有的疑问。而且,我发现原来的理解是错的,字节序其实很简单。
3.
首先,为什么会有小端字节序?
答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。
但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。
4.
计算机处理字节序的时候,不知道什么是高位字节,什么是低 ...
编译器的工作过程
编译器的工作过程作者: 阮一峰
日期: 2014 年 11 月 11 日
源码要运行,必须先转成二进制的机器码。这是编译器的任务。
比如,下面这段源码(假定文件名叫做 test.c)。
#include <stdio.h>
int main(void)
{
fputs("Hello, world!\n", stdout);
return 0;
}
要先用编译器处理一下,才能运行。
$ gcc test.c
$ ./a.out
Hello, world!
对于复杂的项目,编译过程还必须分成三步。
$ ./configure
$ make
$ make install
这些命令到底在干什么?大多数的书籍和资料,都语焉不详,只说这样就可以编译了,没有进一步的解释。
本文将介绍编译器的工作过程,也就是上面这三个命令各自的任务。我主要参考了 Alex Smith 的文章《Building C Projects》。需要声明的是,本文主要针对 gcc 编译器,也就是针对 C 和 C++,不一定适用于其他语言的编译。
第一步 ...
计算机是如何启动的?
计算机是如何启动的?作者: 阮一峰
日期: 2013 年 2 月 16 日
从打开电源到开始操作,计算机的启动是一个非常复杂的过程。
我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示…… 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。
零、boot 的含义
先问一个问题,”启动”用英语怎么说?
回答是 boot。可是,boot 原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的 boot 是 bootstrap(鞋带)的缩写,它来自一句谚语:
“pull oneself up by one’s bootstraps”
字面意思是”拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!
早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做”拉鞋带”,久而久之就简称为 boot 了。
计算机的整个启动过程分成四个阶段。
一、第一阶段:BIOS
上个世纪 70 年代初,” ...




