运输层]1

Posted zy691357966

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运输层]1相关的知识,希望对你有一定的参考价值。

[A Top-Down Approach][第三章 运输层]

标签(空格分隔): 未分类


  • 我们在本章采用的教学方法是:交替的讨论运输层的原理和这些原理在现有的协议是如何实现的.

    • TCPUDP运输协议
  • 从讨论运输层网络层的关系开始

    • 运输层第一个功能:网络层的两个端系统之间的交付服务扩展运行到两个不同端系统上的应用层进程之间的交付服务.
    • UDP会阐述.
  • 回到原理上,面对计算机网络中最为基础性的问题之一

    • 两个实体才能在一种会丢失或损坏数据的媒体上可靠的通信.
    • 通过复杂性不断增加的情况,逐步建立起一套协议来解决这些问题.
    • 我们将说明如何在TCP下体现.
  • 讨论第二个基础问题.

    • 控制运输层实体的速率以避免网络中的拥塞,或从拥塞中恢复过来.
    • 考虑拥塞的原因和后果,和常用的拥塞控制技术.
    • 研究TCP的拥塞控制技术.

3.1 概述和运输层服务

  • 逻辑通信(logic communication):运输层协议为运行在不同主机上的应用进程提供了逻辑通信.
    • 应用程序角度: 通过逻辑通信,运行不同进程的主机好像直接相连一样.

3.1.1 运输层和网络层的关系

  • 运输层和网络层具有描述上细微的差别

    • 网络层:提供主机之间的逻辑通信
    • 运输层:提供不同主机的进程之间的逻辑通信.
  • 运输层仅仅将报文从端系统移到网络边缘.

3.1.2 因特网运输层概述

在对UDP(用户数据报协议)TCP(传输控制协议),简要介绍前,简单介绍一下因特网的网络层

  • 网络层协议有一个名字叫 IP,即网际协议.
    • IP为主机之间提供了逻辑通信.
    • IP的服务模型为尽力而为交付服务(best-effort delivery sevice)
      • 尽最大努力,但是不进行任何确保.
      • 不确保报文段的交付,不确保报文段的按序交付,不确保报文段数据的完整性.
      • 所以,IP被称为不可靠服务(unreliable service).
    • 每个主机有一个IP地址.

IP服务模型有了了解后,总结一下UDPTCP的服务模型

  • 多路复用:UDPTCP基本的责任是:将两个端系统间的IP的交互服务扩展为运行在端系统上的两个进程之间的交互服务.

    • 被称为运输层的多路复用(transprot-layer multplexing)多路分解(demultiplexing) .
    • 下一节仔细讨论.
  • 完成性检查:UDPTCP还在报文段首部中包括差错检查字段而提供完成性检查

以上是运输层的两种最低限度的服务,也是UDP仅能提供的服务.

下面讨论TCP的几种附加服务.

  • 可靠数据传输:通过使用流量控制,序号,确认和定时器,TCP确保正确的,按序的将数据发送出去.
    • TCP不可靠IP服务转换成一种进程间的可靠数据传输服务
  • 拥塞控制: 提供给整个因特网的服务,带来通用好处的服务.

  • 3.4~3.7 详细讨论

3.2 多路分解与多路复用

基本概念:网络层提供的主机到主机的交付服务延伸到位运行在主机的应用程序提供进程到进程的交互服务.

  • 多路分解(demultiplexing): 将运输层报文段中的数据交付到正确的套接字的工作称为多路分解.

  • 多路复用(multiplexing):在源主机从不同套接字收集数据块,并为每个数据块封装上首部信息(在以后用于分解)从而生成报文段,将报文段传递到网络层,叫做多路复用.

  • 端口号是一个 16比特的数,大小为0 ~ 65535
  • 0 ~ 1023范围的端口号被称为周知端口号(well-know port)
    • HTTP,FTP等.

1. 无连接的多路复用与多路分解.

clientSocket = socket(socket.AF_INET,socket.SOCK_DGRAM)
  • 这样创建时,运输层自动为该套接字分配一个端口号
    • 范围是1024~65535.没有被其他UDP所占用的端口号.
clientSocket.bind(('',19157))
  • 通过套接字bind()方法为该套接字关联一个特定的端口号.

  • 一个UDP套接字由一个二元组表示,(IP,端口号)

    • TCP不同
  • 不同源地址到底同一个目的地址,会送到相同的套接字

    • TCP不同

2. 面向连接的多路复用和多路分解

更为仔细的研究TCP套接字和TCP连接.

  • TCP套接字由一个四元组构成:(源IP,源端口,目的IP,目的端口)
  • 不同源地址到达同一个目的地点是,会送到不同套接字
    • 这就是连接的本质

