zoukankan      html  css  js  c++  java
  • 关于通信协议知识点的总结

    关于通信协议知识点的总结

    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、网络传输模块;

  • 相关阅读:
    阿里云服务器绑定 微信公众号 服务器配置 问题记录
    Junit 报错: Failed to load ApplicationContext
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    idea 多项目部署JRebel
    sql优化1
    sql优化
    IntelliJ IDEA 2017版 spring-boot使用Spring Data JPA搭建基础版的三层架构
    IntelliJ IDEA 2017版 spring-boot 报错Consider defining a bean of type 'xxx' in your configuration问题解决方案
    IntelliJ IDEA 2017版 spring-boot 实现jpa基本部署,通过实体类自动建立数据库
    Nginx的两种负载均衡搭建(Tomcat版)
  • 原文地址:https://www.cnblogs.com/20158424-hxlz/p/14583142.html
Copyright © 2011-2022 走看看