《网络是怎样连接的》读书笔记 2

网络连接过程 套接字 协议栈 的一些理解2

  1. 怎么确定超时重发的时间?

    首先发送方发送了一个数据包,但迟迟收不到接收方的已收消息(ACK号),那么就会判定这个包丢失了,那么就需要重发这个包。这里的“迟迟收不到”,即超时重发的判定时间是根据什么设定的呢?不同于一般会将超时时间设为固定值,TCP协议是根据网络包的平均往返时间去调整ACK号等待时间的。

  2. 数据包一发一响应的效率问题

    **问题:**每发一个包就等待一个ACK号,然后再发下一个包,再等待这个ACK号……这种方式是最容易理解的,但等待ACK号的这段时间,会造成效率的一些浪费。

    滑动窗口模式

    **解决:**就是使用滑动窗口模式,在发送一个包后会继续发送一系列的包。

    **问题:**虽然发送的效率提高了,但带来了新的问题,接收方受不住发送方这么短时间发送这么多包怎么办?

    **解决:**接收方提前告知发送方我这边当前能接收的最大数据量(窗口大小),然后发送方按这个大小来决定发送的数据量。

    **问题:**发送方与接收方的这些控制信息很杂很多,如果都是用单独的包去发送,也会造成资源的浪费。另一方面,这些控制信息的更新并不是同步的,如确认接收的ACK号和上面提到的最新窗口大小就是两个不同的控制信息,常常是ACK号已经可以返回了,但窗口大小的更新信息(应用程序还没取走缓冲区数据)还没有更新,所以直接放一起作为一个包发送不能解决问题,再者如果是一系列连续的ACK号,其实返回中间的ACK号与返回最后一个ACK号相比,也会造成一些资源浪费。

    解决:接收方在返回ACK号和窗口更新时,会等待一段时间,这段时间内的控制信号数据合并,然后再返回给发送发,这里也是类似数据缓冲区的思维。

  3. 断开连接

    完成数据收发后,要开始断开过程,一般由服务器先开始,当然也可以客户端开始。服务器发送控制位FIN为1,告诉客户端我这边要断开了,客户端协议栈会返回ACK号告知服务器我知道了,然后通知应用程序连接关闭了,如果接收缓冲区还有数据会喊应用程序过来拿数据(read),然后执行客户端的断开连接操作(close),这时和上面一样,也向服务器发送FIN为1的信号,服务器收到后也返回一个ACK号。

  4. 删除套接字

    这里的注意点是:为了防止套接字对应的端口删除后被其他套接字(设为b)立刻占用,而之前连接的服务器又想这个端口发送了一个断开连接的信号,造成b以为服务端要断开连接,就造成了错误的处理。为了避免这些,所以套接字在连接关闭后不会立刻删除,而是等待一段时间,这个时间一般是等待几分钟,防止服务端超时重发这个包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值