3. Web 服务器与 TCP

  • 套接字一般与线程一一对应.
  • 可持续连接,和不可持续连接.
    • 套接字的频繁创建严重的影响一个繁忙的Web服务器的性能.
    • 可以通过套接字池等操作系统技巧来缓解.

3.3 无连接运输: UDP

UDP协议相对于网络层增加的功能.

  • 多路分解/复用
  • 少量的差错检查

什么情况更适用UDP

  • 关于何时,发送什么数据的应用层控制更为精细.
    • TCP具有拥塞控制,使得延迟变长.
  • 无需连接建立.
    • 少了建立连接的时延.
  • 无连接状态
    • TCP需要在端系统维护连接状态.
      • 包括接受和发送缓存,拥塞控制参数以及序号与确认号的参数
  • 分组首部开销小.
    • TCP报文段有20字节的开销
    • UDP仅有8字节

3.3.1 UDP报文字段

  • 长度字段:长度字段指明了包括首部在内的UDP报文段长度.
  • 检验和 :在下文介绍

3.3.2 UDP检验和

  • 检验和: 检验和用于确定当UDP报文段从源到达目的地移动时,其中比特是否发生了改变.

  • 发送方对报文段所有16比特的字的和进行反码运算

  • 接收方 对报文段所有16比特的字的和(包括检验和)想加,结果要是FFFF表示可能正确.

    • A+[A]反=FFFF

为什么UDP提供检验和

端到端原则:网络高层次的功能应尽可能的实现在网络边缘(终端设备),网络核心框架只提供最基本的标准的服务。
优点:
1、降低网络核心的复杂度和实现成本,易于维护和升级;
2、在不修改网络架构的基础上实现应用的扩张;
3、网络核心架构简单,更可靠,且扩展性也好;
4、简化了终端用户和网络之间的接口,终端用户不依赖与网络的内部状态;

  • UDP对差错恢复无能为力.

3.4 可靠数据传输原理

图3-8

  • (a)为上层实体提供的服务抽象是:数据可以通过一条可靠信道进行传输.

    • 借助于可靠的信道,传输数据就不会受到损坏或丢失.
    • 而且所有数据都是按照其顺序进行交互.
    • 这恰好是TCP向调用它的应用提供的服务模型
    • 可靠数据传输协议(reliable data transfer protocol)的责任.
  • (b)为服务的具体实现

    • 假设:分组以发送次序进行交付,可能会丢失,底层信道不会对分组重新排序.
    • rdt_send(): 可以调用数据传输协议的发送方.
      • 将要发送的数据交付给接收方的较高层
    • rdt_rcv() : 分组到达信道的接收端时,调用rdt_rcv().
    • deliver_data():当rdt协议向较高层交付时,使用deliver_data来完成.
  • 在本节,我们仅考虑单项数据传输(unidirectional data transfer)

3.4.1 构造可靠数据传输协议

我们一步步研究一系列协议,一个比一个复杂,最后得到一个无错的,可靠的数据传输协议.

1. 经完全可靠信道的可靠传输协议: rdt 1.0

考虑最简单的情况,即底层信道完全可靠.称该协议为rdt 1.0

有限状态机(Finite-State Machine,FSM)

  • 引起变迁的事件显示在表示变迁的横线上方,
  • 事件发生所采取的动作显示在横线下方.
    • 没如果没有事件,或者没有动作,就用表示
  • FSM的初始状态用虚线表示.

  • rdt的发送端.

    • rdt_send(data)事件接受来自较高层的数据.
      • 产生一个包含该数据的分组mark_pkt(data)
      • 分组发送到信道中 udt_send(packet).
    • 由较高层调用
  • rdt的接收端

    • rdt_rcv(packet)事件从底层信道接受一个分组.
      • 从该分组取出数据extract(packet,data)
      • 数据传输给较高层deliver_data(data)
    • 由较低层调用
  • 有了完全可靠的信道,接收方不需要提供任何反馈信息给发送方.

