计算机网络学习(四)传输层 上
正在学习计算机网络课程,以下是学习的一些笔记,知识点分类摘录自mooc网哈尔滨工业大学计算机网络课程:https://www.icourse163.org/course/HIT-154005。部分定义摘录自《计算机网络-自顶向下方法》
文章目录
运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。 该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。与往常一 样,我们将特别关注因特网协议,即 TCP 和 UDP 运输层协议。
1.传输层服务
1.1 传输层服务与协议
- 传输层协议为运行在不同主机上的进程提供了一种逻辑通信 (logic communication) 功能(非物理通信)。
- 通过逻辑通信,运行不同进程的主机好像直接相连一样;
- 实际上,这些主机也许位于地球的两侧,通过很多路由器及多种不同类型的链路相连。
- 应用进程使用传输层提供的逻辑通信功能彼此发送报文,而无需考虑承载这些报文的物理基础设施的细节
- 传输层协议是在端系统中而不是在路由器中实现的。
- 发送方:将应用递交的消息分成一个或多个的报文段(segment),并向下传递给网络层
- 接收方:将接收到的 segment 组装成消息,并向上交给应用层
- 网络应用程序可以使用多种的传输层协议。 例如,因特网有两种协议,即 TCP 和 UDP。 每种协议都能为调用的应用程序提供一组不同的传输层服务。
1.2 传输层 vs 网络层
- 网络层提供了主机之间的逻辑通信
- 传输层为运行在不同主机上的进程之间提供了逻辑通信。
- 关系类比:
- 有两个家庭, 一家位于美国东海岸,一家位于美国西海岸,每家有 12 个孩子。 每人每星期要互相写一封信,每封信都用单独的信封通过传统的邮政服务传送。
- 每个家庭有个孩子负责收发邮件,西海岸家庭是Ann 而东海岸家庭是 Bill。每星期Ann去她的所有兄弟姐妹那里收集信件,并将这些信件交到每天到家门口来的邮政 服务的邮车上。 当信件到达西海岸家庭时, Ann 也负责将信件分发到她的兄弟姐妹手上。 bill的工作相同。
- 在这个例子中,邮政服务为两个家庭间提供逻辑通信,邮政服务将信件从一家送往另一家,而不是从一个人送往另一个人。
- Ann和 Bill为堂兄弟姐妹之间提供了逻辑通信, 从堂兄弟姐妹们的角度来看, Ann和 Bill 就是邮件服务,尽管他们只是端到端交付过程的一部分(即端 系统部分) 。
- 堂兄弟姐妹 = 应用进程
- 信封里的信 = 应用层报文
- 房子 = 主机(端系统)
- Ann、Bill = 传输层协议
- 邮政服务 = 网络层协议
- Ann 和 Bill 并没有参与任何一个中间邮件中心对邮件进行分拣,或者将邮件从一个邮件中心 送到另一个邮件中心之类的工作。 类似地,运输层协议只工作在端系统中。 在端系统中, 运输层协议将来自应用进程的报文移动到网络边缘(即网络层) ,反过来也是一样,但对有关这些报文在网络核心如何移动并不作任何规定。
- Ann 和 Bill 所能提供的服务明显受制于邮政服务所能提供的服务。与此类似,运输协议能够提供的服 务常常受制于底层网络层协议的服务模型。
1.3Internet 传输层协议
-
TCP (传输控制协议) ,它为调用它的应用程序提供了一种可靠的、按序的、面向连接的服务。
- 拥塞控制
- 流量控制
- 建立连接
-
UDP (用户数据报协议) ,它为调用它的应用程序提供 了一种不可靠、无连接的服务。
- 基于“尽力而为(best-effect)”的网络层,没有做可靠性方面的扩展
- 两种服务均不保证延迟和带宽
2.多路复用/分用
- 接收端进行多路分用:传输层依据头部信息将接收到的 segment 交给正确的 socket,即不同的进程
- 发送端进行多路复用:从多个 socket 接收数据,为每块数据封装上头部信息,生成 segment,交给网络层
- 如何工作?
- 主机接收到 IP 数据报(datagram)
- 每个数据报携带源 IP 地址和目的 IP 地址
- 每个数据报携带一个传输层的段(segment)
- 每个段携带源端口号和目的端口号
- 主机收到 segment 后,传输层协议提取 IP 地址和端口号信息,将 segment 导向相应的 socket
- 主机接收到 IP 数据报(datagram)
- 无连接的分用
- UDP的Socket 用二元组(目的 IP 地址,目的端口号)来标识
- 当主机收到UDP段后,检查该段中的目的端口号,将该UDP段导向绑定在该端口号的Socket
- 来自不同源 IP 地址或源端口号的 IP 数据包被导向同一个Socket
- 面向连接的分用
- TCP的Socket 用四元组(源 IP 地址,源端口号,目的 IP 地址,目的端口号)来标识
- 接受端将利用这四个值将segment 导向合适的Socket
3.UDP:无连接传输协议
3.1UDP概述
- 基于Internet IP 协议: UDP 只是做了运输协议能够做的最少工作。 除了复用/分解功 能及少量的差错检测外,它几乎没有对 IP 增加别的东西。
- UDP 从应用进程得到数据,附加上用于多路复用/分解服务的源和目的端口号字段,以及两个其他的小字段, 然后将形成的报文段交给网络层。
- 网络层将该运输层报文段封装到一个 IP 数据报中,然后尽力而为地尝试将此报文段交付给接收主机。 因此,UDP段可能丢失或非按序到达
- 使用 UDP 时,在发送报文段之前,发送方和接收方的运输层实体之间没有握手。因此, UDP 被称为是无连接的。
- DNS 是一个通常使用 UDP 的应用层协议的例子。
- 有许多应用更适合用 UDP,原因:
- 关于何时、发送什么数据的应用层控制更为精细
- 无需连接建立( 因此 UDP 不会引人建立连接的时延,这可能是 DNS 运行在 UDP 之上而不是运行在 TCP 之上的主要原因)
- 无连接状态(UDP 不维护连接状态,也不跟踪这些相关参数。 因此,某些专门用于某种特定应用的 服务器当应用程序运行在 UDP 之上,一般都能支持更多的 活跃客户 )
- 分组首部开销小
3.2 UDP报文段结构
- 通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程(即执行分解功能)
- 长度字段指示了在 UDP 报文段中的字节数(首部加数据) 。
- 接收方使用检验和来检查在该报文段中是否出现了差错。
3.3 UDP校验和(checksum)
- 目的:检查UDP段在传输过程中是否发生了错误(如位翻转)
- 发送方:
- 将段的内容视为16-bit 整数
- 计算校验和:发送方的 UDP 对报文段中的所有 16 比特字的和进行反码运算, 求和时遇到的任何溢出都被回卷(wraparound,最高位的进位加在和的后面)
- 发送方将校验和放入校验和字段
- 接收方:
- 全部的 4 个 16 比特字**(包括检验和)加在一起。 如果该分组中没有引人差错,则显然在接收方处该和将是 1111111111111111**
- 如果这些比特之一是 0 ,那么我们就知道该分组中已经出现了差错。
- 校验和计算示例:
- 为什么 UDP 首先提供了检验和?
- 不能保证源和目的之间的所有链路都提供差错检测;这就是说,也许这些链路中的一条可能使用没有差错检测的协议。
- 此外,即使报文段经链路正确地传输,当报文段存储在某台路由器的内存里时,也可能引入比特差错。
- 在既无法确保连链路的可靠性,又无法确保内存里的差错检测的情况下, 如果端到端数据传输服务要提供差错检测.,UDP 就必须在端到端基础上在运输层提供差错检测 。 这是一个在系统设计中被称颂的端到端原则( end -end principle) 的例子 。
- 虽然 UDP 提供差错检测,但它对差错恢复无能为力 。 UDP 的某种实现只是丢弃受损的报文段;其他实现是将受损的报文段交给应用程序并给出警告。