• TCP/UDP 细节


    ### TCP/UDP协议:  
    
    ```
    TCP(Transmission Control Protocol)一种面向连接的、可靠的、传输层通信协议(比如:打电话)
    优点:可靠,稳定,传输完整稳定,不限制数据大小
    缺点:慢,效率低,占用系统资源高,一发一收都需要对方确认
    应用:Web浏览器,电子邮件,文件传输,大量数据传输的场景
    
    UDP(User Datagram Protocol)一种无连接的,不可靠的传输层通信协议(比如:发短信)
    优点:速度快,可以多人同时聊天,耗费资源少,不需要建立连接
    缺点:不稳定,不能保证每次数据都能接收到
    应用:IP电话,实时视频会议,聊天软件,少量数据传输的场景
    
    客户端和服务端在建立连接时: 三次握手
    客户端和服务端在断开连接时: 四次挥手
    SYN 创建连接
    ACK 确认响应
    FIN 断开连接
    ```
    
    ### 三次握手:
    
    ![1559165147948](D:gongxiang8day25assets1559165147948.png)
    
    ### 四次挥手:
    
    ```
    MSL为最大报文段生存时间
    默认规定MSL为2分钟,但实际应用中常用的是30秒,1分钟和2分钟等。
    ```
    
    ![1559165234479](D:gongxiang8day25assets1559165234479.png)
    
    ### 整体缩略图
    
    ![1559171471044](D:gongxiang8day25assets1559171471044.png)
    
    ### socket 
    
    ```
    socket的意义:通络通信过程中,信息拼接的工具(中文:套接字)
    # 开发中,一个端口只对一个程序生效,在测试时,允许端口重复捆绑 (开发时删掉)
    # 在bind方法之前加上这句话,可以让一个端口重复使用
    sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    ```
    
    ![1555456389523](assets/1555456389523.png)
    
    ### 黏包 
    
    ```
    # tcp协议在发送数据时,会出现黏包现象.    
        (1)数据粘包是因为在客户端/服务器端都会有一个数据缓冲区,
        缓冲区用来临时保存数据,为了保证能够完整的接收到数据,因此缓冲区都会设置的比较大。
        (2)在收发数据频繁时,由于tcp传输消息的无边界,不清楚应该截取多少长度
        导致客户端/服务器端,都有可能把多条数据当成是一条数据进行截取,造成黏包
    ```
    
    ### 黏包出现的两种情况 
    
    ```
    #黏包现象一:
        在发送端,由于两个数据短,发送的时间隔较短,所以在发送端形成黏包
    #黏包现象二:
        在接收端,由于两个数据几乎同时被发送到对方的缓存中,所以在接收端形成了黏包
    #总结:
        发送端,包之间时间间隔短 或者 接收端,接受不及时, 就会黏包
        核心是因为tcp对数据无边界截取,不会按照发送的顺序判断
    ```
    
    ### 黏包对比:tcp和udp
    
    ```
    #tcp协议:
    缺点:接收时数据之间无边界,有可能粘合几条数据成一条数据,造成黏包 
    优点:不限制数据包的大小,稳定传输不丢包
    
    #udp协议:
    优点:接收时候数据之间有边界,传输速度快,不黏包
    缺点:限制数据包的大小(受带宽路由器等因素影响),传输不稳定,可能丢包
    
    #tcp和udp对于数据包来说都可以进行拆包和解包,理论上来讲,无论多大都能分次发送
    但是tcp一旦发送失败,对方无响应(对方无回执),tcp可以选择再发,直到对应响应完毕为止
    而udp一旦发送失败,是不会询问对方是否有响应的,如果数据量过大,易丢包
    ```
    
    ### 解决黏包问题
    
    ```
    #解决黏包场景:
        应用场景在实时通讯时,需要阅读此次发的消息是什么
    #不需要解决黏包场景:
        下载或者上传文件的时候,最后要把包都结合在一起,黏包无所谓.
    ```
    
    ### 模块 socketserver 
    
    ```
    #网络协议的最底层就是socket,基于原有socket模块,又封装了一层,就是socketserver
    socketserver 为了实现tcp协议,server端的并发.
    ```
  • 相关阅读:
    classloader加载类原理
    要学的东西
    ArcGIS 10 帮助
    ArcGIS Server发布移动地图服务(mobile data access)时的问题
    SDE的性能取决于
    用oracle trace 来跟踪session
    ArcSDE10升级sp1后服务无法启动的解决办法
    ArcSDE 发布 WMS 服务出错
    ArcSDE10升级sp1后服务无法启动的解决办法
    ArcGIS Server发布移动地图服务(mobile data access)时的问题
  • 原文地址:https://www.cnblogs.com/max404/p/11837848.html
Copyright © 2020-2023  润新知