zoukankan      html  css  js  c++  java
  • TCP与UDP

    OSI wiki
    OSI
    网络7层协议,4层,5层?理清容易混淆的几个概念

    流量控制与拥塞控制

    拥塞控制: 慢开始(指数增长到阈值),拥塞避免(阈值加性增加)
    出现拥塞时新阈值为当前窗口的一半,如果不使用快速重传,窗口减小为1,重复慢开始
    若使用快速重传,当收到3个重复确认时,使用快速恢复,新阈值和窗口均减小为当前窗口的一半,然后加性增加窗口 、

    TCP与UDP

    TCP报文格式

    • 序列号:第一个字节的序列号,接受方可通过序列号+数据长度算出确认号,并将其作为确认号放入应答报文中,4字节[0, 2 ^ 32]会回绕
    • 确认号:下次期望收到的序列号,4字节[0, 2 ^ 32]会回绕,当报文为SYN请求报文时,ACK位为0,故没有确认号,连接建立后,ACK位为1,确认号始终有效
    • 首部长度/数据偏移:4位(最大值15),是4字节的倍数,也即首部长度,由于TCP首部长度不定(20-60字节),所以需要找到数据起始处,所以TCP首部最大长度为15 * 4字节 = 60字节
    • 窗口:2字节[0, 2^16-1],是发送本报文的一方的接收窗口,表示从本窗口的确认号算起,接收方目前允许发送方发送的数据量(以字节为单位)
    • 同步SYN: 在连接建立时同步序号,SYN为1表明这是一个连接请求或连接接受报文
    • 同步FIN: 释放一个连接,表明此报文的发送方数据已发送完毕,并要求释放连接
    • 校验和:计算校验和会添加一个伪首部进行运算,包含源IP,目的IP,0,6,TCP长度(包括首部和数据)

    UDP报文格式

    • 校验和:与TCP相同,6变为17

    TCP与UDP区别

    • TCP是面向连接的,发送数据之前需要建立连接,UDP是无连接的
    • TCP是面向字节流的,将数据看成字节流,UDP是面向报文的
    • TCP提供可靠的服务,UDP尽最大努力交付,可能会有数据丢失,重复
    • TCP是一对一的,UDP支持一对一,一对多,多对多
    • TCP首部20-60字节,UDP首部固定8字节,但都是4字节的倍数
    • TCP一般用于要求比较高的服务(FTP,HTTP,Telnet,SMTP),UDP没有拥塞控制,因此网络拥塞时发送速率不会降低(IP电话,视频会议),但可能报文会有丢失(不可靠)

    如何以UDP实现可靠传输

    UDP在传输层已经不可靠,只有在应用层模仿TCP实现可靠性传输,

    • 添加包序号与seq,ack机制,确保数据
    • 添加发送接收缓冲区与定时器,用于超时重传(根据接收到的ack删除缓冲区的数据,定时任务到了,检查是否需要重传)
    • 滑动窗口实现拥塞控制
  • 相关阅读:
    Nginx 解决WebApi跨域二次请求以及Vue单页面问题
    微信小程序部署问题总结
    Webapi文档描述-swagger优化
    [AOP系列]Autofac+Castle实现AOP日志
    WebApi Ajax 跨域请求解决方法(CORS实现)
    MSDTC启用——分布式事务
    [钉钉通知系列]Jenkins发布后自动通知
    [AOP系列]Autofac+Castle实现AOP事务
    [钉钉通知系列]SVN提交后自动推送消息到钉钉群
    Vue H5 History 部署IIS上404问题
  • 原文地址:https://www.cnblogs.com/qbits/p/11174979.html
Copyright © 2011-2022 走看看