TCP UDP 流

  1. TCP : 面向连接、字节流传输
  • TCP无数据边界
  • 三次握手、四次挥手
  • 建立连接之后,输出缓冲满,则发送一次数据
  • 你通过TCP连接给另一端发送数据,你只调用了一次 write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。 (假设数据都能到达)但是,你发送的数据量不能大于对方的接收缓存(流量控制),如果你硬是要发送过量数据,则对方的缓存满了就会把多出的数据丢弃。
  • 实际不会出现发送过量数据这种情况,TCP流量控制功能,可靠传输
  1. 什么是流量控制?流量控制的目的?
  • 如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。

  1. 如何实现流量控制?
  • 由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

  1. 流量控制引发的死锁?怎么避免死锁的发生?
  • 当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。
  • 为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。
  1. UDP : 无连接、数据报传输
  • 只要知道目标地址的IP和端口号,且网络可达,即可向目标地址发送数据
  • UDP有数据边界
  • 为了不混淆数据,所以一次读取一个完整数据报的数据
  • 客户端发(write)n次,服务器端需要收(read)n次
  • 每个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中不管其顺序,数据到达收端后再进行排序组装
  • 不可靠,只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地
  • 一般(数据量少,在TCP需要多次连接、断开连接时,可靠性要求不高的情况),UDP比TCP传输性能好很多(因为UDP没有可靠机制(超时重发,丢弃重复数据,检验数据),流量控制)
  • 但传输数据量特别大时,只需建立一次连接,TCP性能接近UDP(不超过)

1.浅析TCP字节流与UDP数据报的区别



注意

  • 如您发现本文档中有错误的地方,
  • 或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
  • 转载或使用本文档时,请作说明。
  • 非常感谢:)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值