chapter3-传输层
这周来到,《自算计网络自顶向下》 这本书的第三章,传输层的学习。
运输层和网络层的关系
在协议栈中,我们都知道运输层位于网络层之上。网络层提供了主机之间的通信,而运输层为位于主机上的不同进程之间提供了逻辑通信。
多路复用与多路分解
首先我们需要明确,一个进程有一个或者多个套接字,它相当于从网络向进程传递数据和从进程向网络传递数据的门户。在接收主机上的运输层实际上并没有将数据报直接交给进程,而是将数据报交给了一个中间套接字。
现在我们就可以考虑接收主机怎样将一个运输层报文段传输到适当的套接字。为此目的,每个运输层的报文段中具有几个字段。在接收端运输层通过检查这几个字段,进而标识将数据定向到指定套接字。将运输层报文段正确交付给套接字的工作成为多路分解。
对应的在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息生成报文段,然后将此报文段传递到网络层,所有这些工作成为多路复用。
在主机中如果将报文段识别定向到对应的套接字是通过端口号来标识的。
总结: 在主机上的每个套接字能分配一个对应的端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到对应的套接字。最后通过套接字进入到其所连接的进程。
无连接传输:UDP
UDP协议是不需要建立连接的传输,也就是无需三次握手,是一种不可靠传输,而且没有提供拥塞控制。
有可能引发,所有基于UDP协议的应用程序客户端,都没有流量控制,可能会使整条链路流量带宽被耗尽,其他UDP客户端的高丢包率,也可能使TCP应用没有带宽可用,因为它的拥塞控制,会限制数据报的发送。
UDP提供了检验和来验证数据报的正确性,之所以提供这种手段,原因在于不能保证源和目的之间的所有链路都提供了差错校验; 也就是说,这些链路中也许某一条使用没有差错校验的协议。此外,即使报文经链路正确的传输,当报文段存储在某台路由器内存时,也可能引入比特差错,因此UDP 在端到端基础上在运输层提供差错校验。
可靠数据传输原理
可靠数据传输:服务模型与服务实现在可靠传输协议中,为了提高发送效率一般采用流水线,即无需等待确认回复,继续发送下一个分组,下面记录下解决流水线差错恢复的两种基本方法: 回退N步(Go_Back_N,GBN) 和 选择重传(Selective Repeat, SR)
回退N步
在GBN中发送方看到的序号在回退N步协议中,允许发送方发送多个分组(当有多个分组可用时)而不需要等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数N。
在上图中,展示了发送方看到的GBN协议的序号范围。如果我们将基序号(base)定义为最早的未被确认的分组序号,将 下一个序号(nextseqnum) 定义为最小的未使用序号(即下一个待发分组号),则可以将序号范围划分为4段:
- 在[0,base-1] 段内的序号对应于已经发送b并被确认的分组。
- [base,nextseqnum-1]段内对应已经发送但未被确认的分组。
- [nextseqnum,base+N-1] 段内的序号能用于那些要被立即发送的分组,如果有数据来自上层的话。
- 最后,大于或者等于base+N的序号是不能使用的,直到当前流水线中未被确认的分组已得到确认为止。
GBN协议也被称为滑动窗口协议
可靠数据传输机制及其用途的总结TCP连接
TCP是一个全双工通信模型,简要概括如下图所示:
TCP发送缓存和接收缓存
TCP 报文段结构
TCP报文结构- 序号和确认号
TCP报文段首部中最重要的字段是序号和确认号。因为他们是TCP可靠传输服务的关键部分。
TCP 将数据看成是一个无结构的,有序的字节流。这里需要强调序号是建立在传送的字节流上的,而不是建立在传输的报文段的序列之上。
一个报文段的编号 是该报文段首字节的字节流编号。
文件数据划分成TCP报文段确认号是接收主机期望从发送主机收到的下一字节的序号。
可靠数据传输
TCP在发送数据后,假设丢包采用累计确认,后面的确认了则前面未确认的都认为已经接收到了,不在重传。
TCP三次握手-报文交换 关闭一条TCP连接 客户TCP经历的典型TCP状态序列 服务端TCP经历的典型TCP状态序列TCP 拥塞控制
TCP使用的端到端的拥塞控制,而不是使用网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈。
TCP拥塞控制算法:
- 慢启动
- 拥塞避免
- 快速恢复
总结:TCP控制是:每个RTT内cwnd线性(加性)增加1MSS,然后出现3个冗余ACK事件时 cwnd减半(乘性减)。因此,TCP拥塞控制常被称为 加性增,乘性减拥塞控制方式。
TCP是非常复杂的,它涉及了连接管理(三次握手,四次挥手)、流量控制(滑动窗口)、往返时间估计(RTT加权)、以及可靠数据传送(确认、定时器、重传以及序号机制)