网络与io模型

tcp-ip协议

TCP三次握手

三次握手

/proc/sys/net/core/somaxconn ACCEPT队列 与程序接口设置的backlog 取min

每个人顾好自己,每个人处理好对别人的打扰

/proc/sys/net/ipv4/tcp_max_syn_backlog DDOS

backlog满了(accept队列满了),新客户端直接Connection refused

TCP四次分手

四次分手

TCP连接状态

TIME_WAIT,FIN_WAIT2,CLOSE_WAIT

Connection refused

OSI七层参考模型

osi七层参考模型

什么是长连接和短连接

TCP是长连接吗?

tcp只是连接,受应用层协议

连接是不是一个复用载体

举一个例子:http1.0,1.1没有开启keepalive保持,连接只负责一次同步阻塞的请求+响应,短连接

举一个例子:Http1.0,1.1开启了keepalive保持,同步复用连接:多次(请求+响应)

举一个例子:dubbo协议(rpc),打开连接,同步/异步复用连接(请求+响应)(请求请求+响应响应),当复用连接的时候,异步复用消息的ID,而且服务端和客户端同时完成这个约束 有状态通信

IO模型

0: IO是程序对内核的socket-queue的包装

BIO:读取,一直等queue里有才返回,阻塞模型,每连接对用每线程

NIO:读取,立刻返回:两种结果,读到,没读到,程序逻辑要自己维护,NIO noblock

多路复用器:内核增加select,poll,epoll新增的和数据接收,连接接收实质无关的方法调用,得到对用socket的事件(listen-socket,eastablished-socket),可以优先地再次accept,R/W

AIO*

同步阻塞,同步非阻塞

BIO,NIO,多路复用器,在IO模型上都是同步的,都是程序自己accpet,R/W

有状态,无状态

举一个例子:dubbo协议(rpc),打开连接,同步/异步复用连接(请求+响应)(请求请求+响应响应),当复用连接的时候,异步复用消息的ID,而且服务端和客户端同时完成这个约束 有状态通信

粘包,拆包

有程序,有内核,程序和内核协调工作

有些是内核做的事情,三次握手,数据发送出去,接收进来,内核,TCP,分包

到我们自己的程序,即便在一个socket里,也可能收到多个消息在一个字节数组中, 我们要自己拆解

最后更新于