zoukankan      html  css  js  c++  java
  • 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状态,完成三次握手。

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

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

  • 相关阅读:
    加载页面遮挡耗时操作任务页面--第三方开源--AndroidProgressLayout
    【数据库】SQLite学习
    【数据库】MongoDB学习
    【英语】Bingo口语笔记(8)
    【英语】TED视频笔记
    自动关联
    HTML和URL比较
    LR回放测试脚本
    LR录制脚本IE不能打开解决方法
    LR录制测试脚本
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/8268366.html
Copyright © 2011-2022 走看看