2013年12月20日 星期五

特殊MAC地址---官方保留

IEEE Std 802.1D and IEEE Std 802.1Q Reserved Addresses
Group MAC address value
Organization
using the value
Standard using the value
Notes
01-80-C2-00-00-00
IEEE 802
IEEE Std 802.1D
IEEE Std 802.1Q
IEEE Std 802.1D Bridge Group Address
01-80-C2-00-00-01
IEEE 802
"
IEEE MAC-specific control protocols
01-80-C2-00-00-02
IEEE 802
"
IEEE Std 802.3 Slow Protocols multicast address
01-80-C2-00-00-03
IEEE 802
"
IEEE Std 802.1X PAE address
01-80-C2-00-00-04
IEEE 802
"
IEEE MAC-specific control protocols
01-80-C2-00-00-05
IEEE 802
"
Reserved for media access method specific use
01-80-C2-00-00-06
IEEE 802
"
Reserved for future standardization
01-80-C2-00-00-07
IEEE 802
"
Reserved for future standardization
01-80-C2-00-00-08
IEEE 802
"
Provider Bridge group address
01-80-C2-00-00-09
IEEE 802
"
Reserved for future standardization
01-80-C2-00-00-0A
IEEE 802
"
Reserved for future standardization
01-80-C2-00-00-0B
IEEE 802
"
Reserved for future standardization
01-80-C2-00-00-0C
IEEE 802
"
Reserved for future standardization
01-80-C2-00-00-0D
IEEE 802
"
Provider Bridge MVRP address
01-80-C2-00-00-0E
IEEE 802
"
Std 802.1AB Link Layer Discovery Protocol address
01-80-C2-00-00-0F
IEEE 802
"
Reserved for future standardization

Standard Group MAC Addresses
Group MAC address value
Organization
using the value
Standard using the value
Notes
01-80-C2-00-00-10
IEEE 802
IEEE Std 802.1D
All LANs Bridge Management Group Address (deprectated)
01-80-C2-00-00-11
IEEE 802
IEEE Std 802.1E
Load Server Generic Address
01-80-C2-00-00-12
IEEE 802
IEEE Std 802.1E
Loadable Device Generic Address
01-80-C2-00-00-13
unassigned
  
01-80-C2-00-00-14
ISO/IEC JTC1/SC6
ISO/IEC 10589
All Level 1 Intermediate Systems Address
01-80-C2-00-00-15
ISO/IEC JTC1/SC6
ISO/IEC 10589
All Level 2 Intermediate Systems Address
01-80-C2-00-00-16
ISO/IEC JTC1/SC6
ISO/IEC 10030
All CONS End Systems Address
01-80-C2-00-00-17
ISO/IEC JTC1/SC6
ISO/IEC 10030
All CONS SNARES Address
01-80-C2-00-00-18
IEEE 802
IEEE Std 802.1B
Generic Address for All Manager Stations
01-80-C2-00-00-19
unassigned
  
01-80-C2-00-00-1A
IEEE 802
IEEE Std 802.1B
Generic Address for All Agent Stations
01-80-C2-00-00-1B
ISO/IEC JTC1/SC6
ISO/IEC 9542
All Multicast Capable End Systems Address
01-80-C2-00-00-1C
ISO/IEC JTC1/SC6
ISO/IEC 9542
All Multicast Announcements Address
01-80-C2-00-00-1D
ISO/IEC JTC1/SC6
ISO/IEC 9542
All Multicast Capable Intermediate Systems Address
01-80-C2-00-00-1E
ISO/IEC JTC1/SC6
ISO/IEC 8802-5
All DTR Concentrators MAC Group Address
01-80-C2-00-00-1F
unassigned
  
01-80-C2-00-00-20 —
01-80-C2-00-00-2F
IEEE 802
IEEE Std 802.1Q
Reserved for use by Multiple Registration Protocol (MRP) applications


01-80-C2-00-00-30 —
01-80-C2-00-00-3F
IEEE 802
IEEE Std 802.1ag
Destination group MAC addresses for CCM and Linktrace messages
01-80-C2-00-00-40 to 01-80-C2-00-00-4F
IETF
TRILL
Group MAC addresses used by the TRILL protocols
01-80-C2-00-00-40 —
01-80-C2-00-00-FF
unassigned
  
01-80-C2-00-01-00
 
ISO/IEC 9314-6
Ring Management Directed Beacon Multicast Address
01-80-C2-00-01-01 —
01-80-C2-00-01-0F
ISO/IEC JTC1/SC25
 
Assigned to ISO/IEC JTC1/SC25 for future use
01-80-C2-00-01-10
ISO/IEC JTC1/SC25
ISO/IEC 9314-6
Status Report Frame Status Report Protocol Multicast Address
01-80-C2-00-01-11 —
01-80-C2-00-01-1F
ISO/IEC JTC1/SC25
 
Assigned to ISO/IEC JTC1/SC25 for future use
01-80-C2-00-01-20
ISO/IEC JTC1/SC25
ISO/IEC 9314-2
All FDDI Concentrator MACs
01-80-C2-00-01-21 —
01-80-C2-00-01-2F
ISO/IEC JTC1/SC25
 
Assigned to ISO/IEC JTC1/SC25 for future use
01-80-C2-00-01-30
ISO/IEC JTC1/SC25
ISO/IEC 9314-6
Synchronous Bandwidth Allocation Address
01-80-C2-00-01-31 —
01-80-C2-00-01-FF
ISO/IEC JTC1/SC25
 
Assigned to ISO/IEC JTC1/SC25 for future use
01-80-C2-00-02-00 —
01-80-C2-00-02-FF
ETSI
 
Assigned to ETSI for future use
01-80-C2-00-03-00 —
01-80-C2-FF-FF-FF
unassigned
  

Group MAC Addresses Used in ISO 9542 ES-IS Protocol
Group MAC address value
Organization
using the value
Standard using the value
Notes
09-00-2B-00-00-04
ISO/IEC JTC1/SC6
ISO 9542
All End System Network Entities Address
09-00-2B-00-00-05
ISO/IEC JTC1/SC6
ISO 9542
All Intermediate System Network Entities Address
Locally Administered Group MAC Addresses Used by IEEE Std 802.5
(IEEE Std 802.5 Functional Addresses)
Group MAC address value
Organization
using the value
Standard using the value
Notes
03-00-00-00-00-08
IEEE 802
IEEE Std 802.5
Configuration Report Server (CRS) MAC Group Address
03-00-00-00-00-10
IEEE 802
IEEE Std 802.5
Ring Error Monitor (REM) MAC Group Address
03-00-00-00-00-40
IEEE 802
IEEE Std 802.5
Ring Parameter Server (RPS) MAC Group Address
03-00-00-00-01-00
IEEE 802
ISO 9542
All Intermediate System Network Entities Address
03-00-00-00-02-00
ISO/IEC JTC1/SC6,
IEEE 802
ISO 9542, and
IEEE Std 802.5
All End System Network Entities Address, and Lobe Media Test (LMT) MAC Group Address
03-00-00-00-04-00
IEEE 802
IEEE Std 802.1B
Generic Address for all Manager Stations
03-00-00-00-08-00
IEEE 802
ISO/IEC 10030
All CONs SNARES Address
03-00-00-00-10-00
IEEE 802
ISO/IEC 10030
All CONs End System Address
03-00-00-00-20-00
IEEE 802
IEEE Std 802.1E
Loadable Device Generic Address
03-00-00-00-40-00
IEEE 802
IEEE Std 802.1E
Load Server Generic Address
03-00-00-40-00-00
IEEE 802
IEEE Std 802.1B
Generic Address for all Agent Stations

