## 传输层

传输层

  传输层的任务是将数据从进程传到进程,实现进程之间的数据传递。传输层起到连接资源子网层和通信子网层的作用。
在这里插入图片描述

  • 传输层协议有TCP和UDP两种,一种是可靠的面向连接的传输,一种是不可靠的无连接的传输。
  • 要在网络中进行进程之间的通信,我们首先需要知道是哪个进程,需要使用三元组来标识,还需要解决进程之间相互作用的模式。

网络环境中进程标识(三元组)

  • 网络环境中的完整进程标识由三部分组成:主机地址,进程端口,进程所使用的的传输层协议TCP/UDP。
  • 例如(IP,80,TCP)

一对通信的进程的标识(五元组)

  • 由五部分组成:所用传输层协议,A主机地址,A进程端口,B主机地址,B进程端口

进程间相互作用模式

  • 采用Client/Server模型
  • 客 户— 一次进程通信中发起的一方;
  • 服务器— 接受进程通信的请求,提供服务的一方;
  • 每一次通信由客户进程随机启动;
  • 服务器进程处于等待状态,及时响应客户服务请求。

服务器会如何处理并发请求呢:并发服务器和重复服务器

  • 并发服务器:(1)并发服务器的核心一个守护程序(daemon),守护程序在系统启动时启动,在没有客户服务请求到达时,并发服务器处于等待状态;
    (2)客户机的服务请求到达时,服务器根据客户的服务请求的进程号激活相应子进程,服务器回到等待状态;
    (3)并发服务器叫做主服务器(master),服务器叫做从服务器(slave);

  • 重复服务器:通过设置一个请求队列来存储客户机的服务请求;服务器采用先来先服务的原则来顺序处理客户机的服务请求。

传输控制协议TCP

  • TCP是一种面向连接的、可靠的传输层协议
  • TCP协议建立在不可靠的网络层IP协议之上,IP不能提供任何可靠性机制,TCP的可靠性完全由自己实现;
  • TCP的可靠性通过:建立连接,确认和超时重传,滑动串口机制进行流量控制,关闭连接来实现

TCP报文格式如下:
在这里插入图片描述
其中各字段意义如下:

  • 源端口和目的端口:各占2个字节。端口是传输层与高层的服务接口。
  • 序号:占4字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,在一个报文段中,序号为300,而报文中的数据共100字节。那么在下一个报文段中,其序号就是400。因此TCP是面向数据流的。和我们之前链路层不一样。
  • 确认号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号。由于序号字段有32bit长,可对4GB(即4千兆字节)的数据进行编号。
  • 报头长度:占4bit, 4Byte为单位。
  • 确认比特ACK:只有当ACK=1时确认序号字段才有意义。当ACK=0时,确认序号没有意义。
  • 同步比特SYN:在连接建立时使用。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在发回的报文段中使SYN=1和ACK=1。因此,同步比特SYN为1,就表示这是一个连接请求或连接接受报文,而 ACK比特的值用来区分是哪一种报文。
  • 终止比特FIN:用来释放一个连接,当FIN=1时.表明欲发送的字节串已经发完,并要求释放传输连接。
  • 窗口大小:占2字节。窗口字段实际上是报文段接收方的接收窗口,单位为字节。通过此窗口告诉对方,“在未收到我的确认时,你能发送的数据的字节数至多是此窗口的大小。
  • 检验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。

TCP报文可靠传输包括三个步骤:(1)建立连接(2)差错控制和超时重传,流量控制(3)关闭连接

建立TCP连接(三次握手)

  1. 主机1 首先发起TCP 连接请求,并在所发送的数据段中将控制字段中的SYN置为“1”、ACK置为“0”,并设置数据起始序号为x.
  2. 主机2 收到该报文,若同意建立连接,则发送一个连接接受的应答数据段,其中控制字段的SYN 和ACK均被置“1”,指示对第一个SYN 报文段的确认,响应序号x+1,表示对指定报文的响应,同时指定自己的数据序号y,以继续握手操作;否则,主机2 要发送一个将RST置为“1”的应答数据段,表示拒绝建立连接。
  3. 主机1 收到主机2 发来的同意建立连接数据段后,还有再次进行选择的机会,若其确认要建立这个连接,则向主机2 发送确认数据段,确认序号为y+1,同时自己的数据需要为x+1,用来通知主机2 双方已完成建立连接;若主机1已不想建立这个连接,则可以发送一个将RST置为“1”的应答数据段来告之主机2 拒绝建立连接。
    如下图所示
    在这里插入图片描述

差错控制

  TCP采用校验、确认以及超时重传,进行差错控制。发送方会对发送数据进行处理生成校验码,并设置在校验码字段中,随数据一起发送

  • 接收方对数据进行校验,判断数据传输是否出现错误;
  • 接收方对正确接收到的数据进行确认;
  • 发送方发送数据时,启动定时器,超时未接收到确认,则重传数据。