2. 经具有比特差错信道的可靠数据传输: rdt 2.0

  • 假定:所有分组的发送(虽然有些比特可能受损)将其发送的顺序接收.

  • 肯定确认(postive acknowledgment)否定确认(negative acknowledgment)

    • 这些控制报文使得接收方可以让发送方知道哪些内容被正确接收,
      哪些有误需要重传.
  • 自动重传请求(Autumatic Repeat reQuest,ARQ)协议:基于重传机制的可靠数据传输协议.

    • ARQ协议还需要另外三种协议来处理比特差错情况.
      • 差错检测: 一种检验机制是否发生了出错.
      • 接收方反馈: 提供ACK(肯定确认)或者NAK(否定确认)
      • 重传:接收到错误分组后,发送方重传该分组.

  • rdt 2.0 也被称为停等协议
  • rdt 2.0 看起来可运行的,但有个致命错误:无法确认NAK或者ACK是否受损.有三种解决方法.
    • :发送一个类似NAK,AFK的信息要受损的NAK,AFK重传.
      • 但是这个信息也可能受损
    • :增加足够的检验和比特,使得发送方不仅可以检查差错,还能恢复差错.
      • 对于只产生差错,不丢失分组的信道,这样可以直接解决问题.
    • :当收到含糊不清NAK,ACK时直接重传数据.
      • 冗余分组(duplicate packet),接收方不知道上次发送的ACKNAK是否被接收到,所以不知道接收的分组是否是新的.


  • 解决如何判断接收的分组是最新的简单的方法:对数据分组进行编号

    • 对于停等协议只需要1比特的序号就能足够判断.
      • 判断序号是否跟上一个相同就行(0->1->1(重传)->0->1)
  • rdt 2.1

  • rdt 2.2 将 NAK的冗余消除了.
    • 通过返回 AFK + 序号(上次接收方成功接收到的序号)来达到同样的目的..

3. 具有比特差错的丢包信道的可靠数据传输: rdt 3.0

  • 假定:信道除了比特受损,还会丢包

  • 协议关注两个问题.

    • 怎么检测丢包?
      • 下面我们讨论的关键
    • 发生丢包后该做些什么?
      • 通过rdt 2.0 我们可以给出发生丢包后的措施,回传ACK,然后重传.

为解决第一个问题,我们需要加入新的机制:定时.

  • 可能有很多种解决方法,这个方法,我们要发送方负责检测和恢复丢包工作.
    • 通过发送方一定时间内收不到接收方的响应,那么当做已经丢失.重传分组.
      • 发送方需要明智的选择一个时间值
      • 可能会有冗余数据分组,但是rdt 2.2已经很好的处理了.
    • 需要一个倒计数定时器(countdown timer)
      • 启动定时器
      • 响应定时器中断
      • 终止定时器.

  • rdt 3.0 有时也叫做比特交替协议(alternating-bit protocol).

  • 归纳一下可靠数据传输协议的要点.

    • 检验和,序号,定时器,肯定确认

3.4.2 流水线可靠数据传输协议

  • rdt 3.0性能问题很严重,其核心问题是它是一个停等协议

  • 从图上就能看出,停等协议对网路资源的利用效率之低令人发指

流水线技术

  • 流水线(pipelining):再等待确认时,多发送几组报文,效率也提高几倍,像填充到一条流水线,所以叫流水线可靠传输.

    • 必须增加序号范围.
      • 每个输送中的分组必须有一个唯一的序号.
    • 协议的发送方和接收方必须缓存多个分组
    • 所需序号范围和对缓冲的要求取决于如何处理丢失,损坏,延时过大的分组.两种基本方法
      • 回退 N 步(Go-Back-N,GBN)
      • 选择重传(Selective Repeat,SR)

3.4.3 回退 N 步

3.4.4 选择重传

3.5 面向连接的运输: TCP

  • TCP是运输层面向连接的可靠的运输协议

  • 以来上述的许多基本原理,包括差别检测,重传,累积确认,定时器,以及用于序号和确认号的首部字段

  • TCP被定义在RFC 793,RFC 1122,RFC 1323,RFC 2018以及RFC 2581

3.5.1 TCP连接

TCP是被称为面向连接的(connection-oriented),即在传输之前先进行握手.

  • 连接的双方都将初始化与TCP连接相关的许多TCP状态变量

这种TCP “连接”不是一条像电路交换网络中的端到端的TDMFDM电路,也不是一条虚电路.

  • TCP协议只在端系统运行,不在中间的网络元素(路由器和交换机)中运行.

TCP连接提供的是全双工服务(full-duplex service),点对点(p2p)

  • 三次握手 建立连接
  • 开始传输,如下图.

    • 发送缓存:数据引导进连接的发送缓存,TCP不时的从发送缓存取出数据.
      • TCP规范没有规定何时从发送缓存发送数据,只是描述为

        TCP应该在他方便的时候以报文段的形式发送数据.

    • 最大报文段长度(Maximum Segment Size,MSS):TCP 可以从缓存取出并放入报文段中的数据数量.

      • MSS通常由本地发送主机的最大链路层帧长度来设置
        • 最大传输单元(Maximum Transmission Unit,MTU)来设置.
      • 设置MSS通常是报文段+TCP/IP首部字段适合MTU
        • TCP/IP首部字段通常是40byte,MTU通常是1500比特,所以MSS就通常为1460比特
      • 现在还有基于路径MTU来设置MSS.
        • 路径MTU:源到目的链路上发送的最大链路层帧
    • TCP为每块数据配上一个TCP首部,形成多个TCP segment,这些segment下传给网络层,封装在IP数据报,然后发送给网络,然后被另一端的TCP接收.

