您的位置:首页 > 健康 > 养生 > TCP/UCP

TCP/UCP

2025/4/17 9:31:52 来源:https://blog.csdn.net/m0_69699758/article/details/141474234  浏览:    关键词:TCP/UCP
Loop本地回环
  • 定义:Loop本地回环通常指的是以127开头的IP地址段(127.0.0.1 – 127.255.255.254),其中127.0.0.1是最常用的地址,被称为本地回环地址(Loop back address)。
  • 特点:不属于任何有类别地址类,代表设备的本地虚拟接口,默认被看作是不会宕掉的接口。
  • 主要作用
    1. 测试本机的网络配置:通过ping 127.0.0.1检查本机网卡和IP协议安装是否正常。
    2. 应用程序的资源调用:在SERVER/CLIENT程序中,当在同一台机器上运行且没有其他SERVER时,可以将SERVER的IP设为127.0.0.1,程序可以正常运行。
粘包问题
  • 定义:TCP/IP通信中常见的问题,由于TCP的流式传输特性,数据没有明确的开始和结尾边界,导致数据包可能被合并发送或接收。
  • 原因
    1. 发送方:为提高传输效率,收集足够数据后一次发送,导致粘包。
    2. 接收方:用户进程不及时接收数据,多个数据包在缓冲区粘连。
  • 解决方法
    1. 使用特定结束符:数据包末尾添加特定结束符(如换行符\n)。
    2. 固定数据大小:约定数据包大小,不足时用空字符补齐。
    3. 封装自定义数据协议:在TCP协议上封装一层自定义协议,包括数据头和数据体。
recv函数和send函数
  • recv函数
    • 功能:从已连接的套接字接收数据。
    • 参数
      • sockfd:套接字描述符。
      • buf:指向缓冲区的指针。
      • len:缓冲区长度。
      • flags(可选):指定接收数据的额外选项。
    • 返回值:成功时返回接收到的字节数,失败时返回-1。
    • 注意事项
      • 阻塞函数,可以通过设置非阻塞模式或使用select/poll/epoll避免阻塞。
      • 可能需要循环接收数据直到达到期望量。
  • send函数
    • 功能:实现数据的发送功能。
    • 参数
      • sockfd:套接字描述符。
      • buf:指向要发送数据的缓冲区的指针。
      • len:指定要发送的数据的字节数。
      • flags:控制标志,通常设置为0。
    • 返回值:成功时返回实际发送的字节数,失败时返回-1。
    • 注意事项
      • 阻塞函数,可通过设置非阻塞模式或使用select/poll/epoll避免阻塞。
      • 可能需要循环发送数据直到所有数据发送完毕。
TCP协议特点
  1. 面向连接:传输数据前必须建立连接。
  2. 可靠传输:通过确认应答、超时重传、错误检测等机制确保数据可靠传输。
  3. 基于字节流:不保留报文边界,将数据视为字节流传输。
UDP协议特点
  1. 无连接:发送数据前不需要建立连接。
  2. 不可靠:不保证数据可靠传输,只负责发送数据报。
  3. 基于数据报:保留报文边界,每个数据报作为独立单元处理。
常用网络测试工具
  • Wireshark:抓包工具,用于捕获网络数据包并分析。
TCP首部结构
  • 固定部分(前20个字节)
    • 源端口:2字节,发送方应用进程端口号。
    • 目的端口:2字节,接收方应用进程端口号。
    • 序号:4字节,标识发送的数据段。
    • 确认号:4字节,期望收到的下一个数据字节的序号。
    • 数据偏移:4位,指出数据起始处距离报文段起始处的距离(以32位字为单位)。
    • 保留:6位,置为0。
    • 控制位:6位,包括ACK、PSH、RST、SYN、FIN等。
    • 窗口:2字节,接收方允许发送的数据量。
    • 检验和:2字节,用于检查数据的完整性和正确性。
    • 紧急指针:2字节,仅在URG=1时

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com