2013年12月10日 星期二

Raspberri-Pi Debian Tuning

Speedup CPU:
we can easily modify the cpu work frequency modifying the config.txt file. Just edit /boot/config.txt
arm_freq=900
i always use this hack and my rpi run without problem
Change scheduler/elevator at boot time:
we use more responsive/less disk io usage scheduler:
modify the /boot/cmdline.txt 
dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=120,data=writeback elevator=deadline rootwait quiet
Tuning sysctl.conf:
as manual say, sysctl.conf is the “Configuration file for setting system variables”... well there are lot of variables you can put inside this file and for everyone we can write a book.
Our goal is to gain more speed and tell our system to use less io/ram. Let’s put in the /etc/sysctl.conf:
vm.dirty_background_ratio = 20
vm.dirty_expire_centisecs = 0
vm.dirty_ratio = 80
vm.dirty_writeback_centisecs = 1200
vm.overcommit_ratio = 2
vm.laptop_mode = 5
vm.swappiness = 10
Removing unused services:
Removing services is a must to do for every system or computer, i have see some linux server with 256Mb of RAM with bluetooth, pcmcia etc etc service enabled... or pc with 100% cpu busy to run some 3d tube screensaver installed by default... also in Debian RaspberryPi official distro...
Automatically startx on boot:
I didn't use session/desktop manager like gdm, xdm or slim, it’s take ram and slow down starting up. Simply way is to use inittab:
vi /etc/inittab
1:2345:respawn:/bin/login -f root tty1

/dev/tty1 2>&1 (default is 1:23:respawn:/sbin/getty 38400 tty1)
and add this to .bash_profile on root home:
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
  exec startx >/dev/null 2>&1
fi 

2013年11月22日 星期五

libiconv: 字元集碼編轉換

from:http://www.jollen.org/blog/2006/09/libiconv_1.html

實作 Linux 系統程式時,常需要做「Unicode 與 Big5」間的字元編碼轉換;嵌入式 Linux 的應用也經常會遇到這樣的需求,例如我們原則上會將文件存成 Unicode,當程式執行時,再決定要輸出成 Unicode 或 Big5 (or GBxxxx),這時就要使用到 GNU 的 libiconv 專案。
GNU libiconv 用來做字元間的編碼轉換,已經廣泛被使用在 GNU/Linux 系統中,例如 PHP 的 iconv 系統即是使用 GNU libiconv。libiconv 要移植到 ARM9 平臺上也是非常容易的。GNU libiconv 的官方首頁是:http://www.gnu.org/software/libiconv/
把 libiconv 套件解開並編譯後,可以在 src/ 目錄下找到 iconv 執行檔,這是 libiconv 為我們寫好的一個字元轉碼 (conversion) 工具,這個工具相當的實用,比如以 jollen 的網站來說,jollen.org 的網頁是以 unicode 儲存,但是我們發佈的頁面是以 big5 編碼為主,我們所使用的轉換工具便是 iconv。
iconv 的使用可以參考 http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html,我們舉一個例子來說明,比如我想把 big5.txt 文件 (Big5 encode) 轉換成 Unicode (UTF-8),那麼只要執行:
$ iconv -f BIG5 -t UTF-8 big5.txt
就可以了,參數 -f 指定來源編碼,參數 -t 指定目的編碼,編碼後的字串會輸出到 stdout。字元集 BIG5 也可以寫成 BIG-5,或是 BIG-FIVE,或是 BIGFIVE;要怎麼知道 iconv 可以處理 (接受) 哪些字元集 (character set ),只要執行 'iconv -l' 就可以查詢了,輸出結果會是一大票的字元集列表。
這是使用 iconv 工具的方式,假如要自己寫程式的話也是非常簡單的,因為 libiconv 裡頭只有 3 個函數:
iconv_t iconv_open (const char* tocode, const char* fromcode):開啟 libiconv。
size_t iconv (iconv_t cd, const char* * inbuf, size_t * inbytesleft, char* * outbuf, size_t * outbytesleft):執行轉碼。
int iconv_close (iconv_t cd):做完轉碼後關閉 libiconv。
libiconv-1.xx/src/iconv.c 本身就是一個很棒的範例了,大家可以參考。

關於 gettext

關於 gettext (一、簡介)

關於 gettext (二、一個例子)

關於 gettext (po-mode 使用)

2013年11月7日 星期四

TCP offload engine (TOE)

from:http://www.kernelchina.org/node/611
延伸閱讀:
Competitive Comparison Intel® I/O Acceleration Technology vs. TCP Offload Engine

TCP減壓引擎,第一次聽說這個名詞,但是並不是一個新的概念了,若干年前聽說過設備廠商在研究在FPGA之中實現TCP Stack,但是後來沒有聽到任何的產品出來,應該是路由設備to host的traffic不多,而對於FW設備,中間的TCP Proxy實現過於復雜,工程上不可能實現。
現在的所謂TOE實現我理解主要用於host的interface之中,用於為Gbits以及10Gbits接口場景中為CPU減壓,例如部署在數據中心內部的服務器,CPU雖然越來越快,但是對於洶湧澎湃的Traffic來說,還是有些力不從心。
clip_image002
上面是TOE應用前後協議棧的差別,我覺得畫的有點絕對,TCP Stack不太可能完全實現在interface之中,其實TOE主要實現如下的offload:
1.TCP/IP Checksum offload
CPU可以不用計算checksum而由網卡計算
2.CPU不用考慮數據的分段了,估計是直接將socket送過來的buf交給網卡。
如果是僅僅實現上述功能TOE是很可能工程化實現的。
在另一篇文檔中提到了TOE的一些優勢,但是我的分析,這個可能是要實現TOP替代整個TCP之後的優勢。
1.減少中斷:不用每個報文都產生中斷,如果10G接口這個對於CPU是很大的開銷。
2.減少memory拷貝次數,很多時候網卡的buffer和app的可以直接共享。
3.協議處理的節約,這個是當然的了。

