mysql innodb_table_stats does not exist

InnoDB: Error: table `mysql`.`innodb_table_stats` does not exist in the InnoDB internal

这个原因很明显 ,是mysql库的innodb_table_stats表损坏了。

再点击 mysql的innodb_index_stats 表,同样损坏。

 

解决方法:

损坏了,当然就是删除重补回来。

1,删除表,进入mysql库,把innodb前缀的表文件删除。

[root@AY140311174146476cc0Z mysql]# pwd
/usr/local/mysql/data/mysql
[root@AY140311174146476cc0Z mysql]# rm -f innodb_*

2,重新执行sql文件语句。当然语句来自安装包。

具体路径,如5.6为例:mysql-5.6.19/scripts/mysql_system_tables.sql

语句贴出来吧

CREATE TABLE IF NOT EXISTS innodb_index_stats (
    database_name           VARCHAR(64) NOT NULL,
    table_name          VARCHAR(64) NOT NULL,
    index_name          VARCHAR(64) NOT NULL,
    last_update         TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    /* there are at least:
    stat_name='size'
    stat_name='n_leaf_pages'
    stat_name='n_diff_pfx%' */
    stat_name           VARCHAR(64) NOT NULL,
    stat_value          BIGINT UNSIGNED NOT NULL,
    sample_size         BIGINT UNSIGNED,
    stat_description        VARCHAR(1024) NOT NULL,
    PRIMARY KEY (database_name, table_name, index_name, stat_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0
 
 
 
CREATE TABLE IF NOT EXISTS innodb_table_stats (
    database_name           VARCHAR(64) NOT NULL,
    table_name          VARCHAR(64) NOT NULL,
    last_update         TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    n_rows              BIGINT UNSIGNED NOT NULL,
    clustered_index_size        BIGINT UNSIGNED NOT NULL,
    sum_of_other_index_sizes    BIGINT UNSIGNED NOT NULL,
    PRIMARY KEY (database_name, table_name)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0

 

然后,再查询相关的innodb表。看下是否还有错误 。

这个错误到此解决了。

发表在 db | 标签为 | mysql innodb_table_stats does not exist已关闭评论

mysql reset slave / reset master

RESET SLAVE

官方的解释如下

1)RESET SLAVE makes the slave forget its replication position in the
master's binary log. This statement is meant to be used for a clean
start: It clears the master info and relay log info repositories,
deletes all the relay log files, and starts a new relay log file. It
also resets to 0 the replication delay specified with the MASTER_DELAY
option to CHANGE MASTER TO. To use RESET SLAVE, the slave replication
threads must be stopped (use STOP SLAVE if necessary).

2)RESET SLAVE does not change any replication connection parameters
such as master host, master port, master user, or master password, which
are retained in memory. This means that START SLAVE can be issued
without requiring a CHANGE MASTER TO statement following

reset slave

其实,它是直接删除master.info和relay-log.info文件,并删除所有的relay log,然后重新生成一个新的relay log,即使relay log中还有SQL没有被SQL线程apply完。

但是RESET SLAVE有个问题,它虽然删除了上述文件,但内存中的change master信息并没有删除,此时,可直接执行start
slave,但因为删除了master.info和relay-log.info,它会从头开始接受主的binlog并应用。(注意:这里所说的从头是说:reset的时候,正在接受的主的binlog,从新接受这个binlog).如果SQL
thread 正在复制临时表的过程中,执行了stop slave ,并且执行了reset slave,这些被复制的临时表将被删除。

reset master 做了什么?

1. reset master 将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始,

2. reset master 不能用于有任何slave 正在运行的主从关系的主库。因为在slave 运行时刻 reset master
命令不被支持,reset master 将master 的binlog从000001 开始记录,slave 记录的master log
则是reset master 时主库的最新的binlog,从库会报错无法找的指定的binlog文件。

发表在 db | mysql reset slave / reset master已关闭评论

Mysql Replicate Relay log read failure

一、描述

Mysql主从复制模式中,slave上报错 “relay log read failure”,导致主从同步停止。

mysql> show slave status\G
...
Master_Log_File: dd-bin.002542
Relay_Master_Log_File: dd-bin.002540
Exec_Master_Log_Pos: 950583017
Last_Error: Relay log read failure:...
...

二、分析

      报错信息为从库“无法读取relay log 里的条目”,可能原因为master库的binglog错误,或slave库的中继日志错误。或者为网络问题及bug原因。

      一般是由于网络故障或slave库压力过大,导致relay-log格式错误造成的。找到当前已经同步的时间点,重新设置主从同步,就会产生新的中继日志,恢复正常。

三、问题处理

从"show  slave  status\G"的输出中,找到如下信息:

Relay_Master_Log_File: dd-bin.002540     //slave库已读取的master的binlog

Exec_Master_Log_Pos: 950583017           //在slave上已经执行的position位置点



    停掉slave,以slave已经读取的binlog文件,和已经执行的position为起点,重新设置同步。会产生新的中继日志,问题解决。

(不需要指定host,user,password等,默认使用当前已经设置好的)

mysql>stop slave;

mysql>change master to master_log_file='dd-bin.002540' , master_log_pos=950583017;

mysql>start slave;



四、验证结果

再次查看,错误已经解决,slave 开始追 master 的日志

mysql>show  slave status\G

Exec_Master_Log_Pos: 225927489        //slave上已经执行的position已经变化

Seconds_Behind_Master: 58527            //slave  落后主库的时间,单位秒



过几秒钟,再次查看。离与master同步更近了

mysql>show  slave status\G

Exec_Master_Log_Pos: 307469867

Seconds_Behind_Master: 29570

发表在 db | 标签为 | Mysql Replicate Relay log read failure已关闭评论

RPC

RPC(远程过程调用)是什么

  • 简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
  • RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
  • RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
  • RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

远程过程调用发展历程

  • ONC RPC (开放网络计算的远程过程调用),OSF RPC(开放软件基金会的远程过程调用)
  • CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构)
  • DCOM(分布式组件对象模型),COM+
  • Java RMI
  • .NET Remoting
  • XML-RPC,SOAP,Web Service
  • PHPRPC,Hessian,JSON-RPC
  • Microsoft WCF,WebAPI
  • ZeroC Ice,Thrift,GRPC
  • Hprose

早期的 RPC

  • 第一代 RPC(ONC RPC,OSF RPC)不支持对象的传递。
  • CORBA 太复杂,各种不同实现不兼容,一般程序员也玩不转。
  • DCOM,COM+ 逃不出 Windows 的手掌心。
  • RMI 只能在 Java 里面玩。
  • .NET Remoting 只能在 .NET 平台上玩。

XML-RPC,SOAP,WebService

  • 冗余数据太多,处理速度太慢。
  • RPC 风格的 Web Service 跨语言性不佳,而 Document 风格的 Web Service 又太过难用。
  • Web Service 没有解决用户的真正问题,只是把一个问题变成了另一个问题。
  • Web Service 的规范太过复杂,以至于在 .NET 和 Java 平台以外没有真正好用的实现,甚至没有可用的实现。
  • 跨语言跨平台只是 Web Service 的一个口号,虽然很多人迷信这一点,但事实上它并没有真正实现。

PHPRPC

  • 基于 PHP 内置的序列化格式,在跨语言的类型映射上存在硬伤。
  • 通讯上依赖于 HTTP 协议,没有其它底层通讯方式的选择。
  • 内置的加密传输既是特点,也是缺点。
  • 虽然比基于 XML 的 RPC 速度快,但还不是足够快。

Hessian

  • 二进制的数据格式完全不具有可读性。
  • 官方只提供了两个半语言的实现(Java,ActionScript 和不怎么完美的 Python 实现),其它语言的第三方实现良莠不齐。
  • 支持的语言不够多,对 Web 前端的 JavaScript 完全无视。
  • 虽然是动态 RPC,但动态性仍然欠佳。
  • 虽然比基于 XML 的 RPC 速度快,但还不是足够快。

