关于通信协议知识点的总结
tcp三次握手建立连接
首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的。
于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的。
1.客户端将SYN=1(建立连接标志)和自己生成的序列号seq发送给服务端;2
2.服务端将ACK=1(确认连接标志)和SYN=1和ack(确认序列号)和自己生成的序列号seq发送给客户端;4
3.客户端将ACK=1(确认连接标志)和ack(确认序列号)和自己生成的序列号seq+1发送给服务端,连接建立。3
四次挥手断开连接
1.客户端将FIN=1(释放连接标志)和自己生产的序列号seq发送给服务端;2
2.服务端将ACK=1(确认释放标志)和ack(确认序列号)和自己的序列号seq发送给客户端;3
3.服务端将FIN=1(释放连接标志)和ACK=1(确认释放标志)和ack(确认序列号)和自己生产的序列号seq发送给客户端;4
4.客户端将ACK=1(确认释放标志)和ack(确认序列号)和自己生产的序列号seq发送给服务端,连接中断。3
tcp客户端真正断开连接的时间
客户端真正断开连接是发送了ack信号之后,并等待2MSL(两个报文最大等待时间,MSL可为30s,1min,2min,因此2MSL是1min-4min),等待的原因是为了确保服务端收到了ack信号,服务端未收到ack信号下会超时重传FIN信号给客户端,客户端重新发送ACK给服务端。
socket
1.可理解为客户端和服务端之间进行通信的API,在new socket的时候,可选择使用的通信的协议,一般是传输层协议,例如TCP;
2.new socket里边包括三部分内容:输入缓冲区、输出缓冲区、等待队列,其中等待队列里边包含的是工作线程;
3.基本流程:new socket -> bind服务端口 -> listen监听端口->accept建立连接->recv从内存加载到socket缓冲区->接着将等待队列里边的线程转为运行状态;
IO多路复用
1.方式有select、poll、epoll,本质上是存在一个socket列表,当其中的一个socket接收到数据之后,使用共同的工作线程去执行接下来的业务逻辑,复用指的就是同一个工作线程;
BIO(同步阻塞):客户端在请求数据的过程中,保持一个连接,不能做其他事情。
NIO(同步非阻塞):客户端在请求数据的过程中,不用保持一个连接,不能做其他事情。(不用保持一个连接,而是用许多个小连接,也就是轮询)
AIO(异步非阻塞):客户端在请求数据的过程中,不用保持一个连接,可以做其他事情。(客户端做其他事情,数据来了等服务端来通知。)
同步的意思是:客户端与服务端 相同步调。就是说 服务端 没有把数据给 客户端 之前,客户端什么都不能做。它们做同样一件事情,就是说它们有相同步调,即同步。
阻塞的意思是:客户端与服务端之间是否始终有个东西占据着它们中间的通道。就是说 客户端与服务端中间,始终有一个连接。导致其他客户端不能继续建立新通道连接服务器。
NIO有3个实体:Buffer(缓冲区),Channel(通道),Selector(多路复用器)。
websocket
1.长连接、全双工通信方式,属于应用层协议,基于tcp三次握手和http建立客户端和服务端的连接;
RPC
1.可以理解为一种技术思想,包含客户端和服务端通信的基本工具,例如序列化和反序列化方式等。rpc框架一般包含客户端、客户端sub、服务端、服务端sub、网络传输模块;