ipsec.conf

NAME

ipsec.conf —— IPsec配置
DESCRIPTION

ipsec.conf指定了Openswan IPsec子系统的大多数配置和控制信息。

include ipsec.*.conf 包含指定的配置文件
CONN SECTIONS

conn项定义了一个IPsec连接的规范,名字可以随意定义。例如:

conn snt
		left=10.11.11.1
		leftsubnet=10.0.1.0/24
		leftnexthop=172.16.55.66
		leftsourceip=10.0.1.1
		right=192.168.22.1
		rightsubnet=10.0.2.0/24
		rightnexthop=172.16.88.99
		rightsourceip=10.0.2.1
		keyingtries=%forever

CONN PARAMETERS: GENERAL

connaddrfamily

连接地址族,可用参数为ipv4(缺省)或者ipv6。
IPv6在openswan 2.4中的NETKEY支持和openswan 2.6.33中的KLIPS支持

type

连接类型,参数如下:
tunnel(缺省)表示 host-to-host,host-to-subnet,subnet-to-subnet 隧道模式;
transport,表示 host-to-host传输模式;
passthrough,表示不使用IPsec;        drop,表示丢弃数据;
reject,表示丢弃数据并返回ICMP诊断包

left

[必选项] 左侧设备公网接口IP地址,其中IP地址的格式请看ipsec_ttoaddr(3)。当前支持IPv4和IPv6。
如果其参数为 %defaultroute,同时 config setup 项中的 interfaces 包含 %defaultroute,那么left将自动由本地的缺省路由接口地址填充;leftnexthop也支持。    %any 表示在协商时填充。    %opportunistic 表示 left 和 lefnexthop 的参数从 left 侧客户端的DNS数据中获取

leftsubnet

左侧设备的私有子网,格式为 network/netmask (请看ipsec_ttosubnet(3));当前支持IPv4和IPv6地址范围。
支持 vhost: 和 vnet: 这2个速记,语法与 virtual_private 相同    %priv 表示子网与 virtual_private相同    %no 表示没有子网

leftsubnets

指定左侧设备的多个私有子网,格式 { networkA/netmaskA networkB/netmaskB [..] }。leftsubnet 和 leftsubnets 不能同时使用。 例子请看 testing/pluto/multinet-*

leftprotoport

指定隧道中允许的通过的协议和端口。参数可以是数字或者协议名(请在 /etc/protocols 中查找),例如 leftprotoport=icmp,或 protocol/port,如 tcp/smtp。
ports可以使用数字或名字表示(请在 /etc/services 中查找)。    %any 表示所有的协议端口

leftnexthop

左侧设备连接公网的下一跳网关IP地址;缺省为 %direct。如果这方法没有使用,则leftnexthop为 %defaultroute

leftsourceip

连接中主机的IP地址

leftupdown

当连接状态改变时, 回调此处设置的命令(缺省为 ipsec _updown)。 详细请看 ipsec_pluto(8)

leftfirewall

不再使用此选项

CONN PARAMETERS:AUTOMATIC KEYING

auto

IPsec启动时自动执行,支持的参数有

add (ipsec auto --add)
route(ipsec auto --route)
start(ipsec auto --up)
manual(ipsec manual --up)
ignore 表示不自动启动

具体请看 config setup

authby

2个安全网关之间的认证方法;
secret 表示共享密钥
rsasig 表示RSA数据签名(缺省)
secret|rsasig 同时使用

ike

IKE第一阶段(ISAKMP SA)中的加密/认证算法。
格式为 "cipher-hash;modpgroup,cipher-hash;modpgroup,..."
例如:
ike=3des-sha1,aes-sha1
ike=aes
ike=aes128-md5;modp2048
ike=aes128-sha1;dh22,
ike=3des-md5;modp1024,aes-sha1;modp1536 or ike=modp1536

算法值请查看 ipsec_spi(8)中的 --ike选项。
IKE组合形式:       

cipher:                                    3des or aes
hash:                                      sha1 or md5
pfsgroupt(DHgroup):                        modp1024 or modp153

phase2

设置将产生的SA类型。esp用于加密(缺省),ah用于认证

phase2alg

指定第二阶段中支持的算法。算法之间用逗号分隔

esp

此选项不再使用,用phase2alg代替

ah

连接中的AH算法。算法格式请看 ipsec_spi(8)中的 --ah选项

ikev2

IKEv2(RFC4309)设置使用。
never 或 no 表示不使用IKEv2;
propos 或 yes 表示允许使用IKEv2,同时缺省使用IKEv2进行协商;
insist,表示只接受IKEv2协商,IKEv1将被拒绝;
permit(缺省),表示不主动使用IKEv2,但对端使用IKEv2的话也接受

leftid

左侧参加者的身份确认方法。
可以是IP地址,域名    %fromcert 表示ID从证书的DN获取;%none 表示不使用ID值

leftrsasigkey

左侧RSA签名认证,格式使用RFC2537 ipsec_ttodata(3)编码。    %none 表示不指定值;
%dnsondemand 表示值从DNS中获取当需要使用到此值时;
%dnsonload 表示值从DNS中获取当读取ipsec.conf时;    %cert 表示信息从 %leftcert 中获取

leftrsasigkey2

第2个公钥

leftcert

指定X509证书,如果没有指定全路径,则从 /etc/ipsec.d/certs/ 目录中查找
如果opesnswan编译时指定了 USE_LIBNSS=true,那么openswan将会去NSS数据库中查找RSA key

leftca

指定CA,如果没有指定,那么将用 leftcert 中的证书认为是CA证书

leftsendcert

openswan发送X509证书到远程主机的选项配置。    yes|always 表示总是允许发送证书
ifasked 表示如果远程主机要求证书则进行发送    no|never 表示从不发送证书。
缺省参数为 ifasked

leftxauthserver

左侧为XAUH服务端。可以使用PAM认证或 /etc/ipsec.d/passwd中的MD5口令。对端必须配置为rightxauthclient ,做为XAUTH客户端

leftxauthclient

左侧为XAUT客户端。xauth连接必须进行交互启动,不能使用配置 atuo=start。它必须使用命令行ipsec auto --up conname

leftxauthusername

XAUTH认证中使用的用户名,XAUTH密码在 ipsec.secrets 文件中配置

leftmodecfgserver

左侧是模式配置服务端。它能下发网络配置到客户端。 参数为 yes 或 no (缺省)

leftmodecfgclient

左侧是模式配置客户端。它能从服务端接收网络配置。参数为 yes 或 no (缺省)

modecfgpull

从服务端接收模式配置信息。参数为 yes 或 no (缺省)

modecfgdns1, modecfgdns2, modecfgwins1, modecfgwins2

指定DNS、WINS的IP地址

remote_peer_type

设置远程主机类型。参数为 cisco 或 ietf

forceencaps

参数为 yes 或 no (缺省为no)
当forceencaps=yes时将强制使用RFC-3948封装(UPD端口4500包封闭ESP)
如果此选项打开,那么 nat_traveral=yes必须打开

dpddelay

主机探测延迟时间,缺省为30秒。如果此选项被设置,dpdtimeout也应该设置

dpdtimeout

主机探测超时时间(以秒为单位),缺省为120秒。如果超时,将删除SA

dpdaction

当PDP探测到主机死亡时要执行的动作
hold (缺省)表示eroute将进入 %hold 状态
clear 表示eroute和SA都要清除
restart 表示SA将立即从协商
restart_by_peer 表示所有死亡主机的SA将进行从协商

pfs

参数为 yes 或 no (缺省为yes)

aggrmode

使用野蛮模式替换主模式。野蛮模式不安全,容易受到服务拒绝攻击。
参数为 yes 或 no (缺省为no)

salifetime

SA存活时间,参数为数字 + s/m/h/d (缺省为8h,最大24h)    "keylife""lifetime" 是 "salifetime" 的别名

rekey

参数为 yes 或 no (缺省为 yes)。表示当密钥到期后是否进行从协商

rekeymargin

密钥到期前多长时间进行从协商。参数请看 salifetime (缺省9m)

keyingtries

协商尝试次数。 %forever 表示从不放弃,一直进行协商

ikelifetime

IKE存活时间。参数请看salifetime

compress

是否进行压缩处理。 参数为 yes 或 no (缺省为 no)

metric

设置ipsecX 或 mastX 接口的 metric 优先级

mtu

设置MTU

failureshunt

当协商失败时执行的动作。缺省为 none;passthrough;drop;reject;具体看选项 type

CONFIG SECTIONS

