ss源码学习--从协议建立到完成一次代理请求
摘要:上一次介绍了ss源码中各个事件处理函数完成的工作,这次具体分析一下协议的建立以及请求数据的传输过程。 因为ss的local和server共用一个类以及一系列的事件处理函数,所以看起来稍显复杂。下面来将local和server端结合分析一下。 首先进程向local端发送发送请求协商版本和认证方法。lo
阅读全文
ss源码学习--事件处理
摘要:为了方便区分,以下分别使用local,server,remote代表ss客户端,ss服务端,以及ss客户端请求访问的远程主机。 在***中,无论对于local还是server,都需要建立两个socket:local_sock和remote_sock 对于local,local_soc
阅读全文
ss源码学习--工作流程
摘要:ss的local端和server端的工作流程相似,因此复用了TCPRelay类和TCPRelayHandler类。 两端均是使用TCPRelay类监听连接,并使用TCPRelayHandler类处理请求。 以server端为例: 这里创建了一个TCPRelay对象以及EventLoop,并将所有tc
阅读全文
健壮的网络编程IO函数-RIO包
摘要:RIO包 简介 Rio包即为Robust io函数包。包中函数是对Linux基本I/O函数的封装,使其更加健壮、高效,更适用于网络编程。 分析 Rio包由rio_t结构体和系列函数组成。 首先是两个不涉及缓冲区的函数 和`rio_writen()`; rio_readn 与 rio_writen 为
阅读全文
TCP的状态转移
摘要:状态转移图 状态分析 客户端 CLOSED 初始状态 1. 调用connect将发起主动打开,发送SYN J到服务端,进入SYN_SENT状态。 SYN_SENT 客户端已经发送SYN报文 1. 接收到服务端发回的ACK J+1,以及SYN K,并且发回ACK K+1进入ESTABLISHED状态.
阅读全文
HTTP协议之请求
摘要:HTTP请求 组成 一个http请求通常由三个部分组成: 请求行(request line) 首部(header) 主体(body) 格式如下所示 要注意的是在headers与body之间有一个空行 请求方法 GET 请求获取Request URI所标识的资源 POST 在Request URI所标
阅读全文
I/O复用之epoll
摘要:epoll 简介 epoll是为处理大批量句柄而作了改进的poll,它是在2.5.44内核中被引进的。 相关函数调用 创建一个epoll的句柄。自从linux2.6.8之后,size参数是被 忽略 的。需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/
阅读全文
I/O复用之select
摘要:作用: 实现I/O的多路复用 该函数允许进程指示内核等待多个事件中的任何一个发生,并只有在一个或多个事件发生时或经历一段指定的时间后才唤醒它。进程将于select处阻塞,直到被检测的描述符有一个或多个发生了变化。我们可以使用它来监视多个文件描述符的状态变化。 函数原型: 参数: 参数 是需要监视的最
阅读全文