TCP的超时重传机制:采用单一计时器

  • 发送TCP分段时,如果没有重传定时器开启,那么开启;如果已有重传定时器开启,不再开启
  • 收到一个非重复ACK时,如果有数据在传输中,重新开启重传定时器;如果没有数据在传输中,则关闭重传定时器
  • 未收到确认造成定时器超时,重传所有发出未确认的分段
  • 收到重复ACK时,超过3个,则立即重传重复确认的数据,延迟确认的机制

流量控制

  接收方和发送方都有一定大小的接收和发送缓冲区。发送方的发送速度不能超过接收方的接收速度。为了防止由于发送端与接收端之间的不匹配而引起数据丢失,TCP采用滑动窗口进行流量控制。双方通过窗口大小来告诉对方,在没有收到确认前,最多可以发送的数据量。

  • 发送窗口=min{拥塞窗口,通告窗口}
  • 拥塞窗口:从通信子网拥塞程度考虑确定的在没有收到接收方确认情况,发送方可以发送的数据量
  • 通告窗口:从接收方接收能力的角度考虑,确定的在没有收到接收方确认情况,发送方可以发送的数据量;由接收到的TCP报文中的窗口大小字段确定。

拆除TCP连接(四次握手)

  1. 当主机1 的数据已发送完毕时,其在等待确认的同时可发送一个将控制字段FIN 置“1”的数据段
    给主机2,表示请求中断主机1到主机2的连接。
  2. 若主机2 已正确接收主机1 的所有分段,则会发送一个数据段正确接收的确认段,同时通知本地相应的应用程序,对方要求关闭连接,接着再发送一个对主机1 所发送的FIN段进行确认的应答段。由此便拆除了一个方向的TCP连接
  3. 但是,此时在相反方向上,主机2 仍然可以向主机1 发送数据,直到主机2 数据发送完毕并要求关闭连接。这个方向上连接的拆除同样要经过(1)、(2)两步,由主机2发起FIN段,主机1应答确认ACK,拆除另一方向的TCP连接。

如下图所示
在这里插入图片描述

  • 连接的半关闭:TCP提供了连接的一端在结束后他的接收方还能接受另一端数据的能力,这就是所谓的半关闭

TCP的拥塞控制

  网络中的链路带宽、交换节点的存储和处理能力等都是网络的资源,这些资源一般是有限的,当网络的资源容量和处理能力大于网络负载的需求时,网络处于正常运转状态,反之网络会出现拥塞。网络拥塞的根本原因在于端系统向网络提供的负载大于网络资源容量和处理能力,主要体现在网络转发设备的存储空间有限,网络链路带宽有限以及网络转发设备的处理能力有限等。

  • TCP拥塞控制的基本策略是发送端通过跟踪传输数据的丢失现象和往返时延的变化确定网络的传输能力,并以此来调整发送数据率。

  • 拥塞窗口是每个TCP端系统在建立连接时创建的拥塞控制量,同样定义为发送端未收到确认时可以连续发送的字节数。拥塞窗口随网络传输能力变化而变化。当网络负载较小时,拥塞窗口可以设置比较大,发之,就要设置成相对较小值

  • TCP发送端的发送窗口大小受接收端设置的接收窗口以及TCP拥塞窗口大小的限制,如果这两个窗口不一致时,TCP选择其中较小的一个窗口作为其发送窗口大小。

  • TCP发送端可以通过两种方式检测到发送的数据在网络中丢失,一种是通过超时定时器,超时未收到对发送数据的正确确认,则判定所发数据丢失,另一种方式是,当发送端连续收到多个对其发送的某个数据分组的重复确认时,说明该分组后继分组在传输中出了问题。对两种不同方式检测到的数据包丢弃,TCP发送端采用不同的方式进行拥塞控制。
    (1)针对超时重发检测到的数据丢失,TCP发送端采用慢启动和拥塞避免方法
    (2)对通过重复确认发现的数据包丢失,TCP发送端采用快重发和拥塞避免方法进行拥塞控制。

  • 两个控制变量:拥塞窗口cwnd,慢启动门限ssthresh 两个启动算法:慢启动算法,拥塞避免算法

    如下图所示
    在这里插入图片描述

  • 拥塞窗口是拥塞控制中TCP能够发送的字节数

  • 慢启动门限是一个动态变化的门限值,用来判断当前采用慢启动算法还是拥塞避免算法,拥塞窗口大于慢启动门限时,采用拥塞避免算法,拥塞窗口小于慢启动门限时,采用慢启动算法。

  • 慢启动算法:刚建立连接,拥塞窗口设为一个最大报文长度,然后每收到一个ACK,cwnd增加一个最大报文长度,呈指数增长,知道到达慢启动门限或者丢包

  • 拥塞避免算法:当拥塞窗口cwnd的值超过慢启动门限时,就进入拥塞避免阶段,此时每个RTT时间内,cwnd的值最多增加一个最大报文长度,呈线性增长

用户报文协议UDP

  • UDP是一种无连接的、不可靠的传输层协议;
  • 在完成进程到进程的通信中提供了有限的差错检验功能
  • 设计比较简单的UDP协议的目的是希望以最小的开销来达到网络环境中的进程通信目的;
  • 进程发送的报文较短,同时对报文的可靠性要求不高,那么可以使用UDP协议。

TCP和UDP对比如下
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值