计算机网络 Andrew
Transfer Layer的作用:
屏蔽 网络的 细节;给 User 一个接口。这种 接口 可能是 可靠的流传输,也可能是 不可靠的 报传输。
为什么这么用,而不是直接利用 网络层 的功能呢?他们也提供了。实际上,网络层的这些功能主要是 在Router上实现的。而用户往往需要在不知道网络具体情况下,实现可靠的传输。
Transfer Layer主要是在 网络层 的基础上,实现 可靠的 port-port传输。
Transfer Layer要解决的问题:
1)具体的模型
host上的进程通过host上的Network Layer然后再通过子网 与 另外一台 host 通信。
子网可能是由channel和Router组成,有 延迟 和 掉包 现象。
主机之间是通过子网连接,这和链路层是不同的。链路层 一般 网络很好,不会有 congetion等现象。而子网带来的问题很多,主要是 包丢失 和 延迟过于严重。包丢失 可能是 channel congetion,也可能是 host buffer 耗尽,同样也可能是channel本身就是个不可靠的网络。
对于 报文 网上的 流传送,必须要考虑 报 的延迟很大 的问题。这里核心是带来了 包的识别问题,也就是 包 是否是 应该发送的 包。
有两个解决办法,第一个 是 限制包的生存时间,用 跳数 和 延迟时间 得到了 包的生存时间,这样,就减少了 包 的延误 问题;
第二个解决办法 是 标识 每一个 包,这样,在连接建立起来以后,接收方就知道是否是要用的包。关键是 将发送的包 和 发送的时间联系起来。如果接收方发现接收到的包的标号不可能是 这个时间内的,它就可以把它拒收。这样,就解决了延迟包的问题。
2)具体的 工作流程。
a)用户进程建立连接,以 对方的 ip+port address 为地址发送请求。
这里,用户进程 要 告诉 传输层实体 一些他的信息。即 传输层 Entity知道 要发送到哪里,得到了结果 要能够找到 接收者。 这里 采取了 socket的机制。socket相当于一个buffer,进程向 socket写入或读出,传输层Entity 也一样,这样,就可以通信。传输层相当于一个 收发室,他管理着一个小区的所有邮箱,并且发送给邮局,各家各户可以不管邮局的变化,也可以保证邮件肯定可以发送出去。它可以将信息在两者之间传送。他要做的就是将对应的内容从 UserBuffer copy到trasnfer buffer(一般在kernel buffer中),然后再把它 传递给 Network Layer。
sender怎么知道发送成功??如果不是可信网络,必须要receiver发送一个反馈;相反,receiver怎么知道 发送方 确认了消息??sender也必须要发送一个反馈。这里,假设的是网络有丢包的情况。
b)如果建立socket成功,那么,两者进行通信。
通信时,显然建立成功,得到socket号,就可以通信了。只需要几个socket号就可以。
这里,同样要考虑到丢包的情况,必须要接收方给发送方反馈。
c)发送完毕,双方断开连接。
这里,一般是由一方发出 请求(F),另一方接收(A)。考虑到延迟,
建立连接时,。