http://en.wikipedia.org/wiki/TCP_offload_engine


2013年10月14日 星期一

Understanding UUID

通用唯一識別碼 (Universally Unique IDentifier, UUID) 或是全域唯一識別碼 (Globally Unique IDentifier, GUID) 是一個 128 bits 的整數,並保證其在時間與空間的分佈都是獨一無二的。UUID 由開放軟體基金會 (OSF) 標準化後用在他們的 DCE 系統上,後來在微軟的 COM 系統上發揚光大。除此之外在許多地方也都可以看到 UUID 的身影,如 Linux 上的分割表/區塊裝置就是以 UUID 來標示,或是 RSS 的  標籤也可以使用 UUID,實際上 UUID 是標準的 URN 表示法之一,你可以在任何需要標示單一物件的地方使用 UUID。
UUID 的文字形式為一個 8-4-4-4-12 的十六進位表示,共有 16 個 bytes,有人說使用 UUID 不方便人類辨識,但了解 UUID 的組成後你還是可以從這個表示法看出一些端倪來。本文參考的是 IETF 版本的 RFC 4122
UUID 共有四個版本,第 13 個字元的位置就是表示版本號。第一種是以時間和網路卡號組成,時間是以一百奈秒為單位,網路卡號理論上是不會重複的,再加上 clock_seq 這個每次開機重設一次的亂數欄位,就算時間回朔了也不會重複,代號是 1。第二種和第四種是以命名空間加上一個 hash 組成的,分別可以使用MD5 或是 SHA1 演算法,算出來後就填到空位中,代號是 3 跟 5。第三種是全亂數組成,代號是 4
因此我們可以在不同的情境選用不同的 UUID,也可以從 UUID 看出版本跟時間等資訊,如4ef17586-f187-11df-8xxx-xxxxxxxxxxxx 看到第三個區塊是 11df 就可以知道是最近產生的以時間卡號為基礎的 UUID,時間 1dff1874ef17586 解出來就是 2010-11-16 13:42:09.173031.0 UTC。而 7c0fdbe4-1b09-4278-9fc9-5f0c6a1f2ae2 就是純亂數的 UUID,沒有任何意義。


from:http://kanru.info/blog/archives/2010/11/16/uuid-el/Ref:http://en.wikipedia.org/wiki/Universally_unique_identifier

2013年9月5日 星期四

LCP, Authentication, and NCP Stage

Within some of the PPP phases described previously, PPP also goes into specific stages such as LCP negotiation, authentication, and NCP negotiation. For more information, refer to RFC 1548 leavingcisco.com and RFC 1661 leavingcisco.com.

LCP (Mandatory Phase)

LCP is a phase in which parameters to establish, configure, and test the data-link connection are negotiated. An LCP state of open means that LCP was successfully completed, while an LCP state of closed indicates an LCP failure.
This diagram shows a conceptual view of an LCP handshake:
debug_ppp_negotiation1.gif
The LCP negotiation also uses a parameter called MagicNumber, which is used to determine if the link is looped back. A random string is sent across the link and, if the same value is returned, then the router determines that the link is looped back.

Authentication (Optional Phase by Default)

In this stage, the authentication is performed with the authentication protocol (CHAP or PAP) agreed upon in LCP negotiation. For PAP related information, refer to Configuring and Troubleshooting PPP Password Authentication Protocol (PAP).
For CHAP related information, refer to Understanding and Configuring PPP CHAP Authentication.
Note: Authentication is optional and PPP only enters this stage if it needs to authenticate.

NCP (Mandatory Phase)

This phase is used to establish and configure different network-layer protocols. The most common L3 protocol negotiated is IP. The routers exchange IP Control Protocol (IPCP) messages to negotiate options specific to the protocol (IP in this example).
RFC 1332 leavingcisco.com says that IPCP negotiates two options: compression and IP address assignments. However, IPCP is also used to pass network related information such as primary and backup Windows Name Service (WINS) and Domain Name System (DNS) servers.
The negotiation occurs with the use of CONF messages, as described in the PPP Negotiation Packets: A Description section of this document.

From: http://www.cisco.com/en/US/tech/tk713/tk507/technologies_tech_note09186a00800ae945.shtml

2013年8月6日 星期二

SED單行腳本快速參考 (USEFUL ONE-LINE SCRIPTS FOR SED)

在以下地址可找到本文檔的最新(英文)版本:
   http://sed.sourceforge.net/sed1line.txt 
   http://www.pement.org/sed/sed1line.txt

文本間隔:
--------

 # 在每一行後面增加一空行
 sed G

 # 將原來的所有空行刪除並在每一行後面增加一空行。
 # 這樣在輸出的文本中每一行後面將有且只有一空行。
 sed '/^$/d;G'

 # 在每一行後面增加兩行空行
 sed 'G;G'

 # 將第一個腳本所產生的所有空行刪除(即刪除所有偶數行)
 sed 'n;d'

 # 在匹配式樣“regex”的行之前插入一空行
 sed '/regex/{x;p;x;}'

 # 在匹配式樣“regex”的行之後插入一空行
 sed '/regex/G'

 # 在匹配式樣“regex”的行之前和之後各插入一空行
 sed '/regex/{x;p;x;G;}'

編號:
--------

 # 為文件中的每一行進行編號(簡單的左對齊方式)。這裡使用了“製表符”
 # (tab,見本文末尾關於'\t'的用法的描述)而不是空格來對齊邊緣。
 sed = filename | sed 'N;s/\n/\t/'

 # 對文件中的所有行編號(行號在左,文字右端對齊)。
 sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'

 # 對文件中的所有行編號,但只顯示非空白行的行號。
 sed '/./=' filename | sed '/./N; s/\n/ /'

 # 計算行數(模擬"wc -l")
 sed -n '$='

