我是靠谱客的博主 糊涂白猫,最近开发中收集的这篇文章主要介绍【计算机网络】传输层(完整版),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 传输层
      • 传输层提供的服务
        • 传输层的功能
        • 传输层寻址与端口
          • 端口的作用
          • 端口号
          • 套接字
        • 无连接服务和面向连接服务
      • UDP
        • UDP数据报
          • UDP的概述
          • UDP首部格式
        • UDP校验
      • TCP
        • TCP协议的特点
        • TCP报文段
        • TCP连接管理
          • TCP连接的建立
          • TCP连接的释放
        • TCP可靠传输
          • 序号
          • 确认
          • 重传
            • 超时
            • 冗余ACK(冗余确认)
        • TCP流量控制
        • TCP拥塞控制
          • 慢开始和拥塞避免
            • 慢开始算法
            • 拥塞避免算法
            • 慢开始和拥塞避免算法的实现过程
          • 快重传和快恢复
            • 快重传
            • 快恢复
            • 快恢复算法的实现过程

传输层

传输层提供的服务

传输层的功能

  • 从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层;
  • 传输层位于网络层之上,它为运行在不同主机上的进程之间提供了逻辑通信,而网络层提供主机之间的逻辑通信;
  • 即使网络层协议不可靠,传输层同样能为应用程序提供可靠的服务;
  • 传输层功能:
    1. 提供应用进程之间的逻辑通信,即端到端通信;
      • 逻辑通信:传输层之间的通信好像是延水平方向传送数据,但事实上这两个传输层之间并没有一条水平方向的物理连接;
    2. 复用和分用
      • 复用:发送方不同的应用进程都可使用同一个传输层协议传送数据;
      • 分用:接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程;
    3. 对收到的报文进行差错检测
      • 首部和数据部分都进行差错检测;
    4. 提供面向连接的TCP和无连接的UDP

传输层为相互通信的进程提供逻辑通信

  • 传输层向高层用户屏蔽了低层网络核心的细节,它使应用进程看见的是好像在两个传输实体之间有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的表现却因传输层协议的不同而有很大的区别;
  • 当传输层采用面向连接的TCP时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道;

传输层寻址与端口

端口的作用
  • 能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程;
  • 数据链路层的SAP时MAC地址,网络层的SAP时IP地址。传输层的SAP是端口;
  • 在协议栈层间的抽象协议端口是软件端口,它与路由器或交换机上的硬件端口是不同的概念:
    • 硬件端口:不同硬件设备进行交互的接口;
    • 软件端口:应用层的各种协议进程与传输实体进行层间交互的一种地址;
    • 传输层使用的是软件端口;
端口号
  • 应用进程通过端口号进行标识,长度为16bit,能够表示65536个不同端口号;

  • 根据端口号范围:

    1. 服务器端使用的端口号:
      • 熟知端口号:数值为0~1023,IANA(互联网地址指派机构)把这些端口号指派给了TCP/IP最重要的一些应用程序;
      • 登记端口号:数值为1024~49151,供没有熟知端口号的应用程序使用,使用这类端口号必须在IANA登记,防止重复;
    2. 客户端使用的端口号,数值为49152~65535.
      • 仅在客户进程运行时才动态选择,又称短暂端口号或临时端口;
      • 通信结束后,刚用过的客户端口号就不复存在,从而这个端口号就可供其他客户进程以后使用;
  • 常用熟知端口号:

应用程序FTPTELNETSMTPDNSTFTPHTTPSNMP
熟知端口号2123225536980161
套接字
  • 在网络中,通过IP地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到IP地址即构成套接字Socket,在网络中采用发送方和接收方的套接字来识别端点;
    • 套接字:实际上是一个通信端点,套接字Socket = (IP地址:端口号);

无连接服务和面向连接服务

  • 面向连接服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理,通信结束后,应该释放这个连接;
  • 无连接服务是指两个实体之间的通信不需要事先建立好连接,需要通信时,直接将信息发送到“网络”中,让该信息的传递在网上尽力而为地往目的地传送;
  • TCP/IP协议族在IP层之上使用了两个传输协议:
    • 一个是面向连接地传输控制协议TCP,采用TCP时,传输层向上提供的是一条全双工的可靠逻辑信道;
    • 一个是无连接地用户数据报协议UDP,采用UDP时,传输层向上提供地是一条不可靠的逻辑信道;
  • TCP主要适用于可靠性更重要的场合,如文件传输协议FTP、超文本传输协议HTTP、远程登录TELNET等;
  • 使用UDP的应用主要包括小文件传输协议TFTP、DNS、SNMP和实时传输协议RTP;

