随笔分类 - 网络编程
HTTP的长连接和短连接——Node上的测试
摘要:本文主要从实践角度介绍长、短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP、Ajax做客户端请求测试,最后简单涉及WebSocket。 关键字:长连接、短连接、Node.JS、WebSocket. 一两年前,在理论上对长短连接做了学习,那时的技能以客户端为主,所以也止步于
阅读全文
HTTP状态码302、303和307的故事
摘要:今日读书,无法理解HTTP302、303、307状态码的来龙去脉,决定对其做深究并总结于本文。 《HTTP权威指南》第3章在讲解30X状态码时,完全没有讲清楚为什么要有302、303、307,以及他们的关系,一句“问题出在HTTP/1/1”让我一头雾水,莫名其妙;而第五章在讲重定向响应时,没有...
阅读全文
如果重新设计网络,有没有可能合并IP地址跟MAC地址?
摘要:前阵子看网络基础相关的书籍,冒过一个疑问,为什么要有MAC地址跟IP地址?两者可否合二为一?现在的逻辑是这样子:在数据传输过程中,路由器查看这个数据包的IP地址,跟路由表中记录的“IP集合:下一跳的mac地址”做对照,确定了要往哪边扔;网卡在接收数据的时候,也会看看这个数据包中记录的目标MAC地址是...
阅读全文
HTTP的长连接和短连接
摘要:本文总结&分享网络编程中涉及的长连接、短连接概念。 关键字:Keep-Alive,并发连接数限制,TCP,HTTP一、什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST...
阅读全文
HTTP的RST包与WinHttp延迟关闭TCP连接
摘要:一、RST包也常见于断开TCP连接 几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包。如: 在TCP协议中RST表示复位,用来异常的关闭连接。在发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓冲区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。“异常的关闭连接”是很常见的事情,特别是在使用WinHttp时。 关闭TCP连接除了常见的四次握手之外,还有发送RST包的方式。下边是使用libcurl做的post测试,post成功时正常关闭,否则异常关闭。结束TCP:四次握手图结束TCP:发RST包图二、...
阅读全文
抓包工具tshark使用备忘
摘要:抓包命令行工具tshark可以用于自定制,相比GUI工具可以实现一些自动化,譬如把某些关注的数据抓起下来存放到文本中,然后再分析输出。 demo:std::string decodeHex(const std::string& strHex){ int nLen = strHex.length() / 2; std::string strRet(nLen, 0); for (int i = 0; i != nLen; ++i) { strRet[i] = ((strHex[2*i]>='a') ? (strHex[2*i]-'a'+10) : (s
阅读全文
通过HTTP协议上传文件
摘要:HTTP是很常见的协议,虽然用得很多,但对细节的了解却是很浅,这回通过向服务端上传文件信息来理解细节。网络库的选择:1、WinHTTP是windows下常用的库;2、CURL是广受喜爱的开源库。对于我来说,libcurl最大的优点是使用方便,可以把注意力更多的集中到业务层上,提高工作效率,避免重...
阅读全文
获取IE代理服务器信息
摘要:“局域网设置”里有自动配置、代理服务器的设置项目,在进行网络通讯相关的开发时,需要使用到它们,下边介绍如何将这些设置信息读取出来。 当“使用自动配置脚本”不使用时,使用WinHttpGetIEProxyConfigForCurrentUser函数来获取用户的代理配置。如果发现用户使用了自动配...
阅读全文