传输层

(一)传输层提供的服务

1.传输层的功能

2.传输层寻址与端口

3.无连接服务与面向连接服务

UDP的主要特点

UDP数据报和IP分组区别

TCP连接和网络层的虚电路的区别

(二)UDP协议

UDP报文段

UDP校验

(三)TCP协议

TCP的主要特点

TCP报文段

2.TCP连接管理

3.TCP可靠传输

TCP实现可靠传输的机制

4.TCP流量控制

TCP传输效率

5.TCP拥塞控制

拥塞控制算法:

慢开始和拥塞避免

快重传和快恢复

计算机网


(一)传输层提供的服务

1.传输层的功能

提供应用进程间的逻辑通信。(网络层提供主机之间的逻辑通信)

差错检测 对收到报文的首部和数据部分是进行差错检测(网络层只检查IP数据报首部并不检查数据部分)。

提供无连接或面向连接的服务 根据应用的不同,如有些数据传输要求实时性(实时视频会议)传输层需要有两种不同的传输协议,即面向连接的传输控制协议TCP和无连接的传输控制协议UDP。TCP提供一种可靠性较高的传输服务,UDP提供一种高效率的但不可靠的传输服务。

复用和分用 复用指发送方不同的应用进程都可以使用同一个传输层协议传送数据。分用指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。

以上功能针对整个传输层而言,对于面向连接的服务还有两个功能

连接管理 通常把连接的定义和建立的过程称为握手(TCP的“三次握手”机制)

流量控制和拥塞控制 以对方和网络普遍接受的速度发送数据,防止网络拥塞造成数据的丢失。

 

在传输层应根据什么原则确定使用面向连接还是无连接服务?

如何理解应用进程好像在两个传输层实体之间有一条端对端的逻辑通信信道

2.传输层寻址与端口

端口 传输层服务访问点SAP。能够让应用层的各种应用进程将其数据通过端口向下交付给传输层以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层的相应进程。即端口就是用来标识应用层的进程。

端口号 端口用一个16位端口号进行标识,允许2¹⁶ =65536个端口号。端口号就具有本地意义,即端口号只是为了标识本计算机应用层中的各进程。

根据端口号范围可将端口分为三类。

  1. 熟知端口/保留端口(服务端端口):熟知为0-1023,当TCP/IP一些重要的应用程序出现时,必须为它指派一个熟知端口,以便其他应用进程与其交互。
  2. 登记端口(服务端端口):数值为1024-49151。为没有熟知端口号的应用程序使用的,使用这类端口号必须在IANA登记,以防止重复

  1. 短暂端口(客户端端口):数值为49152-65535。由于这类端口号仅在客户进程运行时才动态选择,所以称为短暂端口或临时端口。通信结束后,该端口自动空闲下来,提供其他客户进程使用。

套接字 

在网络中采用发送方和接收方的套接字组合识别端点,套接字唯一标识了网络中一个主机和主机中的一个进程。

  1. 一台拥有IP地址的主机可以提供许多服务(web服务、FTP服务、SMTP服务等)这些服务完全可以通过一个IP地址来实现。
  2. 只有通过IP地址和端口号才能唯一确定一个连接的端口,称为套接字,即套接字Socket=(主机IP地址,端口号)                            TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}
  3. 唯一标识了网络中的某台主机上的某个应用进程。

 

3.无连接服务与面向连接服务

UDP的主要特点

UDP只在IP数据报服务之上增加了复用分用和差错检测功能。

  1. 传送数据前无需建立连接,数据到达后无需确认。减小开销和发送数据之前的时延
  2. 不保证可靠交付。(交由应用层保证可靠交付)
  3. 面向报文,适合一次性传输少量数据的网络应用,报文头部短,传输开销小。
  4. UDP无拥塞控制,适合实时应用
  5. UDP首部开销小,8B。TCP20B。

 

应用层给UDP多长的报文,UDP只加上首部发送。即一次发送一个完整报文。

UDP数据报和IP分组区别

IP分组要经过互联网中许多路由器的存储转发,但UDP数据报是在传输层的端到端抽象的逻辑信道中传送的,UDP数据报只是IP数据报中的数据部分,对路由器是不可见的。