UDP

UDP数据报

UDP的概述
  • UDP仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测;
  • UDP优点:
    1. 无需建立连接,因此不会引入建立连接的时延;
    2. 无连接状态,此连接状态包括接收和发送缓存、拥塞控制参数和序号与确认号的参数;UDP不维护连接状态,也不跟踪这些参数;
    3. 分组首部开销小,TCP有20B的首部开销,UDP只有8B的开销;
    4. 应用层能更早地控制要发送的数据和发送时间,UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率;
    5. UDP支持一对一、一对多、多对一和多对多的交互通信;
  • UDP不保证可靠传输,但这并不意味着应用对数据的要求是不可靠的,所有维护可靠性的工具在应用层完成,应用开发者可根据应用的需求来灵活设计自己的可靠性机制;
  • UDP是面向报文的,发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层,一次发送一个报文,既不合并也不拆分,而是保留这些报文的边界;接收方UDP对IP层交上来UDP数据报,在去除首部后就原封不动地交付给上层应用进程,一次交付一个完整的报文;因此报文不可分割,是UDP数据报处理的最小单位;
  • 应用程序必须选择合适大小的报文:
    • 报文太长,UDP把它交给IP层后,可能会导致分片;
    • 报文太短,UDP把它交给IP层后,会使IP数据报首部的相对长度太大;
    • 两者都会降低IP层的效率;
UDP首部格式

udp数据报格式

  • 各字段意义:

    1. 源端口:源端口号,在需要对方回信时选用,不需要时可全0;
    2. 目的端口:目的端口号,在终点交付报文时必须使用到;
    3. 长度:UDP数据报长度,包括首部和数据,最小值为8,即仅有首部;
    4. 校验和:检测UDP数据报在传输中是否有错,有错就丢弃,该字段是可选的,当源主机不想计算校验和时,则可直接令字段为全0;
  • 当传输层从IP收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口上交给应用进程;

  • UDP基于端口的分用
    udp基于端口的分用

UDP校验

  • 计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部,只是在计算校验和时,临时添加在UDP数据报前面,得到一个临时的UDP数据报,校验和就是按照这个临时UDP数据报来计算的,伪首部即不向下传送又不向上递交,只是为了计算校验和;
  • UDP数据报首部和伪首部:

udp数据报的首部和伪首部

  • 校验步骤

    1. 发送方首先把全0放入校验和字段并添加伪首部,然后把UDP数据报视为许多16位的字串接起来;
    2. 若UDP数据报的数据报的数据部分不是偶数字节,则要在数据部分末尾填入一个全0字节,此增加字节不发送;
    3. 按二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段;,并发送;
    4. 接收方把收到的UDP数据报加上伪首部,按二进制反码求这些16位字的和,当无差错时其结果应为全1,某则就表明有差错出现,接收方就应该丢弃这个UDP数据报;
  • 缺点:

    • 检错能力不强;
  • 优点:

    • 简单、处理速度快;

TCP

TCP协议的特点

  • 主要解决传输的可靠、有效、无丢失和不重复问题;
  • 主要特点:
    1. TCP是面向连接的传输层协议;
    2. 每条TCP连接只能有两个端点,每条TCP连接只能是点对点的;
    3. TCP提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序;
    4. TCP提供全双工通信,允许通信双方的应用进程在任何时候都可以发送数据,为此TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
      • 发送缓存用来暂时存放:
        1. 发送应用程序传送给发送方TCP准备发送的数据;
        2. TCP已发送但尚未收到确认的数据;
      • 接收缓存用来暂时存放:
        1. 按序到达但尚未被接收应用程序读取的数据;
        2. 不按序到达的数据;
    5. TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流;

TCP报文段

  • TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答;