JSON-RPC

  • JSON 具有文本可读性,且比 XML 更简洁。
  • JSON 受 JavaScript 语言子集的限制,可表示的数据类型不够多。
  • JSON 格式无法表示数据内的自引用,互引用和循环引用。
  • 某些语言具有多种版本的实现,但在类型影射上没有统一标准,存在兼容性问题。
  • JSON-RPC 虽然有规范,但是却没有统一的实现。在不同语言中的各自实现存在兼容性问题,无法真正互通。

Microsoft WCF,WebAPI

  • 它们是微软对已有技术的一个 .NET 平台上的统一封装,是对 .NET Remoting、WebService 和基于 JSON 、XML 等数据格式的 REST 风格的服务等技术的一个整合。
  • 虽然号称可以在 .NET 平台以外来调用它的这些服务,但实际上跟在 .NET 平台内调用完全是两码事。它没有提供任何在其他平台的语言中可以使用的任何工具。

ZeroC Ice,Thrift,GRPC

  • 初代 RPC 技术的跨语言面向对象的回归。
  • 仍然需要通过中间语言来编写类型和接口定义。
  • 仍然需要用代码生成器来将中间语言编写的类型和接口定义翻译成你所使用的编程语言的客户端和服务器端的占位程序(stub)。
  • 你必须要基于生成的服务器代码来单独编写服务,而不能将已有代码直接作为服务发布。
  • 你必须要用生成的客户端代码来调用服务,而没有其它更灵活的方式。
  • 如果你的中间代码做了修改,以上所有步骤你都要至少重复一遍。

Hprose

  • 无侵入式设计,不需要单独定义类型,不需要单独编写服务,已有代码可以直接发布为服务。
  • 具有丰富的数据类型和完美的跨语言类型映射,支持自引用,互引用和循环引用数据。
  • 支持众多传输方式,如 HTTP、TCP、Websocket 等。
  • 客户端具有更灵活的调用方式,支持同步调用,异步调用,动态参数,可变参数,引用参数传递,多结果返回(Golang)等语言特征,Hprose 2.0 甚至支持推送。
  • 具有良好的可扩展性,可以通过过滤器和中间件实现加密、压缩、缓存、代理等各种功能性扩展。
  • 兼容的无差别跨语言调用
  • 支持更多的常用语言和平台
  • 支持浏览器端的跨域调用
  • 没有中间语言,无需学习成本
  • 性能卓越,使用简单

发表在 technologys | RPC已关闭评论

db

RDS:

Oracle - Business
DB2    - Business
PostgreSQL    - Free
Microsoft SQL Server
MySQL - Free

Embed:

SQLite - Free
Microsoft Access - Free

Document:

MongoDb - Free
CouchDB - Free

Memory/Key Value:

Redis - Free
Memcache - Free
Cassandra - Free

Other:

HBase - Free
Infinite Graph - Free
InfoGrid - Free
Riak - Free

发表在 db | db已关闭评论

.NET技术

问题

大家是否想过:

  • .NET究竟包含哪些技术呢?
  • 我所掌握的技术这个子集,在.NET技术大系这个超集里面占地比例是什么呢?
  • 我究竟还没有掌握多少.NET技术呢?
  • 面试的时候会考哪些技术呢?

相信大家也看过Java的技术栈,一个金字塔形状的(我一下子没找回,如果你知道,烦请告诉我),包含了繁多的技术:
点击查看原图

查看大图

这些年来,看过n多.Net架构图/技术栈,搜索了很久,没有找到一个符合我要求的“较为全面”地表述.Net技术大系的图表。相信微软内部有更全面的,但可惜我没有找到。

互联网上来去都是那几个简单的按版本新增分类等10来个点的,譬如这个:

 点击查看原图

或者这个按照.NET版本新增技术的:
点击查看原图

圣殿骑士 在 新加坡架构师面试总结 里面发表过一张.NET架构师面试需要的技术总结图:

点击查看原图
 

查看大图

不过这个总结图面向的是.NET架构师需要掌握的技术,和我需要的不一样。

 

.NET技术栈

最近找工作,面试了多家公司,不同公司有不同的技术要求,我把这些技术,结合我已经掌握的技术,总结了一下.Net相关技术,大约10个大类50个技术点,花了一点时间搞个.NET技术栈概览。

 

从最底层的到最顶层:

  • 操作系统
  • CLI
  • CLR
  • CTS/CLS/CIL
  • .NET Fx
  • CLI 语言
  • DLR
  • DLR 语言
  • Desktop 桌面
  • Web 网络
  • SOA
  • SDKs
  • OWIN
  • IDE 编辑器
  • Platforms 平台
  • Productivity 生产力
  • Build 编译
  • Testing 测试
  • Deploy 发布
  • Tools 工具
  • Data 数据存储
  • Components 组件

 

 

这个图表里的分类未必准确,相关技术也难免会有遗漏,欢迎大家指点以便不断改进。

以下是预览图:

点击查看原图


查看大图

摘自: http://www.cnblogs.com/unruledboy/p/NetStack.html

发表在 .net | .NET技术已关闭评论

samba

安装 SAMBA 组件

sudo apt-get install samba smbfs smbclient

配置相关参数

sudo gedit /etc/samba/smb.conf

文件中相关属性如下

1.全局设置部分

security = user
    这行设置了samba的安全等级,Samba一共可以设置四个安全登记,由底到高分别为:
    share        这个选项表示任何人都可以不需要输入密码登录。
    user          这个是Samba的默认级别,要求每个用户必须输入密码才能登录。
    server      user级别的密码都是保存在本机上,而server级别的密码和用户名都保存在另一台主机上。
    domain    这个级别要求网络里必须有一台Windows的域控制器,验证工作由域控制器来完成。
    需要注意,只要输入用户名和密码的级别,其用户名一定首先也是Linux系统内的用户

workgroup = MSHOME
    这部分是Windows主机的工作组明,Windows主机必须在同一个工作组中
server
string = %h
server(Samba,Ubuntu)

    这个选项是显示在Windows上的信息,可以自定义,其中%h为Samba配置文件中的变量,代表了主机名,即使用hostname命令得到的主机名

map to guest = bad user

    当 security = user 时,这个选项必须注释掉,如:# map to guest = bad user

2.共享设置部分

添加一个共享文件夹设置如下
[share]

    共享文件名,不需要与实际文件名一致
comment = my
share directory

    对这个共享分支的描述
path = /home/share

    系统的共享目录,必须为绝对路径
public = yes

    是否允许所有人都能够看到此目录,no为看不到
writable = yes

    是否允许用户在此目录下可写,no为不可些,如果可写,还需要目录具有写权限
read only = yes

    设置用户是否只读
vaild users = username

    设置只有 username 用户有效

SAMBA 用户管理

在需要密码登录时有效,在设置用户密码时,此用户必须是LINUX系统的用户,如下面的指令 user 必须先是系统的用户

sudo smbpasswd -a user

接下来根据提示输入两次密码即可

smbpasswd 指令相关参数如下:

-a    新添加一个Samba用户。
-d    禁用一个Samba用户。
-e    使禁用的Samba用户解禁。


启动 SAMBA 服务

复制代码
# 停止 SAMBA 服务
sudo /etc/init.d/smbd stop
# 启动 SAMBA 服务
sudo /etc/init.d/smbd start
# 重新启动
sudo /etc/init.d/smbd restart
复制代码

在 WINDOWS 下访问共享目录

# 在资源管理器,或浏览器中直接输入即可, “192.168.1.10” 为服务器 IP
\\192.168.1.10

故障测试指令

testparm

Samba配置文件常用参数详解

Samba配置文件常用参数详解
 
Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下。
smb.conf含有多个段,每个段由段名开始,直到下个段名。每个段名放在方括号中间。每段的参数的格式是:名称=指。配置文件中一行一个段名和参数,段名和参数名不分大小写。
除了[global]段外,所有的段都可以看作是一个共享资源。段名是该共享资源的名字,段里的参数是该共享资源的属性。
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数。
 
全局参数:
==================Global Settings ===================
[global]
 
