#第五章 运输层

计算机网络-读书笔记专栏 ->https://www.nowcoder.com/creation/manager/columnDetail/j5a3Kj


数据在两台主机间传送的整个过程:

●在物理层.上可以透明地传输数据的比特流;

●在数据链路层上使得各条链路能传送无差错的数据帧(数据帧按顺序、无丢失、不重复)

●在网络层.上提供了路由选择和网络互连的功能,使得主机A发送的数据分组(packet)能够按照合理的路由到达主机B。但是在这一过程中,到达主机B的数据并不一定是最可靠的。

●为了提高网络服务的质量,在传输层需要再次优化网络服务,并向高层用户屏蔽通信子网的细节,使高层用户看见的就好像在两个传输层实体之间有一条端到端的、可靠的、全双工的通信通路一样。

流式服务:

●发送TCP从发送应用程序接收到字符流,从这个流中提取适当的长度创建为叫做报文段的分组,》然后将它们发送到网络.上。

●接收TCP则接收报文段,从中提取数据,若它们没有按序到达还要将它们排序,并将它们作为字符流交付给接收应用程序。 捎带:确认可随数据一起发送

复用与分用

●复用是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据(当然需要加上适当的首部) ;

●而分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。

●要能正确地将数据交付给指定应用进程,就必须给每个应用进程赋予一个明确的标志。

●在TCP/IP网络中, 使用一种与操作系统无关的协议端口号(protocolport number) (简称端口号)来实现对通信的应用进程的标志。

软件端口与硬件端口
  1. 两个不同的概念。
  2. 在协议栈层间的抽象的协议端口是软件端口。
  3. 路由器或交换机上的端口是硬件端口。
  4. 硬件端口是不同硬件设备进行交互的接口,而软徉端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
TCP/IP运输层端口

● 端口用- -个16位端口号进行标志,允许有65,535个不同的端口号。 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的 各进程。在互联网中,不同计算机的相同端口号是没有联系的。

由此可见,两个计算机中的进程要互相通信,不仅必须知道 对方的端口号(为了找到对方计算机中的应用进程), 而且 还要知道对方的IP地址(为了找到对方的计算机)。

两大类端口

● 服务器端使用的端口号
1.熟知端口,数值一般为0 ~ 1023。
2.登记端口号,数值为1024 ~ 49151,为没有熟知端口号的应用程序 使用的。使用这个范围的端口号必须在IANA登记,以防止重复。\

● 客户端使用的端口号
1.又称为短暂端口号,数值为49152 ~ 65535, 留给客户进程选择暂时 使用。
2.当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动 态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

UDP:一种无连接协议

提供无连接服务。

  • 在传送数据之前不需要先建立连接。
  • 传送的数据单位协议是UDP报文或用户数据报。
  • 对方的运输层在收到UDP报文后,不需要给出任何确认。
  • 虽然UDP不提供可靠交付,但在某些情况下UDP是一种最有效
  • 的工作方式。
TCP: 一种面向连接的协议

提供面向连接的服务。

  • 传送的数据单位协议是TCP报文段(segment)。
  • TCP不提供广播或多播服务。
  • 由于TCP要提供可靠的、面向连接的运输服务,因此不可避免
  • 地增加了许多的开销。这不仅使协议数据单元的首部增大很多,
  • 还要占用许多的处理机资源。
运输层的UDP用户数据报与网际层的IP数据报有很大区别。
  • IP数据报要经过互连网中许多路由器的存储转发。
  • UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
  • TCP报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是
  • 可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,
  • 而这些路由器也根本不知道上面的运输层是否建立了TCP 连接。

发送方UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。 应用层交给UDP多长的报文,UDP就照样发送,即一-次发送一个报文。 接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交 付上层的应用进程,一次交付- 一个完整的报文。 应用程序必须选择合适大小的报文。 若报文太长,UDP把它交给IP层后,IP 层在传送时可能要进行分片,这会 降低IP层的效率。 若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太 大,这也降低了IP层的效率。

UDP的主要特点

(1) UDP是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发 送数据之前的时延。
(2) UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂 的连接状态表。
(3) UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分, 而是保留这些报文的边界。UDP -次交付一个完整的报文。
(4) UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。 这对某些实时应用是很重要的。很适合多媒体通信的要求。
(5)UDP支持一对一、-对多、多对一-和多对多的交互通信。
(6) UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。\

TCP最主要的特点

TCP是面向连接的运输层协议,在无连接的、不可靠的IP网络 服务基础之_上提供可靠交付的服务。为此,在IP的数据报服务 基础之.上,增加了保证可靠性的一系列措施。

TCP最主要的特点

  • TCP是面向连接的运输层协议。
  • 每一条TCP连接只能有两个端点(endpoint),每-条TCP连接只能是点对点的(一对一)。
  • TCP提供可靠交付的服务。
  • TCP提供全双工通信。\
面向字节流
  1. TCP中的“流”(stream)指的是流入或流出进程的字节序列\
  2. “面向字节流” 的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
TCP面向流的概念
  • TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
  • 但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全样
TCP报文段的首部格式

● TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。
● 一个TCP报文段分为首部和数据两部分,而TCP的全部功能都 体现在它首部中各字段的作用。
●TCP报文段首部的前20个字节是固定的,后面有4n字节是根 据需要而增加的选项(n是整数)。因此TCP首部的最小长度是 20字节。

累积确认
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
优点:容易实现,即使确认丢失也不必重传。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

TCP(Transmission Control Protocol),即传输控制协议,是面向连接的运输层协议。
TCP传输,是一种面向连接(连接导向)的、可靠的、于字节流的运输层通信协议,在简化的计算机网络模型中,它完成传输层所指定的功能。
TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。 然后接收端实体对已成功收到的字节发回一个相应的确认;如果发送端实体在合理的往返时延内未收到确认,那么对应的数据将会被重传。

TCP如何提供传输的可靠性?

  1. TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
  2. TCP的接收端必须丢弃重复的数据。
  3. TCP提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。
  4. TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。
  5. TCP传输是传输层.上与网络层、应用层间的数据传送。它以报文段为单位进行传输的传输方式,超时重传的策略等,都为传输提供了可靠性。
  6. TCP传输的可靠实现保证了网络的畅通,为人们的生活带来巨大的方便。

TCP标准强烈不赞成发送窗口前沿向后收缩

重传时间的计算:不同的连接,重传时间是不同的
固定时间:同一个连接,重传时间也不是固定的。
对每一个连接动态更改
动态算法:
动态估算往返时间(RTT)
关键: 如何精确估算RTT
重传时间= 2 XRTT

运输连接的三个阶段

TCP是面向连接的协议。

TCP连接有三个阶段:
1.连接建立
2.数据传送
3.连接释放\

TCP连接的管理就是使TCP连接的建立和释放都能正常地进行

TCP连接建立过程中要解决的三个问题
1.要使每一方能够确知对方的存在。
2.要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。
3.能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

服务器方式
● TCP 连接的建立采用客户服务器方式。
● 主动发起连接建立的应用进程叫做客户(client)。
● 被动等待连接建立的应用进程叫做服务器(server)。

TCP 的连接建立

● TCP建立连接的过程叫做握手。 握手需要在客户和服务器之间交换三个TCP报文段。称之为三报文 握手。
● 采用三报文握手主要是为了防止已失效的连接请求报文段突然又传 送到了,因而产生错误。