TCP连接和网络层的虚电路的区别

 

 

在网络传输层,TCP模块中 有一个TCB(传输控制模块,Transmit Control Block)用于记录TCB运行过程中的变量,对于有多个连接的TCP,每个连接都有一个TCB。TCB结构的定义包括这个连接使用的源端口、目的端口、目的IP、序号、应答序号、对方窗口大小、自己窗口大小、TCP状态等。

 

当应用程序使用面向连接的TCP和无连接的IP时,这种传输是面向连接还是面向无连接的?

 

(二)UDP协议

UDP用户数据报只能提供不可靠交付,但UDP在某些方面有优点:

  1. 发送数据之前bixuyaojianlilianjier
  2. UDP的主机不需要维持复杂的连接状态表
  3. UDP用户数据报只有8个字节的首部开销
  4. 网络出现的拥塞不会是源主机的发送速率降低(没有拥塞控制)这对某些实时应用(IP电话、实时视频会议)来说很重要
  5. UDP支持一对一、一对多、多对一个多对多的交互通信。

UDP报文段

UDP数据报的组成

UDP校验

UDP校验只提供差错检测,在计算校验和时,要在UDP用户数据报之前临时加上12B的伪首部。包括源IP地址字段、目的IP地址字段、全0字段、协议字段(封装UDP报文的IP数据报首部协议字段为17)、UDP长度字段(UDP首部8B+数据部分长度不包括伪首部)。伪首部只用于计算和验证校验和,既不向下传送,也不向上递交。

发送端

  1. 填上伪首部。
  2. 校验的时候如UDP数据报数据部分的长度不是偶数字节,则需要填入一个全0字节,保证UDP数据报是4B整数倍。但此字节和伪首部一样不发送。
  3. 伪首部+首部+数据部分采用二进制反码求和
  4. 将和进行求反码,再填入检验和字段。
  5. 去掉伪首部发送。

接收端

  1. 填上伪首部。
  2. 伪首部+首部+数据部分采用二进制反码求和
  3. 和全为1则无差错。否则校验出UDP数据报是错误的,可以丢弃或者交付上层,但需要附上错误报告。

通过伪首部,不仅可以检查源端口号、目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。

虽然该检验方法检错能力不强,但是简单,处理快。

(三)TCP协议

TCP的主要特点

  1. 面向连接(虚连接),不提供广播或多播服务
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  3. TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。
  4. 提供全双工通信。两个端点都设置发送缓存(准备发送的数据和已发送但未确认的数据)和接受缓存(按序到达但未被应用程序读取的数据和不要序到达的数据)
  5. 报文段头部长,传输开销大
  6. 面向字节流。TCP把应用程序交下来的数据看成无结构的字节流。

TCP报文段

序号:TCP连接中传送的字节流中的每一个字节都是按顺序编号,该字段表示本报文段所发送的数据的第一个字节的序号

确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明序号N-1为止的所有数据已经确认收到。

数据偏移(首部长度):TCP报文段的数据起始距离TCP报文段的起始处有多远,以4B为单位。

紧急位URG:URG=1,表明此报文段有紧急数据,高优先级的数据,需要尽快传送,不需要在缓存里排队,搭配紧急指针字段使用。优先传送。

确认位ACK:ACK=1时确认号有效,建立连接后所有传送的报文段都必须将ACK置1。

推送位PSH:PSH=1时,接收方尽快交付接收应用进程,不再等待缓存填满再向上交付。优先交付。

复位RST:RST=1,表明TCP连接中出现严重出错,必须释放连接,然后重新建立连接。

同步位SYN:SYN=1,表明这是一个连接请求/连接接受报文。

终止FIN:FIN=1,释放连接。

窗口:指发送本报文段的一方的接收窗口,即允许对方发送的数据量。

检验和:检验首部+数据,检验时加上12B伪首部,协议字段为6。

紧急指针:URG=1时有意义,指本报文段中紧急数据的字节数

选项:最大报文段长度MSS(每一个TCP报文段中的数据字段的最大长度,默认536B)、窗口扩大(3B)、时间戳(10B(时间戳值字段4B和时间戳回送回答字段4B))、选择确认(SACK)…
填充

