【计算机网络】再谈传输层(一)杂谈:TCP为什么是三握四挥?不这样做会如何

834 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情 这也是第14篇文章

【计算机网络】再谈传输层(一)杂谈:TCP为什么是三握四挥?不这样做会如何?

系列前言

细心的读者可能会记得我曾经写过传输层相关的内容,那为什么还会有接下来【再谈】系列呢? 原因和应用层类似,之前遵循的是”自顶向下“的思路,对很多细节还不太了解,尤其是涉及到和更低层知识的内容更是由于缺乏相关理论而只能浅尝辄止。我学习计网的过程中大致参考两本书。

前期是《计算机网络:自顶向下方法》,而后期则是《计算机网络 第五版》(小蓝书英文原版)。于我而言,《自顶向下》更像是一本科普读物,它让我在没有太多知识储备的情况下,通过生动形象的比喻,帮助我理解一些概念、理论;而《计算机网络》则更像是一本工具书,里面对很多协议实现的细节作了详尽的描述。对于想要了解特定细节、学习重点明确的人来说是一本不可多得的好书,对我这种没有特别的目的性、但希望面面俱到、也还有相对充足时间的学生党而言,也是一本值得在图书馆一角细细钻研和体会的优秀读物。

一些和题目不直接相关但也算背景知识的内容(赶时间可以跳过)

传输层概述

  • 网络通信的本质是 进程通信,非主机通信
  • 网络层是host-to-host service
  • 传输层是end-to-end service

寻址

有一个进程服务器集中处理请求(unix系统下的inetd)

建立连接的方法分析

方案讨论:

  • 使用一次性地址 缺点:下次对哪怕是同一进程又不管用了
  • (采用的方案)对每个连接使用唯一标识,并保证分组有存活期限,过期则被丢弃
    • 严格规范网络设计(不现实)
    • 每个分组中存有一个hop-counter(采用的方案)
    • 每个包都弄时间戳(需要路由时钟同步,比较麻烦)

建立连接时可能会遇到什么情况?

  • 如下图所示:请求连接方发送的请求超时,等对方应答后,它又拒绝连接了。 image.png
  • 请求连接方第二次确认的时候超时了,自然没有应答,也没能连接成功。 image.png

关闭连接时可能会遇到什么情况?

如下图所示:如果一方关闭连接后另一方还在发送数据,会造成数据丢失。 image.png 所以说关闭连接的时机很重要。

四种关闭(含失败)的情况

  • 左边:超时后也会释放连接

image.png

  • 右边已经释放连接了,左边还在等,并且重试

image.png

  • 两边最终都会释放连接,但耗时长 image.png
  • 其中一方多次发送中断连接的请求失败了,独自中断了连接,这种状态被称为“半连接” image.png

解决方案

制定一个规则:如果超出一定时间对方无动静,就断开连接。

Q:想一想为什么适用于该场景?它还应用在哪里? A:对主动请求中断方而言,无论有没有收到对方的回复,都可以关闭连接;对于被动中断方而言,如果对方长时间无应答,说明它已经掉线了,自己也可以关闭连接了。 在我连接服务器的时候,如果不设定这个时间,又长时间没有操作,连接就会关闭。

image.png