波奇学网络:传输层之滑动窗口和面向字节流

滑动窗口:决定一次发送的TCP报文数量

TCP有超时重传机制,已经发出去,但是暂时没有收到应答的报文,要被TCP暂时保存起来。发送缓冲区保存的方式就是 保持未收到应答的数据不覆盖。

已发送已确认可被覆盖,可以发送未确认的是滑动窗口。

滑动窗口的范围大小是对方的接受窗口(接收能力的大小)

滑动窗口用双指针来划分区域。窗口滑动是指针移动

win_start=确认序号

win_end= 确认序号+win大小

通过滑动窗口大小来控制流量控制


滑动窗口向右移动,确认应答的的确认序号决定左指针

滑动窗口移动时大小是动态变化的

滑动窗口,会在发送缓冲区越界吗?

TCP采用环状算法,类似于数组组成的队列

确认序号=1234+下次发送数据在缓冲区的位置(数组下标(类似于缓冲区看成数组))

延迟应答:返回更大的窗口

延迟应答,等待数据从缓冲区拿走后,返回的ACK可以发送更大的窗口。

接收方发送更大的数据。

窗口越大,网络吞吐量越大,传输效率越高

所有的包都可以延迟应答吗?

数量限制:每隔N个包就应答一次

时间限制:最大延迟时间应答一次

快重传

收到三个同样的应答时则进行重发,在剩余报文少于三个时,不会触发

拥塞控制

如果通信的时候出现少量的丢包?主机问题

r如果通信的时候出现大量的丢包?拥塞控制

当大量数据超时,按照拥塞控制策略,不能立即进行超时重发。

当多台主机受到TCP的影响,减少发送,就可以缓解网络拥塞,实现拥塞控制。

拥塞窗口

发送开始的时候,定义拥塞窗口为1

每次收到一个ACK应答,拥塞窗口+1

滑动窗口=min(发送方窗口,拥塞窗口)

拥塞窗口是动态的。

拥塞窗口的慢启动

出现拥塞时,网络发送数据

存在一个慢启动的阈值

拥塞窗口超过这个阈值增长先按指数级增长,再按线性方式增长。

当TCP开始启动的时候,慢启动阈值等于窗口最大值:
在每次超时重发的时候,慢启动國值会变成原来窗口的一半,同时拥塞窗口变为1。
当TCP通信开始后,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立刻下降;
拥塞控制。

TCP策略分类

可靠性:

校验和 序列号 确认应答 超时重发 连接管理 流量控制 拥塞控制

提高性能:

滑动窗口 快速重传 延迟应答 稍带应答

面向字节流

面向数据报:udp没有发送缓冲区,发送几次数据报,读取几次数据报,write和read一一对应。

TCP读和写不是一一匹配的,原因TCP是自主控制的发送的

TCP可以将数个请求变成字节,字节被接收到再划分成完整报文。

如发送5000个字节,直接从缓冲区拿到5000个字节,组装成TCP报文,发送,接收到的报文要把5000个字节再划分成请求

udp之间传递n个请求,tcp传递的是n个字节,n个字节可能有多个请求。

解决粘包问题:明确两个包的边界

数据包粘包:用户层读到半个或者不完整报文(请求)的行为

固定大小:对于定长的报文,按固定大小读取。

使用自描述字段:变长的包,在包头约定一个包总长度的字段。

使用特殊字符:对于变长的包,还可以在包和包之间使用明确的分隔符(应用层协议)

UDP协议不存在粘包问题,UDP要么收到,要么没收到,保证请求是一个一个的。

TCP链接异常

进程终止:网络文件相关->文件的生命周期随进程->进程断开->连接自动断开->四次挥手

机器重启:杀掉进程->连接自动断开->四次挥手

机器断电/网线断开:服务器认为连接正常,客户端连接断开,导致连接认知不一致

文件和socket的关系

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值