tcp报文段

  • 各字段意义:
    1. 源端口和目的端口:各占2B,端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口实现;
    2. 序号:占4B,范围0~232-1,共232个序号,序号字段的值是指本报文段所发送的数据的第一个字节的序号;
    3. 确认号:占4B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已正确收到;
    4. 数据偏移:即首部长度,占4位,表示首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远;
    5. 保留:占6位,保留为今后使用,目前应置为0;
    6. 紧急位URG:URG = 1表明紧急指针字段有效,告诉系统有紧急数据应尽快传送;
    7. 确认位ACK:ACK = 1时确认号字段有效,在连接建立后所有传送的报文段都必须把ACK置1;
    8. 推送位PSH:接收方TCP收到PSH = 1的报文段,尽快交付给接收应用程序,而不再等到整个缓存都填满后再向上交付;
    9. 复位位RST:RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后重新建立传输连接;
    10. 同步位SYN:同步SYN = 1表示这是一个连接请求或连接接受报文;
    11. 终止位FIN:用来释放一个连接,FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接;
    12. 窗口:占2B,范围0~216-1,指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据;
    13. 校验和:占2B;
    14. 紧急指针:占2B,紧急指针仅在URG = 1时才有意义,指出本报文段中紧急数据共有多少字节,紧急数据在报文段数据的最前面;
    15. 选项:长度可变;
    16. 填充:为了使整个首部长度时4B的整数倍;

TCP连接管理

  • TCP连接的三个阶段:连接建立、数据传送、连接释放;
  • 需解决问题:
    1. 钥匙每一方能够确知对方的存在;
    2. 要允许双方协商一些参数,如最大窗口值,、是否使用窗口扩大选项、时间戳选项及服务质量等;
    3. 能够对运输实体资源,如缓存大小、连接表中的项目进行分配;
  • 连接的建立采用客户/服务器方式,主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器;
TCP连接的建立

tcp三次握手

  • 连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求;
  • 连接建立步骤:
    • 第一步:
      • 客户机的TCP首先向服务器的TCP发送连接请求报文;
      • SYN = 1, seq = x;
    • 第二步:
      • 服务器的TCP收到连接请求报文段后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量;
      • SYN = 1, ACK = 1, seq = y, ack = x+1;
    • 第三步:
      • 当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量;
      • ACK = 1, seq = x+1, ack = y+1;
  • 提供全双工通信,因此通信双方的应用进程在任何时候都能发送数据;

注意

  • 服务端的资源是在完成第二次握手时分配的,客户端资源是在完成第三次握手时分配的;
  • 使得服务器易于收到SYN洪范攻击;
TCP连接的释放

释放tcp连接

  • 连接释放步骤:
    • 第一步:
      • 客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接;
      • TCP是全双工的,可以想象为一条TCP连接上有两条数据通路,发送FIN的一端不能在发送数据,即关闭了其中一条数据通路,但对方还可以发送数据;
      • FIN = 1, seq = u;
    • 第二步:
      • 服务器收到连接释放报文段后即发出确认;
      • 此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态,但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭;
      • ACK = 1, seq = v, ack = u+1;
    • 第三步:
      • 若服务器已经没有要向客户机发送的数据,就通知TCP释放连接;
      • FIN = 1, ACK = 1, seq = w, ack = u+1;
    • 第四步:
      • 客户机收到连接释放报文段后,必须发出确认;
      • ACK = 1, seq = u+1, ack = w+1;

TCP可靠传输

  • TCP的任务是在IP层不可靠的、尽力而为服务的基础上建立一种可靠数据传输服务;
  • TCP提供的可靠数据传输服务保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样;
  • TCP使用了校验、序号、确认和重传等机制达到可靠传输目的;
序号
  • TCP首部的序号字段用来保证数据能有效提交给应用层,TCP把数据视为一个无结构但有序的字节流;
  • 序号建立在传送的字节流之上,而不建立在报文段之上;
  • TCP连接传送的数据流中的每个字节都编上一个序号,序号字段的值是指本报文段所发送的数据的第一个字节的序号;
确认
  • TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号;
  • 发送方缓存区会继续存储那些已发送但未收到确认的报文段,以便在需要时重传;
  • TCP默认使用累计确认,即TCP只确认数据流中至第一个丢失字节为止的字节;
重传
  • 有两种事件会导致TCP对报文段进行重传:超时和冗余ACK;
