• C# TCP 了解


    参考:http://www.jb51.net/article/118682.htm

    一: TCP 

      粘包原理:发送方发送若干数据给接收方时粘成一包。从接收缓冲区看,后一包的头紧接前一包的数据的尾。

          发送方引起:TCP协议本身造成,TCP为提高传输效率,将连续发送几次的数据包小的紧凑的,合并为一个包。(Nagle优化算法)

          接收方引起:接收方进程不及时接收数据,从而导致粘包现象。因为接收方先把收到的数据放到系统缓冲区,进程从该缓冲区取数据,若下一包到达时前一包数据尚未被用户进程取走。这样一次取多包数据。

      解决方案:修改Socket配置

            Nodelay,不采用优化算法,发送端解决粘包。

            缺点:降低网络传输效率。

            使用代码解决:

             一个完整的数据包  = 包头 +包体长度。(数值压缩存储方法,减少包头字节数,一般为2位字节即可)

            设置缓冲区,判断不等于包头的字节存储在缓冲区,等待下一数据包,连接起来。

           

      三次握手原理:

          第一次握手:客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认。

    ·      第二次握手:服务器收到syn包,必须确认客户的SYN(ack = j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK

    ,此时,服务器进入SYN_RECV状态。

          第三次握手:客户端收到服务器端SYN+ACK包,向服务器发送确认包ACK(ack = k+1),此包发送完毕,客户端与服务器进入ESTABLISHED状态,完成三次握手。

      注:握手过程中传送的包中不包含数据,三次握手完毕后,客户端才向服务器端正式发送数据。

    优势:保证顺序,保证稳定。

  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/8268366.html
Copyright © 2020-2023  润新知