找到目录 network 的文章 3 篇.


发送邮件提示 551 User not local; please try 错误信息的原因及解决

Posted on 2014-02-28 16:49:03 network

在此博客运行的云主机上,使用SMTP客户端发送邮件到国内的SMTP服务器,报如下错误:

2014/02/28 16:17:29 551 User not local; please try <forward-path>

说明:这个错误和邮件内容、标题等完全没有关系,而是GFW的原因。Google到如下答案:

中国政府的国家防火墙(GFW,又名`金盾工程`)做了过滤的原因,它(金盾工程)定义了大陆的IP连接到大陆以外(如香港、台湾、欧洲等)的邮件服务器是不可以自己发邮件给自己的!只要大陆所在客户端用大陆的IP发送邮件,马上就会提示551 User not local; please try这样的错误信息!

本人实际遇到的问题,是在国外的主机上使用大陆的邮件服务器,发送邮件给自己。应该也是GFW在作怪。

解决办法有两个:

  1. 使用VPN发送邮件
  2. 使用国外的SMTP服务器,发送邮件到国内的SMTP服务器

在使用了Gmail的SMTP服务器发送邮件到QQ的SMTP邮件服务器之后,错误不再出现。


浅谈TCP/IP网络编程中socket的行为

Posted on 2014-02-22 07:59:54 network

摘要:

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:

1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)

2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。

3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multiplexing、非阻塞、异步等各种技术。

关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。

关于第二层面,依然建议Richard Stevens的《Unix network proggramming,vol1》(Unix网络编程卷1),这两本书公认是Unix网络编程的圣经。

至于第三个层面,UNP的书中有所提及,也有著名的C10K问题,业界也有各种各样的框架和解决方案,本人才疏学浅,在这里就不一一敷述。

本文的重点在于第二个层面,主要总结一下Linux下TCP/IP网络编程中的read/write系统调用的行为,知识来源于自己网络编程的粗浅经验和对《Unix网络编程卷1》相关章节的总结。由于本人接触Linux下网络编程时间不长,错误和疏漏再所难免,望看官不吝赐教。

阅读全文

关于HTTP长连接的保持和断开

Posted on 2013-03-07 19:03:17 network

最近在折腾一个长连接HTTP服务器的时候,积累了一些经验,下面总结出来:

  1. 最好使用支持HTTP/1.1的服务器,HTTP/1.1默认支持keep-alive,不需要像HTTP/1.0那样检测Connection: keep-alive.

  2. 浏览器的刷新也会断开长连接,如果在服务端有一些判断,要注意发生重复的可能。

  3. 在用户关闭浏览器的标签的时候,如果有多个页面和服务器保持长连接,服务器应检测对应的页面,并做清理。

  4. 将长连接服务器位于反向代理之后,应在反向代理服务器上设置保持keep-alive,如nginx。 这样可显著减少后端upstream服务器的压力。

  5. 检测用户刷新页面,如果刷新应询问用户是否真的刷新。这样可以减少一些误判断。 如WEBQQ在检测到用户刷新时,对应的动作是重新登录。 这样做是很好,可以预防用户在当前页面重复触发一些业务逻辑。

  6. 如因为业务需要将长连接和会话绑定(很多WEB IM都这样做),应注意清理服务端保持的长连接。 发送完消息,就应该删除这个长连接。因为浏览器ajax请求还会立即请求的。