3.5.2 TCP报文段结构

  • 序号字段(seq)确认号字段(ack): 均为32位,被TCP接收方和发送方用于实现可靠数据传输服务.

  • 接受窗口字段:16位,用于流量控制,指示接受方愿意接受的字节数目.

  • 首部长度字段: 4比特,指示了以 2字节/32比特为单位的TCP首部长度.

    • 由于选项字段所以TCP首部字段是可变的.
    • 若选项字段位空,那么首部长度为典型的20字节.
  • 标志字段: 6 比特

    • ACK : 指示确认字段的值是有效的.
    • RST,SYN,FIN: 用于连接的建立和删除
    • PSH:被设置的时候,指示接收方应立即把数据交给上层.
    • URG:指示报文段存在着被发送端上层置位紧急的数据.
      • 紧急数据的最后一个字节由16比特的紧急数据指针字段指出.
      • 当紧急数据存在,并给出指针时,TCP必须通知接受端的上层.
      • 在实践中,PSH,URG和紧急数据指针并没有使用过.

1. 序号和确认号

TCP报文段首部中两个最重要的字段是序号字段确认号字段

序号

  • TCP把数据看做一个无结构的,有序的字节流.

    • 我们从TCP对序号的使用上可以看出这一点,是建立在字节流,而不是报文段.
  • 一个报文段的序列号:应该是该报文段首字节的字节流编号

    • 第一个报文段序号:0
    • 第二个报文段序号:1000
    • 以此类推

确认号

  • 主机A填入报文段的确认号是主机A期望从主机B收到的下一个字节的序号.
    • 比如接收到了0~535,那么确认好将为536
    • 即使接受到0~535900~100,而没收到536~899,确认号依旧是536
      • 此处涉及一个失序的问题,TCP协议没有规定,交由编程人员处理.有两种.
        • 接收方立即丢弃失序报文段.
        • 接收方保留报文段并等待确实的字节以填补,实践中采用的犯法.
    • 累计确认:TCP只确认该流中第一个丢失字节位止的字符,所以TCP也被称为累计确认.

2. Telnet: 序号和确认号的一个学习案例

TelnetRFC 854定义,现在是一个用于远程登录的流行用户协议.

  • 运行在TCP之上.
  • 讨论Telnet是因为方便学习序号和确认号,现在更广泛应用的是SSH

  • 主机A和主机B的初始字段位 4279
  • Seq:序号
  • ACK:确认号

3.5.3 往返时间的估计和超时

  • 暂时不考虑

3.5.4 可靠数据传输

3.5.5 流量控制

3.5.6 TCP 连接管理

在这一章,更为仔细的观察如何建立和拆除一条TCP连接

  • 网络攻击中的SYN泛洪攻击与之息息相关

建立连接

  • 客户端的TCP向服务端的TCP发送一个特殊的TCP报文段

    • 不含应用层数据
    • 标志位SYN被置 1 ,所以又叫SYN报文段
    • 随机选择一个初始序号(client_isn),将该序号放置在报文段的序号字段.
  • SYN报文段到达服务器主机.

    • 服务器会为该TCP连接分配TCP缓存和变量
    • 并向客户端发送允许连接的报文段.
      • SYN置 1
      • 确认号字段被置位client_isn+1
      • 服务器随机选择自己的初始序号server_isn,并置序号字段
      • 这个报文段有时也叫SYNACK 报文段
  • SYNACK 报文段到达客户端主机

    • 客户端也分配缓存和变量.
    • 向服务器发送报文段,对服务器进行确认.
      • server_isn+1作为确认码
      • client_isn+1作为序号
      • SYN置0
      • 可以在报文段负载客户到服务器的数据了.

断开连接

客户端TCP连接生命周期

服务端TCP连接生命周期

SYN洪泛攻击与cookie

nmap的原理

  • 原理:一台主机接收了具有目的端口号80TCP SYN分组,如果80端口没有打开,返回一个将RST标志位置1的特殊报文.

nmap 是一个功能强大的工具,该工具不仅能 侦查 打开的TCP端口,也能侦查打开的UDP端口,还能侦查防火墙及其配置,甚至应用程序版本和操作系统

3.6 拥塞控制原理

3.7 TCP拥塞控制

3.8 小结

以上是关于运输层]1的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络 之 运输层 考前复习详细总结

ICMP差错报文

计算机网络概括

计算机网络(谢希仁版)——第五章回顾

TCP的多路复用和分解

计算机网络—— 运输层:TCP报文段的首部格式