TCP/IP 协议族 - 运输层笔记

Apr 10, 2016


运输层服务

运输层负责的是进程到进程的通信。

编址: 端口号

每个进程通过一个端口号与其他进程通信。

套接字地址

TCP协议族的运输层协议在建立连接时,需要在连接的两端同时使用IP地址和端口号。这样的组合就成为套接字地址 (socket address)。 套接字地址唯一地定义了一个进程。

流量控制

差错控制

运输层差错控制负责:

  • 检测并丢弃损坏的分组。
  • 跟踪丢失和丢弃的分组并重传。
  • 识别重复的分组并丢弃。
  • 保存失序到达的分组,直到缺失的分组全部抵达。

拥塞控制

开环拥塞控制

在拥塞发生之前采取一些策略来预防拥塞称为开环拥塞控制,包括:

  • 重传策略。好的重传策略可以预防拥塞。
  • 窗口策略。
  • 确认策略。接收方可以再自己有分组要发送,或者一个特殊的计时器到期时才发送一个确认。

闭环拥塞控制

在拥塞后缓解拥塞的程度。

无连接和面向连接的服务

当使用无连接的服务时,应用程序将豹纹分割成大小可被运输层接受的数据块,并交付给运输层。运输层将这些数据块视为独立的数据单元,块和块之间没有联系。 因为分组上没有编号,所以一旦报文失序或者丢失,便不能组合。

面向连接的服务

数据交换只能在建立连接之后发生。

运输层协议

简单协议

最简单的一个发送一个接受。

停止等待协议

发送方和接收方都有一个大小为1的窗口,每次接受都要确认。如果超时了就重传。 在停等协议中,流量控制通过迫使发送方等待确认实现,差错控制通过丢弃损坏分组并让发送方超时重传实现。

序号

只需0、1两个序号。

返回 N 协议

发送发窗口大小$2^m-1$,接受方大小1。 接收方期望序号顺序到达,否则丢弃分组并发送一个 ACK。

发送窗口大小

该协议中窗口大小为$2^m-1$。 考虑这么一种情况,如果窗口大小为$2^m$,那么发送$2^m-1$个分组,他们的确认全部丢失,那么接收方肯定会发送一个 ACK = 0。 这时候是发送新的0还是旧的0呢? 所以就产生了歧义。

选择重传协议

接受方缓存收到的分组。先储存下来,如果收到一个 seqNo = Rn 的分组,就把连续的分组全部交付给应用层。 发送方发送分组,如果收到一个 ackNo = Sf 的分组,把窗口右移,直到指向第一个未 ack 的序号。

确认

这里的 ACK 语义不同,代表只收到了某个分组。

窗口大小

窗口大小最大为$2^{m - 1}$。

考虑下面这种情况: 假设窗口大小为$2^{m-1}+1$,现在发送方发送了$2^{m-1}$个分组,确认全部丢失。 这时候接收方的窗口是包括0的。 然后发送方又重发了$0 \dot 2^{m-1}$,这时候的0显然是旧的0,却被当成是新的了。

捎带技术

ACK 可以不马上回复,等有数据传输的时候捎上去。