文本轉換和替代:
--------

 # Unix環境:轉換DOS的新行符(CR/LF)為Unix格式。
 sed 's/.$//' # 假設所有行以CR/LF結束
 sed 's/^M$//' # 在bash/tcsh中,將按Ctrl-M改為按Ctrl-V
 sed 's/\x0D$//' # ssed、gsed 3.02.80,及更高版本

 # Unix環境:轉換Unix的新行符(LF)為DOS格式。
 sed "s/$/`echo -e \\\r`/" # 在ksh下所使用的命令
 sed 's/$'"/`echo \\\r`/" # 在bash下所使用的命令
 sed "s/$/`echo \\\r`/" # 在zsh下所使用的命令
 sed 's/$/\r/' # gsed 3.02.80 及更高版本

 # DOS環境:轉換Unix新行符(LF)為DOS格式。
 sed "s/$//" # 方法 1
 sed -np # 方法 2

 # DOS環境:轉換DOS新行符(CR/LF)為Unix格式。
 # 下面的腳本只對UnxUtils sed 4.0.7 及更高版本有效。要識別UnxUtils版本的
 # sed可以通過其特有的“--text”選項。你可以使用幫助選項(“--help”)看
 # 其中有無一個“--text”項以此來判斷所使用的是否是UnxUtils版本。其它DOS
 # 版本的的sed則無法進行這一轉換。但可以用“tr”來實現這一轉換。
 sed "s/\r//" infile >outfile # UnxUtils sed v4.0.7 或更高版本
 tr -d \r outfile # GNU tr 1.22 或更高版本

 # 將每一行前導的“空白字符”(空格,製表符)刪除
 # 使之左對齊
 sed 's/^[ \t]*//' # 見本文末尾關於'\t'用法的描述

 # 將每一行拖尾的“空白字符”(空格,製表符)刪除
 sed 's/[ \t]*$//' # 見本文末尾關於'\t'用法的描述

 # 將每一行中的前導和拖尾的空白字符刪除
 sed 's/^[ \t]*//;s/[ \t]*$//'

 # 在每一行開頭處插入5個空格(使全文向右移動5個字符的位置)
 sed 's/^/ /'

 # 以79個字符為寬度,將所有文本右對齊
 sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # 78個字符外加最後的一個空格

 # 以79個字符為寬度,使所有文本居中。在方法1中,為了讓文本居中每一行的前
 # 頭和後頭都填充了空格。在方法2中,在居中文本的過程中只在文本的前面填充
 # 空格,並且最終這些空格將有一半會被刪除。此外每一行的後頭並未填充空格。
 sed -e :a -e 's/^.\{1,77\}$/ & /;ta' # 方法1
 sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/' # 方法2

 # 在每一行中查找字串“foo”,並將找到的“foo”替換為“bar”
 sed 's/foo/bar/' # 只替換每一行中的第一個“foo”字串
 sed 's/foo/bar/4' # 只替換每一行中的第四個“foo”字串
 sed 's/foo/bar/g' # 將每一行中的所有“foo”都換成“bar”
 sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # 替換倒數第二個“foo”
 sed 's/\(.*\)foo/\1bar/' # 替換最後一個“foo”

 # 只在行中出現字串“baz”的情況下將“foo”替換成“bar”
 sed '/baz/s/foo/bar/g'

 # 將“foo”替換成“bar”,並且只在行中未出現字串“baz”的情況下替換
 sed '/baz/!s/foo/bar/g'

 # 不管是“scarlet”“ruby”還是“puce”,一律換成“red”
 sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' #對多數的sed都有效
 gsed 's/scarlet\|ruby\|puce/red/g' # 只對GNU sed有效

 # 倒置所有行,第一行成為最後一行,依次類推(模擬“tac”)。
 # 由於某些原因,使用下面命令時HHsed v1.5會將文件中的空行刪除
 sed '1!G;h;$!d' # 方法1
 sed -n '1!G;h;$p' # 方法2

 # 將行中的字符逆序排列,第一個字成為最後一字,……(模擬“rev”)
 sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

 # 將每兩行連接成一行(類似“paste”)
 sed '$!N;s/\n/ /'

 # 如果當前行以反斜杠“\”結束,則將下一行並到當前行末尾
 # 並去掉原來行尾的反斜杠
 sed -e :a -e '/\\$/N; s/\\\n//; ta'

 # 如果當前行以等號開頭,將當前行並到上一行末尾
 # 並以單個空格代替原來行頭的​​“=”
 sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

 # 為數字字串增加逗號分隔符號,將“1234567”改為“1,234,567”
 gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta' # GNU sed
 sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' # 其他sed

 # 為帶有小數點和負號的數值增加逗號分隔符(GNU sed)
 gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta '

 # 在每5行後增加一空白行(在第5,10,15,20,等行後增加一空白行)
 gsed '0~5G' # 只對GNU sed有效
 sed 'n;n;n;n;G;' # 其他sed

選擇性地顯示特定行:
--------

 # 顯示文件中的前10行(模擬“head”的行為)
 sed 10q

 # 顯示文件中的第一行(模擬“head -1”命令)
 sed q

 # 顯示文件中的最後10行(模擬“tail”)
 sed -e :a -e '$q;N;11,$D;ba'

 # 顯示文件中的最後2行(模擬“tail -2”命令)
 sed '$!N;$!D'

 # 顯示文件中的最後一行(模擬“tail -1”)
 sed '$!d' # 方法1
 sed -n '$p' # 方法2

 # 顯示文件中的倒數第二行
 sed -e '$!{h;d;}' -ex # 當文件中只有一行時,輸入空行
 sed -e '1{$q;}' -e '$!{h;d;}' -ex # 當文件中只有一行時,顯示該行
 sed -e '1{$d;}' -e '$!{h;d;}' -ex # 當文件中只有一行時,不輸出

 # 只顯示匹配正則表達式的行(模擬“grep”)
 sed -n '/regexp/p' # 方法1
 sed '/regexp/!d' # 方法2

 # 只顯示“不”匹配正則表達式的行(模擬“grep -v”)
 sed -n '/regexp/!p' # 方法1,與前面的命令相對應
 sed '/regexp/d' # 方法2,類似的語法

 # 查找“regexp”並將匹配行的上一行顯示出來,但並不顯示匹配行
 sed -n '/regexp/{g;1!p;};h'

 # 查找“regexp”並將匹配行的下一行顯示出來,但並不顯示匹配行
 sed -n '/regexp/{n;p;}'

 # 顯示包含“regexp”的行及其前後行,並在第一行之前加上“regexp”所
 # 在行的行號(類似“grep -A1 -B1”)
 sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -eh

 # 顯示包含“AAA”、“BBB”或“CCC”的行(任意次序)
 sed '/AAA/!d; /BBB/!d; /CCC/!d' # 字串的次序不影響結果

 # 顯示包含“AAA”、“BBB”和“CCC”的行(固定次序)
 sed '/AAA.*BBB.*CCC/!d'

 # 顯示包含“AAA”“BBB”或“CCC”的行(模擬“egrep”)
 sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -ed # 多數sed
 gsed '/AAA\|BBB\|CCC/!d' # 對GNU sed有效

 # 顯示包含“AAA”的段落(段落間以空行分隔)
 # HHsed v1.5 必須在“x;”後加入“G;”,接下來的3個腳本都是這樣
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

 # 顯示包含“AAA”“BBB”和“CCC”三個字串的段落(任意次序)
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

 # 顯示包含“AAA”、“BBB”、“CCC”三者中任一字串的段落(任意次序)
 sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -ed
 gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d' # 只對GNU sed有效

 # 顯示包含65個或以上字符的行
 sed -n '/^.\{65\}/p'

 # 顯示包含65個以下字符的行
 sed -n '/^.\{65\}/!p' # 方法1,與上面的腳本相對應
 sed '/^.\{65\}/d' # 方法2,更簡便一點的方法

 # 顯示部分文本——從包含正則表達式的行開始到最後一行結束
 sed -n '/regexp/,$p'

 # 顯示部分文本——指定行號範圍(從第8至第12行,含8和12行)
 sed -n '8,12p' # 方法1
 sed '8,12!d' # 方法2

 # 顯示第52行
 sed -n '52p' # 方法1
 sed '52!d' # 方法2
 sed '52q;d' # 方法3, 處理大文件時更有效率

 # 從第3行開始,每7行顯示一次    
 gsed -n '3~7p' # 只對GNU sed有效
 sed -n '3,${p;n;n;n;n;n;n;}' # 其他sed

 # 顯示兩個正則表達式之間的文本(包含)
 sed -n '/Iowa/,/Montana/p' # 區分大小寫方式

