计网学习(五)——运输层

一、运输层协议概述

  1. 运输层作用:从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务

  2. 从运输层的角度看,通信的真正端点并不是主机而是主机中的进程

  3. 网络层和运输层有明显的区别:网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信
    在这里插入图片描述

  4. 运输层有两种不同的运输协议:面向连接的TCP和无连接的UDP

    1. 当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。
    2. 但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道
  5. TCP/IP运输层的两个主要协议都是互联网的正式标准,即:

    1. 用户数据报协议UDP —— UDP用户数据报
    2. 传输控制协议TCP —— TCP报文段
      在这里插入图片描述
  6. 两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU

  7. 复用和分用:

    1. 应用层所有的应用进程都可以通过运输层再传送到IP层(网络层),这就是复用
    2. 运输层从IP层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程,这就是分用
  8. 端口:又称协议端口号,属于运输层,用于标识不同网络应用程序或服务的一种机制

  9. TCP/IP的运输层用一个16位端口号来标志一个端口,端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。在互联网不同计算机中,相同的端口号是没有关联的。

  10. 16位的端口号可允许有65535 个不同的端口

  11. 两个计算机中的进程要互相通信,必须知道对方的IP地址 and 端口号,其中:IP地址相当于住所,端口号相当于该住所中的房间号

  12. 两个应用进程之间若是实现通信,需使用同一通信协议(UDP、TCP协议)并且需要相互知道对方的端口号是多少

  13. 端口号分类:

    1. 服务端使用的端口号:系统端口号(0-1023)、等级端口号(1024-49151)
      在这里插入图片描述

    2. 客户端使用的端口号:数值为49152~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号。这类端口号留给客户进程选择暂时使用

二、用户数据报协议UDP

  1. UDP协议主要特点:无连接、尽最大努力交付(即不保证可靠交付)、面向报文、没有拥塞控制、支持一对一、一对多、多对一、多对多的交互通信
  2. UDP数据报格式:
    在这里插入图片描述
  3. UDP基于端口分用示意图如下,当运输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点——应用进程
    在这里插入图片描述
  4. 如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。

三、传输控制协议TCP

  1. TCP协议主要特点:面向连接的运输层协议、提供可靠交付的服务、提供全双工通信、面向字节流
  2. 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一),TCP连接的端点叫做套接字(socket),格式为: 套接字socket = (IP地址:端口号)
  3. 每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
    在这里插入图片描述
  4. 同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。

四、可靠传输的工作原理

  1. 停止等待、自动重传请求(ARQ)协议:基本思想是发送方在发送数据帧后停止并等待接收方的确认,只有在收到确认后才发送下一个数据帧。如果发送方在超时时间内未收到确认,则重发当前数据帧。
  2. 连续ARQ协议:基本思想是允许发送方连续发送多个数据帧而不需要等待确认。接收方接收数据帧并发送确认,如果发送方在超时时间内未收到确认,则重发相应的数据帧。
  3. 滑动窗口协议:通过维护发送窗口和接收窗口来实现数据的可靠传输
  4. 连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置
  5. 接收方一般都是采用累积确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示到这个分组为止的所有分组都已正确收到
  6. 发送窗口、发送缓存、接收窗口、接收缓存
    在这里插入图片描述
    1. 发送缓存
      1. 用来暂时存放: 发送应用程序传送给发送方TCP准备发送的数据 + TCP已发送出但尚未收到确认的数据
      2. 发送窗口通常只是发送缓存的一部分。已被确认的数据应当从发送缓存中删除,因此发送缓存和发送窗口的后沿是重合的。
      3. 发送应用程序必须控制写入缓存的速率,不能太快,否则发送缓存就会没有存放数据的空间
    2. 接收缓存
      1. 用来暂时存放:按序到达的、但尚未被接收应用程序读取的数据+未按序到达的数据
      2. 如果收到的分组被检测出有差错,则要丢弃。
      3. 如果接收应用程序来不及读取收到的数据,接收缓存最终就会被填满,使接收窗口减小到零。反之,如果接收应用程序能够及时从接收缓存中读取收到的数据,接收窗口就可以增大,但最大不能超过接收缓存的大小。
      4. 图中还指出了下一个期望收到的字节号。这个字节号也就是接收方给发送方的报文段的首部中的确认号。
    3. 发送窗口的大小一般是根据接受窗口设置的;接收窗口的大小可以增大或者减小

