Saturday, August 29, 2009

WI-FI无线频率

* 来自: http://www.moonblinkwifi.com/2point4freq.cfm

不要出现频率的重复, 应该是如下方法:

Tuesday, August 25, 2009

32位系统与大内存

朋友新买了台notebook, 内存被加到了4G. 如果问题就出现了:
* vista和ubuntu这两个32位的系统下都只能使用3G的内存.

当是64位的ubuntu又可以支持4G

难度是32位系统的极限?

查了一下, 了解了些知识, 写下来

硬件上, 其实32位的硬件系统也是可以支持4G如上的大存在的, 关于在于CPU的寻址功能, PAE就是CPU的寻址扩展功能:
In computing, Physical Address Extension (PAE) is a feature of some x86 and x86-64 processors that enables the use of more than 4 gigabytes of physical memory to be used in 32-bit systems

*来自: http://en.wikipedia.org/wiki/Physical_Address_Extension

查看CPU是否支持PAE:
jessinio@niolaptop /mnt/sda6/boot $ cat /proc/cpuinfo |grep pae
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx constant_tsc up arch_perfmon bts pni monitor vmx est tm2 xtpr pdcm
* 蓝色的flag就是PAE的支持

重新编译内核, 增加如下选项:
Processor type and features --> High Memory Support

即可支持到更大的内存

64位的CPU本身支持4G以上的内存:
Larger physical address space: Current implementations of the AMD64 architecture can address up to 1 TB (240 or 1,099,511,627,776 bytes) of RAM; the architecture permits extending this to 4 PB (252 or 4,503,599,627,370,496 bytes) in the future (limited by the page table entry format). In legacy mode, Physical Address Extension (PAE) is included, as it is on most current 32-bit x86 processors, allowing access to a maximum of 64 GB (236or 68,719,476,736 bytes).
* 来自: http://en.wikipedia.org/wiki/X86-64
可以看出, 64位的CPU也是继续扩展.

关于64位CPU的称呼:
1. The x86-64 specification was designed by Advanced Micro Devices (AMD), who have since renamed it AMD64. The first family of processors to support the architecture was the AMD K8
family of processors. This was the first time any company other than
Intel made significant additions to the x86 architecture. Intel was
forced to follow suit, introducing modified NetBurst family processors, initially referred to as "IA-32e" or "EM64T" and now called Intel 64 and almost identical to AMD64.
2. AMD licensed its x86-64 design to Intel, where it is marketed under the name Intel 64 (formerly EM64T).

* 两种称呼, 一个鸟样


Monday, August 24, 2009

access point, hot spot and ad-hoc

access point: 说白了就是一种无线信号接收器, 让同一种无线信号技术的客户端与之通信.
The wireless access point usually connects to a wired network, and can relay data between the wireless devices (such as computers or printers) and wired devices on the network.
* 具体见: http://en.wikipedia.org/wiki/Wireless_access_point
因为上access point的上面特点, 所以:
简单的access point设备可以看作是一个"无线交换器"
高级的access point设备会加入brige, router等等功能

hot spot: 说白了, hot spot也是一个能提供用户无线连接入互联网的access point. 英文的解释:
A hotspot is a physical location that offers internet access over a wireless LAN through the use of a shared internet connection and a single router.
* 见: http://en.wikipedia.org/wiki/Hotspot_(Wi-Fi)

access point可以被用来指定一类设备, hot spot可以被认为是access point的连接服务

