第六章 传输层

思维导图:

一、 概述

与数据链路层关系

  • 提供可靠的、高效的、性价比高的数据传输
  • 输出实体
    •   
  • 传输层利用网络层的服务,为它的上层应用层提供服务
    •   

网络层与传输层不同点:

  • 网络层运行在由承运商操作的路由器上,因此用户无法真正控制到网络层
  • 把另一层放在网络层之上,可以让用户能够控制到服务质量(some control)
  • 传输层原语独立于网络层原语,而网络层原语会因为网络的不同而不同
    •   
  • 网络层负责把数据从源机送达到目的机(Host to Host)
  • 传输层负责把数据送达到具体的应用进程(End to End:端到端)

 与数据链路层关系

 数据段(TPDU,传输层协议数据单元)

  • TPDU(Transport Protocol Data Unit)是从传输实体发到对端传输实体的信息,有的教材叫TPDU为数据段(segment) 
  • TPDU作为数据(载荷)被封装在分组(packet)中,由网络层传输交换
  • 分组作为数据(载荷)被封装在帧(frames)中,由数据链路层传输交换

两个常用的协议:

  • UDP(User Datagram Protocol)用户数据报协议
  • TCP(Transmission Control Protocol)传输控制协议

二、 用户数据报协议UDP

UDP提供无连接的连接,可以使用源端口和目的端口

  • UDP数据段包括4个字段共8字节的头部和数据两个部分
  • 其中第3个字段,长度字段(域)表示;包括头部和数据总共有多少字节
  • 第4个是校验和(checksum)是可选的,如果不计算校验和,则该字段/域置为0
  • UDP数据段中最独特、最重要的字段是1、2个字段,分别表示源端口和目的端口,都是用16比特表示的

端口被分为三段:

自由端口(Free port)

  • 本地分配
  • 动态的随机端口

 UDP校验和计算:

校验和中用到的IP伪头部:(TCP协议值为6)

收到数据进行校验和计算,计算的数据里面包括收到的校验和,计算的结果应该为全1,否则传输过程中发生错误。

 

通信模型

端点就是套接字(Socket)

包括:

  • IP地址
  • 端口号

通信五元组:

一些著名的端口号:

传输层的PDU不仅仅送达主机,而且送达端口,即应用进程

三、 TCP数据段(Transmission Control Protocol)

  • TCP连接上的每个字节都有它自己独有的32位序列号
  • 单收、发双方的TCP实体不是以字节,而是以数据段的形式交换数据
    •   TCP数据段必须适合IP分组的65515字节(65535-20B)的载荷限制
    •         每个TCP数据段必须适合于下层网络的MTU

Sequence number

  • 序列号,表示一个字节的编号
  • 初始序列号ISNs(initial sequence numbers):随机产生的   

Acknowledgement number

  • 确认号,期望接收的字节编号(32位)
  • TCP的可靠传输保证,采用了肯定确认机制

 

保留字段,和控制比特

  • URG:紧急数据,即使win = 0,也可以发送。值为1时,马上处理
  • ACK:    =1,确认号有效
  • PSH:表示这是带有PUSH标志的数据,接受方收到这样的数据,应该立刻送到上层,而不需要缓存它
  • RST: 被用来重置一个已经混乱的连接,如果在连接建立阶段,就直接拒绝建立连接
  • SYN: 用在连接建立的过程
  • FIN:被用来释放连接,它表示发送方已经没有数据要传输了,但是可以继续接收数据

Window size:

  • 为了避免接收方被大量涌入的数据所淹没,TCP实体进行流控(Flow control)
  •  告诉对方可以发送的数据字节数,即从确认字节号开始,连续发送的字节总数
  • 窗口尺寸的大小,取决于接收方

Checksum(校验和):

  • 计算方法跟UDP数据段中校验和计算一样,唯一不一样的就是伪头部中的用户协议值取为6

Urgent pointer:

  • 紧急指针,和URG控制位配合使用,指明了紧急数据

Options

  • 如果有选项域,它提供了一种增加基本头没有包含的内容的方法

 

TCP三次握手