config file = /usr/local/samba/lib/smb.conf.%m
说明:config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件
不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba

Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在smb.conf中加入:config
file = /etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba
Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由smb.conf.pc1定义的,而其他机器访问Samba
Server则还是应用smb.conf。

 
workgroup = WORKGROUP
说明:设定 Samba Server 所要加入的工作组或者域。
 
server string = Samba Server Version %v
说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
 
netbios name = smbserver
说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。
 
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
 
hosts allow = 127. 192.168.1. 192.168.10.1
说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@xq
表示容许来自XQ网域的所有计算机连接
 
max connections = 0
说明:max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
 
deadtime = 0
说明:deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
 
time server = yes/no
说明:time server用来设置让nmdb成为windows客户端的时间服务器。
 
log file = /var/log/samba/log.%m
说明:设置Samba
Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba
Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba
Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
 
max log size = 50
说明:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。
 
security = user
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. share用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
3. server:依靠其他Windows NT/2000或Samba

Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows
NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。

4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
 
passdb backend = tdbsam
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实
用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
 
encrypt passwords = yes/no
说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
 
smb passwd file = /etc/samba/smbpasswd
说明:用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。
 
username map = /etc/samba/smbusers
说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root
= administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba
Server,更贴近windows用户的习惯。
 
guest account = nobody
说明:用来设置guest用户名。
 
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
 
domain master = yes/no
说明:设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。
 
local master = yes/no
说明:local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。
 
preferred master = yes/no
说明:设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba
Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain
master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows
NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。
 
os level = 200
说明:设置samba服务器的os level。该参数决定Samba
Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os
level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba
Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。
 
domain logons = yes/no
说明:设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。
 
logon . = %u.bat
说明:当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。
 
wins support = yes/no
说明:设置samba服务器是否提供wins服务。
 
wins server = wins服务器IP地址
说明:设置Samba Server是否使用别的wins服务器提供wins服务。
 
wins proxy = yes/no
说明:设置Samba Server是否开启wins代理服务。
 
dns proxy = yes/no
说明:设置Samba Server是否开启dns代理服务。
 
load printers = yes/no
说明:设置是否在启动Samba时就共享打印机。
 
printcap name = cups
说明:设置共享打印机的配置文件。
 
printing = cups
说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
 
共享参数:
================== Share Definitions ==================
[共享名]
 
comment = 任意字符串
说明:comment是对该共享的描述,可以是任意字符串。
 
path = 共享目录路径
说明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes]共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path
= /home/share/%u;
。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path
= /home/share/%m 。
 
browseable = yes/no
说明:browseable用来指定该共享是否可以浏览。
 
writable = yes/no
说明:writable用来指定该共享路径是否可写。
 
available = yes/no
说明:available用来指定该共享资源是否可用。
 
admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =bobyuan,jane(多个用户中间用逗号隔开)。
 
valid users = 允许访问该共享的用户
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = bobyuan,@bob,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@+组名”表示。)
 
invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
 
write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = bobyuan,@bob
 
public = yes/no
说明:public用来指定该共享是否允许guest账户访问。
 
guest ok = yes/no
说明:意义同“public”。
 
几个特殊共享:
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN\%S
 
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
 
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no
 
