计算机网络——Chapter 3 运输层

Chapter 3 运输层

3.1 概述transport-layer services

  • 运输层协议为运行在不同主机 的应用进程(processes)之间提供逻辑通信(logic communication)。
  • 运输层协议是在端系统(end system)中不是在路由器中实现的。
  • send side:运输层将从应用process接收到的报文转换成运输层分组,即报文段(segment),传递给网络层,网络层将其封装成网络层分组(datagram)向目的地发送。
  • receive side:网络层从datagram中提取运输层报文向上交给运输层,运输层处理接收到的segment,将其中数据为接收应用process使用。
  • Internet的两种协议:TCP和UDP。

3.1.1 运输层和网络层的关系

  • 网路层提供主机(host)之间的逻辑通信,运输层为运行在不同主机上的进程(process)提供了逻辑通信。
  • 由传输协议提供的服务通常受到底层网络层协议的服务模型(延迟或带宽)的限制,一些服务不包括在内,例如。可靠的数据传输服务。

3.1.2 Internet运输层概述

  • Internet运输层提供两种截然不同的协议:不可靠、无连接的UDP(User Datagram Protocol);可靠的、面向连接的TCP(Transmission Control Protocol)。
  • Internet网络层协议提供网际协议(Internet Protocol),为主机之间提供通信。
  • IP的服务模型是尽力而为交付服务(best-effort delivery service),不确保报文段的交付、按序交付和数据完整性,因此被称为不可靠服务(unreliable service)。
  • UDP和TCP最基本的责任是将两个端系统间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务,称为运输层的多路复用(multiplexing)与多路分解(demultiplexing)。
  • 数据交付(data delivery)和差错检查(error checking)是两种最低限度也是UDP仅有的两种服务。
  • UDP和TCP都不能提供延迟保证(delay guarantees)和宽带保证(bandwidth guarantees)

3.2 多路复用与多路分解

  • 多路分解(demultiplexing):receiver将运输层报文段中数据交付到正确socket。

  • 多路复用(multiplexing):sender从不同socket中收集数据块,装上头部信息生成segment,传递到网络层。

  • 主机接收IP datatgram,每个数据报有source IP address、dest IP address;每个datatgram携带一个segment,每个报文有source port、destination port number;主机使用IP地址和端口号将段定向到适当的套接字。

在这里插入图片描述

  • port number is a 16-bit number, from 0 to 65535

  • 0 to 1023: well-known port numbers

    (HTTP:80, DNS: 53, IMAP: 143,FTP:20,21,SMTP:25,POP3:110)

    1024 to 65535: dynamic and/or Private Ports

  • 无连接多路复用/分解

    1. UDP套接字二元组:dest IP address & dest port number。
    2. UDP报文段有不同source IP address/port number,但是dest IP address和port number相同,则将通过相同的目的socket被定向到相同目的process。
    3. segment的source port number作为“返回地址”的一部分,即当B需要回发segment给A时,B到A的segment中的dest port即是A到B的报文段中的源端口号。
  • 面向连接多路复用/分解

    1. TCPsocket四元组:

      a) source IP address

      b) source port number

      c) dest IP address

      d) dest port number

    2. 当一个TCPsegment到达一台主机时,该主机使用全部4个值将segment分解到相应的socket。

    3. 与UDP不同,具有不同source IP address/port number的segment会被定向到不同的socket,除非携带了初始创建连接的请求。

  • web server和TCP

    1. 连接socket与process间并非总是一一对应,高性能web server通常只使用一个process,但是为每个新的客户连接创建一个具有新连接socket的新线程。
    2. 持续HTTP:client和server之间经由同一个server socket交换HTTP报文。
    3. 非持续HTTP:对每一对请求/响应都创建新TCP连接随后关闭,即对每一对都创建一个新socket并随后关闭。

3.3 无连接运输:UDP

  • 除了复用/分解及少量的差错检测外几乎没有对IP增加别的东西(运输层最低限度必须提供一种复用/分解 服务,以便在网络层与正确应用级process之间传递数据)。
  • UDP:在发送segment前,两方的运输层实体间没有握手(无连接)。
  • UDP应用:流式多媒体应用(loss tolerant, rate sensitive)、DNS、SNMP(Simple Network Management Protocol)、RIP((Routing Information Protocol)。
  • 为什么UDP适合:
    1. 没有拥塞控制:适合实时应用
    2. UDP没有握手,不会引入建立连接的时延
    3. UDP无连接状态,不维护也不跟踪参数,能支持更多的活跃客户
    4. 分组首部开销小:TCP头部一般20bytes,UDP头部8bytes

3.3.1 UDP segment

  • 头部4个字段,每个2 bytes:source port number、dest port number、length、checksum
  • length表示UDP segment中的字节数(包括头部&数据)
    在这里插入图片描述

3.3.2 UDP checksum

  • 先带循环进位累加[最高位溢出右移最低位与最低位相加],累加结果再求反码) 。
  • 发送方的UDP对segment中的所有16bits的和进行反码运算,求和时遇到溢出回卷,得到的结果放在checksum中。
  • 接收方将全部的4个bits(包括checksum)加在一起,若没差错则和为1111111111111111,任一为0则出错了。
  • 为什么要有checksum:
    1. 不能保证源和目的之间的所有链路都提供差错检测
    2. 报文段在某台路由器的内存中也可能引入比特差错
    3. 提供差错检测作为一种安全措施
  • UDP不提供差错恢复,只是丢弃受损segment或者将其交给应用程序并给出warning。

3.4 可靠数据传输原理

  • 网络中最重要的“前10个”问题排名,可靠数据传输(reliable data transfer protocol)将名列榜首。
    在这里插入图片描述

  • 单向数据传输(unidirectional data transfer):数据传输从发送端到接收端。双向数据传输(bidirectional data transfer):全双工数据传输

3.4.1 构造rdt

  • 完全可靠信道的rdt1.0

    1. 有限状态机(Finite-State-Machine,FSM)
      在这里插入图片描述

    2. 所有分组从sender流向receiver,信道完全可靠则receiver不用提供反馈给sender,因为不用担心出现差错。
      在这里插入图片描述

  • 具有比特差错信道的rdt2.0

    1. 肯定确认(positive acknowledgment)与否定确认(negative acknowledgment):receiver让sender知道哪些内容被正确接收,有误则重传。

    2. 自动重传请求(Automatic Repeat reQuest,ARQ)协议:差错检测(error detection)、接收方反馈(feedback)、重传(retransmission)。
      在这里插入图片描述

    3. 停等协议(stop-and-wait):当sender处于等待ACK/NAK的状态时,它不能从上层获得更多数据。

    4. 没有考虑ACK或NAK分组受损的可能性。

  • ACK/NAK 受损的三种可能性:

    1. 引入一种新型的sender到receiver的数据包,类似于人类说的“你说了什么?”
    2. 增加足够的校验和bit,使sender不仅可以检测差错还可以恢复(对于会产生差错但不丢失分组的信道适用)
    3. sender收到含糊不清的ACK或NAK分组时,只需要重传数据分组(冗余分组—duplicate packet:接收方不知道上次发送的ACK或NAK是否被sender正确收到,无法事先知道接收到的分组是新的还是重传)。
  • 要点:正确收到ACK则发下个新数据,正确收到NAK则重发老数据,无法确认ACK或NAK(错误数据)则重发老数据,避免漏发。

  • sender向每个pkt添加sequence number(序号),为了实现简单的停等协议,需要一个1bit序列号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值