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

传输层

UDP

概述

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

UDP首部

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

  • UDP检验和:覆盖UDP首部和UDP数据,而IP的首部并不覆盖IP数据报中的数据。
    在这里插入图片描述
    图1 UDP首部

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

    • UDP数据报和TCP段都包含一个12个字节长的伪首部,它是为计算检验和而设置的。
    • 伪首部包含IP首部一些字段。目的是让UDP两次检查数据是否已经正确到达目的地。
      在这里插入图片描述
      图2 UDP校验和计算过程中使用的各个字段

UDP应用方面

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

TCP

概述

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

TCP首部

  • 4位首部长度

    • 最大值为15,每位表示4个字节,所以TCP首部最长为60字节
  • 标志位(6个)

    • FIN - 表示通知对方本端要关闭连接了(结束报文段) Finsh
    • SYN - 表示请求建立一个连接(同步报文段) Sequence
    • RST - 表示要求对方重新建立连接(复位报文段) Reset
    • PSH - 表示接收端应用程序应该立即从TCP接收缓冲区读走树,为接收后续数据腾出空间 Push
    • ACK - 表示确认号是否有效(确认报文段) Acknowledgment
    • URG - 紧急指针 Urgent pointer
  • 16位窗口大小

    • 是TCP流量控制的一个手段,这里的窗口指接收通告窗口,告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对端就可以控制发送数据的速度。
  • 16位校验和

    • 由发送端填充,接收端对TCP报文段执行CRC算法,以验证TCP报文端在传输过程中是否损坏。注意,校验不仅包括TCP首部,也包括数据部分。这是TCP可靠传输的一个重要保障。
  • 16位紧急指针

    • 是发送端向接收端发送紧急数据的方法
      在这里插入图片描述
      图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 三次握手

  • 三次握手原因

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

断开连接(四次挥手)

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

在这里插入图片描述
图5 四次挥手

  • 四次挥手原因

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

TCP的拥塞控制机制

拥塞控制需要四个核心算法:慢开始、拥塞避免、快速重传、快速恢复。

  • 拥塞控制过程

    • 步骤1:TCP连接初始化,将拥塞窗口设为1;
    • 步骤2:执行慢开始算法,cwnd按指数规律增长,直到cwnd=sthress时,开始执行拥塞避免算法,cwnd按线性规律增长;
    • 步骤3:当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一般,cwnd重新设置为1,按照步骤2执行。
  • 慢启动

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

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

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

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

UDP和TCP对比

  • UDP和TCP特点对比
连接可靠性流量控制、拥塞控制模式系统资源首部
UDP不可靠,丢包不会重发、顺序乱掉不会纠正不使用数据报简单,开销少
TCP可靠,丢包会重新发送,顺序打乱会进行排序使用复杂,开销较大
  • UDP和TCP首部对比
    在这里插入图片描述
    图7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值