超时
  • TCP每发送一个报文段,就对这个报文段设置一次计时器,计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段;
  • 为计算超时计时器的重传时间,TCP采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两时间之差称为报文段的往返时间RTT,TCP保留了RTT的一个加权平均往返时间RTTs,他会随新测量RTT样本值的变化而变化;
冗余ACK(冗余确认)
  • 超时触发重传存在的一个问题时超时周期往往太长;
  • 发送方通常可在超时事件发生之前通过注意所谓的冗余ACK来较好地检测丢包情况;
  • 冗余ACK就是再次确认某个报文段地ACK,而发送方先前已收到过该报文段地确认;

TCP流量控制

  • TCP提供流量控制服务来消除发送方发送速率太快使接收方缓存区溢出地可能性,因此可以说流量控制是一个速度匹配服务,匹配发送方的发送速率与接收方的读取速率;
  • TCP提供一种基于滑动窗口协议的流量控制机制;
    • 在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方地发送窗口大小,这称为接收窗口rwnd;
    • 发送方根据其对当前网络拥塞程度的估计而确定的窗口值,这称为拥塞窗口cwnd,其大小与网络带宽和时延密切相关;
  • 一个例子

利用可变窗口进行流量控制

  • 传输层和数据链路层的流量控制的区别:
    • 传输层定义端到端用户之间的流量控制;
    • 数据链路层定理两个中间的相邻结点的流量控制;
    • 传输层的窗口协议的窗口大小可以动态变化;
    • 数据链路层的窗口协议的窗口大小不能动态变化;

TCP拥塞控制

  • 拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载;
  • 拥塞控制与流量控制的区别:
    • 拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素;
    • 流量控制是指点对点的通信量控制,是个端到端的问题,他所要做的是一直发送端发送数据的速率,以便使接收端来得及接收;
  • 拥塞控制与流量控制的相似:
    • 都通过控制发送方发送数据的速率来达到控制效果;
  • 进行拥塞控制的4种算法:
    • 慢开始;
    • 拥塞避免;
    • 快重传;
    • 快恢复;
  • TCP协议要求发送方维护以下两个窗口:
    1. 接收窗口rwnd:
      • 接收方根据目前接收缓存大小所许诺的最新窗口值,反映接收方的容量;
      • 由接收方根据其放在TCP报文的首部的窗口字段通知发送方;
    2. 拥塞窗口cwnd:
      • 发送方根据自己估算的网络拥塞成都而设置的窗口值,反映网络的当前容量;
      • 只要网络未出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去;
      • 只要网络出现拥塞,拥塞窗口就减小一些,以减少注入网络的分组数;
    • 发送方上限值应取接收窗口rwnd和拥塞窗口cwnd中较小的一个,即:
      • 发送窗口上限值 = min[rwnd, cwnd];
慢开始和拥塞避免
慢开始算法
  • 在TCP刚连接好并开始发送TCP报文段时,先令拥塞窗口cwnd = 1,即一个最大报文段长度MSS;
  • 每收到一个对新报文段的确认后,将cwnd加1,即增大一个MSS;
  • 使用慢开始算法后,每经过一个传输轮次RTT,cwnd就会加倍,即cwnd的大小指数式增长;
  • 直到cwnd增大到一个规定的慢开始门限ssthresh阈值,然后改用拥塞避免算法;
拥塞避免算法
  • 每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,使拥塞窗口cwnd按线性规律缓慢增长;
  • 归纳如下:
    1. swnd < ssthresh,使用慢开始算法;
    2. swnd > ssthresh,停止使用慢开始算法而改用拥塞避免算法;
    3. swnd = ssthresh,即可使用慢开始算法,又可使用拥塞避免算法;
慢开始和拥塞避免算法的实现过程

慢开始和拥塞避免的实现过程

快重传和快恢复
快重传
  • 当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时;
快恢复
  • 原理:当发送方连续收到三个冗余ACK时,执行“乘法减小”算法,把慢开始门限ssthresh设置为此时发送方swnd的一半;
快恢复算法的实现过程

快恢复算法的实现过程

最后

以上就是糊涂白猫为你收集整理的【计算机网络】传输层(完整版)的全部内容,希望文章能够帮你解决【计算机网络】传输层(完整版)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部