選擇性地刪除特定行:
--------

 # 顯示通篇文檔,除了兩個正則表達式之間的內容
 sed '/Iowa/,/Montana/d'

 # 刪除文件中相鄰的重複行(模擬“uniq”)
 # 只保留重複行中的第一行,其他行刪除
 sed '$!N; /^\(.*\)\n\1$/!P; D'

 # 刪除文件中的重複行,不管有無相鄰。注意hold space所能支持的緩存
 # 大小,或者使用GNU sed。
 sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

 # 刪除除重複行外的所有行(模擬“uniq -d”)
 sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'

 # 刪除文件中開頭的10行
 sed '1,10d'

 # 刪除文件中的最後一行
 sed '$d'

 # 刪除文件中的最後兩行
 sed 'N;$!P;$!D;$d'

 # 刪除文件中的最後10行
 sed -e :a -e '$d;N;2,10ba' -e 'P;D' # 方法1
 sed -n -e :a -e '1,10!{P;N;D;};N;ba' # 方法2

 # 刪除8的倍數行
 gsed '0~8d' # 只對GNU sed有效
 sed 'n;n;n;n;n;n;n;d;' # 其他sed

 # 刪除匹配式樣的行
 sed '/pattern/d' # 刪除含pattern的行。當然pattern
                                       # 可以換成任何有效的正則表達式

 # 刪除文件中的所有空行(與“grep '.' ”效果相同)
 sed '/^$/d' # 方法1
 sed '/./!d' # 方法2

 # 只保留多個相鄰空行的第一行。並且刪除文件頂部和尾部的空行。
 # (模擬“cat -s”)
 sed '/./,/^$/!d' #方法1,刪除文件頂部的空行,允許尾部保留一空行
 sed '/^$/N;/\n$/D' #方法2,允許頂部保留一空行,尾部不留空行

 # 只保留多個相鄰空行的前兩行。
 sed '/^$/N;/\n$/N;//D'

 # 刪除文件頂部的所有空行
 sed '/./,$!d'

 # 刪除文件尾部的所有空行
 sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' # 對所有sed有效
 sed -e :a -e '/^\n*$/N;/\n$/ba' # 同上,但只對gsed 3.02.*有效

 # 刪除每個段落的最後一行
 sed -n '/^$/{p;h;};/./{x;/./p;}'

特殊應用:
--------

 # 移除手冊頁(man page)中的nroff標記。在Unix System V或bash shell下使
 # 用'echo'命令時可能需要加上-e 選項。
 sed "s/.`echo \\\b`//g" # 外層的雙括號是必須的(Unix環境)
 sed 's/.^H//g' # 在bash或tcsh中, 按Ctrl-V 再按Ctrl-H
 sed 's/.\x08//g' # sed 1.5,GNU sed,ssed所使用的十六進制的表示方法

 # 提取新聞組或e-mail 的郵件頭
 sed '/^$/q' # 刪除第一行空行後的所有內容

 # 提取新聞組或e-mail 的正文部分
 sed '1,/^$/d' # 刪除第一行空行之前的所有內容

 # 從郵件頭提取“Subject”(標題欄字段),並移除開頭的“Subject:”字樣
 sed '/^Subject: */!d; s///;q'

 # 從郵件頭獲得回复地址
 sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

 # 獲取郵件地址。在上一個腳本所產生的那一行郵件頭的基礎上進一步的將非電郵
 # 地址的部分剃除。(見上一腳本)
 sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'

 # 在每一行開頭加上一個尖括號和空格(引用信息)
 sed 's/^/> /'

 # 將每一行開頭處的尖括號和空格刪除(解除引用)
 sed 's/^> //'

 # 移除大部分的HTML標籤(包括跨行標籤)
 sed -e :a -e 's/<[^>]*>//g;/
