5.传输层(学习笔记)

5.传输层

1. 概述

  1. 传输层功能:

    • 传输层提供进程与进程之间的逻辑通信
    • 复用和分用
    • 传输层对收到的报文进行差错检测
    • 传输层两种协议(TCP,UDP)
  2. 传输层的两个协议:

    • TCP:

      • 传输数据之前必须建立连接,数据传输之后要释放连接。不提供广播,多播服务。可靠带来的开销(确认,流量控制,计时器,连接管理等)

      • 特点:可靠,面向连接,时延大,适用于大文件

    • UDP:

      • 传输数据之前不需要建立连接,收到UDP报文之后不需要任何确认
      • 特点:不可靠,无连接,时延小,适用于小文件
  3. 传输层的寻址与端口

    • 复用与分用

      • 复用:应用层所有应用进程都可以通过传输层再传输到网络层(同一信箱)

      • 分用:传输层从网络层收到数据后交付指明的应用进程(信分发给不同人)

    • 端口

      • 端口是传输层的SAP,表示主机的应用进程

      • 端口号只有本地意义,不同计算机相同端口号无意义,长度为16bit

      • 端口号

        • 服务端使用的端口号

          熟知:给TCP/IP重要的一些应用程序,让所有用户都知道0~1023

          登记:不重要的程序使用1024~49151

        • 服务端使用的端口号

          仅在用户进程运行时才动态选择49152~65535

      • 熟知端口号

        • FTP(21), TELENT(23), SMTP(25), DNS(53), TFTP(69), HTTP(80), SNMP(161)
      • 套接字

        • Socket = (主机IP地址,端口号)

2. 用户数据报协议UDP

  1. IP基础上增加的功能

    复用和分用,差错检验

  2. UDP的主要特点

    • UDP无连接,减少了发送数据之前的时延
    • UDP不保证可靠交付
    • UDP是面向报文的,既不合并,也不拆分,保留报文边界(太大会分片)
    • UDP没有拥塞控制,传输很稳定,适合实时应用(丢失太多会纠错,重传)
    • UDP支持一多都对的交互通信
    • UDP首部开销小,只有8字节,比TCP的20字节还短
  3. UDP的首部格式

    • UDP首部
      • 源端口:需要回信的选用,可有可无
      • 目的端口:
      • 长度:首部字段+数据字段(可无),最小值是8
      • 检验和:检验传输中是否有错
    • 伪首部
      • 既不向下传送也不向上递交,仅仅为了计算检验和
  4. UDP校验

    • 在发送端:

      1. 填上伪首部

      2. 全0填充检验和字段

      3. 全0填充数据部分

      4. 伪首部+首部+数据部分采用二进制反码求和

        (让第一行和第二行做二进制反码运算,所得结果与第三行进行反码运算,最后结果取反,得到校验和)

      5. 把反码填入检验和字段

      6. 去伪首部,发送

    • 在接收端

      1. 填上伪首部
      2. 伪首部+首部+数据部分采用二进制反码求和
      3. 结果为1则无差错,否则在应用层附上出差错警告

3. 传输控制协议TCP

  1. 特点

    • 面向连接的传输层协议(建立连接)
    • 每一条TCP连接只能有两个端点(一对一)
    • TCP提供可靠的交付服务
    • TCP提供全双工通信(任何时候可存放数据,发送缓存,接收缓存)
    • 面向字节流(应用数据为一连串无结构的字节流)
  2. TCP报文首部格式

    • 序号(seq)

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

    • 确认号

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

    • 数据偏移(首部长度)

      TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是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、窗口扩大、时间戳、选择确认…

4. TCP连接管理

  • TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。
  1. TCP连接的建立

    • ROUND 1:
      客户端发送连接请求报文段,无应用层数据。
      SYN=1,seq=x(随机)
    • ROUND 2:服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
      SYN=1,ACK=1, seq=y(随机), ack=x+1
    • ROUND 3:
      客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。
      SYN=0,ACK=1, seq=x+1, ack=y+1 6u
  2. TCP的连接释放

    • ROUND 1:
      客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
      FIN=1,seq=u

    • ROUND 2:
      服务器端回送一一个确认报文段,客户到服务器这个方向的连接就释放了一一半关闭状态。
      ACK=1,seq=v, ack=u+1

    • ROUND 3:
      服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。
      FIN=1,ACK=1, seq=w, ack=u+1

    • ROUND 4:
      客户端回送一一个确认报文段,再等到时间等待计时器设置的2MSL (最长报文段寿命)后,连接彻底关闭。

      ACK=1,seq=u+1, ack=w+1

5. TCP的可靠传输

  • 可靠:保证接收方进程从缓存区读出的字节流与发送方的字节流一致
  1. 校验

    • 与UDP校验一样,增加伪首部
  2. 序号

    • 一个字节占一个序号

    • 序号字段指的是一个报文段第一字节的序号

  3. 确认

    • TCP默认使用累计确认
  4. 重传

    • 确认重传不分家,TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段

    • TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)

    • 冗余ACK:当期望值序号大的失序报文段到达时,指明期待小的字节序号

6. TCP的流量控制*

  • 流量控制:让发送方的发送速率不要太快,要让接收方来得及接收
  1. 序号seq:你可以从1开始发送

  2. 确认号ack:期望收到对方下一个报文段的第一个数据字节的序号

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

  4. 接收窗口rwnd:发送方的发送窗口不能超过接收方给出的接收窗口的数值

    TCP的窗口单位是字节,不是报文段
    在这里插入图片描述

7. TCP的拥塞控制*

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

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

  • 假定

    数据单方面传输,对方指发送确认报文

    接收方有足够大的缓存空间

  1. 发送窗口

    发送窗口=min{接收窗口rwnd,拥塞窗口cwnd}

在这里插入图片描述
2. 拥塞控制的方法

  1. 慢开始与拥塞避免
    在这里插入图片描述

  2. 快重传与快恢复

    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值