随笔分类 - Network
摘要:有单向、双向、三向3种认证方式,前两者必须检查时间戳以防重放攻击,单向因为只有一个消息传递,如果仅靠一次性随机数是无法判断消息是否重放。双向有两个消息传递,一来一回,仅靠一次性随机数只能检测到发响应那方的重放。最后者则不必,可仅通过一次性随机数检测自己是否遭遇重放攻击,因为接收第二个消息的那方,通过
阅读全文
摘要:主要思路 1. 首次连接时调用redisConnectWithTimeout或redisConnectUnixWithTimeout连接Redis服务端,若成功则保存返回的redisContext,假设为ctx 2. 发送命令数据后获取响应,如果是pipeling模式则调用redisGetReply
阅读全文
摘要:场景说明 选择ENet代替TCP用于弱网环境(通常丢包率高)的数据传输,提高可靠性及传输效率。为了说明怎样正确有效地应用ENet,本文按照TCP C/S同步通信的流程作了对应的接口封装实现,取库名为rudp。 接口对照 左边为rudp库的API,右边为标准的Berkeley套接字API。rudp库所
阅读全文
摘要:由于traceroute只能诊断UDP通信的包路由,不能确定TCP通信的实际路由(可能变换),因此编写了本文。为方便描述,下面的IP、MAC和端口均为示例,实际诊断中可更换为具体的值 1. 如何判断客户端到服务器的TCP包,是否经过了网关 在客户端执行 tcpdump -i eno16777728
阅读全文
摘要:前言 近期有机会,深入了SSL/TLS协议原理与细节,并分析了相关密码学内容,心得颇多,历经半月,终于写成了这份文档。 本人水平尚有限,错误难免,欢迎指正,不胜感激。 目录 部分章节预览 第3章 第5章第4节 第11章第3节 全文 下载地址:深入理解SSL/TLS技术内幕
阅读全文
摘要:描述 原始套接字具有广泛的用途,特别是用于自定义协议(标准协议TCP、UDP和ICMP等外)的数据收发。在Linux下拦截套接字IO的一般方法是拦截对应的套接字系统调用,对于发送为sendmsg和sendto,对于接收为recvmsg和recvfrom。这种方法虽然也能拦截原始套接字IO,但要先判断
阅读全文
摘要:描述 在P2P应用系统中,当需要与处于不同私网的对方可靠通信时,先尝试TCP打洞穿透,若穿透失败,再通过处于公网上的代理服务器(下文简称proxy)转发与对方通信,如下图所示 终端A先连接并发消息msg1到proxy(连接为c1);proxy再发消息msg2给P2P服务器,P2P服务器收到消息后通过
阅读全文
摘要:本文根据RFC793协议规范和BSD 4.4的实现,总结了TCP分组丢失时的状态变迁,如下图所示:实线箭头表示客户端的状态变迁,线段虚线箭头表示服务端的状态变迁,圆点虚线箭头表示客户端或服务端的状态变迁;黑色文字表示正常时的行为,红色文字表示分组丢失时的行为。 这里假设重传时分组依然会丢失,当在不同
阅读全文
摘要:ICMP在IP系统间传递差错和管理报文,是任何IP系统必须实现的组成部分。Linux 2.6.34中ICMP模块的实现在linux/icmp.h,net/icmp.h和ipv4/icmp.c中,导出了icmp_err_convert数组和icmp_send函数,供其它网络子系统使用。在其它网络子系统
阅读全文
摘要:接上篇初始化与创建,本篇阐述Socket操作和销毁两部分的实现。 Socket操作 系统调用read(v)、write(v)是用户空间读写socket的一种方法,为了弄清楚它们是怎么通过VFS将请求转发到特定协议的实现,下面以read为例(write同理),并假定文件描述符对应的是IPv4 TCP类
阅读全文
摘要:引言 在Unix的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。对于网络套接字socket也是如此,除了专属的Berkeley Sockets API,还支持一些标准的文件IO系统调用如read(v)、write(
阅读全文
摘要:字符集合 依据RFC3986 2规范,HTTP URI中允许出现的US-ASCII字符的子集,可以分成保留、未保留及转义这几类,每类的全部字符列表如下 ● 保留: : / ? # [ ] @ ! $ & '( ) * + ,; =共18个,一般用于URI部件分隔符。 ● 未保留: a-z A-Z 0
阅读全文
摘要:Web服务器为了支持https访问,通常会使用第三方库openssl实现,而且为了高性能采用异步事件驱动模型,因此连接套接字被设为非阻塞类型,本文在nginx ssl模块的基础上,简化提取它的核心框架,使用面向对象的方式描述,从握手、读写和关闭3个方面进行了分析,由于这3个操作都是异步的,因此操作失
阅读全文
摘要:继上篇TCP/IP FAQ(1),本篇涵盖了域和协议、IP编址、插口、原始IP、unix域方面的问题与解答。 【Domain & Protocol】 1. 什么是域,它和协议有什么关系? 域可以理解为一种容纳协议的空间,它的存在便于了协议的分类;域和协议是集合与元素的关系,一个域中的每个协议使用同类
阅读全文
摘要:情景分析 在网络编程中,通常异步比同步处理更为复杂,但由于异步的事件通知机制,避免了同步方式中的忙等待,提高了吞吐量,因此效率较高,在高性能应用开发中,经常被用到。而在处理异步相关的问题时,状态机模式是一种典型的有效方法,这在libevent、memcached、nginx等开源软件(库)中多次被使
阅读全文
摘要:socket pair,也称套接字管道,主要用来实现进程内或进程间的一对一的全双工或半双工通信,在IO复用模型(如select,poll,epoll等)中起到通知中断退出循环的作用,在类UNIX系统中已经有现成的实现,API为socketpair,但在Windows系统中没有,因此本文主要讲述Win
阅读全文