1.  建立过程

  • 一方(server)被动地等待一个进来地连接请求
  • 另一方(client)通过发送连接请求,设置一些参数
  • 服务器回发确认应答
  • 应答到达请求方,请求方最后确认,连接建立
  • 可能地安全问题:SYN泛洪Dos攻击(伪造源IP)

2.  连接释放

  • 任何一方在没有数据要传送地时候,都可以发送一个FIN置位了的TCP数据段
  • 当FIN被确认的时候,该方向的连接被关闭了
  • 当双向的连接都关闭了的时候,连接释放

 四次握手正常释放连接:

  •  

TCP传输策略

传输的是全双工的字节流

采用Window size 进行流控

策略

  • 当窗口数为0时,发送者不能正常发送数据段,除非:
  • Urgent数据。比如,用户想杀掉远端机器上的进程的时候,可以发送数据。
  • 发送者可以发送一个字节的数据段,以便让接收者再次发送期待接收的字节号(确认)窗口数(避免死锁)

优化

1.  优化接收端

  • 接收端可以推迟500ms发送确认分组和窗口更新,以便可以免费搭载在处理后的回显分组内(free ride)
  • 傻瓜窗口综合症

2.  优化发送端:Nagle's algorithm

  • 当数据以一次一字节的速度到达传输实体的时候,只发送第一个字节,然后将后续的字节缓存起来,知道发出的字节得到确认
  • 将缓存起来的字节在一个数据段中发出,在继续缓存,知道发出的数据得到确认
  • 有些情况禁用,如:互联网远程运行

 

TCP拥塞控制

拥塞检测(Congestion detection)

  • 所有的互联网TCP算法都假定超时是由拥塞引起的,并且通过监视超时的情况来判断是否出现问题

拥塞控制(Congestion control)

  • 当一个连接建立的时候,双方选择一个合适的窗口大侠,接收方根据自己的缓存区大小来指定窗口的大小
  • 如果发送者遵循这个窗口大小的限制,则接收端不会出现缓冲区溢出的问题,但可能由于网络内部的拥塞而发生问题

两个窗口问题

  • 要解决拥塞,应该是认识到这两个潜在的问题:网络容量、接收者容量
  • 为此,每个发送者维护两个窗口
    •  接收者窗口:反映了目前接收者的处理能力(容易获取)
    •  拥塞窗口:大小反应了网络目前的容量(难于获取)
  • 只要发送者发送的数据字节数是两个窗口中小的那个窗口数

慢启动算法(Slow Start)

  • 当连接建立的时候,发送者用当前使用的最大数据段长度初始化拥塞窗口,然后发送一个最大的数据段
  • 如果在定时器超时之前收到确认,则将拥塞窗口翻倍,然后发送两个数据段,直到超时(或达到接收方窗口的大小)

阈值开始,每次传输,线性增长

  • 不断超时,不断重启

  • 重新慢启动的时候,拥塞窗口值不用重置为一个数据段大小,而是可以设置为阈值大小,从这里直接开始线性增长,者就是所谓的快速恢复
  • 任何时候,如果TCP传输实体收到一个ICMP抑制分组(ICMP source quench),则该事件被当作超时对待

TCP定时器

  •  TCP采用了肯定确认重传技术,保证每一个字节的可靠传输
  • 每发一个数据段,都会启动一个定时器——重传定时器(retransmission timer,Positive ackn.with retransmit)
  • 持续定时器(persistence timer) 用来避免如下死锁
  •   保活定时器(keep-alive timer)——用来检查连接是否存活
  •   在关闭时候,处于time-wait中使用的定时器,运行两倍的最大分组生存时间,以确保连接     关闭之后,该连接上的所有数据都完全消失

 

TCP与UDP比较:

    •  TCP

      •  可靠传输方式
      •     可让应用程序简单化,程序员可以不必进行错误检查、修正等工作
    •  UDP
      •  为了降低对计算机资源的需求(如:DNS)
      •     应用程序本身已提供数据完整性的检查机制,毋须依赖传输层的协议来保证
      •     应用程序传输的并非关键性的数据(如:路由器周期性的路由信息交换)
      •     一对多方式,必须使用UDP(TCP限于一对一的传送)

猜你喜欢

转载自www.cnblogs.com/zxj-262410/p/10620591.html
今日推荐