zoukankan      html  css  js  c++  java
  • 02-传输层(1)

    进程之间的通信

    • 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层
    • 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时
      • 只有位于网络边缘部分的主机的协议栈才有运输层
      • 而网络核心部分中的路由器在转发分组时都只用到下 3 层的功能

    既然 IP 协议能够把源主机 A 发送出的分组,按照首部中的目的地址,送交到目的主机 B,那么,为什么还需要运输层呢?

    • 从 IP 层来说,通信的两端是两台主机。IP 数据报的首部明确地标志了这两台主机的 IP 地址。但"两台主机之间的通信"这种说法还不够清楚
    • 因为,真正进行通信的实体是在主机中的进程,是这台主机中的一个进程和另一台主机中的一个进程在交换数据(即通信)。因此严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信
    • IP 协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
    • 在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。
    • ↑ 这表明运输层有一个很重要的功能 —— 复用和分用
      • 复用:发送方不同的应用进程都可以使用同一运输层协议传送数据
      • 分用:接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程

    网络层和运输层

    • 网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信
    • 网络层还要对收到的报文进行差错检测。在网络层,IP 数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分
    • 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议…),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别
      • 当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接
      • 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道

    运输层的两个协议

    • 用户数据报协议 UDP (User Datagram Protocol)
      • 传送的数据单位协议是 UDP 报文或用户数据报
      • 一种无连接协议,提供无连接服务
      • 在传送数据之前不需要先建立连接
      • 对方的运输层在收到 UDP 报文后,不需要给出任何确认
      • 虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式
    • 传输控制协议 TCP (Transmission Control Protocol)
      • 传送的数据单位协议是 TCP 报文段(segment)
      • 一种面向连接的协议,提供面向连接的服务
      • 在传送数据之前必须先建立连接,数据传送结束后要释放连接
      • TCP 不提供广播或多播服务
      • 由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源

    运输层的端口

    引入

    • 进程标识符不可作为进程的标识
      • 运行在计算机中的进程是用进程标识符来标志的
      • 但用计算机 OS 指派的这种进程标识符来标志运行在应用层的各种应用进程是不行的。这是因为在互联网上使用的计算机的 OS 种类很多,而不同的 OS 又使用不同格式的进程标识符
      • 为了使运行不同 OS 的计算机的应用进程能够互相通信,就必须用统一的方法(而这种方法必须与特定 OS 无关)对 TCP/IP 体系的应用进程进行标志
    • 把一个特定机器上运行的特定进程指明为互联网上通信的最后终点是不可行的
      • 由于进程的创建和撤销都是动态的,发送方几乎无法识别其他机器上的进程
      • 我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程
      • 有时我们会改换接收报文的进程,但并不需要通知所有发送方

    端口

    解决上述问题的办法:运输层使用协议端口号,简称端口。这就是说,虽然通信的终点是应用进程,但只要把所传送的报文交到目的主机的某个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 或 UDP 来完成。

    • 简述
      • 端口用一个 16 位端口号进行标志,16 位的端口号可允许有 65535 个不同的端口号。
      • 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在互联网中,不同计算机的相同端口号是没有联系的。
    • 软件端口与硬件端口
      • [软件端口] 是应用层的各种协议进程与运输实体进行层间交互的一种地址。这种在协议栈层间的抽象的协议端口是 [软件端口]
      • [硬件端口] 是不同硬件设备进行交互的接口。路由器或交换机上的端口是 [硬件端口]
    • 两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。IP 地址定位计算机,端口定位服务。当服务启动后,在 TCP 或 UDP 的某个端口侦听客户端的请求。

    端口分类:

    • 服务器端使用的端口号
      • 熟知端口,数值一般为 0~1023
      • 登记端口号,数值为 1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复
    • 客户端使用的端口号
      • 数值为 49152~65535
      • 又称为"短暂端口号",留给客户进程选择暂时使用
      • 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用

    传输层协议和服务的关系

    • "服务"即应用层的某个协议进程
    • 通过 IP 地址找到 Serve 了,若该 Serve 上提供多项服务(即应用层有多个协议进程在同时运行),那具体是访问哪一个服务则是根据服务所绑定的传输层的端口(不同的服务对应不同的端口) 来判别的。
    • 服务运行起来后,就会在某个端口侦听客户端发送过来的请求。"侦听"也就是当运输层在收到 {目的端口 = 服务对应的端口} 的数据的时候,会知道要把这条数据具体给上面应用层的哪个协议进程(即服务)。
  • 相关阅读:
    BSF、BSR: 位扫描指令
    驱动学习4
    DDK Build的DIRS和SOURCE文件
    sql语句中的字符串拼接
    delphi中WMI的使用(二)
    delphi中WMI的使用(一)
    WPF中实现砖块拖动的方法(2)
    HttpWebRequest中UserAgent的使用
    获取本机外网IP相关
    WPF中实现砖块拖动的方法(1)
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/13628314.html
Copyright © 2011-2022 走看看