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删除缓冲区的数据,定时任务到了,检查是否需要重传)
  • 滑动窗口实现拥塞控制
posted @ 2019-07-12 11:16  qbits  阅读(248)  评论(0编辑  收藏  举报