TCP应知应会

零、TCP与UDP区别

  • TCP
    • 面向连接(逻辑连接关系):发送数据前需要建立连接,完事后也需要释放连接
    • 仅支持单播
    • 面向字节流:不分包,看作一连串无结构的字节流
    • 可靠传输,流量控制与拥塞控制
    • 首部:20-60字节
  • UDP
    • 面向无连接:不需要维护连接状态,随时发送数据
    • 支持单播、多播、广播
    • 面向应用报文:对应用层报文加上UDP首部,直接发送
    • 不可靠传输:尽最大努力传输,如果出错,仅丢弃
    • 首部:8字节

一、流量控制

  • 为什么需要流量控制
    • 发送方与接收方的速度不一定匹配,如果发送方过快,接收方过慢,则可能发生数据包丢失
  • 滑动窗口机制
    • 接收方通过发送窗口限制控制发送方传输的传输窗口
  • 会产生死锁
    • 发生情形:接收方发给发送方的窗口数据报文丢失了,发送方在等待一个非零窗口值,接收方在等待发送方新的数据
    • 持续计时器:TCP为每个连接设定一个持续计时器,持续计时器超时,发送方发送一个零窗口探测报文(1字节数据),接收方给出当前窗口值
    • 如果零窗口探测报文丢失怎么办?
      • 零窗口探测报文也有重传计时器

二、拥塞控制

  • 什么是拥塞

    • 网络中需求的资源供大于求,网络性能就会变差
    • 当网络负载到达一定限额时,吞吐量将不会继续增大,甚至减小
    • 拥塞控制的死锁:随着网络负载的变大,网络的吞吐量会逐步降低,从轻度拥塞要重度拥塞,直至吞吐量为0,进入死锁
  • 拥塞控制算法(发送方维护拥塞窗口cwnd,慢开始门限ssthresh)

    • 慢开始
      • 1—慢开始门限:指数增长
    • 拥塞避免
      • 门限—发生重传:线性增长
      • 发生重传后,门限值需要变为当前值的一半
    • 快重传
      • 原因:重传不一定说明网络拥塞了,尽量减少这种误判的影响
      • 尽快重传,不要等到重传计时器到了才重传,不会误认为拥塞了
    • 快恢复
      • 发送方收到三个连续确认,就知道有一个漏了,不用慢开始,而是执行快恢复
      • 门限值变为一半,窗口值也减少到一半,进入拥塞避免
  • 拥塞窗口与滑动窗口的区别

    • 区别与联系

    流量控制与拥塞控制的区别。为什么要把流量控制与拥塞控制分为两个名词?

    • 滑动窗口取决于接收端的缓存大小,拥塞窗口取决于当前网络的负载能力。滑动窗口位于传输层(区别于数据链路层的),拥塞控制更关注网络层

三、可靠传输

  • TCP基于以字节为单位的滑动窗口来实现可靠传输
  • 发送方的发送窗口与接收方的接收窗口在同一时间不一定一样大,会有延迟
  • 对于不按序到达的数据,会放在缓存里,不会丢弃
  • 接收方:累计确认与捎带确认

四、连接建立

  • 三报文握手
    • 客户A 发送 连接请求报文 (SYN=1, seq=x) 不携带数据
    • TCP服务器B 发送 请求确认报文段 (SYN=1, ACK=1, ack=x+1,seq=y)不携带数据
    • 客户A 发送 TCP确认报文段 (ACK=1, seq=x+1,ack=y+1) 可携带数据
  • 为什么客户A最后要发送一个确认报文段?
    • 假设是两报文握手,那么假如客户A的连接请求中途被长时间滞留,所以客户A重新发送了一个连接请求,与服务器通过两报文握手后成功交互至连接释放,但被滞留的连接请求到达服务器时,服务器误以为有一个新的连接,于是向客户A发送请求确认报文,但始终得不到客户的返回,进入死锁

五、连接释放

  • 保活计时器
    • 确保客户在线,每当服务器接收到客户的数据,就重新设置保活计时器
    • 当保活计时器到时,服务器会发送探测报文段,假如连续发送10个报文都无响应,则服务器关闭连接
  • 四报文挥手
    • 客户A 发送 连接释放报文 (FIN=1, ACK=1,seq=u,ack=v)
    • 服务器 发送 确认释放报文 (ACK=1,seq=v,ack=u+1)
    • 服务器 发送 连接释放报文 (FIN=1,ACK=1,seq=w,ack=u+1)
    • 客户A 发送 确认释放报文 (ACK=1,seq=u+1,ack=w+1)
    • 服务器已关闭连接
    • 客户A等到2MSL后关闭
  • 为什么等待2MSL后才关闭?
    • 假设客户的最后一条确认释放报文丢失了,但客户已关闭连接,TCP服务器会将之前发送的连接释放报文进行超时重传,但此时客户无响应,进入死锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值