zipup.bat dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat 使用SED:Sed接受一個或多個編輯命令,並且每讀入一行後就依次應用這些命令。 當讀入第一行輸入後,sed對其應用所有的命令,然後將結果輸出。接著再讀入第二 行輸入,對其應用所有的命令……並重複這個過程。上一個例子中sed由標準輸入設 備(即命令解釋器,通常是以管道輸入的形式)獲得輸入。在命令行給出一個或多 個文件名作為參數時,這些文件取代標準輸入設備成為sed的輸入。sed的輸出將被 送到標準輸出(顯示器)。因此: cat filename | sed '10q' # 使用管道輸入 sed '10q' filename # 同樣效果,但不使用管道輸入 sed '10q' filename > newfile # 將輸出轉移(重定向)到磁盤上 要了解sed命令的使用說明,包括如何通過腳本文件(而非從命令行)來使用這些命 令,請參閱《sed & awk》第二版,作者Dale Dougherty和Arnold Robbins (O'Reilly,1997;http://www.ora.com),《UNIX Text Processing》,作者 Dale Dougherty和Tim O'Reilly(Hayden Books,1987)或者是Mike Arst寫的教 程——壓縮包的名稱是“U-SEDIT2.ZIP”(在許多站點上都找得到)。要發掘sed 的潛力,則必須對“正則表達式”有足夠的理解。正則表達式的資料可以看 《Mastering Regular Expressions》作者Jeffrey Friedl(O'reilly 1997)。 Unix系統所提供的手冊頁(“man”)也會有所幫助(試一下這些命令 “man sed”、“man regexp”,或者看“man ed”中關於正則表達式的部分),但 手冊提供的信息比較“抽象”——這也是它一直為人所詬病的。不過,它本來就不 是用來教初學者如何使用sed或正則表達式的教材,而只是為那些熟悉這些工具的人 提供的一些文本參考。 括號語法:前面的例子對sed命令基本上都使用單引號('...')而非雙引號 ("...")這是因為sed通常是在Unix平台上使用。單引號下,Unix的shell(命令 解釋器)不會對美元符($)和後引號(`...`)進行解釋和執行。而在雙引號下 美元符會被展開為變量或參數的值,後引號中的命令被執行並以輸出的結果代替 後引號中的內容。而在“csh”及其衍生的shell中使用感嘆號(!)時需要在其前 面加上轉義用的反斜杠(就像這樣:\!)以保證上面所使用的例子能正常運行 (包括使用單引號的情況下)。DOS版本的Sed則一律使用雙引號("...")而不是 引號來圈起命令。 '\t'的用法:為了使本文保持行文簡潔,我們在腳本中使用'\t'來表示一個製表 符。但是現在大部分版本的sed還不能識別'\t'的簡寫方式,因此當在命令行中為 腳本輸入製表符時,你應該直接按TAB鍵來輸入製表符而不是輸入'\t'。下列的工 具軟件都支持'\t'做為一個正則表達式的字元來表示製表符:awk、perl、HHsed、 sedmod以及GNU sed v3.02.80。 不同版本的SED:不同的版本間的sed會有些不同之處,可以想像它們之間在語法上 會有差異。具體而言,它們中大部分不支持在編輯命令中間使用標籤(:name)或分 支命令(b,t),除非是放在那些的末尾。這篇文檔中我們盡量選用了可移植性較高 的語法,以使大多數版本的sed的用戶都能使用這些腳本。不過GNU版本的sed允許使 用更簡潔的語法。想像一下當讀者看到一個很長的命令時的心情: sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -ed 好消息是GNU sed能讓命令更緊湊: sed '/AAA/b;/BBB/b;/CCC/b;d' # 甚至可以寫成 sed '/AAA\|BBB\|CCC/b;d' 此外,請注意雖然許多版本的sed接受象“/one/ s/RE1/RE2/”這種在's'前帶有空 格的命令,但這些版本中有些卻不接受這樣的命令:“/one/! s/RE1/RE2/”。這時 只需要把中間的空格去掉就行了。 速度優化:當由於某種原因(比如輸入文件較大、處理器或硬盤較慢等)需要提高 命令執行速度時,可以考慮在替換命令(“s/.../.../”)前面加上地址表達式來 提高速度。舉例來說: sed 's/foo/bar/g' filename # 標準替換命令 sed '/foo/ s/foo/bar/g' filename # 速度更快 sed '/foo/ s//bar/g' filename # 簡寫形式 當只需要顯示文件的前面的部分或需要刪除後面的內容時,可以在腳本中使用“q” 命令(退出命令)。在處理大的文件時,這會節省大量時間。因此: sed -n '45,50p' filename # 顯示第45到50行 sed -n '51q;45,50p' filename # 一樣,但快得多 如果你有其他的單行腳本想與大家分享或者你發現了本文檔中錯誤的地方,請發電 子郵件給本文檔的作者(Eric Pement)。郵件中請記得提供你所使用的sed版本、 該sed所運行的操作系統及對問題的適當描述。本文所指的單行腳本指命令行的長 度在65個字符或65個以下的sed腳本〔譯註1〕。本文檔的各種腳本是由以下所列作 者所寫或提供: Al Aab # 建立了“seders”郵件列表 Edgar Allen # 許多方面 Yiorgos Adamopoulos # 許多方面 Dale Dougherty # 《sed & awk》作者 Carlos Duarte # 《do it with sed》作者 Eric Pement # 本文檔的作者 Ken Pizzini # GNU sed v3.02 的作者 SG Ravenhall # 去html標籤腳本 Greg Ubben # 有諸多貢獻並提供了許多幫助 -------------------------------------------------- ----------------------- 譯註1:大部分情況下,sed腳本無論多長都能寫成單行的形式(通過`-e'選項和`;' 號)——只要命令解釋器支持,所以這裡說的單行腳本除了能寫成一行還對長度有 所限制。因為這些單行腳本的意義不在於它們是以單行的形式出現。而是讓用戶能 方便地在命令行中使用這些緊湊的腳本才是其意義所在。

2013年7月25日 星期四

VLAN: IVL vs SVL

網上有很多說到關於IVL和SVL的東西,但是對於一點基礎都沒有的人估計不能看得很明白。我這裡從Switch收到packet開始講兩種情況Switch的行為。
IVL(independent vlan learning):
是以每個vlan建一個表,看起來好像有很多表,其實這裡所說的表是指邏輯上的表,實際上在交換機中還是只有一個表,如果將VID相同的記錄都提取出來組成一個表,那麼就一個物理上的表在邏輯上就可以認為是多個表了。
在MAC表中以MAC+VID為主鍵進行儲存。這樣,同一個MAC就可能由於VID的不同而在MAC表中存在多條記錄。
1.根據MAC+VID在MAC表中尋找,找不到轉3
2.向找到的port轉發packet,OK.
3.向packet攜帶的vid對應的整個VLAN的port轉發.

SVL(shared valn learning):
在MAC表中以MAC為主進行儲存,也就是說同一個MAC在SVL模式下只能存在一個記錄在MAC表中。
1.在MAC中先根據MAC尋找相應的記錄,找不到轉4
2.記錄中的VID與packet中攜帶的VID一樣,得到相應的port;不一樣轉5
3.將packet轉發到相應的port,OK.
4.向packet攜帶的vid對應的整個VLAN的port轉發.
5.drop.


MAC表中主要的參數︰
MAC VID PORT

from:
http://sangchiu.blogspot.tw/2008/07/ivl-vs-svl.html

--------------------------------------------------------------------------------------------------------------------------------

所謂「共享式虛擬網路學習模式」 (Shared VLAN Learning, 簡稱SVL) 是指一個虛擬網路所學習到的MA位址可以給其他虛擬網路所使用。而所謂「獨立式虛擬網路學習模式」 (Independent VLAN Learning, 簡稱IVL) 則是指一個虛擬網路所學習到的MAC位址不可以給其他虛擬網路所使用。
在大部份的情況下,橋接器採用SVLIVL所得到的效果是相同的。但是在某些特殊的網路組態下,為了避免訊框轉送氾濫,我們必須對橋接器的學習模式加以規範。基本上有三種情況需要規範:




連接多個獨立虛擬網路
MAC位址重複

