redis 详解
- redis 单线程,但是redis6.0转向了多线程
- 对五种数据结构做详细探索
- AOF如何重写?
- socket如何被当做文件
- 进程切换如何实现?具体变化过程,包括保存寄存器等
TCP/IP协议
1、 应用层处理(HTTP,FTP)
源端应用程序编码要发送的内容,并且将数据传递给下一层,也就是传输层。
2、 传输层处理(UDP,TCP)
基于UDP协议或者TCP协议给数据加上不同的首部。一般说来,传输层定义端口,标识应用程序身份,建立起端口对端口的通信。而TCP协议则在UDP协议基础上建立了保证可靠性的连接。采用三次握手建立连接,四次挥手断开连接。
3、 网络层处理(IP,ARP,路由器)
在传输层传来的数据基础上加上首部信息,包括IP地址等。
4、 数据链路层处理
在网络层处理的基础上加上首部信息,包括mac地址。
5、 数据链路层接收
解析数据包,看是否是自己的mac地址,不是则丢弃,否则根据包中的类型将信息转发给网络层的某个模块,例如IP模块,ARP等。
6、 网络层接收
收到数据链路层传来的包,解析IP地址,看是否一致,还要考虑是不是路由器,如果是路由器则还需要根据IP地址在路由控制表中进行转发。或者是和主机IP地址匹配,则判断包类型是TCP还是UDP,然后转发给传输层对应处理模块
7、 传输层接收
传输层根据端口转发数据到不同应用程序。
8、 应用程序层接收
根据协议解码数据等。
TCP协议详解
三次握手:
由客户端主动向服务端发送数据包建立连接,首先发送SYN同步请求,随机产生一个seq=J值。客户端进入SYN_SEND状态。
然后服务端将ACK和SYN标志都置位,ack=J+1,随机产生seq=K。服务器进入SYN_RCVD状态。
最后客户端检查ack是否等于J+1,并且是否置位ACK,如果是,那么发送一个置位ACK,并且ack=K+1。客户端进入ESTABLISHED状态,服务器端接受之后也进入ESTABLISHED状态。
四次挥手:
在网络通信中,我们基于通信协议例如TCP/IP协议进行数据报的发送和接受,然而在网络层层我们只能实现两个主机之间的通信(即以IP地址标识节点),而一个主机可能有多个运行程序,而这个数据报应该是归哪个运行程序管呢?所以就在传输层(也就是TCP,UDP协议)中引入端口,用于标识不同的应用程序,不同的应用程序监听端口,而传输层在解析的时候会将数据压入不同端口的队列之中。