TCP Fast Open 的实现

前两天重装VPS的时候突然发现Shadowsocks支持[TCP Fast Open 特性],找了会资料才理解这个. TCP Fast Open简称TFO,是谷歌为了加速网络传输速度和效率,其特性就是在三次握手的第一次握手时客户端发送(syn+TFO cookie)包;服务端收到后,如果其支持TFO则发出了(ack+syn+TFO cookie)回应包后,立即就开始发数据包,缩短了TTFB的时间;如果服务端不支持TFO,则会发送正常的(syn+ack)回应包,走正常的三次握手流程. 因此,使用TFO的特性需要两端都支持TFO.客户端侧需要Linux Kernel 3.6及以上版本;而服务端侧则是Linux Kernel 3.7及更高版本才支持.并且服务端侧需要设置内核的net.ipv4.tcp_fastopen参数为2或3. net.ipv4.tcp_fastopen参数释义: 1 表示客户端请求开启. 2 表示服务端请求开启. 3 表示客户端与服务端请求同时开启. 服务端使用命令: echo “net.ipv4.tcp_fastopen=3” >> /etc/sysctl.conf sysctl -p 客户端使用命令: echo “net.ipv4.tcp_fastopen=1” >> /etc/sysctl.conf sysctl -p … “TCP Fast Open 的实现”

Read More

同步和异步 并发和并行

所谓同步(Synchronization),可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令. 所谓异步(Asynchronous),则是执行完函数或方法后,无需等待返回值或消息,只需要向系统委托一个异步过程,然后CPU就可以干别的任务去了,而当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程. 简而言之: 同步就是调用一个函数后必须要函数执行完了才返回. 异步就是被调用函数后,不管函数内的调用完成与否,都会马上返回. 因此,同步的流程往往不适合大并发大流量的程序;而异步的程序,说实话好像都很棒,除了代码比较难写. 并行(parallellism)是指两个或者多个事件在同一时刻发生,如果它的英文释义,是平行发生的. 并发(concurrency)则是指两个或多个事件在同一时段内间隔发生,它可以快速交替任务的处理,但是同一时刻只能有一条指令执行. 并行适用于多线程,而并发往往配合异步.

Read More