非對稱性虛擬網路
16-16說明一個設備如何將兩個虛擬網路連結在一起,並且使用虛擬網路的位址學習成果。結果造成在其他的橋接器上必須使用獨立式虛擬網路學習模式。圖中假設工作站AB經由一個「橋接路徑器」(Bridge-Router) 連結起來,中間則有一個虛擬橋接器(VLAN-aware Bridge)。為方便起見,我們稱此橋接路徑器為「連接器」(Connector)。在此例中,假設連接器沒有啟動擴張樹演算法,因此虛擬橋接器沒有試著去消除迴路。由於此虛擬橋接器的所有連接埠都設定為傳送無標籤訊框,因此連接器事實上扮演著將兩個虛擬網路連結在一起的角色。由於連接器本身不認識虛擬網路因此將所學習到的位址AB放在同一個過濾資料庫中。連接器知道工作站A應該隸屬於連接埠X。如此可以提供過濾資訊以避免虛擬網路Red中欲傳送給工作站A的訊框經由連接器的埠Y被轉送至虛擬網路Blue
首先假設工作站A傳送一筆訊框給工作站B。由於工作站A本身也沒有虛擬網路的觀念,因此其訊框以沒貼標籤的方式進入橋接器。由於橋接器已經設定該連接埠的PVID = Red, 因此該訊框屬於虛擬網路Red,同時橋接器學習到工作站A隸屬於此虛擬網路的連接埠1。橋接器的轉送程式在查閱成員集合 (Member Sets) 與無標籤集合 (Untagged Sets) 發現屬於虛擬網路Red的訊框應該由連接埠3以無標籤的方式傳送出去。橋接器於是將此訊框轉送出去。連接器收到此訊框後發現它並不認識工作站B,於是由其連接埠Y轉送出去。同時學習到工作站A隸屬於其連接埠X。此訊框以沒貼標籤的方式進入橋接器。由於橋接器已經設定該連接埠的PVID = Blue, 因此該訊框屬於虛擬網路Blue,同時橋接器學習到工作站A隸屬於此虛擬網路的連接埠4。橋接器的轉送程式在查閱成員集合與無標籤集合後發現屬於虛擬網路Blue的訊框應該由連接埠2以無標籤的方式傳送出去。橋接器於是將此訊框轉送給工作站B
相同的,當工作站B回送一筆訊框給工作站A時,其訊框也以沒貼標籤的方式進入橋接器。由於橋接器已經設定該連接埠的PVID = Blue, 因此該訊框屬於虛擬網路Blue,同時橋接器學習到工作站B隸屬於此虛擬網路的連接埠2。橋接器的轉送程式在查閱成員集合(Member Sets) 與無標籤集合 (Untagged Sets) 發現屬於虛擬網路Blue的訊框應該由連接埠4以無標籤的方式傳送出去。橋接器於是將此訊框轉送出去。連接器收到此訊框後發現工作站A應該由其連接埠X轉送出去。同時學習到工作站B隸屬於其連接埠Y。此訊框以沒貼標籤的方式進入橋接器。由於橋接器已經設定該連接埠的PVID = Red, 因此該訊框屬於虛擬網路Red,同時橋接器學習到工作站B隸屬於此虛擬網路的連接埠3。橋接器的轉送程式在查閱成員集合與無標籤集合後發現屬於虛擬網路Red的訊框應該由連接埠1以無標籤的方式傳送出去。橋接器於是將此訊框轉送給工作站A
在此網路組態下,此虛擬橋接器就應該讓兩個虛擬網路各自獨立學習。否則工作站AB的位址會輪流的被認為隸屬於對角的連接埠。例如原來工作站A隸屬於連接埠1, 但是其訊框如果被連接器轉送並且由此橋接器的連接埠4進入時,又會被重新學習為隸屬於連接埠4。如此不斷的交替,將造成嚴重的錯誤。虛擬網路各自獨立學習則可以避免此問題。
16-16 虛擬網路獨立學習範例 ()
另外一個需要虛擬網路獨立學習的例子如圖16-17所示。圖中假設連接器也認識虛擬網路(VLAN-aware protocol sensitive Bridge-Router而且紙船送或接收貼標籤之訊框。首先假設工作站AB分別傳送一筆訊框給連接器。由於工作站AB)本身沒有虛擬網路的觀念,因此其訊框以沒貼標籤的方式進入橋接器。由於橋接器已經設定該連接埠的PVID = Red (Blue), 因此該訊框屬於虛擬網路Red(Blue),同時橋接器學習到工作站A(B) 隸屬於此虛擬網路的連接埠1(2)。橋接器的轉送程式在查閱成員集合 (Member Sets) 與無標籤集合(Untagged Sets) 發現屬於虛擬網路Red (Blue) 的訊框應該由連接埠3以貼標籤的方式傳送出去。橋接器於是將此訊框轉送出去。連接器收到此貼標籤訊框虛擬網路為Red (Blue) 後學習到工作站A(B) 隸屬於其連接埠1
假設此時工作站A傳送一筆訊框給工作站B。此訊框由橋接器的連接埠3以貼標籤的方式傳送出去。連接器收到此貼標籤訊框(虛擬網路為 Red)後發現其目的地工作站B隸屬於另外一個虛擬網路Blue。由於連接器採用共享式學習,因此由過濾資料庫中可得知工作站B隸屬於連接埠1。此訊框以貼上虛擬網路Blue的標籤進入橋接器。由於橋接器已經取消該連接埠的PVID設定(以訊框所攜帶的標籤為主),因此該訊框屬於虛擬網路Blue,同時橋接器學習到工作站A隸屬於此虛擬網路的連接埠3。橋接器的轉送程式在查閱成員集合與無標籤集合後發現屬於虛擬網路Blue的訊框應該由連接埠2以無標籤的方式傳送出去。橋接器於是將此訊框的標籤去掉後轉送給工作站B
相同的,當工作站B回送一筆訊框給工作站A時,其訊框也以沒貼標籤的方式進入橋接器。此訊框由橋接器的連接埠3以貼標籤的方式傳送出去。連接器收到此貼標籤訊框(虛擬網路為 Blue)後發現其目的地工作站A隸屬於另外一個虛擬網路Red。由於連接器採用共享式學習,因此由過濾資料庫中可得知工作站A隸屬於連接埠1。此訊框以貼上虛擬網路Red的標籤進入橋接器。由於橋接器已經取消該連接埠的PVID設定(以訊框所攜帶的標籤為主),因此該訊框屬於虛擬網路Red,同時橋接器學習到工作站B隸屬於此虛擬網路的連接埠3。橋接器的轉送程式在查閱成員集合與無標籤集合後發現屬於虛擬網路Red的訊框應該由連接埠2以無標籤的方式傳送出去。橋接器於是將此訊框的標籤去掉後轉送給工作站A
在此例中,如果虛擬橋接器採用共享式學習模式,則工作站AB都會被認為是隸屬於連接埠3,之後的通訊可能會造成不正常的過濾,影響通訊。
16-17 虛擬網路獨立學習範例 ()
另外一個需要獨立式虛擬網路學習的極端例子發生在兩個不同的工作站使用相同的MAC位址,或一部工作站同時連接在多個區域網路區段上,但每一個網路介面卡使用相同的MAC位址,如圖16-18所示。圖中之工作站使用相同的MAC位址X與伺服器通訊。如果橋接器採用共享式學習模式(使用相同的過濾資料庫),則MAC位址X會一下子隸屬於連接埠1, 一下子又隸屬於連接埠2, 端看最後傳送訊框的工作站是AB。如此將嚴重的影響到工作站與伺服器間的通訊(伺服器應該傳給工作站A的訊框會被轉送到工作站B,或相反)。在這種架構之下,只有採用獨立式虛擬網路學習模式。
16-18 虛擬網路獨立學習範例 ()
需要共享式虛擬網路學習的例子發生在非對稱性的使用虛擬網路。在正常的情況下,屬於同一個虛擬網路的兩個工作站AB在彼此通訊時,都會使用相同的VID。但是在某些情況下,使用兩個虛擬網路反而更方便。工作站A傳送給工作站B時用一個虛擬網路,工作站B傳送給工作站A時用另外一個虛擬網路。這就是所謂的「非對稱性虛擬網路」(Asymmetric VLANs)的概念。 如圖16-19所示,假設伺服器與工作站都不認識虛擬網路,因此訊框都以無標籤的方式傳送。為了達到工作站AB都能與伺服器通訊,但彼此不能通訊的特殊目的(基於某種安全理由),此例中規畫了三個虛擬網路:虛擬網路Purple (伺服器 -> 工作站A/B), 虛擬網路Red (工作站A -> 伺服器), 虛擬網路Blue (工作站B -> 伺服器)
工作站A(B) 經由連接埠1 (2)傳送未貼標籤訊框給伺服器。由於橋接器已經設定該連接埠的PVID = Red (Blue), 因此該訊框屬於虛擬網路Red(Blue),同時橋接器學習到工作站A(B)隸屬於此虛擬網路的連接埠1(2)。橋接器的轉送程式在查閱成員集合與無標籤集合後發現屬於虛擬網路Red(Blue)的訊框應該由連接埠3以無標籤的方式傳送出去。橋接器於是將此訊框轉送出去。
伺服器則經由連接埠3傳送未貼標籤訊框給傳送訊框給工作站A(B)。由於橋接器已經設定該連接埠的PVID = Purple, 因此該訊框屬於虛擬網路Purple,同時橋接器學習到伺服器隸屬於此虛擬網路的連接埠3。橋接器的轉送程式在查閱成員集合與無標籤集合後發現屬於虛擬網路Purple的訊框可以由連接埠1,2 以無標籤的方式傳送出去。在查閱共享式過濾資料庫後可發現工作站AB)隸屬於連接埠1(2)。橋接器於是將傳送給工作站AB)的訊框經由連接埠1(2) 轉送出去。
在此網路組態下,此虛擬橋接器就應該使用共享式學習模式 (Purple, Red, Blue共享)。如果虛擬網路Purple與虛擬網路Red之過濾資料庫不共享,則當伺服器欲給工作站A的回應訊框到達橋接器時會因為找不到工作站A的隸屬埠而將之同時轉送給工作站AB,如此違反工作站間不通訊的要求。相反的,虛擬網路Purple與虛擬網路Red之過濾資料庫共享,則此回應訊框只會轉送給工作站A。伺服器與工作站B的通訊方式也相同。
為了能支援這種特殊的組態設定,此橋接器應該是一種SVL橋接器,或SVL/IVL橋接器。
16-19 虛擬網路共享學習範例 (非對稱性虛擬網路)