在TCP报文段的首部中只有端口号而没有IP地址。当TCP将其报文段交给IP层时,IP如何知道目的IP地址的? 

2.TCP连接管理

TCP的传输连接分为三个阶段:

连接建立⇒数据传送⇒连接释放

TCP连接管理就是使传输连接的建立和释放都能正常运行。

TCP把连接作为最基本的抽象,每一条TCP连接有两个端点,TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。TCP连接的端点叫做套接字(Socket)或插口。端口号拼接到IP地址即构成了套接字。

每一条TCP连接唯一地被通信两端的两个端点(两个套接字)确定。

TCP的连接和建立采用客户/服务器方式。主动发起连接建立的应用进程叫做客户(Client),被动等待连接建立的应用进程叫做服务器(Server)

TCP传输连接的建立采用“三次握手”的方法。

采用三次易握手的方法,目的是为了防止报文段在传输连接建立过程中出现差错。通过三处报文段的交互后。通信双方的进程之间就建立了一条传输连接,然后就可以用全双工的方式在该传输连接上正常地传输数据报文段了。

建立连接(三报文握手)

  1. 同步位SYN=1,序号seq=x。客户端发送连接请求报文段,无应用层数据。
  2. 同步位SYN=1,确认位ACK=1,序号seq=y,确认号ack=x+1。服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
  3. 同步位SYN=0,确认位ACK=1,序号seq=x+1,确认号ack=y+1。客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。

第二步和第三步为TCP连接分配缓存和变量会导致SYN洪泛攻击现象。

SYN洪泛攻击发生在OSI第四层,利用TCP协议的特性(三次握手)。攻击者发送TCP SYN。SYN是TCP三次握手中的第一个数据包,当服务器返回ACK后,该攻击者就不对其进行确认,则该TCP连接处于挂起状态(半连接状态),服务器收不到确认,则重复b发送ACK给攻击者,从而浪费服务器资源。攻击者向服务器发送大量的这种TCP连接,由于无法完成三次握手,服务器上这些TCP连接因为半连接状态而消耗CPU和内存,最后服务器可能死机,无法提供服务。

一旦数据传输结束,参与传输的任何一方都可以请求释放传输连接。在释放连接过程中,发送端进程与接收端进程要通过4次TCP报文段来释放整个传输连接。连接结束后,主机的资源(缓存和变量)被释放。

释放连接(四次握手)

  1. 数据传输结束后,通信双方都可以释放连接。现在客户端的应用进程先发送连接释放报文段,并停止再发送数据,主动关闭TCP连接。客户端的应用进程将连接释放报文段首部的结束位FIN=1,序号seq=u,等到服务器确认。
  2. 服务器回送确认报文段,确认位ACK=1,,确认号ack=u+1,序号seq=v。TCP服务器进程通知高层应用进程。从客户端到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。服务器若发送数据,则客户端仍要接收。
  3. 若服务器已经没有要向客户端发送的数据,其应用进程发送连接释放报文段,结束位FIN=1,确认位ACK=1,序号seq=w,ack=u+1,服务器主动关闭TCP连接。
  4. 客户端收到连接释放报文段后,必须发出确认报文段,确认位ACK=1,确认号ack=w+1,序号seq=u+1。等待2MSL(时间等待计时器(TIME-WAIT timer)设置的最长报文段寿命,MSL=2min),期间若收到服务器发送的连接释放报文段(客户端确认报文段丢失),则重启时间等待计时器。2MSL时间后彻底关闭连接。

客户机与服务器已经建立TCP连接,但客户机突然出现故障,为不浪费服务器资源,设置一个保活计时器(keeplive timer),服务器每收到一次客户数据,重置保活计时器(通常2h)若超过2h未收到数据,每75s发送一个探测报文段,十次后客户机仍无响应,则关闭连接。

3.TCP可靠传输

传输层:使用TCP实现可靠传输

网络层:提供尽最大努力交付,不可靠传输

可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。

TCP实现可靠传输的机制

校验:与UDP校验一样,增加伪首部。