[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes
 

 

发表在 linux | samba已关闭评论

linux echo -n、-e

echo -n 不换行输出

$echo -n "123"
$echo "456"
最终输出 
123456
而不是
123
456
echo -e
处理特殊字符
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
$echo -e "a\bdddd"
dddd
$echo -e "a\adddd" //输出同时会发出报警声音
adddd
$echo -e "a\ndddd" //自动换行
a
dddd
发表在 linux | 标签为 | linux echo -n、-e已关闭评论

windows 10 远程桌面 第一次登录之前 你必须更改密码 请更新密码

MSTSC方式登录Windows 2012服务器,登录失败

问题描述

 

对于密码鉴权方式创建的Windows 2012弹性云服务器,使用初始密码以MSTSC方式登录时,登录失败,系统显示“第一次登录之前,你必须更改密码。请更新密码,或者与系统管理员或技术支持联系”。
可能原因

用户本地使用的计算机(即客户机)操作系统为Windows 10。

由于Windows 10操作系统的自身限制,不能以初始密码直接远程连接操作系统为Windows 2012的弹性云服务器。
处理方法

    方法一

    更换使用Windows 7操作系统的计算机作为客户机,远程连接操作系统为Windows 2012的弹性云服务器。

    方法二

    继续使用Windows 10 客户机远程登录,但是,需先修改弹性云服务器的初始密码。
        首次登录,以VNC方式登录操作系统为Windows 2012的弹性云服务器。
        登录成功后,按照界面提示修改弹性云服务器的密码。
        使用修改后的密码,以MSTSC方式远程登录。

    方法三

    继续使用Windows 10 客户机,并以初始密码远程登录。
        单击“开始”菜单,在“搜索程序和文件”中,输入“mstsc”。

        系统进入“远程桌面连接”界面。
        依次输入弹性IP、用户名“administrator”以及创建弹性云服务器时设置的登录密码进行连接。

        连接失败,系统提示“第一次登录之前,你必须更改密码。请更新密码,或者与系统管理员或技术支持联系”。
        单击“远程桌面连接”页面左下角的“选项”。
        在“常规”页签,单击“连接设置”栏的“另存为”,保存“.rdp”格式的远程桌面文件。
        使用Notepad++打开4中保存的远程桌面文件。
        编辑远程桌面文件,在文件的最后一行,添加如下语句并保存。

        enablecredsspsupport:i:0
        双击更新后的“.rdp”文件,打开远程桌面连接。
        单击“连接”,重新连接操作系统为Windows 2012的弹性云服务器。

发表在 windows | windows 10 远程桌面 第一次登录之前 你必须更改密码 请更新密码已关闭评论

ascii

点击查看原图

ASCII控制字符

二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 NUL 空字符(Null)
0000 0001 1 01 SOH 标题开始
0000 0010 2 02 STX 本文开始
0000 0011 3 03 ETX 本文结束
0000 0100 4 04 EOT 传输结束
0000 0101 5 05 ENQ 请求
0000 0110 6 06 ACK 确认回应
0000 0111 7 07 BEL 响铃
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平定位符号
0000 1010 10 0A LF 换行键
0000 1011 11 0B VT 垂直定位符号
0000 1100 12 0C FF 换页键
0000 1101 13 0D CR 归位键
0000 1110 14 0E SO 取消变换(Shift out)
0000 1111 15 0F SI 启用变换(Shift in)
0001 0000 16 10 DLE 跳出数据通讯
0001 0001 17 11 DC1 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 DC2 设备控制二
0001 0011 19 13 DC3 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 设备控制四
0001 0101 21 15 NAK 确认失败回应
0001 0110 22 16 SYN 同步用暂停
0001 0111 23 17 ETB 区块传输结束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 连接介质中断
0001 1010 26 1A SUB 替换
0001 1011 27 1B ESC 跳出
0001 1100 28 1C FS 文件分割符
0001 1101 29 1D GS 组群分隔符
0001 1110 30 1E RS 记录分隔符
0001 1111 31 1F US 单元分隔符
0111 1111 127 7F DEL 删除

ASCII可显示字符

二进制 十进制 十六进制 图形
0010 0000 32 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 34 22 "
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25  %
0010 0110 38 26 &
0010 0111 39 27 '
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D -
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
二进制 十进制 十六进制 图形
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C \
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
二进制 十进制 十六进制 图形
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~
发表在 technologys | ascii已关闭评论

dmarc

基于域的邮件验证、报告和一致性(DMARC) 这个规范旨在减少邮件滥用(例如通过伪造邮件的“From:
报头来篡改原件的入站垃圾邮件和网络钓鱼邮件。 DMARC 帮助域拥有者使用“域名系统”(DNS)来向收件服务器告知其 DMARC
策略,例如他们希望这些服务器如何处理自称来自他们域但无法验证实际来源的邮件。 收件服务器在处理入站邮件时通过 DNS
查询检索到的这个策略可以向服务器表明应该隔离或拒收不符合这个策略的邮件,或根本不采取任何操作(例如继续照常处理邮件)。 除了这个策略以外,该域的
DMARC DNS 记录也可以包含服务器请求来向某人发送 DMARC
报告、概述自称来自此域的入站邮件的总数、它们是否通过验证、以及任何失败的详细信息。 DMARC
的报告功能在确定您的邮件验证流程是否有效,以及伪造邮件使用您域名的频率时极其有用。

在“安全设置”对话框的“发件人验证”部分中,提供以下三个部分供您配置 MDaemon 的 DMARC 验证和报告功能: DMARC 验证、DMARC 报告和 DMARC 选项。

DMARC 验证

作为 DMARC 验证流程的一部分,MDaemon 对在每封入站邮件的“From:” 报头中找到的域执行 DMARC DNS 查询。 这用来确定该域是否使用 DMARC,如果使用了 DMARC 则检索其“DMARC DNS 记录”,其中包含了它的策略和其他 DMARC 相关信息。 此外,DMARC 使用 SPFDKIM 来验证每封邮件,并要求它至少通过一项测试来通过 DMARC 验证。 如果该邮件通过验证,则按照 MDaemon
其余投递和过滤流程来照常处理这封邮件。 如果未通过验证,则取决于该域的 DMARC 策略以及您对于 MDaemon
如何处理这些邮件的配置来确定该邮件的命运。

如果一封邮件未通过 DMARC 验证,而且 DMARC 域拥有一个“p=none”策略,则不会采取任何惩罚性操作并照常处理这封邮件。 相反,当 DMARC 域拥有一个存在限制的策略,例如“p=quarantine”或“p=reject”,MDaemon 可以有选择性地将该邮件自动过滤到接收用户垃圾邮件的文件夹。 您也可以选择在该域使用“p=reject”策略时,让 MDaemon 完全拒收未通过验证的邮件。 对于使用限制性策略且未通过验证的邮件,MDaemon 将取决于策略插入“X-MDDMARC-Fail-policy: quarantine”或“X-MDDMARC-Fail-policy: reject”报头。 这帮助您使用“内容过滤器”,基于这些报头来执行一些操作,例如将该邮件发送至特定的文件夹进行审核。

建议默认情况下为大多数 MDaemon 配置启用 DMARC 验证。

DMARC 报告


MDaemon 查询 DNS 是否存在 DMARC 记录时,该记录可能包含一些标签,指示域的拥有者是希望接收与声称来自此域邮件相关的
DMARC 综合报告还是故障报告。 “DMARC 报告”屏幕上的一些选项供您用来指定是否希望发送请求的报告类型,并指定这些报告应该包含的元数据。
将在每晚午夜(UTC)发送综合报告,将按邮件来发送故障报告,因为每个发生的事件将触发这个报告。 报告以打包压缩(ZIP)的 XML
文件附件形式发送,而且在线提供各种分析工具,帮助收件人更简便地进行查看。

默认情况下 MDaemon 不发送综合或故障报告。 如果您希望发送这些报告,请在“DMARC 报告”屏幕上启用相应的选项。

DMARC 选项

“DMARC 选项”屏幕包含各种选项,例如在 DKIM 报告中包含特定信息、记录 DMARC DNS 记录、以及更新 MDaemon 用于 DMARC 的“公共后缀”文件。

DMARC 验证和邮件列表

因为 DMARC 的目的在于确保在邮件“From:” 报头中找到的域不被伪造,必须允许发件服务器代表该域来发送邮件。 这会给邮件列表带来一个问题,因为列表通常代表来自外部域的列表成员来分发邮件,并使“From:” 报头保持不变。 这就意味着在收件服务器尝试对这些邮件使用 DMARC 验证时,邮件会被不关联“From:
报头域的服务器发送。 如果 DMARC 域正好使用了存在限制的 DMARC 策略,这会导致邮件被隔离甚至被收件服务器拒收。
在某些情况下,这会导致从列表的成员中删除收件人。 为了避免这个问题,在 MDaemon 发现列表邮件来自使用了受限 DMARC
策略的域时,MDaemon 将使用邮件列表的地址来替换“
From:” 报头。 此外,您也开始配置 MDaemon 在列表邮件来自存在受限策略的域时,拒收这些邮件。 后者使所在域使用了受限策略的用户能够向列表发送邮件。 用来替换“From:” 报头的选项位于邮件列表编辑器的“报头”屏幕。 用来拒收邮件的选项位于“设置”屏幕。

为您的 MDaemon 域使用 DMARC

如果您希望为您自己的域使用
DMARC,这就意味着您希望支持 DMARC 的收件服务器使用 DMARC 来验证声称由您发送的邮件,您首先必须确保您已为该域创建了格式正确的
SPF 和 DKIM DNS 记录;而且您必须使这些选项正确工作来使用 DMARC。 如果您正在使用 DKIM,您也要配置 MDaemon
的“DKIM 签名”选项来签署该域的邮件。 此外,您必须为该域创建一个 DMARC DNS 记录。 通过查询 DNS 是否存在这个拥有特殊格式的
TXT 记录,收件服务器可以确定您的 DMARC 策略和各种可选的参数,例如: 您使用的验证模式、您是否希望接收综合报告、应接收报告的邮件地址等。

一旦您正确配置了
DMARC 并开始接收 DMARC XML 报告,您可以使用大量在线工具来阅读这些报告并诊断任何潜在的问题。 方便起见,在
\MDaemon\App\ 文件夹中还为您提供一个 DMARC Reporter 工具。 请参阅 DMARCReporterReadMe.txt
来获得使用说明。

定义 DMARC TXT 资源记录

以下是 DMARC 记录常用组件的基本概述。 要获得更多详细信息或有关高级配置的更多信息,请参阅: www.dmarc.org.

拥有者字段

DMARC 资源记录的“拥有者”(也叫做“姓名”或“左侧”)字段必须始终为 _dmarc,如果您希望指定该记录应用到的域或子域,也可以采用 _dmarc.domain.name 这种形式。

示例:

example.com 的 DMARC 记录

_dmarc IN TXT “v=DMARC1;p=none”

该记录将应用于发自 user@example.com 或子域为 example.com 的电子邮件,例如 user@support.example.com、user@mail.support.example.com 等。

_dmarc.support.example.com IN TXT “v=DMARC1;p=none”

该记录仅应用于发自 user@support.example.com 的电子邮件,不应用于发自 user@example.com 的电子邮件。

_dmarc.support IN TXT “v=DMARC1;p=none”

该记录将应用于发自: user@support.example.com、user@a.support.example.com、user@a.b.support.example.com 等的电子邮件。

DMARC 记录标签和值

必需标签

标签

备注

v=

DMARC1

这是“版本”标签,必须作为该记录的 DMARC 特定文本部分的第一个标签。 即使其他 DMARC 标签值不区分字母大小写,v= 标签的值必须是大写字母: DMARC1

示例:

_dmarc IN TXT “v=DMARC1;p=none”

p=

none

quarantine

reject

这是“策略”标签,必须作为 DMARC 记录中的第二个标签,紧接 v= 这个标签。

p=none 表示收件服务器基于 DMARC 查询结果不采取任何操作。 不得基于未通过 DMARC 检查这个失败隔离或拒收邮件。 不过可以出于其他理由隔离或拒收这些邮件,例如未通过垃圾邮件过滤测试或与 DMARC 无关的其他安全检查。 对于 p=none 的使用有时被称为“监控”或“监控模式”,因为您可以配合 rua= 这个标签一起使用来从收件域接收有关您邮件的综合报告,不过不会对未通过 DMARC 检查的这些邮件执行任何惩罚性操作。 您可以一直使用这个策略,直到您彻底测试了您的 DMARC 实施,并确保您已准备好使用更具有限制性的 p=quarantine 策略。

p=quarantine 这个策略用于以下场景:在邮件的“From:” 报头声称由您所发送但未通过 DMARC 检查时,您希望其他邮件服务器将该邮件视为可疑邮件。 取决于服务器的本地策略,这可以表示对邮件进行额外审核、将其放入收件人的垃圾邮件文件夹、将其路由到不同的服务器或采取其他操作。

p=reject 表示您希望收件服务器拒收未通过 DMARC 验证的任何邮件。 不过一些服务器仍然接收这些邮件,不过将其隔离或进行额外审核。
这是限制性最高的策略,通常不使用该策略,除非您对自己的邮件策略、以及您允许账户使用的邮件或服务类型把握十足。
例如,如果您允许您的用户加入第三方邮件列表,使用邮件转发服务,并使用网站上的“共享”功能,使用
p=reject 将可能导致一些合法邮件被拒收。 而且该设置也会使某些用户被一些邮件列表删除或阻止。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;rua=mailto:dmarc-report@example.net”

额外标签

以下列出的所有标签都是可选标签。 如果未在记录中使用任何这些标签,则假定其默认值。

标签

备注

sp=

none

quarantine

reject

默认值:

如果未使用 sp=,则对域和子域应用 p= 这个标签。

此标签用来指定应用 DMAR 记录的域的子域将使用的策略。 例如,如果应用于 example.com 的记录中使用了这个标签,那么会将 p= 这个标签中指定的策略应用于来自 example.com 的邮件,将 sp= 这个标签中指定的策略应用于来自 example.com 子域的邮件,例如 mail.example.com。如果在记录中忽略了这个标签,则将 p= 这个标签应用于该域及其子域。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;sp=reject”

rua=

由逗号分隔的将接收 DMARC 综合报告的邮件地址列表 必须使用以下格式输入作为 URI 的 地址:
mailto:user@example.com

默认值: none

如果未使用这个标签,则不发送综合报告。

此标签表示您希望从接收了一封“From:” 声称来自您所在域邮件的收件服务器接收 DMARC 综合报告。 使用以下格式指定作为 URI 的一个或多个邮件地址: mailto:user@example.com,使用逗号分隔多个 URI。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
rua=mailto:user01@example.com
,mailto:user02@example.com”

通常这些地址将位于此记录覆盖的域。 如果您希望将报告发送至其他域的地址,则该域的 DNS 区域文件必须也包含一个专用的 DMARC 记录,指示它将接收该域的 DMARC 报告。

example.com 的记录示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
rua=mailto:non-local-user@example.net”

example.net 的记录:

example.com._report._dmarc TXT “v=DMARC1”

ruf=

由逗号分隔的将接收 DMARC 故障报告的邮件地址列表 必须使用以下格式输入作为 URI 的 地址:
mailto:user@example.com

默认值: none

如果未使用这个标签,则不发送故障报告。

此标签表示您希望从接收了一封“From:” 声称来自您所在域邮件的服务器接收 DMARC 故障报告,前提是满足了在 fo= 这个标签中指定的条件。 在默认情况下,如果未指定 fo= 这个标签,在邮件未通过所有 DMARC 验证检查时将发送故障报告(例如未通过 SPF 和 DKIM 验证)。 使用以下格式指定作为 URI 的一个或多个邮件地址: mailto:user@example.com,使用逗号分隔多个 URI。

示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
ruf=mailto:dmarc-failures@example.com”

通常这些地址将位于此记录覆盖的域。 如果您希望将报告发送至其他域的地址,则该域的 DNS 区域文件必须也包含一个专用的 DMARC 记录,指示它将接收该域的 DMARC 报告。

example.com 的记录示例:

_dmarc IN TXT “v=DMARC1;p=quarantine;
ruf=mailto:non-local-user@example.net”

example.net 的记录:

example.com._report._dmarc TXT “v=DMARC1”

要了解有关 DMARC 规范的更多扩展信息,请参阅: www.dmarc.org

创建记录

在 SPF 和 DKIM 就绪后,您就可以通过 TXT 记录的形式向您的网域的 DNS 记录添加策略,以配置 DMARC(就像对 SPF 或 ADSP 执行的操作一样)。

TXT 记录的名称应该是“_dmarc.your_domain.com.”,其中“your_domain.com”替换为您的实际域名。

下面是 DMARC TXT 记录中的常用标记:

标记名称 必填 用途 样例

v

必需 协议版本 v=DMARC1

p

必需 域的策略 p=quarantine

pct

可选 要过滤的邮件百分比 pct=20

rua

可选 汇总报告的报告 URI rua=mailto:aggrep@example.com

sp

可选 该域的子域的策略 sp=reject

aspf

可选 SPF 的匹配模式 aspf=r

有关其他可用标记,请参阅 DMARC 标记注册表

 

只有 v(版本)和 p(策略)标记是必需的。有三种策略设置(或邮件处置设置)可供选用:

  • – 不采取任何行动。仅在每日报告中记录受影响的邮件。
  • 隔离 – 将受影响的邮件标记为垃圾邮件。
  • 拒绝 – 在 SMTP 层撤销邮件。

匹配模式指发件人记录与 SPF 和 DKIM 签名相比的一致程度,有两个可能的值:宽松或严格,分别以“r”和“s”表示。简言之,“宽松”允许部分匹配(例如给定网域的子域),而“严格”要求完全匹配。

请务必在可选的 rua 标记中填入您的电子邮件地址,以接收每日报告。

下面是一些
DMARC TXT 记录示例 (_dmarc.your_domain.com IN
TXT),您略加修改即可使用。当然,要将“your_domain.com”和“postmaster@your_domain.com”替换为您的实际域名和电子邮件地址。

在以下 TXT 记录示例中,如果邮件声称从您的 domain.com 发送,但未能通过 DMARC 检查,系统将不采取操作。不过,所有这些邮件都会显示在发送到“postmaster@your_domain.com”的每日汇总报告中。

"v=DMARC1; p=none; rua=mailto:postmaster@your_domain.com"在下面的 TXT 记录示例中,如果邮件声称从您的 domain.com 发送,但未能通过 DMARC 检查,那么以5%的比例将其隔离。然后,系统会将每日汇总报告通过电子邮件发送到“postmaster@your_domain.com”。

"v=DMARC1; p=quarantine; pct=5; rua=mailto:postmaster@your_domain.com"在最后这个示例中,如果邮件声称从“your_domain.com”发送,但未能通过
DMARC 检查,那么系统将 100%
拒绝该邮件。然后,系统会将每日汇总报告通过电子邮件发送到“postmaster@your_domain.com”和“dmarc@your_domain.com”。

"v=DMARC1; p=reject; rua=mailto:postmaster@your_domain.com, mailto:dmarc@your_domain.com"

每日报告采用
XML 格式。阅读该报告可以更好地了解邮件流情况。此外,报告还可以帮助您确保对出站邮件源进行正确的身份验证。如果不同 IP
地址发送声称来自您网域的邮件,请确保这些 IP 地址确实合法,并使用 DKIM 对其进行正确配置,或将其添加到相应的 SPF
范围内。如果新的邮件源上线但管理员设置了拦截策略,或者现有邮件源的配置出现问题,此时报告还可以帮助管理员快速采取措施。

下面是一份报告的摘录,显示了从两个 IP 地址发送的邮件的结果,一封邮件为直接发送,另一封为转发。两封邮件均成功发送:

 <record>
 <row>
 <source_ip>207.126.144.129</source_ip>
 <count>1</count>
 <policy_evaluated>
 <disposition>none</disposition>
 </policy_evaluated>
 </row>
 <identities>
 <header_from>stefanomail.com</header_from>
 </identities>
 <auth_results>
 <dkim>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 <human_result></human_result>
 </dkim>
 <spf>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 </spf>
 </auth_results>
 </record>
 <record>
 <row>
 <source_ip>207.126.144.131</source_ip>
 <count>1</count>
 <policy_evaluated>
 <disposition>none</disposition>
 <reason>
 <type>forwarded</type>
 <comment></comment>
 </reason>
 </policy_evaluated>
 </row>
 <identities>
 <header_from>stefanomail.com</header_from>
 </identities>
 <auth_results>
 <dkim>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 <human_result></human_result>
 </dkim>
 <spf>
 <domain>stefanomail.com</domain>
 <result>pass</result>
 </spf>
 </auth_results>
 </record> 

逐步部署

我们强烈建议您按照以下操作顺序应用策略,逐步增加 DMARC
的使用。首先,监控您的流量,并查找报告中的异常之处,例如仍没有签名或可能经过伪装的邮件。在您对结果感到满意之后,将 TXT
记录策略设置从“无”改为“隔离”。然后,再次查看结果,这次要检查垃圾邮件的捕获情况及每日 DMARC
报告。最后,在确信您的所有邮件都已签名之后,将策略设置改为“拒绝”,以充分利用 DMARC。重新查看报告,以确保结果如您所愿。

类似地,可选的
pct 标记也可以用来对 DMARC 进行分步部署和采样。因为默认值为 100%,所以,如果在 DMARC TXT
记录中采用“pct=20”,则系统只对所有受该策略影响的邮件中的五分之一(而不是全部)真正执行此操作。在您选择隔离和拒绝邮件时,此设置非常有用。在开始时设置一个较低的百分比,然后每隔几天逐步增加。

因此,比较慎重的完整部署过程应该像下面这样:

  1. 全部监控。
  2. 隔离 1%。
  3. 隔离 5%。
  4. 隔离 10%。
  5. 隔离 25%。
  6. 隔离 50%。
  7. 全部隔离。
  8. 拒绝 1%。
  9. 拒绝 5%。
  10. 拒绝 10%。
  11. 拒绝 25%。
  12. 拒绝 50%。
  13. 全部拒绝。

尝试尽快删除百分比,以完成整个部署。

请记得照常查看每日报告

Source: https://www.xiaoyu.net/1144.html

发表在 mail | dmarc已关闭评论

前端知识图谱

 

来源于群分享:

点击查看原图

发表在 technologys | 前端知识图谱已关闭评论

Memcache文本协议中文版

Memcache 协议 (译)

协议

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

   Memcache客户端通过TCP连接与服务器进行通信(UDP接口也是可用的,在下文的"UDP协议"部分有详细描述)。Memcache服务器在一个(可配置的)端口上监听;客户端连接该端口,发送命令到服务器,读取响应,最后关闭连接。

   终止会话是没有必要发送命令的:如果不需要该连接,客户端任何时候都可以将其关闭。但即便是这样,客户端最好还是缓存连接,而不是在要存取数据时再打开连
接。这是由于memcache被特意设计成可以处理大量(数百个,需要的话可以上千个)打开的连接。缓存这些连接会减少建立TCP连接所带来的开销(相对
于此,在服务器端建立一个新连接的准备工作所带来的开销,可以忽略不计)。

   在Memcache协议中发送的数据分两种:文本行和非结构数据(unstructured
data)。由客户端发送的命令和服务器端的响应使用的是文本行。非结构数据用于客户端存储数据的时候。服务器会将接收到的非结构数据,
以字节流的形式原样返回。服务器并不关心在非结构数据中的字节序的问题。对于非结构数据中的字符没有任何限制,但数据的读取方(客户端或服务器)需要通过
一个文本行数据,得知正在传输的数据块的精确长度。

   文本行总是以/r/n结束,非结构数据也总以/r/n结束, 但/r, /n或者其它的8位字符也可能出现在数据中,所以当客户端从服务器读取数据时,必须使用所提供数据长度来决定数据何时结束,而不是基于/r/n在数据块的结束处。

键(Keys)
在Memcache中存储的数据是以键来标识的。键是一个全局唯一的文本串标识,客户端通过经来存取所需的数据。当前,键的长度限制是250个字符(当然,通常来说客户端并不需要使用那么长的键)。键不参包含控制字符和空格

命令(Commands)
   存储命令(有6个: "set", "add" ,"replace", "append", "prepend" 和 "cas")要求服务器存储以键标识的数据。客户端发送一个命令行,然后是一个数据块;之后客户端等待一个表示成功/失败的响应行。

   提取命令(有两个:"get"和"gets")
要求服务器提取一个键集(一次请求一个或多个键)的数据。客户端发送一个包含所有请求键的命令行。对于每一个数据项,服务器查找到后,发送一个响应行到客
户端,内含该数据项的信息,后跟该数据项的数据,直到服务器发送了一个"END"响应行,表示整个过程的结束。

   命令行总是以命令行开头,后跟以空格分隔的参数(如果有的话)。命令行是小写的并且大小写敏感

过期时限(Expiration times)
---------------------------------------------------------

   客户端发送给服务器的某些命令可以带有(一个数据项或一个客户端请求操作的)过期时限信息。在这些情况下,发送的实际值可以是Unix时间(自1970年1月1日至今的秒数,32位值),或是从当前起的秒数。在后一种情况下,秒数不能超过60*60*24*30(30天的秒数)。如果客户端发送的数值超过此值,服务器会认为它是一个Unix时间值,而不是距当前时间的偏移值。

出错字符串(Error strings)
---------------------------------------------------------

客户端发送的每一个命令,服务器可能会发送一个出错字符串作为响应。这些出错字符串有三种类型:

"ERROR/r/n"
表示客户端发送了一个不存在的命令

"CLIENT_ERROR <error>/r/n"
表示客户端的输入行出现了某些错误,例如,输入行没有遵从协议。<error>是一个可读的错误描述。

"SERVER_ERROR <error>/r/n"
表示服务器的一些错误导致服务器不能执行该命令。<error>是一个可读的出错描述字符串。如果出现了使服务器无法继续为客户端服务的服务器错误(这一般不应发生),服务器在发送完错误字符串后会关闭连接。这是服务器端关闭客户端连接的唯一情况

在以下的每个命令描述中,错误行不会再次提及,但客户端必须考虑到它们可能会出现

存储命令
---------------------------------------------------------
首先,客户端发送一个类似这样的命令行:

<command name>  <key> <flags> <exptime> <bytes> [noreply]/r/n
cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]/r/n
<command> 有 "set ", "add ", "replace", "append" 和 "prepend":

"set" 存储这个数据。
"add" 只在服务器没有存储该Key的数据的情况下存储这个数据。
"replace" 只在服务器存储了该Key的数据的情况下存储这个数据。
"append" 为一个已存在的Key的数据尾部追加该部分的数据。
"prepend" 为一个已存在的Key的数据在头部添加该部分的数据。

append和prepend命令不接受flag和exptime,它们更新已存数据,而忽略新的flag和exptime设置。
cas是一个检查并设置的操作,意思是"存储这个数据,但只有在自我上次取得该数据以来没有人再更新该数据的情况下才存储"。

<key>:客户端要求存储的数据键值
<flags>:一个可选的16位无符串整数(以十进制形式写入),服务器会在取回该数据项时一同原样返回。客户端可以将其用作一个位存储域来存储一些数据特征信息。这个域对服务器是透明的。注意在memcached 1.2.1和更高版本,flags可以是32位的,而不是16位,不过你或许会限制使用16位来兼容旧版本。
<exptime>:过期时间。如果设置为0,
则该数据项永不过期(尽管如此,它还是可能从缓存中被删除掉,以为其它数据项腾出空间)。如果它不为0(或者是Unix
时间,或者是相当于当前时间的偏移值), 它可以保证在过期时间到后,客户端不会查询到该数据(用服务器时间度量)。
<bytes>:后跟数据的字节长度,没有计算作为分隔符的/r/n. <bytes>可能为0 (在这种情况下,它后跟一个空的数据块)。
<cas unique> 是一个与已存数据条目相关的全局唯一的64位数。客户端应该使用"gets"命令返回的该值来进行"cas"更新操作。
"noreply"  可选项指示服务器不要回送响应。注意:如果请求行格式错误,服务器不一定能可靠地解析"noreply"选项。在此种情况下,它可能会发送错误信息给客户端,如果客户端没有读取该信息的话会带来问题。客户端应该只构造合法的请求。
在此行后,客户端发送数据块。
<data block>
<data block>是一个任意的8位字节数据块,长度为前面一行所指定的数据长度<bytes>。

在发送了该命令行和数据块后,客户端等待可能的响应:
"STORED/r/n",  指示成功
"NOT_STORED/r/n" 指示数据没有被存储,但不是出错。这通常是表示"add"或"replace"的条件没有满足。
"EXIST/r/n" 指示使用"cas"命令所要更新的数据自你上次取过后已经过修改。
"NO_FOUND/r/n" 指示你用"cas"命令要修改的数据并不存在。

数据提取命令
---------------------------------------------------------
数据提取命令有"get"和"gets",如:
get <key>*/r/n
gets <key>*/r/n
<key>* 表示一个或多个由空格分隔的key串
在这个命令后,客户端期待零个或多个数据项,每个接受到的数据项是一个文本行,后跟数据块。当所有数据项传送完后,服务器发送一个"END/r/n"指示响应的终止。

每一个由服务器发送的数据项如下所示:
VALUE <key> <flags> <bytes> [<cas unique>]/r/n
<data block>/r/n
<key>: 数据项的Key值
<flags>:由存储命令设置的flags
<bytes>:是后跟数据块的长度,没有包括作为分隔符的/r/n
<cas unique>:是一个64位整数,唯一标识了一个特定的数据项。
<data block>:数据项的数据
如果有某些在请求中出现的Key没有服务器没有在数据项列表中回送,表示服务器没有这些Key的数据项(因为它们没有被存储过,或者删除以为其它数据项腾出空间,或者过期了,又或者被客户端的delete 操作删除了)。

删除
---------------------------------------------------------

delete命令允许显式删除数据项:
delete <key> [noreply]/r/n
<key>:客户端要求服务器删除的数据项的key值
"norply":可选参数指示服务器不要回送响应。参见存储命令中对格式错误请求的说明。
这个命令的响应行可能是以下的一个:
"DELETED/r/n"  指示成功
"NOT_FOUND/r/n" 指示Key所指的数据项不存在。
参见下文的"flush_all"命令,该命令使所有数据项立即无效。

递增/递减
---------------------------------------------------------
incr 和decr命令用来原地改变某些数据项,递增或递减其值。数据项的数据被看作是64位的无符号十进制整数。如果当前的数据值不能转换为这样一种表示,则 incr/decr命令返回一个错误(memcached <= 1.2.6将这种伪值(bogus value)看成是0, 这会导致混乱)。另外,这个数据项必须已存在使得 incr/decr能工作。这些命令不会假设一个不存在的key数值为0,而是会失败。

客户端发送的命令行如下:
incr <key> <value> [noreply]/r/n

desc <key> <value> [noreply]/r/n
<key>:客户端想改变的数据项的key值
<value>:客户端要对数据项递增/递减的值。它是一个64位的无符号十进制整数。
"norply":可选参数指示服务器不要回送响应。参见存储命令中对格式错误请求的说明。
响应可能是以下之一:
"NOT_FOUND/r/n" 指示这个数据项找不到。
"<value>/r/n", 其中<value>是这个数据项在经过递增/递减操作后的新值。

注意: 如果"desc"命令捕获到下溢异常:如果客户端尝试将一个值减少到小于0, 新值将会是0. "incr"命令的上溢异常会经64位回绕(wrap around the 64 bit mark)。【译者注:即 (原值+value) & 0xffffffffffffffff】.

同样要注意的是减少一个数值使得其实际长度减少了,但并不保证其返回长度值的减少。这个数值可能会在尾部加上空格,但这纯属一个实现上的优化手段,所以你不能依赖它。

统计
---------------------------------------------------------
"stats" 命令用于查询服务器维护的一些统计数据和内部数据。它有两种形式。不用参数:
stats/r/n
它使服务器输出常规统计和设置,下文中有说明。 另一种形式带有参数:
stats <args>/r/n
根据 <args> ,服务器会返回不同的内部数据。参数的类型和发送的数据没有在这个版本的协议中说明,这有利于memcache开发者(对代码)进行更改。

常规统计
当接收到不带参数的"stats"命令后, 服务器发送若干行数据,如下所示:
STAT <name> <value>/r/n
服务器用以下行作为终结:
END/r/n
在每一行统计数据中, <name>是统计项的名称,<value>是统计值。在以下的列表中有对"stats"命令响应的所有统计名称,和这个统计项的类型,以及这个值的意义。

在下面的类型列中,"32u" 表示32位无符号整数,"64u"表示64位无符号整数,"32u.32.u"表示两个由分号分隔的32位无符号整数(当作是浮点数)。

名称

类型

含义

pid

32u

服务器进程的id

uptime

32u

自服务器启动以来的秒数

time

32u

服务器上的UNIX时间

version

string

服务器的版本

pointer_size

32

主机操作系统的默认指针长度(一般是3264)

rusage_user

32u.32u

进程用户空间的累计时长(秒:微秒)

rusage_system

32u.32u

进程内核空间的累计时长

(秒:微秒)

curr_items

32u

当前存储的数据项数目

total_items

32u

自服务器启动以来存储的数据项总数(译者注:其实就是成功执行存储命令(STORED)的计数)

bytes

64u

当前用于存储数据项所用的字节数

curr_connections

32u

打开的连接数

total_connections

32u

自服务器启动以来的打开的连接数

connection_structures

32u

服务器分配的连接结构的数目

cmd_get

64u

提取命令的累计数目

cmd_set

64u

存储命令的累计数目(译者注:也包括NOT_STORED)

get_hits

64u

请求并找到的数据项的数目

get_missed

64u

请求但找不到的数据项的数目

delete_missed

64u

删除无效key的请求数

delete_hits

64u

使得数据项删除的删除请求数目

incr_missed

64u

没有找到keyincr请求数

incr_hits

64u

成功的incr请求数

decr_misses

64u

没有找到keydecr请求数

decr_hits

64u

成功的decr请求数

cas_misses

64u

没有找到keyCAS请求数

cas_hits

64u

成功CAS请求数

cas_badval

64u

key存在但CAS值不匹配的CAS请求的数目

auth_cmds

64u

认证命令处理的次数,包括成功和失败

auth_errors

64u

身份认证失败的数目

evictions

64u

从缓存中移除数据项来为新数据项腾出空间的数目

reclaimed

64u

利用一个过期数据条目来存储新数据条目的数目

bytes_read

64u

本服务器从网络中读取的字节总数

bytes_written

64u

本服务器发送到网络的字节总数

limit_maxbytes

32u

本服务器允许使用的内存字节数

threads

64u

请求的工作线程数(参见 doc/threads.txt

conn_yields

64u

由于达到-R选项指定数目的限制,一个连接的操作主动放弃让给另一个连接的数目

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

设置项统计

警告:这部分所描述的统计项以后可能会有变更。
带有"settings" 的 "stats"命令返回memcached的设置细节。这基本上就是由进程命令行的选项所组成的。注意这里不保证统计项的次序,列表也不一定是详尽的。除此之外,它的返回结果与其它的stats命令是一样的。

名称

类型

含义

maxbytes

size_t

缓存中的最大字节数

maxconns

32

最大的并发客户端数

tcpport

32

TCP监听端口

udpport

32

UDP监听端口

inter

string

监听地址

verbosity

32

0=, 1=部分, 2=很多

oldest

32u

最老对象的时长

evictions

on/off

当为off时,LRU清除策略禁用

domain_socket

string

Unix socket的文件路径

umask

32 (oct)

Unix socket 的屏蔽字

growth_factor

float

Chunk大小的增长因子

chunk_size

32

key+ value + flag分配的最小空间

num_threads

32

线程数(包括分派线程)

stat_key_prefix

char

统计前缀分隔符

detail_enabled

bool

如果为真,启用统计细节

reqs_per_event

32

在一个事件处理里的最大IO请求数

cas_enabled

bool

当为假时,CAS会被禁用

tcp_backlog

32

TCP 监听backlog

auth_enabled_sasl

yes/no

是否使用SASL


数据项统计
警告: 这部分所描述的统计项以后可能会有变更。
带有“items”选项的"stats"命令返回每个slab class的item存储信息。返回的数据格式:
STAT items:<slabclass>:<stat> <value>/r/n
服务器使用以下行终止这个列表:
END/r/n
<slabclass>和 "stats slabs"命令使用的类id是一致的。"stats slabs"描述内存的大小和使用率, "stats items"描述更上一层的信息。

以下的项的值被定义为

名称

含义

number

当前存储在这个class中的item数.过期的item不会自动排除

age

在LRU中最老的item

evicted

不得不从LRU中移除未过期item的次数 

evicted_nonzero

过期时间设置不为0,但不得不从LRU中称除该未过期的item的次数

evicted_time

自最后一次清除过期item起所经历的秒数。用这个来判断数据被移除的最近时间

outofmemory

slab class为新item分配空间失败的次数。这意味着你运行时带上了-M或者移除操作失败

tailrepairs

自解决slab 引用泄漏问题的次数。如果这个计数器增长很多,请将你的情况告诉开发者

reclaimed

用一个过期的数据条目存储新一个数据条目的次数

注意仅仅会显示存在的slab的信息,因此对于空的缓存会返回空集。

Item大小统计
警告: 这部分所描述的统计项以后可能会有变更。
带有"sizes"选项的"stats"命令返回缓存中全部数据的一般大小和数目。
警告:这个命令会对缓存上锁!它会遍历每一个数据项并检查其大小。
尽管这个操作很快,但如果你有很多数据项,你会阻止其它的请求几秒。
数据的返回格式如下所示:
<size> <count>/r/n
服务器以下面的行来终止列表:
END/r/n
"size"是数据项的大约大小,在32字节内
"count"是在该32字节范围的数据项的数目。

这使我们了解到对于所有的item,是否都有一个相应32字节长度内的slab class。你可以以此来决定如何调整slab增长因子来减少内存开销。例如:如果大部分的item都小于200字节,在小容量的范围中产生更多的 class可以使得item在slab中的分配更紧凑。

Slab 统计
警告: 这部分所描述的统计项以后可能会有变更。
带有"slabs"选项的"stats"命令返回在运行期memcache建立的每一个slab的信息。这包括每个slab的信息和一些总计信息。返回数据的格式为:

STAT <slabclass>:<stat> <value>/r/n
STAT <stat> <value>/r/n
服务器以下面的行终止列表:
END/r/n

名称

含义

chunk_size

每一个chunk占用的空间。一个item会使用一个合适大小的chunk来存储

chunk_per_page

 一个页中有多少个chunk.一个页的大小默认是小于等于1M。Slab在页中分配,然后分割成chunk

total_pages

为该slab class分配的页数

total_chunks

为该slab class分配的chunk数

get_hits

在该class中数据提取请求(命中)的总数

cmd_set

在该class 中数据存储请求的总数

delete_hits

在该class 中成功删除数据的总数

incr_hits

在该class中递增操作的总数

decr_hits 在该class中递减操作的总数
cas_hits 在该class中CAS命令更新的总数
cas_badval 在该class中因不匹配的CAS id而失败而导致更新失败的CAS命令的总数
used_chunks 有多少个chunk用于分配item
free_chunks 还没有用于item分配,或因删除变空闲的chunk数目
free_chunks_end 在最近分配的Page尾部空闲chunk的数目
mem_requested 在该slab 中申请分配的内存字节数
active_slabs slab class分配的总数
total_malloced 分配的slab page内存量

Item存储于与大于等于其大小的slab中。mem_request显示在一个slab中所有内存请求的总大小(total_chunks * chunk_size)- mem_requestd 显示该slab浪费的内存数。如果你看到有大量的浪费,考虑调slab 增长因子。

其它命令
---------------------------------------------------------
"flush_all" 命令带有一个可选的数目参数。它总是成功,服务器返回"OK/r/n"作为响应(除非在最后一个参数中指定了"noreply")。它的作用是使得所有现存的item立即无效(默认)或者在一个指定的时间后无效。在失效操作后,不会有item作为响应返回给数据提取命令(除非它在flush_all操作后又在相同的key中存储了一次)。flush_all实际上并没有释放item占用的所有的内存,它们会逐渐被用于存储新的item。flush_all 最精确的定义如下:它使得所有最后更新时间小于flush_all指定的时间的item在提取操作中被忽略。

带延迟的flush_all的目的在于,当你设置了一个memcache服务池,而且要清除所有内容,你可以选择不要同时重置所有的memcache服务
(例如这会使所有客户端原本从memcache中取得的数据,现在要由数据库重新生成而导致数据库负担的突然加重)。
这个延迟选项允许你以10秒的间隔来重置它们(例如,第一个10秒后,第二个20秒后,第三个......)
"version"命令没有参数:
version/r/n
在响应中,服务器返回:
"VERSION <version>/r/n", 其中<version>该服务器的版本字符串。
"verbosity"是一个带一个数目参数的命令。它总是成功,服务器返回"OK/r/n"作为响应(除非在最后一个参数指定了noreply).它的作用是设置日志输出的显示级别。
"quit"命令没有任何参数:
quit/r/n

当收到该命令时, 服务器端关闭连接。但客户端也可以在它不需要该连接时将其简单地关闭,不用发送任何命令。

UDP协议
---------------------------------------------------------
对于客户端的数目非常多的情况下,TCP连接数限制了扩展性。也有一个基于UDP的接口。UDP接口不提供可靠传输, 所以只应用于不需要保证成功的操作中;典型的情况是在"get"请求时,一个丢失或不完整的响应会简单地被认为是缓存不命中。

每一个UDP数据报包含一个简单的帧头,后跟与上述TCP协议一样格式的数据。在当前的实现中,请求必须在一个UDP数据报中,但响应可以跨多个数据报
(一般仅用于在多个key的"get"和"set"请求中。考虑到可靠性,这两种请求其实还是用TCP传输比较合适)。

帧头是8个字节的长度,如下所示(所有的值都是16位整数,网络字节序,高位在前)

0-1  请求ID
2-3  序列号
4-5  该消息包含的数据报数目
6-7  保留字段,必须为0

请求ID由客户端提供,典型是使用一个基于某个随机数的自增序列,但客户端可以自由决定请求ID。服务器的响应中会包含与请求相同的ID。客户端使用请求
ID来区分不同来自同一个服务器的对不同请求的响应。那些带有不能识别的请求ID的响应可能是对之前请求的延迟响应,应该丢弃。

序列号是范围是从0到n-1, 这里的n是该消息的数据报总数。客户端应该将数据报的负载部分以序列号顺序进行连接。合并字节流的结果与TCP协议(包含结束符/r/n)的格式一致。

摘自: http://www.cnblogs.com/warriorlee/archive/2011/09/18/2180661.html

发表在 article | 标签为 | Memcache文本协议中文版已关闭评论

Windows Socket Connections

最大TCP连接数

[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip
\Parameters] TcpNumConnections = 0x00fffffe (Default = 16,777,214)

以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。

最大动态端口数

TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围

[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxUserPort = 5000 (Default = 5000, Max = 65534)

最大TCB 数量

系统为每个TCP 连接分配一个TCP 控制块(TCP control block or
TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 0.5 KB的pagepool 和 0.5KB
的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。

系统的最大TCB数量由如下注册表设置决定

[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip
\Parameters] MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro =
1000, Srv=2000)

非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存)

Server 版本,这个的默认值为 2000。

也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。

最大TCB Hash table 数量

TCB 是通过Hash table 来管理的,下面注册表设置决定了这个Hash table 的大小

HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip
\Parameters] MaxHashTableSize = 512 (Default = 512, Range = 64-65536)

这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB

那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP 连接用时就越少。这个值必须是2的幂,且最大为65536.

TcpTimedWaitDelay
微軟建議最低可設定續存時間為 30 秒,而且也提到設定 30 秒應該不會出問題,因此我幾乎都只設定 30 秒而已:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e

参考:

IBM WebSphere Voice Server 在windows server 2003 下的典型配置

MaxUserPort = 65534 (Decimal)

MaxHashTableSize = 65536 (Decimal)

MaxFreeTcbs = 16000 (Decimal)

这里 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。

Links:
http://www.xiaobo.li/network/538.html

发表在 network | 标签为 | Windows Socket Connections已关闭评论

vmware linux copy network

linux copy

/etc/udev/rules.d/   

              70-persistent-net.rules

发表在 linux | vmware linux copy network已关闭评论