config部分使用为一名字setup,此部分包含了软件启动时所使用到的信息(ipsec_setup(8). 例如:

config setup
		interfaes="ipsec0=eth1 ipsec1=ppp0"
		klipsdebug=none
		plutodebug=control
		protostack=auto
		manualstart=

config setup目前可用的选项如下:

protostack

指定IPsec协议攻栈。参数为 auto/klips/netkey/mast。mast是klips的变种

interfaces

IPsec使用的虚接口和实接口。格式为 "virtual=physical virtual=physical ..."

listen

监听IP地址

nat_traversal

是否支持NAT。参数为 yes 或 no (缺省为no)

disable_port_floasting

是否启用NAT-T。 参数为 yes 或 no (缺省为no)

force_keepalive

是否强制发送NAT-T保活。参数为 yes 或 no (缺省为no)

keep_alive

NAT-T保活包发送间隔时间

oe

是否启用机会加密(Opportunistic Encryption)。参数为 yes 或 no(缺省为no)
只有KLIPS支持此选项

nhelpers

设置pluto处理密码运算的进程(线程)
0表示所有操作都在主线程
-1表示根据CPU进行计算(n-1,n是CPU数)
其它值则表示强制的进程(线程)数

crlcheckinterval

CRL检查间隔时间,单位为秒。 如果设置为0表示开关CRL检查

strictcrlpolicy

是否强制进行CRL检查。参数为 yes 或 no (缺省为no)

forwardcontrol

此选项不再使用。请使用 /etc/sysctl.conf 文件中的 net.ipv4.ip_forward=0 控制IP转发设置

rp_filter

此选项不再使用。请使用 /etc/sysctl.conf 文件中的 net.ipv4.conf/[iface]/rp_filter=0 。 此参数在IPsec必须设置为0

syslog

syslog(2)中的显示名。缺省为 daemon.error

klipsdebug

KLIPS日志输出设置。none表示不输出;all表示全部输出。具体参数请看 ipsec_klipsdebug(8)

plutodebug

pluto日志输出设置。none表示不输出;all表示全部输出。具体参数请看 ipsec_pluto(8)

uniqueids

唯一ID。参数为 yes 或 no (缺省为yes)

plutorestartoncrash

当pluto崩溃时重启,并生成core文件。参数为 yes 或 no(缺省为yes)

plutopts

设置pluto的额外参数。具体请看ipsec_pluto(8)

plutostderrlog

不使用syslog,把日志输出重定向到指定的文件中

pluto

是否启动pluto。参数为 yes 或 no(缺省为yes)

plutowait

在处理下一个协商时,pluto是否等待当前协商完成。参数为 yes 或 no(缺省为no)

prepluto

配置Pluto启动前执行的脚本

postpluto

配置Pluto启动后执行的脚本

dumpdir

设置core dump文件路径

fragicmp

包被分片时是否发送ICMP消息。参数为 yes 或 no (缺省为yes)。此选项只对KLIPS起作用

hidetos

隧道中数据包的TOS设置为0。参数为 yes 或 no(缺省为yes)。此选项只对KLIPS起作用

overridemtu

设置ipsecX接口的MTU。此选项只对KLIPS起作用

IMPLICIT CONNS

系统自动定义了一些conns部分于用默认的策略组。如果conn中定义了auto=ignore,那么默认定义将被忽略

下面是自动提供的定义

conn clear
		type=passthrough
		authby=never
		left=%defaultroute
		right=%group
		auto=route
		
conn clear-or-private
		type=passthrough
		left=%defaultroute
		leftid=%myid
		right=%opportunisticgroup
		failureshunt=passthrough
		keyingtries=3
		ikelifetime=1h
		salifetime=1h
		rekey=no
		auto=route

conn private-or-clear
		type=tunnel
		left=%defaultroute
		leftid=%myid
		right=%opportunisticgroup
		failureshunt=passthrough
		keyingtries=3
		ikelifetime=1h
		salifetime=1h
		rekey=no
		auto=route

conn private
		type=tunnel
		left=%defaultroute
		leftid=%myid
		right=%opportunisticgroup
		failureshunt=drop
		keyingtries=3
		ikelifetime=1h
		salifetime=1h
		rekey=no
		auto=route


conn block
		type=reject
		authby=never
		left=%defaultroute
		right=%group
		auto=route# default policyconn packetdefault
		type=tunnel
		left=%defaultroute
		leftid=%myid
		left=0.0.0.0/0
		right=%opportunistic
		failureshunt=passthrough
		keyingtries=3
		ikelifetime=1h
		salifetime=1h
		rekey=no
		auto=route
		

POLICY GROUP FILES

配置文件在 /etc/ipsec.d/policies/ 目录下,包括

/etc/ipsec.d/policies/block
/etc/ipsec.d/policies/clear
/etc/ipsec.d/policies/clear-or-private
/etc/ipsec.d/policies/private
/etc/ipsec.d/policies/private-or-clear

## 192.168.10.4	host ip
## 106.15.00.126	internet ip
## 192.168.10.1		route

conn beijing-to-shanhai
		left=192.168.10.4
		leftid=106.15.00.126
		leftsubnet=192.168.10.0/24
		leftnexthop=192.168.10.1
		
		right=203.156.000.67
		rightid=203.156.000.67
		rightsubnet=192.168.20.0/24
				
		## phase 1 ##
		ike=3des-sha1,aes128-sha1,aes256-sha1,3des-md5,aes128-md5,aes256-md5,aes256-sha2_256
		keyexchange=ike
		## phase 2 ##
		phase2=esp
		phase2alg=3des-sha1,aes128-sha1,aes256-sha1,3des-md5,aes128-md5,aes256-md5,aes256-sha2_256
		
		auto=start
		authby=secret
		pfs=no
		type=tunnel
		
		ikelifetime=8h
		## keep restart to available
		keyingtries=%forever
		rekey=no
		keylife=1h
		
		dpddelay=40
		dpdtimeout=130
		## disconnected to restart ##
		dpdaction=restart
		

links:
chinease http://www.wscon.cn/16.html
chinease https://segmentfault.com/a/1190000000646294
english  http://blog.csdn.net/werewolf_ace/article/details/50320713

 

发表在 network | ipsec.conf已关闭评论

CodePage

Links:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
https://en.wikipedia.org/wiki/Code_page

1. Codepage的定义和历史

字符内码(charcter
code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为

  • 单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.
  • 双字节内码 -- Double-Byte character
    sets)(DBCS),可以支持65000个字符编码.主要用来对大字符集的东方文字进行编码.

codepage 指的是一个经过挑选的以特定顺序排列的字符内码列表,对于早期的单字节内码的语种,codepage中的内码顺序使得系统
可以按照此列表来根据键盘的输入值给出一个对应的内码.对于双字节内码,则给出的是MultiByte到Unicode的对应表,这样就可以把
以Unicode形式存放的字符转化为相应的字符内码,或者反之,在Linux核心中对应的函数就是utf8_mbtowc和utf8_wctomb.

在1980年前,仍然没有任何国际标准如ISO-8859或Unicode来定义如何扩展US-ASCII编码以便非英语国家的用户使用.很多IT
厂商发明了他们自己的编码,并且使用了难以记忆的数目来标识:

例如936代表简体中文. 950代表繁体中文.

1.1 CJK
Codepage

同 Extended Unix Coding ( EUC )编码大不一样的是,下面所有的远东
codepage 都利用了C1控制码 { =80..=9F } 做为首字节, 使用ASCII值 { =40..=7E {
做为第二字节,这样才能包含多达数万个双字节字符,这表明在这种编码之中小于3F的ASCII值不一定代表ASCII字符.

CP932

Shift-JIS包含日本语 charset JIS X 0201 (每个字符一个字节) 和 JIS X 0208 (每个字符两个字节),所以 JIS X
0201平假名包含一个字节半宽的字符,其剩馀的60个字节被用做7076个汉字以及648个其他全宽字符的首字节.同EUC-JP编码区别的是,
Shift-JIS没有包含JIS X 202中定义的5802个汉字.

CP936

GBK 扩展了 EUC-CN 编码( GB 2312-80编码,包含 6763 个汉字)到Unicode
(GB13000.1-93)中定义的20902个汉字,中国大陆使用的是简体中文zh_CN.

CP949

UnifiedHangul (UHC) 是韩文 EUC-KR 编码(KS C 5601-1992 编码,包括2350 韩文音节和 4888
个汉字a)的超集,包含 8822个附加的韩文音节( 在C1中 )

CP950

是代替EUC-TW (CNS 11643-1992)的 Big5 编码(13072 繁体 zh_TW 中文字) 繁体中文,这些定义都在Ken Lunde的
CJK.INF中或者 Unicode 编码表中找到.

注意: Microsoft采用以上四种Codepage,因此要访问Microsoft的文件系统时必需采用上面的Codepage .

1.2 IBM的远东语言Codepage

IBM的Codepage分为SBCS和DBCS两种:

IBM SBCS Codepage

  • 37 (英文) *
  • 290 (日文) *
  • 833 (韩文) *
  • 836 (简体中文) *
  • 891 (韩文)
  • 897 (日文)
  • 903 (简体中文)
  • 904 (繁体中文)

    IBM DBCS Codepage

  • 300 (日文) *
  • 301 (日文)
  • 834 (韩文) *
  • 835 (繁体中文) *
  • 837 (简体中文) *
  • 926 (韩文)
  • 927 (繁体中文)
  • 928 (简体中文)

    将SBCS的Codepage和DBCS的Codepage混合起来就成为: IBM MBCS Codepage

  • 930 (日文) (Codepage 300 加 290) *
  • 932 (日文) (Codepage 301 加 897)
  • 933 (韩文) (Codepage 834 加 833) *
  • 934 (韩文) (Codepage 926 加 891)
  • 938 (繁体中文) (Codepage 927 加 904)
  • 936 (简体中文) (Codepage 928 加 903)
  • 5031 (简体中文) (Codepage 837 加 836) *
  • 5033 (繁体中文) (Codepage 835 加 37) *

    *代表采用EBCDIC编码格式

    由此可见,Mircosoft的CJK Codepage来源于IBM的Codepage.

    2. Linux下Codepage的作用

    在Linux下引入对Codepage的支持主要是为了访问FAT/VFAT/FAT32/NTFS/NCPFS等文件系统下的多语种文件名的问题,目前在NTFS和FAT32/VFAT下的文件系统上都使用了Unicode,这就需要系统在读取这些文件名时动态将其转换为相应的语言编码.因此引入了NLS支持.其相应的程序文件在/usr/src/linux/fs/nls下:

    • Config.in
    • Makefile
    • nls_base.c
    • nls_cp437.c
    • nls_cp737.c
    • nls_cp775.c
    • nls_cp850.c
    • nls_cp852.c
    • nls_cp855.c
    • nls_cp857.c
    • nls_cp860.c
    • nls_cp861.c
    • nls_cp862.c
    • nls_cp863.c
    • nls_cp864.c
    • nls_cp865.c
    • nls_cp866.c
    • nls_cp869.c
    • nls_cp874.c
    • nls_cp936.c
    • nls_cp950.c
    • nls_iso8859-1.c
    • nls_iso8859-15.c
    • nls_iso8859-2.c
    • nls_iso8859-3.c
    • nls_iso8859-4.c
    • nls_iso8859-5.c
    • nls_iso8859-6.c
    • nls_iso8859-7.c
    • nls_iso8859-8.c
    • nls_iso8859-9.c
    • nls_koi8-r.c

    实现了下列函数:

    • extern int utf8_mbtowc(__u16 *, const __u8 *, int);
    • extern int utf8_mbstowcs(__u16 *, const __u8 *, int);
    • extern int utf8_wctomb(__u8 *, __u16, int);
    • extern int utf8_wcstombs(__u8 *, const __u16 *, int);

    这样在加载相应的文件系统时就可以用下面的参数来设置Codepage:

    对于Codepage 437 来说

    mount -t vfat /dev/hda1 /mnt/1 -o codepage=437,iocharset=cp437

    这样在Linux下就可以正常访问不同语种的长文件名了.

    3. Linux下支持的Codepage

  • nls codepage 437 -- 美国/加拿大英语
  • nls codepage 737 -- 希腊语
  • nls codepage 775 -- 波罗的海语
  • nls codepage 850 -- 包括西欧语种(德语,西班牙语,意大利语)中的一些字符
  • nls codepage 852 -- Latin 2
    包括中东欧语种(阿尔巴尼亚语,克罗地亚语,捷克语,英语,芬兰语,匈牙利语,爱尔兰语,德语,波兰语,罗马利亚语,塞尔维亚语,斯洛伐克语,斯洛文尼亚语,Sorbian语)
  • nls codepage 855 -- 斯拉夫语
  • nls codepage 857 -- 土耳其语
  • nls codepage 860 -- 葡萄牙语
  • nls codepage 861 -- 冰岛语
  • nls codepage 862 -- 希伯来语
  • nls codepage 863 -- 加拿大语
  • nls codepage 864 -- 阿拉伯语
  • nls codepage 865 -- 日尔曼语系
  • nls codepage 866 -- 斯拉夫语/俄语
  • nls codepage 869 -- 希腊语(2)
  • nls codepage 874 -- 泰语
  • nls codepage 936 -- 简体中文GBK
  • nls codepage 950 -- 繁体中文Big5
  • nls iso8859-1 --
    西欧语系(阿尔巴尼亚语,西班牙加泰罗尼亚语,丹麦语,荷兰语,英语,Faeroese语,芬兰语,法语,德语,加里西亚语,爱尔兰语,冰岛语,意大利语,挪威语,葡萄牙语,瑞士语.)这同时适用于美国英语.
  • nls iso8859-2 -- Latin 2
    字符集,斯拉夫/中欧语系(捷克语,德语,匈牙利语,波兰语,罗马尼亚语,克罗地亚语,斯洛伐克语,斯洛文尼亚语)
  • nls iso8859-3 -- Latin 3 字符集, (世界语,加里西亚语,马耳他语,土耳其语)
  • nls iso8859-4 -- Latin 4 字符集, (爱莎尼亚语,拉脱维亚语,立陶宛语),是Latin 6 字符集的前序标准
  • nls iso8859-5 -- 斯拉夫语系(保加利亚语,Byelorussian语,马其顿语,俄语,塞尔维亚语,乌克兰语) 一般推荐使用 KOI8-R
    codepage
  • nls iso8859-6 -- 阿拉伯语.
  • nls iso8859-7 -- 现代希腊语
  • nls iso8859-8 -- 希伯来语
  • nls iso8859-9 -- Latin 5 字符集, (去掉了 Latin 1中不经常使用的一些冰岛语字符而代以土耳其语字符)
  • nls iso8859-10 -- Latin 6 字符集, (因纽特(格陵兰)语,萨摩斯岛语等Latin 4 中没有包括的北欧语种)
  • nls iso8859-15 -- Latin 9 字符集, 是Latin
    1字符集的更新版本,去掉一些不常用的字符,增加了对爱莎尼亚语的支持,修正了法语和芬兰语部份,增加了欧元字符)
  • nls koi8-r -- 俄语的缺省支持
  •  

    Microsoft Code Page Identifiers

    The following table defines the available code page identifiers.

    Note  
    ANSI code pages can be different on different computers, or
    can be changed for a single computer, leading to data corruption. For
    the most consistent results, applications should use Unicode, such as
    UTF-8 or UTF-16, instead of a specific code page.
     

    Identifier .NET Name Additional information
    037 IBM037 IBM EBCDIC US-Canada
    437 IBM437 OEM United States
    500 IBM500 IBM EBCDIC International
    708 ASMO-708 Arabic (ASMO 708)
    709 Arabic (ASMO-449+, BCON V4)
    710 Arabic - Transparent Arabic
    720 DOS-720 Arabic (Transparent ASMO); Arabic (DOS)
    737 ibm737 OEM Greek (formerly 437G); Greek (DOS)
    775 ibm775 OEM Baltic; Baltic (DOS)
    850 ibm850 OEM Multilingual Latin 1; Western European (DOS)
    852 ibm852 OEM Latin 2; Central European (DOS)
    855 IBM855 OEM Cyrillic (primarily Russian)
    857 ibm857 OEM Turkish; Turkish (DOS)
    858 IBM00858 OEM Multilingual Latin 1 + Euro symbol
    860 IBM860 OEM Portuguese; Portuguese (DOS)
    861 ibm861 OEM Icelandic; Icelandic (DOS)
    862 DOS-862 OEM Hebrew; Hebrew (DOS)
    863 IBM863 OEM French Canadian; French Canadian (DOS)
    864 IBM864 OEM Arabic; Arabic (864)
    865 IBM865 OEM Nordic; Nordic (DOS)
    866 cp866 OEM Russian; Cyrillic (DOS)
    869 ibm869 OEM Modern Greek; Greek, Modern (DOS)
    870 IBM870 IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2
    874 windows-874 ANSI/OEM Thai (ISO 8859-11); Thai (Windows)
    875 cp875 IBM EBCDIC Greek Modern
    932 shift_jis ANSI/OEM Japanese; Japanese (Shift-JIS)
    936 gb2312 ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)
    949 ks_c_5601-1987 ANSI/OEM Korean (Unified Hangul Code)
    950 big5 ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
    1026 IBM1026 IBM EBCDIC Turkish (Latin 5)
    1047 IBM01047 IBM EBCDIC Latin 1/Open System
    1140 IBM01140 IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro)
    1141 IBM01141 IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro)
    1142 IBM01142 IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro)
    1143 IBM01143 IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro)
    1144 IBM01144 IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)
    1145 IBM01145 IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro)
    1146 IBM01146 IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro)
    1147 IBM01147 IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro)
    1148 IBM01148 IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro)
    1149 IBM01149 IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro)
    1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
    1201 unicodeFFFE Unicode UTF-16, big endian byte order; available only to managed applications
    1250 windows-1250 ANSI Central European; Central European (Windows)
    1251 windows-1251 ANSI Cyrillic; Cyrillic (Windows)
    1252 windows-1252 ANSI Latin 1; Western European (Windows)
    1253 windows-1253 ANSI Greek; Greek (Windows)
    1254 windows-1254 ANSI Turkish; Turkish (Windows)
    1255 windows-1255 ANSI Hebrew; Hebrew (Windows)
    1256 windows-1256 ANSI Arabic; Arabic (Windows)
    1257 windows-1257 ANSI Baltic; Baltic (Windows)
    1258 windows-1258 ANSI/OEM Vietnamese; Vietnamese (Windows)
    1361 Johab Korean (Johab)
    10000 macintosh MAC Roman; Western European (Mac)
    10001 x-mac-japanese Japanese (Mac)
    10002 x-mac-chinesetrad MAC Traditional Chinese (Big5); Chinese Traditional (Mac)
    10003 x-mac-korean Korean (Mac)
    10004 x-mac-arabic Arabic (Mac)
    10005 x-mac-hebrew Hebrew (Mac)
    10006 x-mac-greek Greek (Mac)
    10007 x-mac-cyrillic Cyrillic (Mac)
    10008 x-mac-chinesesimp MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac)
    10010 x-mac-romanian Romanian (Mac)
    10017 x-mac-ukrainian Ukrainian (Mac)
    10021 x-mac-thai Thai (Mac)
    10029 x-mac-ce MAC Latin 2; Central European (Mac)
    10079 x-mac-icelandic Icelandic (Mac)
    10081 x-mac-turkish Turkish (Mac)
    10082 x-mac-croatian Croatian (Mac)
    12000 utf-32 Unicode UTF-32, little endian byte order; available only to managed applications
    12001 utf-32BE Unicode UTF-32, big endian byte order; available only to managed applications
    20000 x-Chinese_CNS CNS Taiwan; Chinese Traditional (CNS)
    20001 x-cp20001 TCA Taiwan
    20002 x_Chinese-Eten Eten Taiwan; Chinese Traditional (Eten)
    20003 x-cp20003 IBM5550 Taiwan
    20004 x-cp20004 TeleText Taiwan
    20005 x-cp20005 Wang Taiwan
    20105 x-IA5 IA5 (IRV International Alphabet No. 5, 7-bit); Western European (IA5)
    20106 x-IA5-German IA5 German (7-bit)
    20107 x-IA5-Swedish IA5 Swedish (7-bit)
    20108 x-IA5-Norwegian IA5 Norwegian (7-bit)
    20127 us-ascii US-ASCII (7-bit)
    20261 x-cp20261 T.61
    20269 x-cp20269 ISO 6937 Non-Spacing Accent
    20273 IBM273 IBM EBCDIC Germany
    20277 IBM277 IBM EBCDIC Denmark-Norway
    20278 IBM278 IBM EBCDIC Finland-Sweden
    20280 IBM280 IBM EBCDIC Italy
    20284 IBM284 IBM EBCDIC Latin America-Spain
    20285 IBM285 IBM EBCDIC United Kingdom
    20290 IBM290 IBM EBCDIC Japanese Katakana Extended
    20297 IBM297 IBM EBCDIC France
    20420 IBM420 IBM EBCDIC Arabic
    20423 IBM423 IBM EBCDIC Greek
    20424 IBM424 IBM EBCDIC Hebrew
    20833 x-EBCDIC-KoreanExtended IBM EBCDIC Korean Extended
    20838 IBM-Thai IBM EBCDIC Thai
    20866 koi8-r Russian (KOI8-R); Cyrillic (KOI8-R)
    20871 IBM871 IBM EBCDIC Icelandic
    20880 IBM880 IBM EBCDIC Cyrillic Russian
    20905 IBM905 IBM EBCDIC Turkish
    20924 IBM00924 IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)
    20932 EUC-JP Japanese (JIS 0208-1990 and 0212-1990)
    20936 x-cp20936 Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)
    20949 x-cp20949 Korean Wansung
    21025 cp1025 IBM EBCDIC Cyrillic Serbian-Bulgarian
    21027 (deprecated)
    21866 koi8-u Ukrainian (KOI8-U); Cyrillic (KOI8-U)
    28591 iso-8859-1 ISO 8859-1 Latin 1; Western European (ISO)
    28592 iso-8859-2 ISO 8859-2 Central European; Central European (ISO)
    28593 iso-8859-3 ISO 8859-3 Latin 3
    28594 iso-8859-4 ISO 8859-4 Baltic
    28595 iso-8859-5 ISO 8859-5 Cyrillic
    28596 iso-8859-6 ISO 8859-6 Arabic
    28597 iso-8859-7 ISO 8859-7 Greek
    28598 iso-8859-8 ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
    28599 iso-8859-9 ISO 8859-9 Turkish
    28603 iso-8859-13 ISO 8859-13 Estonian
    28605 iso-8859-15 ISO 8859-15 Latin 9
    29001 x-Europa Europa 3
    38598 iso-8859-8-i ISO 8859-8 Hebrew; Hebrew (ISO-Logical)
    50220 iso-2022-jp ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
    50221 csISO2022JP ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)
    50222 iso-2022-jp ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)
    50225 iso-2022-kr ISO 2022 Korean
    50227 x-cp50227 ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022)
    50229 ISO 2022 Traditional Chinese
    50930 EBCDIC Japanese (Katakana) Extended
    50931 EBCDIC US-Canada and Japanese
    50933 EBCDIC Korean Extended and Korean
    50935 EBCDIC Simplified Chinese Extended and Simplified Chinese
    50936 EBCDIC Simplified Chinese
    50937 EBCDIC US-Canada and Traditional Chinese
    50939 EBCDIC Japanese (Latin) Extended and Japanese
    51932 euc-jp EUC Japanese
    51936 EUC-CN EUC Simplified Chinese; Chinese Simplified (EUC)
    51949 euc-kr EUC Korean
    51950 EUC Traditional Chinese
    52936 hz-gb-2312 HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ)
    54936 GB18030 Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030)
    57002 x-iscii-de ISCII Devanagari
    57003 x-iscii-be ISCII Bangla
    57004 x-iscii-ta ISCII Tamil
    57005 x-iscii-te ISCII Telugu
    57006 x-iscii-as ISCII Assamese
    57007 x-iscii-or ISCII Odia
    57008 x-iscii-ka ISCII Kannada
    57009 x-iscii-ma ISCII Malayalam
    57010 x-iscii-gu ISCII Gujarati
    57011 x-iscii-pa ISCII Punjabi
    65000 utf-7 Unicode (UTF-7)
    65001 utf-8 Unicode (UTF-8)

     

    Code Pages

    enum CodePages
    {
        IBM037=37,
        IBM437=437,
        IBM500=500,
        ASMO_708=708,
        DOS_720=720,
        ibm737=737,
        ibm775=775,
        ibm850=850,
        ibm852=852,
        IBM855=855,
        ibm857=857,
        IBM00858=858,
        IBM860=860,
        ibm861=861,
        DOS_862=862,
        IBM863=863,
        IBM864=864,
        IBM865=865,
        cp866=866,
        ibm869=869,
        IBM870=870,
        windows_874=874,
        cp875=875,
        shift_jis=932,
        gb2312=936,
        ks_c_5601_1987=949,
        big5=950,
        IBM1026=1026,
        IBM01047=1047,
        IBM01140=1140,
        IBM01141=1141,
        IBM01142=1142,
        IBM01143=1143,
        IBM01144=1144,
        IBM01145=1145,
        IBM01146=1146,
        IBM01147=1147,
        IBM01148=1148,
        IBM01149=1149,
        utf_16=1200,
        unicodeFFFE=1201,
        windows_1250=1250,
        windows_1251=1251,
        Windows_1252=1252,
        windows_1253=1253,
        windows_1254=1254,
        windows_1255=1255,
        windows_1256=1256,
        windows_1257=1257,
        windows_1258=1258,
        Johab=1361,
        macintosh=10000,
        x_mac_japanese=10001,
        x_mac_chinesetrad=10002,
        x_mac_korean=10003,
        x_mac_arabic=10004,
        x_mac_hebrew=10005,
        x_mac_greek=10006,
        x_mac_cyrillic=10007,
        x_mac_chinesesimp=10008,
        x_mac_romanian=10010,
        x_mac_ukrainian=10017,
        x_mac_thai=10021,
        x_mac_ce=10029,
        x_mac_icelandic=10079,
        x_mac_turkish=10081,
        x_mac_croatian=10082,
        utf_32=12000,
        utf_32BE=12001,
        x_Chinese_CNS=20000,
        x_cp20001=20001,
        x_Chinese_Eten=20002,
        x_cp20003=20003,
        x_cp20004=20004,
        x_cp20005=20005,
        x_IA5=20105,
        x_IA5_German=20106,
        x_IA5_Swedish=20107,
        x_IA5_Norwegian=20108,
        us_ascii=20127,
        x_cp20261=20261,
        x_cp20269=20269,
        IBM273=20273,
        IBM277=20277,
        IBM278=20278,
        IBM280=20280,
        IBM284=20284,
        IBM285=20285,
        IBM290=20290,
        IBM297=20297,
        IBM420=20420,
        IBM423=20423,
        IBM424=20424,
        x_EBCDIC_KoreanExtended=20833,
        IBM_Thai=20838,
        koi8_r=20866,
        IBM871=20871,
        IBM880=20880,
        IBM905=20905,
        IBM00924=20924,
        EUC_JP=20932,
        x_cp20936=20936,
        x_cp20949=20949,
        cp1025=21025,
        koi8_u=21866,
        iso_8859_1=28591,
        iso_8859_2=28592,
        iso_8859_3=28593,
        iso_8859_4=28594,
        iso_8859_5=28595,
        iso_8859_6=28596,
        iso_8859_7=28597,
        iso_8859_8=28598,
        iso_8859_9=28599,
        iso_8859_13=28603,
        iso_8859_15=28605,
        x_Europa=29001,
        iso_8859_8_i=38598,
        iso_2022_jp=50220,
        csISO2022JP=50221,
        iso_2022_kr=50225,
        x_cp50227=50227,
        euc_jp=51932,
        EUC_CN=51936,
        euc_kr=51949,
        hz_gb_2312=52936,
        GB18030=54936,
        x_iscii_de=57002,
        x_iscii_be=57003,
        x_iscii_ta=57004,
        x_iscii_te=57005,
        x_iscii_as=57006,
        x_iscii_or=57007,
        x_iscii_ka=57008,
        x_iscii_ma=57009,
        x_iscii_gu=57010,
        x_iscii_pa=57011,
        utf_7=65000,
        utf_8=65001
    };

     

     

     

     

     

    发表在 article | CodePage已关闭评论

    Delete Recovery Partition In Windows

    1. Run Command Prompt as Administrator.
    2. Launch Diskpart.
    3. select disk number
    4. list part
    5. Look for Recovery partition and note the number '#'.
    6. select part '#'
    7. del part override
    8. exit
    9. exit
    10. Launch Disk Management.
    11. Right-click OS partition, and expand.
    12. Reboot.

    ...

    发表在 windows | Delete Recovery Partition In Windows已关闭评论

    RAID 简述

     

    一.RAID定义

    RAID(Redundant
    Array of Independent Disk
    独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损

    失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发

    挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会
    受到损坏硬盘的影响。

    二、 RAID的几种工作模式(仅讨论 RAID0,RAID1,RAID5,RAID10这四种,这四种比较典型)

    1、RAID0 (又称为Stripe或Striping--分条)

    即Data Stripping数据分条技术。RAID 0可以把多块硬盘连成一个容量更大的硬盘群,可以提高磁 盘的性能和吞吐量。RAID 0没有冗余或错误修复能力,成本低,要求至少两个磁盘,一般只是在那些对数 据安全性要求不高的情况下才被使用。

    特点:

    容错性: 没有 冗余类型: 没有
    热备盘选项: 没有 读性能:
    随机写性能: 连续写性能:
    需要的磁盘数: 只需2个或2*N个(这里应该是多于两个硬盘都可以) 可用容量: 总的磁盘的容量
    典型应用: 无故障的迅速读写,要求安全性不高,如图形工作站等。

    RAID 0的工作方式:

    点击查看原图

    图1

    如图1所示:系统向 三个磁盘组成的逻辑硬盘(RADI 0 磁盘组)发出的I/O数据请求被转化为3项操作,其中的每一项操作都对应于一块物理硬盘。我们从图中可以清楚的看到通过建立RAID 0,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。

    从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。

    RAID 0的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。

    RAID 0具有的特点,使其特别适用于对性能要求较高,而对数据安全不太在乎的领域,如图形工作站等。对于个人用户,RAID 0也是提高硬盘存储性能的绝佳选择。


    算机技术发展迅速,但硬盘传输率也成了性能的瓶颈。怎么办?IDE RAID技术的成熟让我们轻松打造自己的超高速硬盘。在实际应用中,RAID
    0硬盘阵列能比普通IDE 7200转ATA
    133硬盘快得多,时至今日,在大多数的高端或者玩家主板上我们都能找到一颗PROMISE或者HighPoint的RAID芯片,同时发现它们提供的额
    外几个IDE接口。没错,RAID已经近在眼前,难道你甘心放弃RAID为我们带来的性能提升吗?答案当然是否定的!

    实用 的IDE RAID

    RAID
    可以通过软件或硬件实现。像Windows
    2000就能够提供软件的RAID功能,但是这样需要消耗不小的CPU资源,降低整机性能。而硬件实现则是一般由RAID卡实现的,高档的SCSI
    RAID卡有着自己专用的缓存和I/O处理器,但是对于家庭用户来说这样的开销显然是承受不了的,毕竟为了实现RAID买两个或者更多的HDD已经相当不
    容易了。我们还有一种折中的办法——IDE RAID。或许这才是普通人最容易接受的方法。虽然IDE
    RAID在功能和性能上都有所折中,但相对于低廉的价格,普通用户看来并不在意。

    为什么要用RAID 0

    RAID
    0至少需要两块硬盘才能够实现,它的容量为组成这个系统的各个硬盘容量之和,这几块硬盘的容量要相同,在家用IDE
    RAID中一般级联两块硬盘,一定要用同型号同容量的硬盘。RAID
    0模式向硬盘写入数据的时候把数据一分为二,分别写入两块硬盘,读取数据的时候则反之,这样的话,每块硬盘只要负担一半的数据传输任务,得到的结果也就是
    速度的增加。

    实现方 式:

    (1)、RAID 0最简单方式(我觉得这个方式不是它本意所提倡的)


    是把x块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以软件的方式串联在一起,形成一个独立的逻辑驱动器,容量是单独硬盘的
    x倍,在电脑数据写时被依次写入到各磁盘 中,当一块磁盘的空间用尽时,数据就会被自动写入到下一块磁盘中,它的好处是可以增加磁盘的容量。

    速度与其中任何一块磁盘的速度相同,如果其中的任何一块磁盘出现故障,整个系统将会受到破坏,可靠

    性是单独使用一块硬盘的1/n。

    (2)、RAID 0的另一方式(常指的RAID 0就是指的这个)

    是用n块硬盘选择合理的带区大小创建带区集,最好是为每一块硬盘都配备一个专门的磁盘控制器,在 电脑数据读写时同时向n块磁盘读写数据,速度提升n倍。提高系统的性能。

    2、RAID 1 (又称为Mirror或Mirroring--镜像)

    RAID

    1称为磁盘镜像:把一个磁盘的数据镜像到另一个磁盘上,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,具有很高的数据冗余能力,但磁盘利用
    率为50%,故成本最高,多用在保存关键性的重要数据的场合。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。

    RAID 1有以下特点

    (1)、RAID 1的每一个磁盘都具有一个对应的镜像盘,任何时候数据都同步镜像,系统可以从一组 镜像盘中的任何一个磁盘读取数据。

    (2)、磁盘所能使用的空间只有磁盘容量总和的一半,系统成本高。

    (3)、只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。

    (4)、出现硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。

    (5)、更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。

    (6)、RAID 1磁盘控制器的负载相当大,用多个磁盘控制器可以提高数据的安全性和可用性。

    RAID 1的工作方式:

    点击查看原图

    图2


    图2所
    示:当读取数据时,系统先从RAID1的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘

    上的数据,不会造成用户工作任务的中断。当然,我们应当及时地更换损坏的硬盘并利用备份数据重新建立Mirror,避免备份盘在发生损坏时,造成不可挽回
    的数据损失。

    raid 1的优缺点


    于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID
    1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而Mirror(镜像)的磁盘空间利用率低,存储成本高。
    Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域。

    3、 RAID 5 (可以理解为是RAID 0和RAID 1的折衷方案,但没有完全使用RAID 1镜像理念,而是使用了“奇偶校验信息”来作为数据恢复的方式,与下面的RAID10不同。)

    容错性: 冗余类型: 奇偶校验
    热备盘选项: 读性能:
    随机写性能: 连续写性能:
    需要的磁盘数: 三个或更多
    可用容量: (n-1)/n的总磁盘容量(n为磁盘数)
    典型应用: 随机数据传输要求安全性高,如金融、数据库、存储等。

    点击查看原图

    图3

    RAID
    5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 以四个硬盘组成的RAID
    5为例,其数据存储方式如图4所示:图中,Ap为A1,A2和A3的奇偶校验信息,其它以此类推。由图中可以看出,RAID
    5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘
    上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

    RAID
    5可以理解为是RAID 0和RAID 1的折衷方案。RAID
    5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID
    0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID
    5的磁盘空间利用率要比RAID 1高,存储成本相对较低。

    4、 RAID 5 (可以理解为是RAID 0和RAID 1的折衷方案,但没有完全使用RAID 1镜像理念,而是使用了“奇偶校验信息”来作为数据恢复的方式)

    点击查看原图

    图4

    RAID10
    也被称为镜象阵列条带。象RAID0一样,数据跨磁盘抽取;象RAID1一样,每个磁盘都有一个镜象磁盘, 所以RAID 10的另一种会说法是
    RAID
    0+1。RAID10提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10提

    供最好的性能。使用RAID10,可以获得更好的可靠性,因为即使两个物理驱动器发生故障(每个阵列中一个),数据仍然可以得到保护。RAID10需要4
    + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半(或更小, 如果磁盘大小不一)的磁盘用量, 例如 4 个 250G
    的硬盘使用RAID10 阵列, 实际容量是 500G。

    RAID总结:

    类型 读写性能 安全性 磁盘利用率 成本 应用方面
    RAID0 最好(因并行性而提高) 最差(完全无安全保障) 最高(100%) 最低

    个人用户

    RAID1 读和单个磁盘无分别,写则要写两边 最高(提供数据的百分之百备份) 差(50%) 最高 适用于存放重要数据,如服务器和数据库存储等领域。
    RAID5 读:RAID 5=RAID 0(相近似的数据读取速度)

     

    写:RAID 5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入)

    RAID 5 RAID 5
    >
    RAID 1
    RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。
    RAID10 读:RAID10=RAID0

     

    写:RAID10=RAID1

    RAID10=RAID1 RAID10

    RAID1(50%)
    RAID10

    RAID1
    集合了RAID0,RAID1的优点,但是空间上由于使用镜像,而不是类似RAID5的“奇偶校验信息”,磁盘利用率一样是50%

     

     

    ...

     

    发表在 storage | 标签为 | RAID 简述已关闭评论

    openssl cert request

    openssl req -newkey rsa:2048 -keyout name.key -out name.csr
    openssl rsa -in name.key -out name.rsa

    openssl pkcs12 -export -in name.crt -out name.p12 -inkey name.key
    openssl pkcs12 -in name.pfx -out name.crt

     

    Convert your files into PEM format

    The private key: if it not in PEM format, use the following command line to convert it:
    openssl rsa -in private-key-name -outform PEM

    Your certificate: if it not in PEM format, use the following command line to convert it:
    openssl x509 -inform PEM -in your-certificate

    The certification chain: if it not in PEM format, use the following command line to convert it:
    openssl x509 -inform PEM -in certification-chain-file-name

     

     

     

    发表在 network | 标签为 | openssl cert request已关闭评论

    C# UDP 大数据分包传输

    如果需要使用UDP传输较大数据,例如传输10M的图片,这突破了UDP的设计原则。UDP的设计是基于"datagram",也就是它假设你发送的每个数据包都能包含在单一的包内。并且设定UDP数据包的最大长度受基础网络协议的限制。

    点击查看原图

    UDP数据包的理论最大长度限制是 65535 bytes,这包含 8 bytes 数据包头和 65527 bytes 数据。但如果基于IPv4网络传输,则还需减去 20 bytes 的IP数据包头。
    则单一的UDP数据包可传输的数据最大长度为:

    MaxUdpDataLength = 65535 - 8 - 20 = 65507 bytes

    这就需要实现UDP包的分包传输和接收组包功能。

     

    分包功能

    /// <summary>
    /// UDP数据包分割器
    /// </summary>
    public static class UdpPacketSplitter
    {
      /// <summary>
      /// 分割UDP数据包
      /// </summary>
      /// <param name="sequence">UDP数据包所持有的序号</param>
      /// <param name="datagram">被分割的UDP数据包</param>
      /// <param name="chunkLength">分割块的长度</param>
      /// <returns>
      /// 分割后的UDP数据包列表
      /// </returns>
      public static ICollection<UdpPacket> Split(long sequence, byte[] datagram, int chunkLength)
      {
        if (datagram == null)
          throw new ArgumentNullException("datagram");
    
        List<UdpPacket> packets = new List<UdpPacket>();
    
        int chunks = datagram.Length / chunkLength;
        int remainder = datagram.Length % chunkLength;
        int total = chunks;
        if (remainder > 0) total++;
    
        for (int i = 1; i <= chunks; i++)
        {
          byte[] chunk = new byte[chunkLength];
          Buffer.BlockCopy(datagram, (i - 1) * chunkLength, chunk, 0, chunkLength);
          packets.Add(new UdpPacket(sequence, total, i, chunk, chunkLength));
        }
        if (remainder > 0)
        {
          int length = datagram.Length - (chunkLength * chunks);
          byte[] chunk = new byte[length];
          Buffer.BlockCopy(datagram, chunkLength * chunks, chunk, 0, length);
          packets.Add(new UdpPacket(sequence, total, total, chunk, length));
        }
    
        return packets;
      }
    }

    ..............................

    发送分包

    ..............................

    private void WorkThread()
    {
      while (IsRunning)
      {
        waiter.WaitOne();
        waiter.Reset();
    
        while (queue.Count > 0)
        {
          StreamPacket packet = null;
          if (queue.TryDequeue(out packet))
          {
            RtpPacket rtpPacket = RtpPacket.FromImage(
              RtpPayloadType.JPEG, 
              packet.SequenceNumber, 
              (long)Epoch.GetDateTimeTotalMillisecondsByYesterday(packet.Timestamp),
              packet.Frame);
    
            // max UDP packet length limited to 65,535 bytes
            byte[] datagram = rtpPacket.ToArray(); 
            packet.Frame.Dispose();
    
            // split udp packet to many packets 
            // to reduce the size to 65507 limit by underlying IPv4 protocol
            ICollection<UdpPacket> udpPackets 
              = UdpPacketSplitter.Split(
                packet.SequenceNumber, 
                datagram, 
                65507 - UdpPacket.HeaderSize);
            foreach (var udpPacket in udpPackets)
            {
              byte[] udpPacketDatagram = udpPacket.ToArray();
              // async sending
              udpClient.BeginSend(
                udpPacketDatagram, udpPacketDatagram.Length,
                packet.Destination.Address,
                packet.Destination.Port,
                SendCompleted, udpClient);
            }
          }
        }
      }
    }

    接收组包功能

    ..............................

    private void OnDatagramReceived(object sender, UdpDatagramReceivedEventArgs<byte[]> e)
    {
      try
      {
        UdpPacket udpPacket = UdpPacket.FromArray(e.Datagram);
    
        if (udpPacket.Total == 1)
        {
          RtpPacket packet = new RtpPacket(udpPacket.Payload, udpPacket.PayloadSize);
          Bitmap bitmap = packet.ToBitmap();
          RaiseNewFrameEvent(
            bitmap, Epoch.GetDateTimeByYesterdayTotalMilliseconds(packet.Timestamp));
        }
        else
        {
          // rearrange packets to one packet
          if (packetCache.ContainsKey(udpPacket.Sequence))
          {
            List<UdpPacket> udpPackets = null;
            if (packetCache.TryGetValue(udpPacket.Sequence, out udpPackets))
            {
              udpPackets.Add(udpPacket);
    
              if (udpPackets.Count == udpPacket.Total)
              {
                packetCache.TryRemove(udpPacket.Sequence, out udpPackets);
    
                udpPackets = udpPackets.OrderBy(u => u.Order).ToList();
                int rtpPacketLength = udpPackets.Sum(u => u.PayloadSize);
                int maxPacketLength = udpPackets.Select(u => u.PayloadSize).Max();
    
                byte[] rtpPacket = new byte[rtpPacketLength];
                foreach (var item in udpPackets)
                {
                  Buffer.BlockCopy(
                    item.Payload, 0, rtpPacket, 
                    (item.Order - 1) * maxPacketLength, item.PayloadSize);
                }
    
                RtpPacket packet = new RtpPacket(rtpPacket, rtpPacket.Length);
                Bitmap bitmap = packet.ToBitmap();
                RaiseNewFrameEvent(
                  bitmap, 
                  Epoch.GetDateTimeByYesterdayTotalMilliseconds(packet.Timestamp));
    
                packetCache.Clear();
              }
            }
          }
          else
          {
            List<UdpPacket> udpPackets = new List<UdpPacket>();
            udpPackets.Add(udpPacket);
            packetCache.AddOrUpdate(
              udpPacket.Sequence, 
              udpPackets, (k, v) => { return udpPackets; });
          }
        }
      }
      catch (Exception ex)
      {
        RaiseVideoSourceExceptionEvent(ex.Message);
      }
    }

    .......................

     

     

     

    ...

    发表在 .net | C# UDP 大数据分包传输已关闭评论

    单播、多播(组播)、广播

    单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?

    1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递
    只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮
    件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to
    Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。


    2.多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点
    传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,
    但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。
      IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。
    Windows 2000中的DHCP管理器支持多播IP地址的自动分配。


    3.广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了
    子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其
    工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身
    就有隔离广播风暴的作用。
      广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,
    一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。
      在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

    =================================================================

    当前的网络中有三种通讯模式:单播、广播、组播,其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。

    1.单播:
    主机之间一对一的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同
    的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用单播模式,具体的说就是IP单播协议。网络中的路由器和交换机根据其目标地
    址选择传输路径,将IP单播数据传送到其指定的目的地。

    单播的优点:
    1)服务器及时响应客户机的请求
    2)服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。

    单播的缺点:
    1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
    2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。

    2.广播:
    主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径
    选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据
    网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。

    广播的优点:
    1)网络设备简单,维护简单,布网成本低廉
    2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。

    广播的缺点:
    1)无法针对每个客户的要求和时间及时提供个性化服务。
    2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以
    提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服
    务。

    3)广播禁止允许在Internet宽带网上传输。

    3.组播:
    主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可
    以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个
    有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。

    组播的优点:
    1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
    2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。
    3)此协议和单播协议一样允许在Internet宽带网上传输。

    组播的缺点:
    1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。

    2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。

    其它1:

    IP组播通信需要一个特殊的组播地址,IP组播地址是一组D类IP地址,范围从224.0.0.0 到
    239.255.255.255。其中还有很多地址是为特殊的目的保留的。224.0.0.0到224.0.0.255的地址最好不要用,因为他们大多是
    为了特殊的目的保持的(比如IGMP协议)。

    一般建议范围: 239.0.0.0~239.255.255.255


    其它2:

    RIP协议基于UDP,端口号520;(RIPv1使用广播、RIPv2组播地址224.0.0.9、RIPng组播地址FF02::9)
    BGP基于TCP,端口号179;
    L2TP基于TCP,端口号1701;
    PPTP基于TCP,端口号1723;
    OSPF基于IP,协议号89;(组播地址224.0.0.5(全部路由器)、224.0.0.6(指定路由器DR))
    EIGRP基于IP,协议号88;(组播地址224.0.0.9)
    ISIS,使用CLNS(IOS/OSI),集成ISIS属于三层,不存在端口号和协议号的概念;
    组播地址,或称为主机组地址,由D类IP地址标记。
    D类IP地址的最高四位为“1110”,起范围从224.0.0.0到239.255.255.255。
    部分D类地址被保留,用作永久组的地址,这段地址从224.0.0.0-224.0.0.255。

    224.0.0.4 - 网段中所有的DVMRP路由器

    地址

     

    用途

     

    介绍

     

    224.0.0.1

     

    本网段所有的主机(All Hosts

    网段中所有支持组播的主机

    [RFC 1112, JBP]

     

    224.0.0.2

     

    相邻的所有的路由器(All Multicast Routers

    网段中所有支持组播的路由器

    [JBP]

     

    224.0.0.5

     

    传送OSPF协议用(OSPF Routers

    所有的OSPF路由器

    [RFC 1583, JXM1]

     

    224.0.0.6

     

    OSPF Designated Routers

    所有的OSPF指派路由器

    [RFC 1583, JXM1]

     

    224.0.0.9

     

    RIP2 Routers
    所有RIPv2路由器

     

    [RFC 1723, SM11]

     

    224.0.0.12

     

    DHCP Server/Relay Agent

     

    [RFC 1884]

     

    224.0.0.13

     

    All PIM Routers

    所有PIM路由器

    [Farinacci]

     

    参考:

    http://baike.baidu.com/view/492256.htm

    http://baike.baidu.com/view/1871353.htm

     

     

     

    发表在 network | 标签为 , , | 单播、多播(组播)、广播已关闭评论

    SVN 一些客户端命令选项

    全局选项:

    --username ARG

      指定用户名称 ARG

    --password ARG

      指定密码 ARG

    --no-auth-cache

      不要缓存用户认证令牌

    --non-interactive

      不要交互提示

    --trust-server-cert

      不提示的接受未知的证书颁发机构发行的 SSL 服务器证书(只用于选项“--non-interactive”)

    --config-dir ARG

      从目录 ARG 读取用户配置文件

    --config-option ARG

      以下属格式设置用户配置选项:

        FILE:SECTION:OPTION=[VALUE]

      例如:

        servers:global:http-library=serf

    svn
    add

      把文件以及目录的名称添加到版本控制系统。他们会在下次提交时被添加到项目仓库中去。

      svn
    add path...

    选项:

    --auto-props

      再添加它们的时候自动设置文件的属性。

    --no-auto-props

      禁用自动设置属性。

    svn
    blame (ann, annotate, praise)

      显示文件每行的版本以及作者信息。

      svn
    blame target...

    选项:

    --revision,
    -r rev

      如果指定的rev是单个版本,显示该版本的作者信息。如果指定的版本范围rev1:rev2,显示rev2版本的作者信息,但是只检查版本到rev1(要使得这命令有意义,rev1必须小于rev2)。

    svn
    cat

      输出指定文件或者URL的内容。

      svn
    cat target...

    选项:

    --revision,
    -r rev

      输出版本revtarget的内容。

    svn
    checkout (co)

      从项目仓库签出一个工作拷贝。

      svn
    checkout url... path

      签出给定URL。如果没有指定path参数,签出的本地目录名使用URL的基础名称(base
    name
    )。如果指定了path,而且URL参数只有一个,签出到该目录。如果指定了path,但是有多个,签出到path目录之下的子目录中,目录名使用对应URL的基础名称。

    选项:

    --revision,
    -r rev

      指定要签出的版本

    svn
    cleanup

      清理工作拷贝,移除锁,完成未完成的操作,等等。

      svn
    cleanup path...

    svn
    commit (ci)

      把改动从你的工作拷贝发送到项目仓库。

      svn
    commit path...

    选项:

    --message,
    -m msg

      使用msg作为提交日志消息。

    --file,
    -F file

      使用file的内容作为提交日志的消息。

    --no-unlock

      不要在提交的时候释放锁。

    svn
    copy (cp)

      在工作拷贝或者项目仓库中制造包括历史在内的复本。

      svn
    copy src... dest

      当复制多个源时,它们作为dest的子节点增加,
    dest
    必须是目录。srcdest可以是工作副本路径(WC)或版本库地址(URL):

    src dest 效果
    WC WC 拷贝并添加(包括历史)
    WC URL 立即提交WC的拷贝到URL
    URL WC 签出URLWC,添加
    URL URL 完全服务器端拷贝,用于制作分支和标签等

    选项:

    --revision,
    -r rev

      指定要拷贝的src的版本。只在src是版本库地址URL时才有意义。

    svn
    delete (del, remove, rm)

      从版本控制系统中移除文件或者目录。

      svn
    delete target...

      从项目仓库删除文件或者目录。如果target是工作拷贝中的文件或者目录,它被工作拷贝中移除并且在下次提交时删除掉。如果target是项目仓库URL,则会通过一次立即的提交从项目仓库中删除。

    选项:

    --message,
    -m msg

      使用msg作为提交日志信息。

    --file,
    -F file

      使用file的内容作为提交日志信息。

    svn
    diff (di)

      显示两个路径之间的差异。

      1.
    svn diff -r rev1:rev2 target...

      2.
    svn diff oldurl newurl

      在第一种格式中,显示target在两个版本rev1rev2之间的改动。target可以是工作拷贝路径或者URL

      在第二种格式中,显示最新版本的oldurlnewurl之间的差异。

    选项:

    --old
    arg

      使用arg作为老一些的目标

    --new
    arg

      使用arg作为新一些的目标

    svn
    export

      创建目录树的一个无版本记录的拷贝。

      svn
    export URL path

      从项目仓库的指定URL到处一个干净的目录树到path中,如果指定了rev参数,到处rev版本,否则到处最新版本。如果path被省略了,URL的基本名称将被作为本地目录的名称。

    选项:

    --revision,
    -r rev

      指定到处项目仓库的版本。

    --native-eol
    style

      对于有本地svn:eol-style属性的文件,使用不同的行结尾标识符而不是系统标准的文件行结尾标识符。style必须是LFCR或者CRLF之中的一个。

    svn
    import

      提交一个无版本的文件或者目录到项目仓库中。

      svn
    import path URL

      递归提交path的一个拷贝到URL。如果path被省略了,将默认提交当前目录。父目录会根据需要在项目仓库中创建。

    选项:

    --auto-props

      在导入过程中自动设置属性给文件。

    --no-auto-props

      对于导入的文件禁用自动设置属性。

    svn
    info

      显示文件或者目录的信息。

      svn
    info path...

      打印每个path的信息。

    选项:

    --recursive,
    -r

      递归显示目录的信息

    svn
    list (ls)

      列出项目仓库中的目录条目。

      svn
    list target...

      如果是在项目仓库中,列出每个target文件以及每个target目录的内容。如果target是在工作拷贝中,会使用对应的项目仓库URL

    选项:

    --verbose,
    -v

      显示额外信息。

    svn
    lock

      锁住文件让其他用户不能提交改动。

      svn
    lock target

      与项目仓库服务器联系,获得对一个或者多个工作拷贝文件的锁。一旦锁住了,其他用户就不能提交改动该文件,除非锁被释放或者被破坏。

    选项:

    --message,
    -m msg

      使用msg作为锁消息信息。

    --force

      强制从其他用户或者工作拷贝获得锁。

    svn
    log

      显示一些版本或者文件的日志信息。

      svn
    log target

      打印本地路径或者项目仓库URL的日志信息。对于每个本地路径,默认的版本范围是BASE:1,对于URL默认的版本范围是HEAD:1

    选项:

    --revision,
    -r rev

      如果rev是单个版本,只显示该版本的日志条目。如果rev是版本范围,显示这些版本的日志条目,

    --verbose,
    -v

      打印每条日志消息所影响的路径。

    --stop-on-copy

      在遍历历史的时候不要穿越拷贝(对于查找分支的起点很有用)。

    svn
    merge

      把两个来源的差异应用给工作拷贝路径。

      1.
    svn merge sourceURL1@rev1 sourceURL2@rev2 WCPath

      2.
    svn merge sourceWCPath1@rev1 sourceWCPath2@rev2 WCPath

      3.
    svn merge -r rev1:rev2 SOURCE WCPath

      第一个格式中,源URL被指定了版本rev1rev2.这是两个要被比较的源。如果没有指明版本,默认使用最新版本。

      在第二个格式中,对应工作拷贝的URL被指定作为要比较源。版本号必须指定。

      在第三种格式中,SOURCE可以是URL或者工作拷贝中条目,使用工作拷贝的话会使用对应的URL代替。这个URL会被比较它的rev1rev2版本。

      WCPath是接受这些改动的工作拷贝路径。如果WCPath被省略,假定就是当前目录,除非来源尤一个唯一的base
    name
    匹配了当前目录的文件,如果是这样的话改动就会应用于那个文件。

    选项:

    --diff3-cmd
    cmd

      使用cmd作为合并命令。

    --ignore-ancestry

      在计算合并时忽略过去历史。

    svn
    mkdir

      创建版本控制下的新目录。

      1.
    svn mkdir PATH...

      2.
    svn mkdir URL...

      在第一种情况下,每个以工作副本PATH指定的目录,都会在本地创建,并且加入增加调度,直到下次提交。

      在第二种情况中,每个以URL指定的目录,都会通过立即提交在版本库中创建。

      在这两种情况下,所有的中间目录都必须事先存在,除非使用--parents选项。

    svn
    move (mv, rename, ren)

      移动或者重命名工作拷贝或者项目仓库中的文件或者目录。

      svn
    move src... dest

      当移动多个源时,它们作为dest的子节点添加,dest必须是目录。本命令等同于先“copy”,然后“delete”srcdest可以是工作拷贝路径或者项目仓库URL。在工作拷贝中,移动被执行并且新的位置于下次提交时添加。对于项目仓库URL,一个完全服务器端的重名名操作被立即执行。

    选项:

    --revision,
    -r rev

      使用版本rev作为源来执行这次移动。

    svn
    propdel (pdel, pd)

      删除文件或者目录的属性。

      svn
    propdel propname path...

      在本地工作拷贝中删除pathpropname属性

    svn
    propedit (pedit, pe)

      编辑文件或者目录的属性。

      svn
    propedit propname path..

      打开一个外部的编辑器在本地工作拷贝中编辑pathpropname属性。

    svn
    propget (pget, pg)

      打印文件或者目录的属性。

      svn
    propget propname path...

      打印每个pathpropname的内容。本子命令默认会在属性内容加上额外的换行符,得到美观的输出。另外,当同时处理多个路径时,每一个属性内容会在开头增加上它所对应的路径。

    选项:

    --strict

      禁用额外的换行和其他的美化措施。

    svn
    proplist (plist, pl)

      列出文件或者路径的所有属性。

      svn
    proplist path...

      列出path的所有属性。

    选项:

    --verbose,
    -v

      打印额外的信息。

    --recursive,
    -R

      递归下降。

    --revision,
    -r rev

      列出path在版本rev定义的属性。

    svn
    propset (pset, ps)

      设置文件或者路径的属性。

      svn
    propset propname propval path...

      对于path,设置值propvalpropname属性。如果propval没有指定,你必须使用-F选项来指定一个文件,其内容会作为属性的值设置给属性。

    选项:

    --file,
    -F file

      读取file的内容,使用它作为属性值。

    --recursive,
    -R

      递归下降。

    --encoding
    enc

      把值作为使用enc编码的字符集。

    svn
    resolve

      解决工作副本中目录或文件的冲突。

      resolve
    --accept=ARG [path...]

      注意:当前需要选项—accept

    选项:

    --targets
    ARG

      传递文件ARG内容为附件参数

    --recursive,
    -R

      递归下降

    --accept
    ARG

      指定自动解决冲突动作的源(base,
    working, mine-conflict, theirs-conflict, mine-full, theirs-full

    svn
    resolved

      移除工作拷贝文件或者目录的冲突状态。

      svn
    resolved path...

      标记之前包含冲突的文件为“已解决”。注意这个命令不会从语意上解决冲突或者移除冲突标记;它只是移除冲突相关的文件并且允许path被再次提交。它已经过时,被
    svn
    resolve --accept working”
    取代。

    选项:

    --recursive,
    -R

      递归下降。

    svn
    revert

      恢复工作拷贝中的文件(撤销最新的本地修改)。

      svn
    revert path...

      这个命令不许要网络连接并且撤销你对path所做的一切改动。它不恢复被删除的目录。它会它解除任何冲突的状态。

    选项:

    --recursive,
    -R

      递归下降

    svn
    status (stat, st)

      打印工作拷贝中文件和目录的状态。

      svn
    status path...

      没有任何参数,只是打印本地修改过得条目(无须访问网络)。

      加-u参数,添加工作版本和服务器过期信息。

      加-v参数,打印每个条目完整的版本信息。

      输出中的前七列的宽度均为一个字符。

      第一列:指出条目是被添加、删除还是修改过了

        “
    无修改

        A 增加

        C 冲突

        D 删除

        I 忽略

        M 改变

        R 替换

        X 未纳入版本控制的目录,被外部引用的目录所创建

        ? 未纳入版本控制

        ! 该项目已遗失(被非svn命令删除)或不完整

        ~ 版本控制下的项目与其它类型的项目重名

      第二列:显示目录或文件的属性状态

        “
    无修改

        C 冲突

        M 改变

      第三列:工作拷贝目录是否被锁定

        “
    未锁定

        L 锁定

      第四列:已调度的提交是否包含副本历史

        “
    没有历史

        + 包含历史

      第五列:该条目相对其父目录是否已切换,或者是外部引用的文件

        “
    正常

        S 已切换

        X 被外部引用创建的文件

      第六列:版本库锁定标记

        (没有-u

        “
    没有锁定标记

        K 存在锁定标记

        (使用-u

        “
    没有在版本库中锁定,没有锁定标记

        K 在版本库中被锁定,存在锁定标记

        O 在版本库中被锁定,锁定标记在一些其他工作副本中

        T 在版本库中被锁定,存在锁定标记但已被窃取

        B 没有在版本库中被锁定,存在锁定标记但已被破坏

      第七列:项目冲突标记

        “
    正常

        C 树冲突

        如果项目包含于树冲突之中,在项目状态行后会附加行,说明冲突的种类。

      是否过期的信息出现的位置是第九栏(-u并用时)

        “
    工作拷贝是最新版的

        * 服务器上有更新版本

      剩余的栏位皆为变动宽度,并以空白隔开:

        工作版本号(使用-u-v时;被复制时显示“-”)

        最后提交的版本与最后提交的作者(使用-v)

        工作副本路径总是最后一栏,所以它可以包含空白字符。

    选项:

    --show-update,
    -u

      联系服务器显示更新信息。

    --verbose,
    -v

      打印额外的信息

    --non-recursive,
    -N

      只操作单个目录

    --no-ignore

      忽视默认设置和svn:ignore属性设置的忽略项

    svn
    switch (sw)

      把工作拷贝转向其他URL

      svn
    switch URL path

      更新工作拷贝让其使用项目仓库的新URL。这个行为类似svn
    update
    ,而且是一种把工作拷贝转向到同一项目仓库中的分支或者标签的办法。

    选项:

    --revision,
    -r rev

      转向到版本rev

    --non-recursive,
    -N

      只操作单个目录

    --diff3-cmd
    cmd

      使用cmd作为合并命令

    svn
    unlock

      解开工作拷贝文件或者项目仓库URL的锁。

      svn
    unlock target...

      释放当前对target的锁,以让其他用户可以提交改动。

    选项:

    --force

      破坏现有对targe的锁,甚至它不是被当前工作拷贝所拥有的。

    svn
    update (up)

      把改动从项目版本库带到工作拷贝来。

      svn
    update path...

      如果没有指定版本,把工作拷贝更新为新最新版本。否则把宫组拷贝同步为-r选项指定的版本。

      对于每个更新过的条目会有单独一行,开头有一个字符表示做过的动作。这些字符有一下含义:

      A 添加

      D 删除

      U 更新

      C 冲突

      M 合并

      第一列的字符表示了对实际文件的更新,对于文件属性的更新被列到第二列。

    选项:

    --revision,
    -r rev

      更新到版本rev

    --non-recrusive,
    -N

      只操作单个目录

    --diff3-cmd
    cmd

      使用cmd作为合并命令

    发表在 technologys | SVN 一些客户端命令选项已关闭评论

    一张服务架构图

    一张网络摘取的服务架构图

    点击查看原图

    发表在 article | 一张服务架构图已关闭评论

    IP - A、B、C、D、E - 网段 - 网络

    IP地址分为A,B,C,D,E五类。

    网络号:用于识别主机所在的网络;

    主机号:用于识别该网络中的主机。

    其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。

    IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。

    其中A类、B类、和C类这三类地址用于TCP/IP节点,其它两类D类和E类被用于特殊用途。

    A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,

    A类:0打头

    B类:10打头
    C类:110打头
    D类:1110打头
    E类:11110打头
    A、B、C、D、E三类IP地址的特征:当将IP地址写成十进制形式时:
    A类:1.0.0.1—126.155.255.254
    B类:128.0.0.1—191.255.255.254
    C类:192.0.0.1—223.255.255.254
    D类:224.0.0.1—239.255.255.254
    E类:240.0.0.1—255.255.255.254

     

    1. A类地址
    ⑴ A类地址第1字节为网络地址,其它3个字节为主机地址。
    ⑵ A类地址范围:1.0.0.1—126.155.255.254
    ⑶ A类地址中的私有地址和保留地址:
    10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
    127.X.X.X是保留地址,用做循环测试用的。

    2. B类地址
    ⑴ B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。
    ⑵ B类地址范围:128.0.0.1—191.255.255.254
    ⑶ B类地址的私有地址和保留地址
    172.16.0.0—172.31.255.255是私有地址
    169.254.X.X是保留地址。如果IP地址是自动获取IP地址,而网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。

    3. C类地址
    ⑴ C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
    ⑵ C类地址范围:192.0.0.1—223.255.255.254
    ⑶ C类地址中的私有地址:
    192.168.X.X是私有地址。

    4. D类地址
    ⑴ D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
    ⑵ D类地址范围:224.0.0.1—239.255.255.254

    5. E类地址
    ⑴ E类地址也不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
    ⑵ E类地址范围:240.0.0.1—255.255.255.254

    其它:

    地址格式为:IP地址=网络地址+主机地址 或 IP地址=网络地址+子网地址+主机地址。

    网络地址是由ICANN(the Internet Corporation for Assigned Names and Numbers)分配,下级有负责
    北美地区的InterNIC
    负责欧洲地区的RIPENIC
    负责亚太地区的APNIC
    目的是为了保证网络地址的全球唯一性。主机地址是由各个网络的系统管理员分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了IP地址的全球唯一性。

    点击查看原图

     

    Remarks:
    192.168.0.0 - 192.168.255.255 (192.168/16 prefix)    / 256*256-2 = 65534
    172.16.0.0 - 172.31.255.255 (172.16/12 prefix)    / 16*256*256-2 = 1048574
    10.0.0.0 - 10.255.255.255 (10/8 prefix)    / 256*256*256-2 = 16777214

    links:
    http://tool.520101.com/wangluo/ipjisuan/
    https://tools.ietf.org/html/rfc4632

    notation       addrs/block      # blocks
    --------       -----------     ----------
    n.n.n.n/32               1     4294967296    "host route"
    n.n.n.x/31               2     2147483648    "p2p link"
    n.n.n.x/30               4     1073741824
    n.n.n.x/29               8      536870912
    n.n.n.x/28              16      268435456
    n.n.n.x/27              32      134217728
    n.n.n.x/26              64       67108864
    n.n.n.x/25             128       33554432
    n.n.n.0/24             256       16777216    legacy "Class C"
    n.n.x.0/23             512        8388608
    n.n.x.0/22            1024        4194304
    n.n.x.0/21            2048        2097152
    n.n.x.0/20            4096        1048576
    n.n.x.0/19            8192         524288
    n.n.x.0/18           16384         262144
    n.n.x.0/17           32768         131072
    n.n.0.0/16           65536          65536    legacy "Class B"
    n.x.0.0/15          131072          32768
    n.x.0.0/14          262144          16384
    n.x.0.0/13          524288           8192
    n.x.0.0/12         1048576           4096
    n.x.0.0/11         2097152           2048
    n.x.0.0/10         4194304           1024
    n.x.0.0/9          8388608            512
    n.0.0.0/8         16777216            256    legacy "Class A"
    x.0.0.0/7         33554432            128
    x.0.0.0/6         67108864             64
    x.0.0.0/5        134217728             32
    x.0.0.0/4        268435456             16
    x.0.0.0/3        536870912              8
    x.0.0.0/2       1073741824              4
    x.0.0.0/1       2147483648              2
    0.0.0.0/0       4294967296              1    "default route"
    

    RFC1918:
    The Internet Assigned Numbers Authority (IANA) has reserved the following three blocks of the IP address space for private internets:
    10.0.0.0 - 10.255.255.255 (10/8 prefix)
    172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
    192.168.0.0 - 192.168.255.255 (192.168/16 prefix)

    RFC文档:
    RFC4291: IP Version 6 Addressing Architecture
    RFC2606: Reserved Top Level DNS Names
    RFC6761: Special-Use Domain Names
    RFC5735: Special Use IPv4 Addresses

    #################################################

    Private IP Address Ranges

    Address ranges below are reserved by IANA for private intranets, and not routable to the Internet.
    For additional information, see RFC 1918.

    10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8 prefix)
    172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12 prefix)
    192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16 prefix)

    Reserved and special use addresses:

    0.0.0.0/8 - Current network (only valid as source address) RFC 1700
    127.0.0.0 is reserved for loopback and IPC on the localhost.
    127.0.0.1 ~ 127.255.255.254 (127.0.0.0/8) - loopback IP addresses (refers to self) RFC 5735
    192.0.0.0/24 - reserved (IANA) RFC 5735
    192.88.99.0/24 - IPv6 to IPv4 relay. RFC 3068
    198.18.0.0/15 - network benchmark tests. RFC 2544
    198.51.100.0/24 - TEST-NET-2. RFC 5737
    203.0.113.0/24 - TEST-NET-3. RFC 5737
    224.0.0.0 ~ 239.255.255.255 (224.0.0.0/4) reserved for multicast addresses. RFC 3171
    240.0.0.0/4 - reserved (former Class E network) RFC 1700
    255.255.255.255 is the limited broadcast address (limited to all other nodes on the LAN) RFC 919

    255 in any part of the IP is reserved for broadcast addressing
    0.0.0.0 in routing context means the default route (to "the rest of" the internet) RFC 1700
    0.0.0.0 in the context of firewalls means "all addresses of the local machine" RFC 1700

     

     

     

    发表在 network | 标签为 , , | IP - A、B、C、D、E - 网段 - 网络已关闭评论

    C# UDP组播

    //组播代码

    using System;

    using System.Collections.Generic;

    using System.Linq;using System.Text;

    using System.Net;using System.Net.Sockets;

    using System.Threading;

    namespace Test {

        class Program     {
            static void Main(string[] args)
            {
                UdpClient client = new UdpClient(5566);
                client.JoinMulticastGroup(IPAddress.Parse("234.5.6.7"));
                IPEndPoint multicast = new IPEndPoint(IPAddress.Parse("234.5.6.7"), 7788);
                byte[] buf = Encoding.Default.GetBytes("Hello from multicast");
                Thread t = new Thread(new ThreadStart(RecvThread));
                t.IsBackground = true;
                t.Start();
                while (true)
                {
                    client.Send(buf, buf.Length, multicast);
                    Thread.Sleep(1000);
                }
            }
    
            static void RecvThread()
            {
                UdpClient client = new UdpClient(7788);
                client.JoinMulticastGroup(IPAddress.Parse("234.5.6.7"));
                IPEndPoint multicast = new IPEndPoint(IPAddress.Parse("234.5.6.7"), 5566);
                while (true)
                {
                    byte[] buf = client.Receive(ref multicast);
                    string msg = Encoding.Default.GetString(buf);
                    Console.WriteLine(msg);
                }
            }
        }
    }

    组播地址为 224.0.0.0 ~ 239.255.255.255,其中 224.0.0.0~224.255.255.255 不建议在用户程序中使用,因为它们一般都有特殊用途。

     

    //广播代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
               
    Socket socket = new Socket(AddressFamily.InterNetwork,
    SocketType.Dgram, ProtocolType.IP);//只能用 P协议发送广播,所以ProtocolType设置为 P

                IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 10881);                              //让其自动提供子网中的IP地址
               
    socket.SetSocketOption(SocketOptionLevel.Socket,
    SocketOptionName.Broadcast, 1);          //设置broadcast值为1,允许套接字发送广播信息

                Int32  i = 0;
                while (true)
                {
                    Thread.Sleep(1000);
                    string info = "Hello";
                    byte[] bInfo = Encoding.UTF8.GetBytes(info);
                    socket.SendTo(bInfo, iep);
                }
            }
        }

    }



    发表在 network | 标签为 , | C# UDP组播已关闭评论

    php date

    a - "am" 或是 "pm" 
    A - "AM" 或是 "PM" 
    d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31" 
    D - 星期几,三个英文字母; 如: "Fri" 
    F - 月份,英文全名; 如: "January" 
    h - 12 小时制的小时; 如: "01" 至 "12" 
    H - 24 小时制的小时; 如: "00" 至 "23" 
    g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12" 
    G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23" 
    i - 分钟; 如: "00" 至 "59" 
    j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31" 
    l - 星期几,英文全名; 如: "Friday" 
    m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12" 
    n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12" 
    M - 月份,三个英文字母; 如: "Jan" 
    s - 秒; 如: "00" 至 "59" 
    S - 字尾加英文序数,二个英文字母; 如: "th","nd" 
    t - 指定月份的天数; 如: "28" 至 "31" 
    U - 总秒数 
    w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六) 
    Y - 年,四位数字; 如: "1999" 
    y - 年,二位数字; 如: "99" 

    z - 一年中的第几天; 如: "0" 至 "365"

     

    http://www.php.net/manual/zh/function.date.php

     

    发表在 php | php date已关闭评论

    document width/height

    网页可见区域宽: document.body.clientWidth;
    网页可见区域高: document.body.clientHeight;
    网页可见区域宽:
    document.body.offsetWidth    (包括边线的宽);
    网页可见区域高:
    document.body.offsetHeight   (包括边线的宽);
    网页正文全文宽: document.body.scrollWidth;
    网页正文全文高: document.body.scrollHeight;
    网页被卷去的高: document.body.scrollTop;
    网页被卷去的左: document.body.scrollLeft;
    网页正文部分上: window.screenTop;
    网页正文部分左: window.screenLeft;
    屏幕分辨率的高: window.screen.height;
    屏幕分辨率的宽: window.screen.width;
    屏幕可用工作区高度: window.screen.availHeight;
    屏幕可用工作区宽度:window.screen.availWidth;

    scrollHeight: 获取对象的滚动高度。  
    scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
    scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
    scrollWidth:获取对象的滚动宽度
    offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
    offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
    offsetTop:获取对象相对于版面或由 offsetTop
    属性指定的父坐标的计算顶端位置  
    event.clientX 相对文档的水平座标
    event.clientY 相对文档的垂直座标

    event.offsetX 相对容器的水平坐标
    event.offsetY 相对容器的垂直坐标  
    document.documentElement.scrollTop 垂直方向滚动的值
    event.clientX+document.documentElement.scrollTop
    相对文档的水平座标+垂直方向滚动的量

    要获取当前页面的滚动条纵坐标位置,用:
    document.documentElement.scrollTop;
    而不是:
    document.body.scrollTop;
    documentElement 对应的是 html 标签,而 body 对应的是 body 标签

    应用: Math.max(document.documentElement.scrollTop, document.body.scrollTop)

     

     

    发表在 javascript | document width/height已关闭评论

    常用加密算法

    算法选择:对称加密AES,非对称加密: ECC,消息摘要: MD5,数字签名:DSA


    对称加密算法(加解密密钥相同)
    名称
    密钥长度
    运算速度
    安全性
    资源消耗
    DES
    56位
    较快
    3DES
    112位或168位
    AES
    128、192、256位


    非对称算法(加密密钥和解密密钥不同)
    名称
    成熟度
    安全性(取决于密钥长度)
    运算速度
    资源消耗
    RSA
    DSA
    只能用于数字签名
    ECC
    低(计算量小,存储空间占用小,带宽要求低)


    散列算法比较
    名称
    安全性
    速度
    SHA-1
    MD5


    对称与非对称算法比较
    名称
    密钥管理
    安全性
    速度
    对称算法
    比较难,不适合互联网,一般用于内部系统
    快好几个数量级(软件加解密速度至少快100倍,每秒可以加解密数M比特数据),适合大数据量的加解密处理
    非对称算法
    密钥容易管理
    慢,适合小数据量加解密或数据签名


    算法选择(从性能和安全性综合)
    对称加密: AES(128位),
    非对称加密: ECC(160位)或RSA(1024),
    消息摘要: MD5
    数字签名:DSA
    轻量级:TEA、RC系列(RC4),Blowfish (不常换密钥)
    速度排名(个人估测,未验证):IDEA <DES <GASTI28<GOST<AES<RC4<TEA<Blowfish  

    简单的加密设计: 用密钥对原文做  异或,置换,代换,移位


    名称
    数据大小(MB)
    时间(s)
    平均速度MB/S
    评价
    DES
    256
    10.5
    22.5
    3DES
    256
    12
    12
    AES(256-bit)
    256
    5
    51.2
    Blowfish
    256
    3.7
    64

    表5-3 单钥密码算法性能比较表
    名称
    实现方式
    运算速度
    安  全  性
    改进措施
    应用场合
    DES
    40-56bit
    密钥
    一般
    完全依赖密钥,易受穷举搜索法攻击
    双重、三重DES,AES
      适用于硬件实现
    IDEA
    128bit密钥
    8轮迭代
    较慢
    军事级,可抗差值分析和相关分析
    加长字长为32bit、密钥为256bit,采用232 模加、232+1模乘
      适用于ASIC设计
    GOST
    256bit密钥
    32轮迭代
    较快
    军事级
    加大迭代轮数
    S盒可随机秘
    密选择,便于软件实现
    Blowfish
    256-448bit
    密钥、16轮迭代
    最快
      军事级、可通过改变密钥长度调整安全性
     
    适合固定密钥场合,不适合常换密钥和智能卡
    RC4
    密钥长度可变
    快DESl0倍
    对差分攻击和线性攻击具有免疫能力,高度非线性
    密钥长度放宽到64bit
    算法简单,易于编程实现
    RC5
    密钥长度和迭代轮数均可变
    速度可根据
    三个参数的
    值进行选择
    六轮以上时即可抗线性攻击、通过调整字长、密钥长度和迭代轮数可以在安全性和速度上取得折中
    引入数据相倚转
      适用于不同字长的微处理器
    CASTl28
    密钥长度可变、16轮迭代
    较快
    可抵抗线性和差分攻击
    增加密钥长度、形成CAST256
    适用于PC机和
    UNIX工作站
     

    常见加密算法
    1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合; 
    2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
    3、RC2和RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;
    4、IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
    5、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法; 
    6、DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;
    7、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael 算法;
    8、BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
    9、MD5:严格来说不算加密算法,只能说是摘要算法;
    10、
    PKCS:The Public-Key Cryptography Standards
    (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签
    名、数字信封的格式等方面的一系列相关协议。
    11、SSF33,SSF28,SCB2(SM1):国家密码局的隐蔽不公开的商用算法,在国内民用和商用的,除这些都不容许使用外,其他的都可以使用;
    12、ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
    13、TEA(Tiny Encryption Algorithm)简单高效的加密算法,加密解密速度快,实现简单。但安全性不如DES,QQ一直用tea加密

    发表在 technologys | 常用加密算法已关闭评论

    linux l2tp

    yum install openswan xl2tpd ppp

    /etc/ipsec.conf

    config setup
    	protostack=netkey
    	dumpdir=/var/run/pluto/
    	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10
    	nat_traversal=yes
    	oe=off
    

     

    /etc/ipsec.d/l2tp-psk.conf

    conn L2TP-PSK-NAT
    	rightsubnet=vhost:%priv
    	also=L2TP-PSK-noNAT
    
    conn L2TP-PSK-noNAT
    	authby=secret
    	pfs=no
    	auto=add
    	keyingtries=3
    	rekey=no
    	ikelifetime=8h
    	keylife=1h
    	type=transport
    	left=HOST_IP
    	leftprotoport=17/1701
    	right=%any
    	rightprotoport=17/%any
    	dpddelay=40
    	dpdtimeout=130
    	dpdaction=clear
    	leftnexthop=%defaultroute
    	rightnexthop=%defaultroute
    
    

    /etc/ipsec.secrets
    HOST_IP %any: PSK "密钥"

    /etc/xl2tpd/xl2tpd.conf

    [global]
    ipsec saref = yes
    [lns default]
    ip range = 192.168.0.200-192.168.0.254
    local ip = 192.168.0.196
    refuse chap = yes
    refuse pap = yes
    require authentication = yes
    ppp debug = yes
    pppoptfile = /etc/ppp/options
    length bit = yes

    /etc/sysctl.conf
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.default.rp_filter = 0

    test

    sysctl -p
    service ipsec start

    ipsec verify

    rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

     

    #network 参考(新手别完全照抄)。
    *nat
    :PREROUTING ACCEPT [39:3503]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A POSTROUTING -s 192.168.7.0/24 -o eth0 -j MASQUERADE
    COMMIT
    # Completed on Thu Jun 28 15:50:40 2012
    # Generated by iptables-save v1.4.7 on Thu Jun 28 15:50:40 2012
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [121:13264]
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
    -A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 1194 -j ACCEPT
    -A INPUT -p udp -m state --state NEW -m udp --dport 1701 -j ACCEPT
    -A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT
    -A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -d 192.168.7.0/24 -j ACCEPT
    -A FORWARD -s 192.168.7.0/24 -j ACCEPT
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    # Completed on Thu Jun 28 15:50:40 2012

    Command:
    iptables -t nat -A POSTROUTING -s 192.168.195.0/24 -o eth0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 192.168.196.0/24 -o eth0 -j MASQUERADE

     

    使用ipsec whack --status查看vpn的状态;

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

    windows 系统使用l2tp出现 809错误时处理方式:

    微软官网推荐方法,新建注册表值
    注: 修改后必需要重启电脑才能生效

    Windows Registry Editor Version 5.00


    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]
    "AssumeUDPEncapsulationContextOnSendRule"=dword:00000002

     

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

    参考2:

    一、/etc/ipsec.conf

    version 2.0
    config setup
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
        protostack=netkey
    
    conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT
    
    conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        ikelifetime=8h
        keylife=1h
        type=transport
        left=YOUR.SERVER.IP.ADDRESS
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any

     

    二、/etc/ipsec.secrets:

    YOUR.SERVER.IP.ADDRESS   %any:  PSK "YourSharedSecret"

    (「YOUR.SERVER.IP.ADDRESS」这部分换成你的服务器的 IP 地址,把「YourSharedSecret」部分换成随便一个字串,例如你喜欢的一句话,等等。)

    三、运行以下命令:

    for each in /proc/sys/net/ipv4/conf/*
    do
        echo 0 > $each/accept_redirects
        echo 0 > $each/send_redirects
    done

    四、检查一下 IPSec 能否正常工作:

    sudo ipsec verify

    如果在结果中看到「Opportunistic Encryption Support」被禁用了,没关系,其他项 OK 即可。

    五、重启 openswan:

    sudo /etc/init.d/ipsec restart

    六、安装 L2TP

    运行以下命令:

    sudo aptitude install xl2tpd

    八、用文字编辑器打开 /etc/xl2tpd/xl2tpd.conf,改成这样:

    [global]
    ipsec saref = yes
    
    [lns default]
    ip range = 10.1.2.2-10.1.2.255
    local ip = 10.1.2.1
    ;require chap = yes
    refuse chap = yes
    refuse pap = yes
    require authentication = yes
    ppp debug = yes
    pppoptfile = /etc/ppp/options.xl2tpd
    length bit = yes

    这里要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。

    九、安装 ppp。这是用来管理 VPN 用户的。

    sudo aptitude install ppp

    十、检查一下 /etc/ppp 目录里有没有 options.xl2tpd 这个文件,没有的话就建一个,文件内容如下:

    require-mschap-v2
    ms-dns 208.67.222.222
    ms-dns 208.67.220.220
    asyncmap 0
    auth
    crtscts
    lock
    hide-password
    modem
    debug
    name l2tpd
    proxyarp
    lcp-echo-interval 30
    lcp-echo-failure 4

    注意 ms-dns 可更换为你最近服务地址。

    十一、添加 VPN 用户。
    用文字编辑器打开 /etc/ppp/chap-secrets:

    # user      server      password            ip
    test        l2tpd       testpassword        *

    如果你之前设置过 PPTP VPN,chap-secrets 文件里可能已经有了其他用户的列表。
    你只要把 test l2tpd testpassword * 这样加到后面即可。

    十二、重启 xl2tpd:

    sudo /etc/init.d/xl2tpd restart

     

    参考:
    https://segmentfault.com/a/1190000000646294  (配置)

    发表在 network | linux l2tp已关闭评论