序号:TCP是面向字节的。TCP将所要传送的报文看作是字节组成的数据流,并使每一个字节对应一个序号。在连接建立时,双方要确定初始序号。TCP每次发送的报文段的首部中的序号字段数值表示该报文段的数据部分的第一个字节的序号

确认:TCP的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加一。因此,确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。

重传:TCP的发送方在重传时间内没有收到确认就重传已发送的报文段。由于TCP的下层是一个互联网环境,IP数据报所选择的路由变化很大,所以运输层的往返时延的方差也很大。为了计算超时计时器的重传时间,TCP采用一种自适应的算法,动态改变重传时间RTTs(加权平均往返时间)。

  1. 记录每个报文段发出的时间以及收到相应的确认报文段的时间。时间差就是报文段的往返时间。
  2. 将各个报文段的往返时间样本加权平均,得到报文段的平均往返时间RTT
  3. 每测量到一个新的往返时间样本,就按公式重新计算一次平均往返时间。 RTT₁=(1-α)*(RTT₀)+α*(往返时延样本)    α越接近1表示RTT的值更新越快,一般推荐α=0.125。计时器的超时重传时间RTO应略大于RTT。

超时重传等待时间结束才重传,使用冗余确认方式,在超时事件发生之前,知道发送方是否丢失报文段(快速重传)

冗余ACK(冗余确认)

每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。

  1. 发送方发送1、2、3、4、5报文段
  2. 接收方收到1,返回1的确认报文段(确认号ack=2,期待收到下一个报文段2的第一个字节)
  3. 接收方收到3,返回1的确认报文段(冗余确认报文段,确认号ack=2)
  4. 接收方收到4,返回1的确认报文段(冗余确认报文段,确认号ack=2)
  5. 接收方收到5,返回1的确认报文段(冗余确认报文段,确认号ack=2)
  6. 发送方收到3个1号报文段的冗余确认报文段⇒认为2号报文段丢失,重传2号报文段。

在使用TCP传送数据时,如果有一个确认报文段丢失了,会不会一定引起对方数据的重传?

是否TCP和UDP都需要计算往返时间RTT?

假定在一个互联网中,所有的链路的传输都不出现差错,所有的结点也都不会发生故障。试问在该情况下TCP的“可靠交付”的功能是否就是多余的?

4.TCP流量控制

流量控制:让发送方的发送速率不要太快,要让接收方来得及接收。

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

在通信过程中,接收方根据自己接收缓存的大小,动态的调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方)发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值

A向B发送数据,连接建立时,B告诉A:“rwnd=400B”,设每一个报文段100B,报文段序号初始值为1。

 

 

接收窗口为0,当接收应用程序读取收到的数据,接收窗口扩大,发送方不发送数据,导致接收方无法发送确认告发送方接收窗口扩大,双方陷入死锁僵局。

TCP为每一个连接设有一个持续计时器 。只要TCP连接的一方收到对方地零窗口通知,就启动持续计时器。

若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1B的数据)而对方就在确认这个探测报文段时给出了现在的窗口值。

若窗口仍然是零,则接收到这个报文段的一方就重新设置持续计时器。若窗口不为零,则死锁的僵局就被打破。

 

可以使用不同的机制控制TCP报文段的发送时机

  1. TCP维持一个变量,等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
  2. 由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作。
  3. 发送方的一个计时器期限到了,这是就把当前已有的缓存数据装入报文段发送出去。

TCP传输效率

假定用户只发送1个字符,加上20字节的首部得到21字节的TCP报文段,再加上20字节的IP首部得到41字节的IP数据报。

接收方发出确认,构成的数据报为40字节(无数据发送时),

若需要接收方回复一个字符,则需要41字节的IP数据报和40字节的确认IP数据报。

则线路上传输俩个字符需要传送162字节的4个报文段,应适当推迟发回确认报文,尽量使用捎带确认方法。

5.TCP拥塞控制

出现拥塞的条件:对资源需求的总和>可用资源

网络中有许多资源同时呈现供应不足⇒网络性能变坏⇒网络吞吐量随输入负荷增大而下降。

拥塞控制:防止过多的数据注入到网络中。