2013年6月21日 星期五

Network Troubleshooting Tools, IPv4 and IPv6

A summary of various troubleshooting commands for common client operating systems for both IPv4 and IPv6.

Apple OS X, *BSD

Ping for IPv4/sbin/ping
Ping for IPv6/sbin/ping6
Traceroute for IPv4/usr/sbin/traceroute
Traceroute for IPv6/usr/sbin/traceroute6
Interface Info/sbin/ifconfig
IPv4 Route table/usr/sbin/netstat -f inet -rn
IPv6 Route table/usr/sbin/netstat -f inet6 -rn
IPv4 arp table/usr/sbin/arp -an
IPv6 ndp table/usr/sbin/ndp -an

Windows: Vista, 7, Server 2008 and higher

Ping for IPv4ping -4
Ping for IPv6ping -6
Traceroute for IPv4tracert -4
Traceroute for IPv6tracert -6
Interface Infoipconfig /all
IPv4 Route tablenetsh interface ipv4 show route
IPv6 Route tablenetsh interface ipv6 show route
IPv4 arp tablearp -a
IPv6 ndp tablenetsh interface ipv6 show neighbors

Linux

Ping for IPv4ping
Ping for IPv6ping6
Traceroute for IPv4traceroute -4
Traceroute for IPv6traceroute -6
Interface Infoip address show
IPv4 Route tablenetstat -A inet -rn
IPv6 Route tablenetstat -A inet6 -rn
IPv4 arp tablearp -an
IPv6 ndp tableip -6 neighbor show
Notes:
  • Paths differ between distributions.
  • traceroute6 is usually installed as a hard link to traceroute and defaults to using the -6 flag. Forcing the -4 or -6 options is useful to make sure you are using the correct ip version during troubleshooting.

Solaris

Ping for IPv4/usr/sbin/ping -A inet
Ping for IPv6/usr/sbin/ping -A inet6
Traceroute for IPv4/usr/sbin/traceroute -A inet
Traceroute for IPv6/usr/sbin/traceroute -A inet6
Interface Info/bin/netstat -ain
IPv4 Route table/bin/netstat -f inet -rn
IPv6 Route table/bin/netstat -f inet6 -rn
IPv4 arp table/bin/netstat -pn -f inet
IPv6 ndp table/bin/netstat -pn -f inet6

2013年6月2日 星期日

在MAC OS上開啟su 最高權限設定

啟動root作法如下:

1.在$後鍵入sudo passwd root
按下

2.看到提示 Password:
輸入你個人的管理者密碼

3.接著看到
Changing password for root.
New password:
輸入root要使用的新密碼,然後在驗證一次

4.已經啟動root帳號了

往後只需輸入su再輸入password,就可登入root

2013年5月29日 星期三

T428 官方韌體更新 刷機教學說明

刷機工具 Flash tool:
RK3188 驅動程式 USB drivers:
5/28 釋出

1.首先先按住T428側邊的按鈕,

2.MicroUSB接上T428, USB接上PC

3.此時PC上會發現到新裝置後,裝上上面連結所提供的RK3188 USB驅動程式.


4.安裝驅動程式完畢後,打開下載回來刷機工具(flash tool),並選擇欲刷入之韌體檔案(update.img)
5.若有RK3188 USB成功驅動時,刷機工具程式下方Connected Devices 出現下圖綠色狀態   .

6.執行"Restroe" ,則自動開始刷機流程

8.等待出現下圖即刷機完成.

PS.(首次開機會比較久)

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...