网络:TCP/IP网络模型有哪几层

为什么要有TCP/IP网络模型

不同型号的计算机运行着完全不同的操作系统,但是TCP/IP协议族允许它们相互进行通信。TCP/IP是Internet的基础。

  • 对于同一台设备上的进程间通信, 有很多方式,比如管道, 消息队列,共享内存,信号等
  • 对于不同设备上的进程间通信,需要网络通信。而设备是多样的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议
  • 这个网络协议是分层的,每一层都有各自的作用和职责

网络协议通常分为不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议组合。TCP/IP通常被认为是一个四层协议系统。如图所示:

网络:TCP/IP网络模型有哪几层_第1张图片

分层的协议

假设在一个局域网(LAN)如以太网中有两台主机,二者都运行FTP协议,如下列出了该过程所涉及到的所有协议
网络:TCP/IP网络模型有哪几层_第2张图片
上图可以看出:

  • 这是一个CS模式。大多数的网络应用程序都被设计成客户—服务器模式。服务器为客户提供某种服务,在本例中就是访问服务器所在主机上的文件。在远程登录应用程序 Telnet中,为客户提供的服务是登录到服务器主机上。
  • 应用程序通常是一个用户进程,而下三层一般在(OS)内核中运行。尽管这不是必需的,但通常都是这样处理的,例如 U N I X操作系统
  • 顶层与下三层另一个不同是:应用层关心的是应用程序的细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的通信细节。
  • FTP是应用层协议,TCP是运输层协议,IP是网络层协议,以太网是链路层协议。TCP/IP协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为TCP/IP,但TCP/IP和IP只是其中的两种协议而已

应用层

  • 最上面是应用层应用层只需要转注于为用户提供应用功能,不用去关心数据是如何传输的。就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关心快递是如何被运输的。
  • 应用层工作在操作系统中的用户态
  • 应用层:负责处理特定的应用程序细节。几乎各种不同的 T C P / I P实现都会提供下面这些通用的应用程序:
    • Telnet 远程登录。
    • FTP 文件传输协议。
    • SMTP 简单邮件传送协议。
    • SNMP 简单网络管理协议。
  • 应用层工作在操作系统中的用户态, 传输层以及以下工作在内核态

传输层

  • 应用层的数据报会传输给传输层,传输层是为应用层提供网络支持的。主要为两台主机上的应用程序提供端到端的通信。
    网络:TCP/IP网络模型有哪几层_第3张图片

  • 运输层:主要包括:TCP(传输控制协议)和UDP(用户数据报协议)

    • TCP叫做传输控制协议(Transmission Control Protocol),大部分应用使用的正是TCP传输层协议。
      • TCP是面向连接的技术。也就是说,基于TCP的两台主机,在通信之前必须要先建立信息交互(IP协议没有这种交互),主机之间的设备和线路,只负责处理下三层(物理层、链路层、网络层)的工作
      • IP 与TCP协议关系:IP相当于车辆,负责运输数据包(包括怎么打包、怎么走等);TCP相当于两台主机上的管理者,它们尽可能的使用各种手段来保证数据包安全的运送。一旦B机管理者发现有问题,就要求A地重新发送,这一“要求”也是通过IP包发送过去的。
      • TCP负责发现传输过程中的问题,一有问题就发出信号,要求重新传输,直到所有数据安全、正确的到达目的地。
      • TCP为了保证信息的可靠传输,动用了不少手段,包括数据分块、维护定时器、发送确认、校验和计算、丢弃重复数据、流量控制等。
      • TCP是一种面向字节流的服务,它并不知道自己传输的是二进制数据,ASCII字节还是其他什么。连接双方的应用程序负责对传输的数据进行解释
    • UDP为应用层提供了一种非常简单的服务。它只是把称为数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供,但是它的实时性相对更好,传输效率也高。当然UDP也可以实现可靠传输,不过这不是个简单的事情
  • 应用需要传输的数据可能会非常大,如果直接传输不好控制,因此当传输层的数据包大小超过MSS(TCP最大报文段长度),就要将数据包分块,这样即使中途有一个分块丢失或者损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在TCP协议中,我们把每个分块称为一个TCP段(TCP Segment)

网络:TCP/IP网络模型有哪几层_第4张图片

  • 当设备作为接收方时,传输层负责把数据包传给应用,但是一台设备上可能会有很多应用在接收或者传输数据,因此需要一个编号将应用区分开来,这个编号就是端口
  • 由于传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用

网络层

  • 传输层可能大家刚接触的时候,会认为它负责将数据从一个设备传输到另一个设备,事实上它并不负责。实际场景中的网络环节是错综复杂的,中间有各种各样的线路和分叉路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,而传输层的设计理念是简单、高效、专注,如果传输层还负责这一块功能就有点违背设计原则了。

  • 也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下一层,就是网络层

网络:TCP/IP网络模型有哪几层_第5张图片

网络层,也叫做IP层,它负责处理机器间的通信(分组在网络中的活动)

  • 在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议,用来传输IP的控制信息。常见应用是ping和tracerouter),以及IGMP协议(Internet组管理协议)。
    • ICMP是IP协议的附属协议。IP层用它来与其他主机或者路由器交换错误报文和其他重要信息。ping和traceroute,它们都使用了ICMP协议
    • IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。

网络:TCP/IP网络模型有哪几层_第6张图片

  • ps:ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换 I P层和网络接口层使用的地址。