拥塞控制与流量控制的性质对比

  1. 拥塞控制所要做的只有一个前提,就是使得网络能够承受现有的网络负荷。
  2. 拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器以及与降低网络传输性能有关的所有因素。
  3. 流量控制往往指在给定的发送端和接收段之间的点对点通信量的控制。
  4. 流量控制所要做的就是抑制发送端发送数据的速率,以便接收端来得及接收。
  5. 拥塞控制很难设计,因为它是一个动态的问题。
  6. 当前网络正朝着高速化的方向发展,很容易出现缓存不够大而造成分组的丢失。分组的都是是网络发生拥塞的征兆而不是原因。
  7. 在许多情况下,正是拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因。

拥塞控制分为闭环控制开环控制

  • 开环控制方法就是在设计网络时实现将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
  • 闭环控制是基于反馈环路的概念,属于闭环控制的有以下措施:
  1. 检测网络系统以便检测到拥塞在何时、何地发生。
  2. 将拥塞发生的信息传送到可采取行动的地方。
  3. 调整网络系统的运行已解决出现的问题。

拥塞控制算法:

假定:

数据单方向传送,另一个方向只传送确认。

发送端的主机在确定发送报文段的速率时,既要根据发接收端的接收能力,又要从全局考虑不使网络发生拥塞。即TCP要求发送端维护接收窗口rwnd和拥塞窗口cwnd

接收窗口:接收方根据受缓存设置的值,并告知给发送方,反映接收方容量。

拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。

接收方总是有足够大的缓存空间,发送窗口大小取决于拥塞程度。发送窗口=Min{接收窗口rwnd,拥塞窗口cwnd}

慢开始和拥塞避免

慢开始原理:

  1. 在主机刚刚开始发送报文段时可先设置拥塞窗口cwnd=1,设置为一个最大报文段MSS的数值。
  2. 在每收到一个对新的报文段的确认后,将拥塞窗口加一,既增加一个MSS的数值。
  3. 用该方法逐步增大发送端的拥塞窗口cwnd,可以使分组注入网络的速率更合理。

拥塞避免算法原理:

  • 为防止拥塞窗口cwnd的增长引起网络阻塞,需要一个状态变量,即慢开始门限ssthresh
  • 当cwnd<ssthresh时,使用慢开始算法
  • 当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法
  • 当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。
  • 其中,拥塞避免算法的做法为,发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,通常表现为按线性规律增长。

无论在慢开始阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(即未按时收到确认)就把慢开始门限ssthresh设置为出现拥塞时的发送窗口的一半(即ssthresh(慢开始门限):新的ssthresh门限值=½网络拥塞时的拥塞窗口cwnd,但不能小于2)。然后把拥塞窗口cwnd重新设定为1,执行慢开始算法。

可以减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够的时间把队列中积压的分组处理完毕。

一个传输轮次:发送了一批报文段并收到他们的确认的时间/一个往返时延RTT/开始d发送一批拥塞窗口内的报文段到开始发送下一批拥塞窗口内的报文段的时间。快重传和快恢复

快重传和快恢复

首先要求接收方每收到一个失序的报文段后立即发出重复确认,让发送方及早知道有报文段没有到达接收方。发送方只要连续收到3个重复确认就立刻重传对方尚未收到的报文段。(并非取消重传计时器,而是在某些情况下尽早的重传丢失的报文段。

 

快恢复算法:

  1. 当发送端收到连续3个重复的ACK,重新设置新的慢开始门限ssthresh=½cwnd
  2. 与慢开始不同的是拥塞窗口cwnd不是设置为1,而是设置为新的慢开始门限ssthresh
  3. 若发送窗口值还允许发送报文段,就按拥塞避免算法继续发送报文段。
  1. 当发送端收到连续3个重复的ACK,重新设置新的慢开始门限ssthresh=½cwnd
  2. 与慢开始不同的是拥塞窗口cwnd不是设置为1,而是设置为新的慢开始门限ssthresh+MSS
  3. 若收到的重复的ACK为n个(n>3)则将cwnd设置为ssthresh+nMSS
  4. 若发送窗口值还允许发送报文段,就按拥塞避免算法继续发送报文段。

 

计算机网

 

 

 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值