计算机网络学习4—传输层

传输层

UDP

概述

  • UDP(User Datagram Protocol, 用户数据报协议),面向无连接、不提供可靠性,即不保证数据能够到达目的地。

UDP首部

  • UDP长度:指UDP首部(8个字节)和UDP数据之和的数据长度。

  • UDP检验和:覆盖UDP首部和UDP数据,而IP的首部并不覆盖IP数据报中的数据。
    计算机网络学习4—传输层
    图1 UDP首部

  • 伪首部(UDP和TCP均含有伪首部)

    • UDP数据报和TCP段都包含一个12个字节长的伪首部,它是为计算检验和而设置的。
    • 伪首部包含IP首部一些字段。目的是让UDP两次检查数据是否已经正确到达目的地。
      计算机网络学习4—传输层
      图2 UDP校验和计算过程中使用的各个字段

UDP应用方面

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时系统)
  • 限定与LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

TCP

概述

  • TCP(Transmission control Protocol, 传输控制协议),提供一种面向连接的可靠的、字节流服务。
    • 面向连接:两个主机是哟个TCP的应用在交换数据之前必须先建立一个TCP连接。
    • 可靠性传输:TCP有很多机制来尽可能的保证数不丢失
    • 字节流:不区分ASCII字符和二进制,数据解释交给应用层。

TCP首部

  • 控制位(Control Flags)

    • FIN - 结束; 结束会话 Finsh
    • SYN - 同步; 表示开始会话请求 Sequence
    • RST - 重建连接 Reset
    • PUSH - 推送; 数据包立即发送 Push
    • ACK - 应答 Acknowledgment
    • URG - 紧急 Urgent
    • ECE - 显式拥塞提醒回应 ECN-Echo
    • CWR - 拥塞窗口减少 Congestion Window Reduced
      计算机网络学习4—传输层
      图3 TCP首部

建立连接(三次握手)

  • 三次握手过程

    • Synchronization : 同步;Sequence : 序列;Acknowledgment : 答复

    • step1: 客户端:Seq=x (SYN)

    • step2: 服务端:Seq=y, Ack=x+1 (SYN+ACK)

    • step3: 客户端:Seq=x+1, Ack=y+1 (连接建立)

计算机网络学习4—传输层
图4 三次握手

  • 三次握手原因

    • 一个TCP连接是全双工的,即数据在两个方向上能同时传输数据,因此,建立连接的过程也就必须确认双方的收发能力是正常的。
    • 防止已经过期的连接请求报文又突然传送到服务器,因为若采用两次握手,服务器无法通过SYN判断是迟到的报文还是新的连接请求。
    • 此外,四次或是四次以上握手也可以,但是没有必要。

断开连接(四次挥手)

  • 四次挥手过程
    • Finsh : 结束;Sequence: 序列;Acknowledgment : 答复
    • step1: 客户端:Seq=u (FIN)
    • step2: 服务端:Ack=u+1 (ACK)
    • step3: 服务端:Seq=v (FIN)
    • step4: 客户端:Ack=v+1 (ACK)

计算机网络学习4—传输层
图5 四次挥手

  • 四次挥手原因

    • 确保数据能够完成传输,但关闭连接时,当收到对方的 FIN 报文通知时,它
      仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭 SOCKET,也即你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的

TCP的流量控制机制

  • 慢启动

    • TCP开始发送设置拥塞窗口cwnd=1
    • 不要以开始就发送大量的数据,先探测一下网络的拥塞程度,也就是由小到大逐渐增加拥塞窗口的大小。
    • 为防止cwnd增长过大引起网络拥塞,设置一个慢开始门限(ssthresh状态变量
      • cnwdssthreshcnwd < ssthresh,使用慢开始算法
      • cnwd=ssthreshcnwd=ssthresh,既可使用慢开始算法,也可以使用拥塞避免算法
      • cnwdssthreshcnwd>ssthresh,使用拥塞避免算法
  • 拥塞避免

    • 在拥塞避免阶段将拥塞窗口控制为按照线性规律增长,使网络比较不容易出现拥塞。
    • 使拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT九八发送方的拥塞控制窗口加1。
  • 快速重传

    • 要求接收方在收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认。
    • 不需要等待设置的重传计时器到期,能尽早重传未被确认的报文段,能提高整个网络的吞吐量。
  • 快速恢复

    • 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把 ssthresh门限减半。但是接下去并不执行慢开始算法。
    • 考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将 cwnd 设置为 ssthresh 的大小,然后执行拥塞避免算法。
      计算机网络学习4—传输层
      图6

UDP和TCP对比

  • UDP和TCP特点对比
连接 可靠性 流量控制、拥塞控制 模式 系统资源 首部
UDP 不可靠,丢包不会重发、顺序乱掉不会纠正 不使用 数据报 简单,开销少
TCP 可靠,丢包会重新发送,顺序打乱会进行排序 使用 复杂,开销较大
  • UDP和TCP首部对比
    计算机网络学习4—传输层
    图7