计算机网络之传输层

285 阅读7分钟

从通信和信息处理的角度看,运输层向它上面的应用层服务提供通信服务 ——《计算机网络(第七版)》

1.概述

传输层协议为运行在不同 HOST 上的进程提供一种逻辑通信机制,且系统在端系统即主机上运行。作为发送方的主机将上层应用递交的信息分成一个或多个 segment 向下传递给网络层,作为接收方的主机将收到的 segment 封装好再发送给上层应用。

2.传输层VS网络层

1.网络层只是给主机之间提供逻辑通信机制。

2.传输层则提供给主机间的进程之间的逻辑通信机制,位于网络层之上,依赖于网络层的服务,但是会对网络层提供的服务进行增强。

3.传输层的协议以及功能

3.1. 多路分用/多路复用

3.1.1.复用

发送端接收上层数据,为每块数据加上其他信息,封装成 segment,发送给网络层

3.1.2.分用

接收端接收网络层数据,将每块 segment 发送到正确的进程

1.无连接分用

UDP是根据(目的IP地址,目的端口号)来分发不同的Segment image.png

2.有连接分用

TCP是根据(源IP地址,目的IP地址,源端口号,目的端口号)来分发不同的Segment,由于TCP是一对一的,一个客户端进程对应一个服务器进程(或者线程)

image.png

假如服务器端同一个进程与多个客户端进程通信,拆分进程 image.png

3.2. UDP(User Datagram Protocol)用户数据报协议

UDP协议只是再IP协议上增加了 复用/分用简单的错误检验 功能。

3.2.1. UDP特点

1.UDP是无连接的

发送之前不需要建立连接,因此减少了许多空间开销和发送数据之前的迟延

2.UDP尽最大努力交付,不保证可靠交付。

3.UDP面向报文

4.UDP无拥塞控制

因为网络出现的拥塞不会对源主机产生影响,故可应用在某些实时的应用上,即允许在网络拥塞时丢失一些数据,但不允许数据有太大的时延

5.支持一对一,一对多,多对多通信

6.首部开销小

3.2.2 优势

  1. UDP无需进行连接(减少了传输的迟延)
  2. UDP实现简单,不需要维护连接状态
  3. 头部开销小
  4. 无拥塞控制,可应用于实时交互应用

因此UDP常应用于 DNS,SNMP,流媒体,LAN通信,广播通信

如何增强UDP的可靠性?应用层增加可靠机制,增加错误恢复机制

3.2.3 UDP的校验和

发送方:把检验和字段设置为全0,将首部和UDP用户数据报看成是由许多16位的字符串接起来,进行求和,最后求反码,放入检验和字段。发送 接收方:计算检验和是否和检验和字段相同,不相等则有错误,相等则有可能有错误。

3.3 流水线机制与滑动窗口

为了解决停等协议(发送一个分组,收到该分组的 ACK 后才发送下一个分组)的资源利用率太低的问题,使用更大的序列号范围,发收方设置更大的存储空间和缓存分组,

1.流水线机制

流水线机制就是允许发送方在收到 ACK 前连续发送多个分组 如图: image.png

2.滑动窗口协议( Sliding Window Protocol)

窗口的意思为:允许使用的序列号范围,若窗口大小为N ,则最多有N个等待确认的消息,滑动窗口为:随着协议的运行,窗口在序列号空间内向前滑动 滑动窗口协议包括:GBN、SR

1. GBN ( Go-Back-N )

序列号分为四种情况:该序列号下的分组已发送且准确收到ACK、该序列号下的分组已发送但未收到ACK、该序列号还被使用、目前不可用的序列号;

该协议下可以连续发送多个分组,且每一个分组发送后都要设置一个对应的计时器,而如果在计时器响应后仍然没有收到相应的ACK报文,就要重新发送相应的分组;例如:此时发送了4个分组,分别为0,1,2,3号,而收到的ACK只有0、1,故证明从2开始的分组就没有被接受,故需要重传2、3。(该协议不保存乱序的分组)

如图: image.png

(这种为累积确认ACK机制,存在的缺陷为重传了过多不必要的分组)

2. SR ( Selective Repeat /选择重传)

该协议对比GBN区别在于,多了个接收方的窗口,接收方需要缓存乱序的分组,并且接收方对分组单独确认。发送方只重传没收到ACK的分组 如图: image.png

(存在无法分辨重复使用的序列号是重传的还是新序列号,(较小的序列号位数,较大的窗口))

因此SR协议的 发送方窗口大小+接收方窗口大小<=序列号的位数

3.4 TCP(Transmission Control Protocol)传输控制协议

3.4.1 特点

1. 点对点

2. 可靠,按序的字节流

3. 面向连接

通信双方在发送数据之前必须建立连接,连接状态只在端系统维护

4. 全双工

通信允许线路上同时传输双向的数据

5.流量控制,拥塞控制

3.4.2 流量控制

当分组传输速度过快,接收者来不及接受,就会发生分组丢失,而流量控制就是控制传递的速度,从而避免分组丢失。接收方会在ACK中加上接收窗口的大小,用来控制发送速度。

死锁:假如 ACK 此时发送的 RcvWindow=0 ,发送方等待接收方更新ACK,可是后一个不为0的 RcvWindow 发送过程丢失了,双方便存在同时等待,即死锁。为了解决死锁问题,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。

image.png

3.4.3 拥塞控制

当传输的速度太快或者发送的数据太多,就会造成网络拥塞。

1. 两种不同的拥塞控制方法

1.1 端到端的控制

网络层不需要提供显式支持,端系统通过观察loss、dalay事件来观察是否出现了网络拥塞(tcp 使用的方法)

1.2 网络辅助

路由器向发送方显示反馈网络拥塞的信息

代表:ATM ABR / RM cells

2. 拥塞控制算法

如何感知拥塞?设置一个loss事件=timeout 发生或者 重复发送了3个相同ACK

当loss=重复发送ACK,CongWin切半,保持线性提速;当loss=timeout ,CongWin -> 1

image.png

2.1 慢开始

image.png

2.2 拥塞控制

image.png

3.4.4 连接管理

1. 三次握手

首先,TCP标志位有6种

image.png 这里只提到了SYN、ACK、FIN

为什么TCP要三次握手?其目的是为了确保收发双方都能知道自己和对方的收发能力是正常的 那三次握手是怎么确保的呢?

第一次握手 :A主动向B提出连接请求,A发送SYN

第二次握手 :B收到SYN后,向A发送ACK+SYN,应答B的SYN以及申请连接(此时A确认了B是可以收以及发,而B确认了A是可以发的)

第三次握手 :A接收到B发送的信息后,也发送一个ACK应答(此时当B收到ACK后,B便确认了A是可接收的)到目前为止,A和B都互相确认了彼此是可发可收的。

2. 四次挥手

四次挥手的原理也是差不多,也是要知道双方都确认彼此同意关闭

第一次挥手 :A主动向B提出要关闭连接的请求,A向B发送FIN

第二次挥手 :B收到FIN后,向A发送ACK,确认对方的关闭请求,但是此时应用可能还需传送数据,故等待“上层的意志”

第三次握手 :等等不需用到连接传输数据了,B发送自己的FIN请求关闭

第四次握手 :A收到FIN后,需要向B发送一个ACK响应,至此A和B都确认了对方是同意关闭,且都是确认了彼此是否同意

3.5 UDP VS TCP(待更新)

1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP)
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证