五、TCP报文段的首部格式

  1. 首部格式:
    在这里插入图片描述
  2. TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项(n 是整数)。因此TCP首部的最小长度是20字节。
  3. 序号seq:占4字节,存储着本报文段所发送的数据的第一个字节的序号。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。例如,一报文段的序号字段值是301,而携带的数据共有100字节。这就表明:本报文段的数据的第一个字节的序号是301, 最后一个字节的序号是400。显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段的序号字段值应为401
  4. 确认号ack:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501 ~ 700), 这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701
  5. 数据偏移:占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,即指出TCP报文段的首部长度。“数据偏移”的单位是32位字(即以4字节长的字为计算单位)。由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度
  6. 保留:全为0
  7. 紧急URG (URGent):当URG= 1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送
  8. 确认ACK (ACKnowledgment):仅当 ACK= 1时确认号字段才有效。当ACK= 0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  9. 推送PSH (PuSH):当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH= 1的报文段,就尽快地(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
  10. 复位RST (ReSeT):RST也可称为重建位或重置位。当RST= 1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接
  11. 同步SYN (SYNchronization):在连接建立时用来同步序号。当SYN= 1而ACK= 0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN= 1和ACK= 1。因此,SYN 置为1就表示这是一个连接请求或连接接受报文
  12. 终止FIN (FINis):用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接
  13. 窗口rwnd:占2字节。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
  14. 检验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
  15. 紧急指针:占2字节。紧急指针仅在URG = 1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作
  16. 最大报文段长度MSS:默认为536字节

六、TCP的流量控制

  1. 流量控制实现机制:通过滑动窗口,让发送方的发送速率不要太快,要让接收方来得及接受
  2. 现有一种情况,假设B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwnd = 400的报文段。然而这个报文段在传送过程中丢失了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。如果没有其他措施,这种互相等待的死锁局面将一直延续 下去。为了解决这个问题,TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然是零,那么收到这个报文段的一方就重新设置持续计时器。如果窗口不是零,那么死锁的僵局就可以打破了

七、TCP的拥塞控制

  1. 所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载
  2. 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
  3. TCP进行拥塞控制的算法:慢开始、拥塞避免、快重传、快恢复算法
  4. 慢开始算法:主要思路为当主机开始发送数据时,由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值,一般初始时窗口设置为1,每经过一个传输轮次拥塞窗口swnd就加倍
  5. 拥塞避免算法:设置一个慢开始门限ssthresh,当swnd > ssthresh时就开始使用拥塞避免算法,即每经过一个传输轮次拥塞窗口swnd值+1;当网络出现超时即出现了网络拥塞情况,此时门限值ssthresh = swnd / 2 同时拥塞窗口 swnd = 1,开始进入慢阶段
  6. 快重传算法:让发送方尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  7. 快恢复算法:当发送方知道现在只是丢失了个别的报文段。于是不启动慢开始,而是执行快恢复算法。这时,发送方调整门限值ssthresh= cwnd/ 2,同时设置拥塞窗口cwnd = ssthresh,并开始执行拥塞避免算法
    在这里插入图片描述

八、TCP的运输连接管理

8.1 TCP的连接建立

在这里插入图片描述

  1. A主动打开连接,创建传输控制块TCB;B被动打开连接,创建传输控制快TCB,进入LISTEN状态等待A的连接请求
  2. A发送请求连接,其中:同步位SYN = 1消耗一个初始序号 seq = x,进入SYN-SENT状态
  3. B收到后,向A发送确认,其中:SYN = 1,ACK = 1,ack = x+1 消耗一个序号 seq = y,进入SYN-RCVD状态
  4. A收到后,向B发送确认,其中:ACK = 1,ack = y+1,seq = x+1
  5. 双方成功建立连接后均进入ESTAB-LISHED状态,开始数据传输

8.2 TCP的连接释放

在这里插入图片描述

  1. A主动关闭TCP连接,并向B发送断开连接请求,其中:FIN = 1消耗一个序号seq = u,进入FIN-WAIT-1状态
  2. B收到后,发送确认,其中:ACK = 1,ack = u+1,消耗一个序号seq = v,进入CLOSE-WAIT状态。此时A到B的连接就完全释放,此时处于一个半关闭状态,只剩B向A发送数据,而A没有数据发送给B,此时A进入FIN-WAIT-2状态
  3. 当B的数据也发送完后,向A发送请求,其中:FIN = 1,ACK = 1,ack = u+1,seq = w,进入LASC-ACK状态
  4. A收到后,发送确认,其中:ACK = 1,ack = w+1,seq = u+1,进入TIME-WAIT状态
  5. B收到后即进入CLOSED状态,若超过2MSL(最大报文段寿命)时间A没有收到任何数据自动进入CLOSED状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值