Ad-hoc: 客户端的无线设备之间直接通信, 而不通过access point. 这种通信例子就是bluetooth. 两个bluetooth设备是直接无线连接通信的, 不通过access point
人们利用这种通信功能, 加上计算机的连接共享(connection sharing)功能, 实现了access point的功能. 当然, 这个ad-hoc的工作层次与access point的不同.
根据<<802.11 Wireless Networks>>(O'reilly出版)中描述:
无线设备芯片如果使用特定的固件, 设备就可以工作在"Host AP Mode"下. 芯片组会处理一些"低级的"工作. 例如传送Beacon帧及响应Beacon帧.

Ad-hoc其实等于"第三层的网络设备"

总的来说, 使用Ad-hoc, 实现了一个没有access point设备的hot spot服务

网关IP与ARP的关系

正确配置网关是机器上网重要的一步. 但是网关的IP很容易给对本人的逻辑造成混乱

之前的笔记其实早已经记录过网关这种东东, 但是这里还是要细细做做笔记. 决定要借文字, 清楚描述这个问题, 希望不要再造成混乱

造成本人混乱的原因:
1. 局域网内使用MAC地址可以完成数据的寻址
2. IP包中不需要网关的IP地址, 只需要end-to-end两端的IP

那为什么配置机器上网还需要网关的IP呢?

ARP协议被发明去解决的问题:
In computer networking, the Address Resolution Protocol (ARP) is the method for finding a host's link layer (hardware) address when only its Internet Layer (IP) or some other Network Layer address is known.
* 来自: http://en.wikipedia.org/wiki/Address_Resolution_Protocol

ARP的作用就是从网络层的IP得到链路层的MAC地址

回答上面的问题: 配置时使用网关的IP只是为了不使用网关的MAC! MAC不是人记的地址

可以使用如下的方法证实网关IP的作用:
配置客户机的IP:
rainly@laptop:~$ sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0
查看路由情况, 没有默认网关
rainly@laptop:~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
增加默认网关, 但是这个网关IP是错的!

rainly@laptop:~$ sudo route add default gw 192.168.1.1 dev eth0
查看增加后的情况:
rainly@laptop:~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

客户机目前还没有一个已知的MAC:
rainly@laptop:~$ arp
与外网机器通信, 但是结果出错, 因为网关的IP是不对的
rainly@laptop:~$ ping 203.208.39.99
PING 203.208.39.99 (203.208.39.99) 56(84) bytes of data.
From 192.168.1.10 icmp_seq=1 Destination Host Unreachable

From 192.168.1.10 icmp_seq=2 Destination Host Unreachable
From 192.168.1.10 icmp_seq=3 Destination Host Unreachable
下面就可以知道为什么ping不能机器了: 因为与网关无法通信!
rainly@laptop:~$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface

192.168.1.1                               (incomplete)                              eth0

使用错的网关IP, 但是使用正常的网关MAC地址:
rainly@laptop:~$ sudo arp -s 192.168.1.1 00:1d:60:6f:d3:92
rainly@laptop:~$ ping 203.208.39.99
PING 203.208.39.99 (203.208.39.99) 56(84) bytes of data.

64 bytes from 203.208.39.99: icmp_seq=1 ttl=244 time=57.6 ms
64 bytes from 203.208.39.99: icmp_seq=2 ttl=244 time=66.8 ms

rainly@laptop:~$ arp

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.1              ether   00:1d:60:6f:d3:92   CM                    eth0
192.168.1.1              ether   00:1d:60:6f:d3:92   CM                    eth0

可以知道, 网关的MAC比IP来得实在, 前提是同一个子网! MAC无法通过子网去寻址

如果有可能, 记住了MAC, 就是使用MAC呢?

这也是不应该的!
1. 因为linux kernel的arp列表是有一个老化时间的, 就算你使用arp -s Add hwaddr 去配置了网关, 到了老化时间后, 系统会自动发送ARP包去确认和更新arp列表的, 所以就算有人记过了MAC地址, 也没有人会定时使用arp配置一次MAC的!

2. 如果需要与网关机器上的其它IP层之上的服务通信时, 必定要正确的网关IP

如下是arp包的数据结构:
 * 来自: http://sznet.blog.51cto.com/91580/178447

图中可以知道, ARP包只是在链路上的帧下, 不在IP这一层

这类包是被广播的, 局域网中的机器只有在TARGET IP等于自己的IP时才回复

总:
在只是为了通过网关上网的极端情况下, 可以理解为:使用网关的IP只是为了不记MAC地址!





Sunday, August 23, 2009

netfilter中的route

数据包内核中的流转如图下:
从图中, 可以很清楚看到netfilter的table与chain的先后顺序. 这里需要了解table与chain的关系

netfilter中, 常常看到table与chain这两个概念. 我之前一直将两者解理为:包含(chains belong to tables)关系. 其实这种解理是错的.
如下是书中的说法:

chains represent hook points  in the packet flow, and tables represent the types of processing that can occur
* 来自<<linux iptables: pocket reference>>一书

但是还有一个引起本人兴趣:
* 图中的routing部分.

大概可以知道, 这就是netfilter的转发机制的决定的一步.

Q: 这里的route表与route命令的route表是否一致?
A: 正是内核的route表

内核route表对发出的数据包起来择路的作用, 为什么"NetWork A"进入的数据会与route表有关系呢?

内核对进入的数据包有如下处理过程:
a. 首先,当一个包进来的时候,也就是从以太网卡进入防火墙,内核首先根据路由表决定包的目标。
b. 如果目标主机就是本机,则如上图直接进入INPUT链,再由本地正在等待该包的进程接收,结束。
c. 否则,如果从以太网卡进来的包目标不是本机,再看是否内核允许转发包(可用echo 1> /proc/sys/net/ipv4/ip_forward 打开转发功能)如果不允许转发,则包被DROP掉,如果允许转发,则送出本机,结束。


这样, 转发出的数据包就与内核的route表相关.

举例说明: 使用linux实现共享上网(windows下叫share connection)

环境假设:
NetWork A 网段: 192.168.1.0/24
NetWork B 网段: 192.168.10.0/24

wlan0网卡与"NetWork B"连接, 通过本网卡可以与广域网通信
配置如下:
IP: 192.168.10.103
Mask:255.255.255.0

配置情况:
jessinio@niolaptop ~ $ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:16:cf:68:5b:a7  
          inet addr:192.168.10.103  Bcast:255.255.255.255  Mask:255.255.255.0
          inet6 addr: fe80::216:cfff:fe68:5ba7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3807509 errors:0 dropped:0 overruns:0 frame:0
          TX packets:480534 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1579932243 (1.4 GiB)  TX bytes:80990478 (77.2 MiB)

jessinio@niolaptop ~ $ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.10.0    0.0.0.0         255.255.255.0   U         0 0          0 wlan0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.10.1    0.0.0.0         UG        0 0          0 wlan0

jessinio@niolaptop ~ $ ping www.google.com
PING www.l.google.com (64.233.189.104) 56(84) bytes of data.
64 bytes from hkg01s01-in-f104.google.com (64.233.189.104): icmp_seq=1 ttl=243 time=105 ms
64 bytes from hkg01s01-in-f104.google.com (64.233.189.104): icmp_seq=2 ttl=243 time=103 ms

wlan0可以通信

可以要证eth0也可以上网:
0. eth0网卡与"NetWork A"连接, 配置如下:
jessinio@niolaptop ~ $ sudo ifconfig eth0 192.168.1.11 netmask 255.255.255.0
* eth0的IP可以随意, 只要在子网中是唯一的就OK

1. 让Linux接爱和转发目的不是本地的数据包:
jessinio@niolaptop ~ $ sudo sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

这样, 所有eth0收到非本地的数据包, 都被forward, forward的方式与路线都由内核的route表决定, 在本例中, 被forward的数据也是走如下这条路线:
0.0.0.0         192.168.10.1    0.0.0.0         UG        0 0          0 wlan0

2. 被forward的数据需要firewall转换源地址(从192.168.1.0/8修改为192.168.10.103)和端口:
jessinio@niolaptop ~ $ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
* 当wlan0收到被forward的数据包的回复后, 会自动修改为192.168.1.0/24

3. 让forward的回复数据包流回eth0 ( 这一步很重要, 在逻辑上形成一个回路 )
jessinio@niolaptop ~ $ sudo route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0

这时的route表如下:
jessinio@niolaptop ~ $ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U         0 0          0 wlan0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.10.1    0.0.0.0         UG        0 0          0 wlan0



上面4个步骤就完成了linux路由器的共享配置, 客户端只需要简单配置一下IP, netmask和gateway即可:

other@machine ~ $ sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0
other@machine ~ $ sudo route add default gw 192.168.1.11 dev eth0


Friday, August 21, 2009

route table与arp table

jessinio@niolaptop ~ $ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.10.1             ether   00:23:cd:4a:1c:ec   C                     wlan0
192.168.10.105           ether   08:00:27:e9:70:63   C                     wlan0


ARP表罗列出的其实就是IP与MAC的对照表. 一看, IP还需要对照? 哪还要IP干嘛?, 其实:

在以太网中, 通信是使用MAC地址. 所以在局域网中, 知道MAC地址其实就可以机器之间通信了.

但是用户的程序都是使用基于IP的TCP或者是UDP, 所以, 单单可以数据通信没有意义(因为用户级程序无法明白和使用发来的信息)

在局域网通信中, 数据包还是和平时与广域网机器通信一样的处理过程, 只是链路级的目的地地址为IP对应的MAC, 而不是网关的地址(它也在arp表中)

这样, 信息包就被点对点地传输了.

这就是ARP表的用处: 找到IP对应的MAC, 直接发数据过去(当然还是IP包了)

那么route table有什么用处呢?
默认时(dhclient程序返回和修改的):

jessinio@niolaptop ~ $ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.10.0    *               255.255.255.0   U         0 0          0 wlan0
loopback        *               255.0.0.0       U         0 0          0 lo
default         192.168.10.1    0.0.0.0         UG        0 0          0 wlan0

route表主要是起到数据流向的作用

默认的作用为: 给出了对待非局域网IP的数据方式 -- 发给网关(过程也是MAC点对点传输)

使用route表强制数据流向的例子:
1. 指定某(些)目的IP的数据都流向网关, 即使可以点对点.
2. 指定某目的地的IP数据包由指定的网卡发出
3. 当使用网卡的alias作用时, 就可以解释为: 使用指定源IP与某目的地IP通信( 其实与2是一样的, 只是网卡是虚拟出来的)

通过修改route表, 可以让同台机器的N张网卡"和谐"共处

子网(subnet)

早期的IP寻址设计被称了分类IP寻址, 这种方式在IP上可以得到两个信息:
1. 网络ID
2. 主机ID

如图:

这样, IP有如下几种:




这样, 带来的问题是:
1. 结构简单
2. IP的利用率不高

因此又进化出一个新的概念: 子网(subnet)

这样, 可以从IP中可以得到三个信息:
1. 网络ID
2. 子网
3. 主机ID

从IP分类寻址设计上是明显给出网络ID的, 但是子网信息呢? 新的IP规定中的子网信息 + 主机ID = 旧的IP分类中的主机ID

因为子网信息与主机ID使用同一块数据, 所以需要子网掩码, 也称掩码(netmask)

子网掩码并不会在TCP/IP包头中, 哪它的作用是什么呢?


局域网内机器用于判断信息包发向内网还是网关

局域网中的机器都是使用MAC地址进行点对点通信的(如果不知道内网机器的MAC时会广播):
1. 如果本地机器从IP中判断出将要发出的数据是局域网内的机器时, 信息包将会被发送到指定的MAC
2. 如果本地机器从IP中判断出将要发出的数据不是局域网内的机器时, 信息包将会被发送到网关的MAC

子网主要用于网关判断某IP信息是否为局域网内信息
1. 如果是局域网内信息, 不被forward到路由处, 而是被返回局域网中
2. 如果发向局域网外的信息, 将被forward到路由处, 当然, 之前可以需要NAT一下.





Thursday, August 20, 2009

路由表(router)与交换器(switch)

路由(route)其实不好理解, 提到路由总是与网关(gateway), 路由器(router)扯在一起.

网关与路由器有什么区别呢?
我在一些书中看到: "网关就是路由器" 的断言.

从wikipedia中的信息看到: 网关是起到不同网络的协议转换工作
* 来自:http://en.wikipedia.org/wiki/Gateway_(telecommunications)

1. 在TCP中, 不同的子网就算是通过HUB连接在一起, 也是无法通信的.

2. 不同网络是无法通信的, 如我们的Ethernet要与ISPs通信, 就有了以太网与PPP网络的转换

网关的概念在OSI七层中都有存在的. 不同的层次就有不同的表现(这是gateway概念难理解的原由之一). 上面说的1与2是OSI的链路层与IP层的网关, 还有其它层的网关:
HTTP层的网关: http proxy

firewall可以被应用都多层的网关软件

路由(route)从字典的解释是:线路(名词), 按路线发送(动词). 说白了, 就是选择路线.

下面是人家给出的定义:路由器(Router)是一种负责寻径的网络设备,它在互连网络中从多条路径中寻找通讯量最少的一条网络路径提供给用户通信, 路由器(router)可以处理最优线路选择协议(RIP等等)

网关(gateway)常常与路由器(router)难分开的原由之二是: 网关(gateway)与路由(router)集在一台机器中
* 交换器(swith)和路由器(router)都有路线选择的功能, 区别在于交换器(swith)是链路层的, 路由器(router)是IP层的

网关(gateway)概念远远比路由(router)复杂得多. 也重要得多

家用简单的SOHO路由器其实可以说为: 网关(gateway) + 交换机(switch)

对局域网起到交换机的功能, 内网与外网起NAT和与modem通信使用的gateway功能

从一些书中看到: "网关就是路由器" 的断言, 应该可以猜测到市场上是不存在没有网关(gateway)功能的交换机(router)

Saturday, August 8, 2009

gentoo的全局USE与局部USE和mask与keyword

虽然安装软件时可以在命令行中指定USE的值, 但那只是临时的. 被记录下来的USE又分为两种
I.  全局USE, 配置文件为:/etc/make.conf
II. 局部USE, 配置文件为: /etc/portage/package.use

例如: /etc/make.conf一般都是需要"doc"这个USE的. 但是java-sdk的doc是有许可证问题的, 这样当update world时就头痛了. 这就需要为每个软件指定USE存放.

keyword是表示用于标记ebuild包在某CPU架构下是stable还是unstable
软件的keyword属性是记录在ebuild文件中的.
* 本标志用于决定用户安装ebuild时, 是选择stable还是unstable
* 用户可以覆盖ebuild文件内的keywords标志, 配置文件为:/etc/portage/package.keywords.
* /etc/portage/package.keywords文件也起到指定程序包的版本作用


mask是表示程序在使用过程中会出现某些问题, 引发问题可能性高
全局定义文件: /usr/portage/profiles/package.mask. 本文件列出了所以被mask的软件

用户也可以强制安装被mask的软件, 自定义文件为: /etc/portage/package.mask