网络层最常用的协议是IP协议

  • IP是一个不可靠的、无连接协议

    • 不可靠的意思是它不能保证IP数据报能够成功的到达目的地。IP仅提供最好的传输服务。如果发送某种错误时,如果某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(比如TCP)
    • 无连接指的是IP并不维护任何关于后继数据报的状态信息。每个数据报的处理是相互独立的。也即IP数据报可以不按照发送顺序接收。如果一信源向相同的信宿发送两个连续的的数据报(先是 A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此 B可能在A到达之前先到达。
  • IP是网络层上的主要协议,同时被TCP和UDP使用。

    • TCP和UDP的每组数据都通过端系统和每个中间路由器的IP层在互联网中进行传输。
    • IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP、IGMP数据都以IP数据报格式传输。
  • IP协议会将传输层的报文作为数据部分,再加上IP包头组装成IP报文,如果IP报文大小超过MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的IP报文

IP地址

  • 网络层负责将数据从一个设备传输到另一个设备,世界上那么多设备,又该如何找到对方呢?因此,网络层需要有区分设备的编号。
    • 我们一般用 IP 地址给设备进行编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段,每段是 8 位。只有一个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道一个一个去匹配?这显然不科学。
    • 因此,需要将 IP 地址分成两种意义:
      • 一个是网络包,负责标识给IP地址是哪个子网的
      • 一个是主机号,负责标识同一子网下的不同主机
    • 怎么分的呢?这需要配合子网掩码才能算出 IP 地址 的网络号和主机号。在寻址的过程中,先匹配到相同的网络号,才会去找对应的主机。
    • 除了寻址能力,IP协议还有另一个重要的能力就是路由。实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过算法决定下一步走哪天路径。
    • 所以 ,IP协议的寻址作用是告诉我们下一个目的地该往哪个方向走,路由是根据[下一目的地选择路径]。寻址更像在导航,路由更像在操作方向盘

网络:TCP/IP网络模型有哪几层_第7张图片

数据链路层

  • 实际场景中,网络并不是一个整体,比如你家和我家就不属于一个网络,所以数据不仅可以在同一个网络中设备间进行传输,也可以跨网络进行传输。一旦数据需要跨网络传输,就需要有一个设备同时在两个网络中,这个设备一般是路由器,路由器可以通过路由表计算出下一个要去的IP地址
  • 那么,路由器是怎么知道这个IP地址是哪个设备的呢?于是,就需要有一个专门的标识网络中的设备,让数据在一个链路中传输,这就是数据链路层,它主要为网络层提供链路级别的传输服务
  • 数据链路层,也叫做网络接口层:
    • 通常包括操作系统中的设备驱动程序或者计算机对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节
    • TCP/IP并没有严格定义该层,它只是要求能够提供给其上层------网络层一个访问接口,以便在其上传递IP分组。
    • 由于这一层未被严格定义,所以其具体的实现方法将随着网络类型的不同而不同。以太网是数据链路层最常见的形式,除此之外还有PPP、HDLC等。
    • 10Gbit/s以下的以太网一般应用于局域网,而PPP、HDLC则应用于广域网范围内居多
  • 每一个设备的网卡都有一个MAC地址,它是用来唯一标识设备的。路由器计算出了下一个目的地IP地址,再通过ARP协议找到该目的地址的MAC地址,这样就知道这个IP地址是哪个设备的了

网络:TCP/IP网络模型有哪几层_第8张图片

物理层

  • 当数据准备要从设备发送到网络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这一层就是物理层,它主要为数据链路层提供二进制传输的服务

网络:TCP/IP网络模型有哪几层_第9张图片

问题:网络层和运输层的区别并不明显,为什么要把它们划分为不同的层次呢?

为了理解这一点,我们必须把视野从单个网络扩展到一组网络。

互连网是一组通过协议族互联在一起的网络。构成互连网最简单的方法是将两个或者多个网络通过路由器进行连接。它是一种特殊的用于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点连接、FDDI(光纤分布式数据接口)等等

  • 这些盒子也称作I P路由器(IP Router),但我们这里使用路由器( Router)这个术语。
  • 从历史上说,这些盒子称作网关( gateway),在很多TCP/IP文献中都使用这个术语。
  • 现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程(例如,TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。

下图是一个包含两个网络的互联网:一个以太网和一个令牌环网,通过一个路由器互相连接。

网络:TCP/IP网络模型有哪几层_第10张图片
上图中,我们可以划分端系统(end system)(两边的两台主机)和中间系统(Intermediate system)(中间的路由器)。应用层和运输层使用段堆段(end-to-end)协议,而网络层使用的是逐跳(hop-by-hop)协议

在TCP/IP协议族中,网络层IP提供一种不可靠的服务。也就是说,它只是尽可能快地把分组从源节点送到目的结点,但是并不提供任何可靠性保证。另一方面,TCP在不可靠的IP层提供来了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送端和接收端到端的确认分组等机制。由此可见,运输层和网络层分别提供不同的功能

从定义上看,一个路由器具有两个或多个网络接口层(因为它连接了两个或多个网络)。一个主机也可以有多个接口,但一般不称作路由器 , 除非它的功能只是单纯地把分组从一个接口传送到另一个接口。

连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互联,而路由器则是在网络层上对网络进行互联。网桥使得多个局域网组合在一起,这样对上层来说就是一个局域网。

TCP /IP倾向于使用路由器而不是网桥来连接网络

总结

网络协议通常分为五层:

  • 应用层:负责向用户提供一组应用程序,比如 HTTP、DNS、FTP 等;
  • 传输层:负责端到端的通信,比如 TCP、UDP 等;
  • 网络层:主要是IP协议,负责寻址和路由
  • 数据链路层:负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等;
  • 物理层:负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;

你可能感兴趣的:(网络,leetcode,C++)