精华内容
下载资源
问答
  • 网络层提供的两种服务——虚电路服务和数据报服务 1. 虚电路服务 传统电信网提供的主要业务是提供电话服务。电信网使用昂贵的程控交换机,用面向连接的通信方式,使电信网络能够向用户(实际上就是电话机)提供可靠...

    网络层提供的两种服务——虚电路服务和数据报服务

    1. 虚电路服务

    • 传统电信网提供的主要业务是提供电话服务。电信网使用昂贵的程控交换机,用面向连接的通信方式,使电信网络能够向用户(实际上就是电话机)提供可靠传输的服务。
    • 当两个计算机进行通信的步骤:
      (1)应当先建立连接(但在分组交换中是建立一条虚电路VC(Virtual Circuit)),以保证通信双方所需的一切网络资源。
      (2)然后双方就沿着已建立的虚电路发送分组。
      (3)这样的分组的首部就不需要填写完整的目的主机地址,而只需填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。
      (4)如果这种通信方式再使用可靠传输的网络协议,就可使所发送的分组无差错按序地到达终点,当然也不丢失、不重复。
      (5)在通信结束后,要释放建立的虚电路。
      这里写图片描述

    2. 数据报服务

    • 因特网在设计上就采用了和电信网完全不同的思路。
    • 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
    • 因特网的设计思路:
      (1)网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。
      (2)网络层不提供服务质量的承诺。也就是说所传送的分组,可能出错、丢失、重复或失序,当然也不保证分组交付的时限。
    • 这种设计思路的好处:
      (1)网络的造价大大降低。
      (2)运行方式灵活。
      (3)能够适应多种应用。
      这里写图片描述

    3. 虚电路服务与数据报服务的对比

    这里写图片描述


    参考文献:
    [1]《计算机网络(第5版)》谢希仁——第四章 4.1

    展开全文
  • 两种高效的服务器设计模型:Reactor和Proactor模型

    万次阅读 多人点赞 2015-05-30 18:25:14
    在文章《unix网络编程》(12)五I/O模型中提到了五I/O模型,其中前四:阻塞模型、非阻塞模型、信号驱动模型、I/O复用模型都是同步模型;还有一是异步模型。 Reactor模型  Reactor模式是处理并发I/O比较...

    I/O模型

    在文章《unix网络编程》(12)五种I/O模型中提到了五种I/O模型,其中前四种:阻塞模型、非阻塞模型、信号驱动模型、I/O复用模型都是同步模型;还有一种是异步模型


    Reactor模型

            Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程/进程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(文件描述符或socket可读、写),多路复用器返回并将事先注册的相应I/O事件分发到对应的处理器中。
      Reactor是一种事件驱动机制,和普通函数调用的不同之处在于:应用程序不是主动的调用某个API完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。用“好莱坞原则”来形容Reactor再合适不过了:不要打电话给我们,我们会打电话通知你

           Reactor模式与Observer模式在某些方面极为相似:当一个主体发生改变时,所有依属体都得到通知。不过,观察者模式与单个事件源关联,而反应器模式则与多个事件源关联 。

    在Reactor模式中,有5个关键的参与者:

    • 描述符(handle):由操作系统提供的资源,用于识别每一个事件,如Socket描述符、文件描述符、信号的值等。在Linux中,它用一个整数来表示。事件可以来自外部,如来自客户端的连接请求、数据等。事件也可以来自内部,如信号、定时器事件。
    • 同步事件多路分离器(event demultiplexer):事件的到来是随机的、异步的,无法预知程序何时收到一个客户连接请求或收到一个信号。所以程序要循环等待并处理事件,这就是事件循环。在事件循环中,等待事件一般使用I/O复用技术实现。在linux系统上一般是select、poll、epol_waitl等系统调用,用来等待一个或多个事件的发生。I/O框架库一般将各种I/O复用系统调用封装成统一的接口,称为事件多路分离器。调用者会被阻塞,直到分离器分离的描述符集上有事件发生。
    • 事件处理器(event handler):I/O框架库提供的事件处理器通常是由一个或多个模板函数组成的接口。这些模板函数描述了和应用程序相关的对某个事件的操作,用户需要继承它来实现自己的事件处理器,即具体事件处理器。因此,事件处理器中的回调函数一般声明为虚函数,以支持用户拓展。
    • 具体的事件处理器(concrete event handler):是事件处理器接口的实现。它实现了应用程序提供的某个服务。每个具体的事件处理器总和一个描述符相关。它使用描述符来识别事件、识别应用程序提供的服务。
    • Reactor 管理器(reactor):定义了一些接口,用于应用程序控制事件调度,以及应用程序注册、删除事件处理器和相关的描述符。它是事件处理器的调度核心。 Reactor管理器使用同步事件分离器来等待事件的发生。一旦事件发生,Reactor管理器先是分离每个事件,然后调度事件处理器,最后调用相关的模 板函数来处理这个事件。

           可以看出,是Reactor管理器并不是应用程序负责等待事件、分离事件和调度事件。Reactor并没有被具体的事件处理器调度,而是管理器调度具体的事件处理器,由事件处理器对发生的事件作出处理,这就是Hollywood原则。应用程序要做的仅仅是实现一个具体的事件处理器,然后把它注册到Reactor管理器中。接下来的工作由管理器来完成:如果有相应的事件发生,Reactor会主动调用具体的事件处理器,由事件处理器对发生的事件作出处理。


    应用场景

    场景:             长途客车在路途上,有人上车有人下车,但是乘客总是希望能够在客车上得到休息。
    传统做法:     每隔一段时间(或每一个站),司机或售票员对每一个乘客询问是否下车。
    Reactor做法:汽车是乘客访问的主体(Reactor),乘客上车后,到售票员(acceptor)处登记,之后乘客便可以休息睡觉去了,当到达乘客所要到达的目的地时(指定的事件发生,乘客到了下车地点),售票员将其唤醒即可。


    为什么使用Reactor

    网络编程为什么要用反应堆?有了I/O复用,有了epoll已经可以使服务器并发几十万连接的同时,维持高TPS了,难道这还不够吗?

           答案是,技术层面足够了,但在软件工程层面却是不够的。


    程序使用IO复用的难点在哪里呢?

          1个请求可能由多次IO处理完成,但相比传统的单线程完整处理请求生命期的方法,IO复用在人的大脑思维中并不自然,因为,程序员编程中,处理请求A的时候,假定A请求必须经过多个IO操作A1-An(两次IO间可能间隔很长时间),每经过一次IO操作,再调用IO复用时,IO复用的调用返回里,非常可能不再有A,而是返回了请求B。即请求A会经常被请求B打断,处理请求B时,又被C打断。这种思维下,编程容易出错。


    形象例子:

    本部分和下部分内容来自:高性能网络编程6--reactor反应堆与定时器管理

        传统编程方法就好像是到了银行营业厅里,每个窗口前排了长队,业务员们在窗口后一个个的解决客户们的请求。一个业务员可以尽情思考着客户A依次提出的问题,例如:
    “我要买2万XX理财产品。“
    “看清楚了,5万起售。”
    “等等,查下我活期余额。”
    “余额5万。”
    “那就买 5万吧。”
    业务员开始录入信息。
    ”对了,XX理财产品年利率8%?”
    “是预期8%,最低无利息保本。“
    ”早不说,拜拜,我去买余额宝。“
    业务员无表情的删着已经录入的信息进行事务回滚。
    ”下一个!“
        用了IO复用则是大师业务员开始挑战极限,在超大营业厅里给客户们人手一个牌子,黑压压的客户们都在大厅中,有问题时举牌申请提问,大师目光敏锐点名指定某人提问,该客户迅速得到大师的答复后,要经过一段时间思考,查查自己的银袋子,咨询下LD,才能再次进行下一个提问,直到得到完整的满意答复退出大厅。例如:大师刚指导A填写转帐单的某一项,B又来申请兑换泰铢,给了B兑换单后,C又来办理定转活,然后D与F在争抢有限的圆珠笔时出现了不和谐现象,被大师叫停业务,暂时等待。
        这就是基于事件驱动的IO复用编程比起传统1线程1请求的方式来,有难度的设计点了,客户们都是上帝,既不能出错,还不能厚此薄彼。
        当没有反应堆时,我们可能的设计方法是这样的:大师把每个客户的提问都记录下来,当客户A提问时,首先查阅A之前问过什么做过什么,这叫联系上下文,然后再根据上下文和当前提问查阅有关的银行规章制度,有针对性的回答A,并把回答也记录下来。当圆满回答了A的所有问题后,删除A的所有记录。

    在程序中:

           某一瞬间,服务器共有10万个并发连接,此时,一次IO复用接口的调用返回了100个活跃的连接等待处理。先根据这100个连接找出其对应的对象,这并不难,epoll的返回连接数据结构里就有这样的指针可以用。接着,循环的处理每一个连接,找出这个对象此刻的上下文状态,再使用read、write这样的网络IO获取此次的操作内容,结合上下文状态查询此时应当选择哪个业务方法处理,调用相应方法完成操作后,若请求结束,则删除对象及其上下文。

           这样,我们就陷入了面向过程编程方法之中了,在面向应用、快速响应为王的移动互联网时代,这样做早晚得把自己玩死。我们的主程序需要关注各种不同类型的请求,在不同状态下,对于不同的请求命令选择不同的业务处理方法。这会导致随着请求类型的增加,请求状态的增加,请求命令的增加,主程序复杂度快速膨胀,导致维护越来越困难,苦逼的程序员再也不敢轻易接新需求、重构。

           反应堆是解决上述软件工程问题的一种途径,它也许并不优雅,开发效率上也不是最高的,但其执行效率与面向过程的使用IO复用却几乎是等价的,所以,无论是nginx、memcached、redis等等这些高性能组件的代名词,都义无反顾的一头扎进了反应堆的怀抱中。
          反应堆模式可以在软件工程层面,将事件驱动框架分离出具体业务,将不同类型请求之间用OO的思想分离。通常,反应堆不仅使用IO复用处理网络事件驱动,还会实现定时器来处理时间事件的驱动(请求的超时处理或者定时任务的处理),就像下面的示意图:

    https://img-blog.csdn.net/20131220193302109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcnVzc2VsbF90YW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    这幅图有5点意思:

    (1)处理应用时基于OO思想,不同的类型的请求处理间是分离的。例如,A类型请求是用户注册请求,B类型请求是查询用户头像,那么当我们把用户头像新增多种分辨率图片时,更改B类型请求的代码处理逻辑时,完全不涉及A类型请求代码的修改。

    (2)应用处理请求的逻辑,与事件分发框架完全分离。什么意思呢?即写应用处理时,不用去管何时调用IO复用,不用去管什么调用epoll_wait,去处理它返回的多个socket连接。应用代码中,只关心如何读取、发送socket上的数据,如何处理业务逻辑。事件分发框架有一个抽象的事件接口,所有的应用必须实现抽象的事件接口,通过这种抽象才把应用与框架进行分离。

    (3)反应堆上提供注册、移除事件方法,供应用代码使用,而分发事件方法,通常是循环的调用而已,是否提供给应用代码调用,还是由框架简单粗暴的直接循环使用,这是框架的自由。

    (4)IO多路复用也是一个抽象,它可以是具体的select,也可以是epoll,它们只必须提供采集到某一瞬间所有待监控连接中活跃的连接。

    (5)定时器也是由反应堆对象使用,它必须至少提供4个方法,包括添加、删除定时器事件,这该由应用代码调用。最近超时时间是需要的,这会被反应堆对象使用,用于确认select或者epoll_wait执行时的阻塞超时时间,防止IO的等待影响了定时事件的处理。遍历也是由反应堆框架使用,用于处理定时事件。

    Reactor的几种模式

    参考资料:Scalable IO in Java

    在web服务中,很多都涉及基本的操作:read request、decode request、process service、encod reply、send reply等。

    1 单线程模式

          这是最简单的单Reactor单线程模型。Reactor线程是个多面手,负责多路分离套接字,Accept新连接,并分派请求到处理器链中。该模型适用于处理器链中业务处理组件能快速完成的场景。不过这种单线程模型不能充分利用多核资源,所以实际使用的不多。

    2 多线程模式(单Reactor)

           该模型在事件处理器(Handler)链部分采用了多线程(线程池),也是后端程序常用的模型。

    3 多线程模式(多个Reactor)

           比起第二种模型,它是将Reactor分成两部分,mainReactor负责监听并accept新连接,然后将建立的socket通过多路复用器(Acceptor)分派给subReactor。subReactor负责多路分离已连接的socket,读写网络数据;业务处理功能,其交给worker线程池完成。通常,subReactor个数上可与CPU个数等同。



    Proacotr模型

           Proactor是和异步I/O相关的。

           在Reactor模式中,事件分离者等待某个事件或者可应用或个操作的状态发生(比如文件描述符可读写,或者是socket可读写),事件分离器就把这个事件传给事先注册的处理器(事件处理函数或者回调函数),由后者来做实际的读写操作
           在Proactor模式中,事件处理者(或者代由事件分离者发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。发起时,需要提供的参数包括用于存放读到数据的缓存区,读的数据大小,或者用于存放外发数据的缓存区,以及这个请求完后的回调函数等信息。事件分离者得知了这个请求,它默默等待这个请求的完成,然后转发完成事件给相应的事件处理者或者回调。

           可以看出两者的区别:Reactor是在事件发生时就通知事先注册的事件(读写由处理函数完成);Proactor是在事件发生时进行异步I/O(读写由OS完成),待IO完成事件分离器才调度处理器来处理。


     举个例子,将有助于理解Reactor与Proactor二者的差异,以读操作为例(类操作类似)。
    在Reactor(同步)中实现读:
     - 注册读就绪事件和相应的事件处理器
     - 事件分离器等待事件
     - 事件到来,激活分离器,分离器调用事件对应的处理器。
     - 事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返还控制权。
    Proactor(异步)中的读:
     - 处理器发起异步读操作(注意:操作系统必须支持异步IO)。在这种情况下,处理器无视IO就绪事件,它关注的是完成事件
     - 事件分离器等待操作完成事件
     - 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存入用户自定义缓冲区,最后通知事件分离器读操作完成。
     - 事件分离器呼唤处理器。
     - 事件处理器处理用户自定义缓冲区中的数据,然后启动一个新的异步操作,并将控制权返回事件分离器。


    现行做法

    开源C++框架:ACE

             开源C++开发框架 ACE 提供了大量平台独立的底层并发支持类(线程、互斥量等)。 同时在更高一层它也提供了独立的几组C++类,用于实现Reactor及Proactor模式。 尽管它们都是平台独立的单元,但他们都提供了不同的接口。ACE Proactor在MS-Windows上无论是性能还在健壮性都更胜一筹,这主要是由于Windows提供了一系列高效的底层异步API。(这段可能过时了点吧) 不幸的是,并不是所有操作系统都为底层异步提供健壮的支持。举例来说, 许多Unix系统就有麻烦。因此, ACE Reactor可能是Unix系统上更合适的解决方案。 正因为系统底层的支持力度不一,为了在各系统上有更好的性能,开发者不得不维护独立的好几份代码: 为Windows准备的ACE Proactor以及为Unix系列提供的ACE Reactor。真正的异步模式需要操作系统级别的支持。由于事件处理者及操作系统交互的差异,为Reactor和Proactor设计一种通用统一的外部接口是非常困难的。这也是设计通行开发框架的难点所在。

           ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候,要根据情况,看从那一层来进行使用。支持跨平台。
    设计模式 :ACE主要应用了Reactor,Proactor等;
    层次架构 :ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架 (Accpetor,Connector,Reactor,Proactor等),最上一层是框架上服务;
    可移植性 :ACE支持多种平台,可移植性不存在问题,据说socket编程在linux下有不少bugs;
    事件分派处理 :ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现 ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数;
    涉及范围 :ACE包含了日志,IPC,线程池,共享内存,配置服务,递归锁,定时器等;
    线程调度 :ACE的Reactor是单线程调度,Proactor支持多线程调度;
    发布方式 :ACE是开源免费的,不依赖于第三方库,一般应用使用它时,以动态链接的方式发布动态库;开发难度 :基于ACE开发应用,对程序员要求比较高,要用好它,必须非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好。

    C网络库:libevent

    libevent是一个C语言写的网络库,官方主要支持的是类linux操作系统,最新的版本添加了对windows的IOCP的支持。在跨平台方面主要通过select模型来进行支持。
    设计模式 :libevent为Reactor模式
    层次架构:livevent在不同的操作系统下,做了多路复用模型的抽象,可以选择使用不同的模型,通过事件函数提供服务;
    可移植性 :libevent主要支持linux平台,freebsd平台,其他平台下通过select模型进行支持,效率不是太高;
    事件分派处理 :libevent基于注册的事件回调函数来实现事件分发
    涉及范围 :libevent只提供了简单的网络API的封装,线程池,内存池,递归锁等均需要自己实现;
    线程调度 :libevent的线程调度需要自己来注册不同的事件句柄;
    发布方式 :libevent为开源免费的,一般编译为静态库进行使用;
    开发难度 :基于libevent开发应用,相对容易,具体可以参考memcached这个开源的应用,里面使用了 libevent这个库。

    改进方案:模拟异步

            在改进方案中,我们将Reactor原来位于事件处理器内的read/write操作移至分离器(不妨将这个思路称为“模拟异步”),以此寻求将Reactor多路同步IO转化为模拟异步IO。

    以读操作为例子,改进过程如下
      - 注册读就绪事件及其处理器,并为分离器提供数据缓冲区地址,需要读取数据量等信息。
      - 分离器等待事件(如在select()上等待)
      - 事件到来,激活分离器。分离器执行一个非阻塞读操作(它有完成这个操作所需的全部信息),最后调用对应处理器。
      - 事件处理器处理用户自定义缓冲区的数据,注册新的事件(当然同样要给出数据缓冲区地址,需要读取的数据量等信息),最后将控制权返还分离器。
      如我们所见,通过对多路IO模式功能结构的改造,可将Reactor转化为Proactor模式。改造前后,模型实际完成的工作量没有增加,只不过参与者间对工作职责稍加调换。没有工作量的改变,自然不会造成性能的削弱。对如下各步骤的比较,可以证明工作量的恒定:
    标准/典型的Reactor:
      - 步骤1:等待事件到来(Reactor负责)
      - 步骤2:将读就绪事件分发给用户定义的处理器(Reactor负责)
      - 步骤3:读数据(用户处理器负责)
      - 步骤4:处理数据(用户处理器负责)

    改进实现的模拟Proactor:
      - 步骤1:等待事件到来(Proactor负责)
      - 步骤2:得到读就绪事件,执行读数据(现在由Proactor负责)
      - 步骤3:将读完成事件分发给用户处理器(Proactor负责)
      - 步骤4:处理数据(用户处理器负责) 

           对于不提供异步IO API的操作系统来说,这种办法可以隐藏socket API的交互细节,从而对外暴露一个完整的异步接口。借此,我们就可以进一步构建完全可移植的,平台无关的,有通用对外接口的解决方案。上述方案已经由Terabit P/L公司(http://www.terabit.com.au/)实现为TProactor。它有两个版本:C++和JAVA的。C++版本采用ACE跨平台底层类开发,为所有平台提供了通用统一的主动式异步接口。


    Boost.Asio类库

           Boost.Asio类库,其就是以Proactor这种设计模式来实现,参见:Proactor(The Boost.Asio library is based on the Proactor pattern. This design note outlines the advantages and disadvantages of this approach.),其设计文档链接:http://asio.sourceforge.net/boost_asio_0_3_7/libs/asio/doc/design/index.html

    参考资料

    1、Reactor构架模式及框架概述

    2、高性能网络编程6--reactor反应堆与定时器管理

    3、Scalable IO in Java

    4、Reactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events 

    5、两种高性能I/O设计模式(Reactor/Proactor)的比较

    6、Reactor模式及在DSS中的体现

    7、高性能I/O设计模式Reactor和Proactor 

    8、Comparing Two High-Performance I/O Design Patterns

    展开全文
  • 计算机网络——五与七层模型

    万次阅读 多人点赞 2019-08-31 21:40:53
    文章目录1 TCP/IP五层模型与OSI七层模型1.0 OSI是什么1.1 TCP/IP五层模型与OSI七层模型...2 计算机网络——以五层模型来说明工作原理2.1 物理层在干吗2.2 数据链路层2.2.1 以太网协议2.2.2 广播与ARP协议2.3 网络层...

    前言:

      在网络上有非常都关于计算机网络的知识,常常感觉看懂了,但没几天就忘得没影了。自己写一篇相关的文章是一个总结和消化的过程。这篇文章大致讲明白了各层通信协议的要点,此文对于了解整个网络通信流程有较大帮助。PS:时间充裕的话,还是建议看书。
    传送门:关于HTTP协议,一篇就够了


    1 TCP/IP五层模型与OSI七层模型

    这部分图片来自于:OSI七层模型与TCP/IP五层模型

    1.0 OSI是什么

      OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
      ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
    https://blog.csdn.net/xj5210224/article/details/90650379

    1.1 TCP/IP五层模型与OSI七层模型分别是什么

    在这里插入图片描述

    1.2 TCP/IP五层模型与OSI七层模型的工作设备

      关于硬件,有兴趣可以看下:二层、三层、四层交换机、路由器的区别
    在这里插入图片描述

    1.3 TCP/IP五层模型与OSI七层模型的协议

    在这里插入图片描述
    注:五层模型与七层模型,图源

    1.4 四层、五层、还是七层?

      TCP/IP模型原为四层,而TCP/IP五层模型实际上是TCP/IP与OSI七层模型的混合后的产物。说到底,这些模型的出现目的是为了使大家都使用统一的协议(通信规则)来通信。可以看到,五层模型和七层模型在物理层、数据链路层、网络层、传输层都用的是相同的协议,他们是统一的。不同点只在于应用层部分。应用程序复杂多变,比如电子邮件用的是SMTP协议、WEB服务器用HTTP协议。应用程序可以根据自己的需求特点,来使用各种不同的协议。而五层模型和七层模型在应用层的理念各有优劣,也因此在不同的协议中得到实现。
      前面我们说过,TCP/IP协议是互联网协议(簇)的统称,他是互联网标准通信的基础,它提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。而OSI模型是开放式系统互联通信参考模型——笔者的理解是:
      OSI是一个完整的、完善的宏观模型,他包括了硬件层(物理层),当然也包含了很多上面途中没有列出的协议(比如DNS解析协议等);而TCP/IP(参考)模型,更加侧重的是互联网通信核心(也是就是围绕TCP/IP协议展开的一系列通信协议)的分层,因此它不包括物理层,以及其他一些不想干的协议;其次,之所以说他是参考模型,是因为他本身也是OSI模型中的一部分,因此参考OSI模型对其分层。

    这一段参考了:游骑兵810
    在这里插入图片描述
    此图来自——Java面试突击


    2 计算机网络——以五层模型来说明工作原理

    2.0这段主要参考IP协议基础,而后面几个小节参考的是一文读懂一台计算机是如何把数据发送给另一台计算机的 - 帅地的文章 - 知乎。PS:这里的信息正确与否自己没有求证过——没看过完整的计算机网络,因此只是拾人牙慧罢了。

    2.0 数据封装的概念

      封装即每一层接收上层数据时,都会添加自己特定的头部数据(有时也会有尾部数据)。这些头部数据实际上就是实现协议的规定,即加上相应的“暗号”、“黑话”。一个很好的例子:人是数据,“暗号”就是人的头部数据。当喊出“天王盖地虎”,回答“宝塔镇河妖”,那我们就是自己人,可以开始联系了。假如你的暗号是“三个臭皮匠”,“顶个诸葛亮”,那你就忽略掉前面的“天王盖地虎”。

      如下图,应用层到传输层时,应用数据的基础上添加了TCP的header,就变成了TCP segment 。

      传输层到网络层时,就在TCP segment的基础上添加了IP的header,整个数据变成了IP datagram(数据在网络层中传送需要IP地址的信息来寻路)。

      网络层到链路层时,就在IP datagram的基础上添加了Ethnet header和Ethnet triler数据,变成了Ethernet frame(数据链路层中数据传送则需要Ethnet提供的信息)。
    在这里插入图片描述
    在传输层以下的各层中,数据的传递流程如下图:
    在这里插入图片描述
      下面是介绍各层都在干嘛,用什么协议实现连接和通讯。

    2.1 物理层在干吗

      设备:电缆、双绞线、无线网(电磁微波)、中继器、集线器。
      功能:实现0、1信号的传输。这些0、1信号就是计算机能够识别的数据。

    2.2 数据链路层

      经物理层传输后,接收到信号如下:
    在这里插入图片描述
      问题:看得懂吗?谁送的信号?送给谁?因此,我们需要有一个规定(协议)来说明怎么我们该怎么编制有用的信号,然后大家就照这个来。
      涉及硬件:网桥、网卡、以太网交换机

    2.2.1 以太网协议

    以太网这段参考:数据链路层之以太网协议
      以太网协议就是来解决上面问题的。他规定一个数据包(帧)应该包含以下内容:
    在这里插入图片描述
      一个电信号就是一个比特位。
      地址:以太网帧中,目的地址与源地址这里都指的是 MAC 地址(Media Access Control Address)。每一个主机都有网卡接口,网卡会产生一个 MAC 地址,该地址由供应商代码和序列号组成(参考),长度是 48 位,所以这里的目的地址与源地址都是 6 个字节,也就是 48 个比特位。
      数据质量:在以太网帧的最后,是一个 CRC 校验码,来校验数据是否异常。
      向上交付时的协议:在中间,有一个两个字节的类型标识。这个类型字段有三种值,分别是 : IP、ARP、RARP,对应的是向上层交付时采用的协议(上一层怎么读懂我)。

      问题:虽然有地址,但发出时是以广播的形式发出,即所有连着的计算机都可能收到信号,怎么办?另:如果A计算机要给B发消息,那A怎么知道B的地址呢?

    2.2.2 广播与ARP协议

      广播:计算机以广播的形式发出信号,所有连着的计算机都可能受到信号,这是接受到信号的计算机判断目的地址是不是自己。是,则接受;否,则丢弃。就像在广场上,有人大呼某个人的名字,你听到了,则判断如果是你,则回应,否则,就当没听见。
      ARP协议:计算机 A 是如何知道计算机 B 的 MAC 地址的呢?这个时候就得由 ARP 协议这个家伙来解决了,不过 ARP 协议会涉及到IP地址,我们下面才会扯到IP地址。因此我们先放着,就当作是有这么一个 ARP 协议,通过它我们可以知道子网中其他计算机的 MAC 地址。

      此外,为了明晰整个思路,在这里要思考下(虽然下面也有提到):有了MAC地址(按照2.2.1可知它唯一标志了一台计算机),计算机不就可以通过它来通信了吗,为什么还有IP地址?答案是MAC确实可以通信了,但是仅限于在一个子网(局域网)中。利用IP地址的理念可将主机划分在不同的子网中,主机只会收到子网内的广播信息。否则,计算机会收到全世界的主机广播而来的数据,这样但是判断每个数据是否发给自己,都要忙死了,效率会十分低下。
      另一个值得思考的问题是:IP地址也可以唯一标识一台主机,那么是不是因为有了IP,那么MAC地址就显得多余呢?答案可以在有了 IP 地址,为什么还要用 MAC 地址? - 向往美的回答 - 知乎里找到。简单来说,IP(因特网)并没有定义底层的通信协议。由于历史的原因,局域网(以太网)是先于因特网存在的。因特网中,如IP等更高层的协议出现,目的是不让主机的通信紧紧局限于局域网中,而要让世界范围内的主机都可以通信。因此,因特网实际也包含了以太网协议,没有必要因为IP的出现而废止掉以太网协议,在以太网基础上构建因特网就可以了。IP地址和MAC地址之间的翻译是通过2.3.2中的ARP协议实现的。

    • PS:数据链路层主要涉及以太网协议和ARP协议,最常用的实现这些协议的硬件和软件是网络适配器

    2.3 网络层

      网络层涉及硬件、软件:路由器(有内置软件)、三层交换机。路由器将局域网和广域网相连,实现不同网络间的通信,根据路由选择协议(Routing Protocol)提供的功能,它可以自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径(参考:路由器和网关的区别)。
      网络层有以下协议:Internet协议(IP)、nternet控制信息协议(ICMP)、址解析协议(ARP)、反向地址解析协议(RARP)(主机可以发送MAC地址给局域网内的RARP服务器,以请求对应的IP地址,若RARP列表中有该MAC地址,则返回IP供其使用,反之,则主机没有IP地址可用——ARP与RARP)。

      实际上,广播时只有同一个子网中的计算机能收到,而互联网实际上是由无数个子网组成的。
       为什么要有子网? 这样划分很有好处,否则全世界无数的计算机都会收到数据包,光是判断这个数据包的工作量无法忍受。
      进一步,怎么区分MAC地址是否为同一个子网?解决方案是使用IP协议。

    2.3.1 IP协议

      IP协议规定的是数据报,其信息如下:
    在这里插入图片描述
      数据报中包含IP协议版本、IP header的长度、服务类型(最小延时,最大传输,最大可靠性,最小消耗等)、整个数据报字节数、识别号……源IP地址、目标IP地址。
      IP协议定义的地址称为IP地址。目前有两种版本,一种是IPv4(地址长度32位),另一种是IPv6,IPv6版本可以提供更多的地址(地址长度128位——IPV4与IPV6的区别(史上最详细))。目前主要是IPv4,因此下面主要讨论IPv4。
      IPv4由32位二进制数组成,一般将其分为四段十进制来表示。地址范围为:0.0.0.0~255.255.255.255 。
      IP地址怎么帮我们找到一个设备(计算机)呢?实际上IP地址给出了计算机的两部分信息:1、网络部分,给出计算机所处的子网;2、主机部分计算机的主机地址。
      那进一步这两个部分分别对应哪些二进制位数呢?实际上这两个部分所占的二进制位数并是不固定的。因为我们可以根据子网的规模合理分配IP地址。比如一个少于255台主机的子网主机部分只需占8位就够了,如果占了16位,则很多地址都不会被用到,这是极大的浪费。
      那我怎么知道网络部分和主机部分分别占几位呢?解决方案是引入子网掩码,他也是32位二进制数,并规定网络部分全为1,主机部分全为0。比如,主机部分为8位时,则对应的子网掩码是:
      11111111.11111111.11111111.00000000,即255.255.255.0。
    在这里插入图片描述
      有了子网掩码,就知道了哪些是网络部分,进而只需要把两个IP地址网络部分的网络部分对比,就知道是否在同一个子网中。

    2.3.2 ARP协议

      现在知道了IP协议,回头说ARP协议。之前说了他是用来得到同一个子网中目标计算机的MAC 地址,怎么实现呢? MAC地址是数据链路层的通信协议所需要的,ARP的作用也相当于通过IP来获取MAC地址。
      ARP协议也是通过广播形式发送数据包给子网中所有计算机,数据包中含有目标计算机B的IP地址(不是MAC地址)。所有收到数据包的计算机会比较该IP地址和自己是否一致。如果一致,就回复给源计算机A自己的MAC地址(该地址唯一标志了主机的网卡接口)。否则丢弃该数据包。
      有一个问题:其他计算机怎么知道你想要传数据还是想询问MAC地址?e解决方法:ARP协议中的数据包中在对方的MAC地址这一栏中,填的是一个特殊的MAC地址,其他计算机看到这个特殊的MAC地址就知道是想干嘛了。

      那如果不是同一个子网,怎么发数据包给对方呢? 假如两台计算机的IP不是处于同一个子网之中,这个时候,我们就会把数据包发送给网关,然后让网关让我们进行转发传送。

    2.3.3 DNS服务器

      我们一般不直接输入对方的IP地址,而是输入对方的域名(更好记的地址),DNS服务器通过解析域名来帮我们找到对应的IP地址。
      那么问题是:我们是如何知道对方计算机的IP地址的呢? 这个问题可能有人会觉得很白痴,心想,当然是计算机的操作者来进行输入了。这没错,当我们想要访问某个网站的时候,我们可以输入IP来进行访问,但是我相信绝大多数人是输入一个网址域名的,例如访问百度是输入 http://www.baidu.com 这个域名。其实当我们输入这个域名时,会有一个叫做DNS服务器的家伙来帮我们解析这个域名,然后返回这个域名对应的IP给我们的。

    2.4 传输层

    小引:
      传输层涉及硬件:四层交换机、四层路由器。交换机和路由器都有相应的内置软件,来实现对应层网络的连接和数据传输、转发。

    这部分参考:网络协议端口号详解TCP 和 UDP 的区别
      经过前面几层,我们已经知道如何把数据从计算机A发给计算机B。而一台计算机中的应用程序众多,我们怎么知道数据给哪一个应用呢?

      这个时候就需要用到传输层最常见的两大协议是:TCP 协议和 UDP 协议,两者最大的不同就是 TCP 提供可靠的传输,而 UDP 提供的是不可靠传输。

    下面TCP和UDP的解释来自TCP 和 UDP 的区别网络协议端口号详解以及简述TCP的三次握手过程

    2.4.1 UDP

    UDP的包头如下:
    在这里插入图片描述

    • 包头中的内容:由上图可以看出,UDP最重要的信息就是端口号。如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:256×256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(256×256)。
    • 收发端口:接受数据报的进程和发送数据报的进程都需要开启端口,因此数据报中将会标识有源端口,以便接受方能顺利的回传数据报到这个端口。
    • 端口是一个队,操作系统为各个进程分配了不同的队,数据报按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。
    UDP的特点
    • 结构简单,因此沟通简单。
    • 不建立连接,但会监听这个端口,因此可以多对多的收发数据。
    • 不会进行拥塞控制,无论是否丢包,只顾发送。
    UDP的优势
    • 需求资源少,不必建立一对一连接。对丢包不敏感的应用,或者需要处理速度快的。应用可用之。
    • 无需建立连接,可以承担广播或者多播的任务。
    UDP的例子
    • 直播、实时游戏、物联网。

      作为对比,传输层的功能就是建立端口到端口的通信,而网络层的功能是建立主机到主机的通信。

    2.4.1 TCP

    TCP 的包头格式如下:
    在这里插入图片描述
    其中包含如下内容:

    • 首先,源端口和目标端口是不可少的。
    • 序号:Seq序号,主要是为了解决乱序问题。不编好号怎么知道哪个先来,哪个后到
    • 确认序号:Ack序号,发出去的包应该有确认,这样能知道对方是否收到,如果没收到就应该重新发送,这个解决的是不丢包的问题
    • 状态位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
      (A)URG:紧急指针是否有效。若为1,表示某一位需要被优先处理。
      (B)ACK:确认序号是否有效。
      (C)PSH:提示接收端应用程序立即从TCP缓冲区把该数据读走。
      (D)RST:对方要求重新建立连接,复位。
      (E)SYN:置为1时发起一个新连接。
      (F)FIN:置为1时,释放一个连接。
      因为 TCP 是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更
    • 窗口大小,TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力。
    TCP协议应该关注的问题

    通过对 TCP 头的解析,我们知道要掌握 TCP 协议,应该重点关注以下问题:

    • 顺序问题
    • 丢包问题
    • 连接维护
    • 流量控制
    • 拥塞控制
    TCP 的三次握手

    关于三次握手、四次挥手强烈建议看这篇文章:TCP的三次握手与四次挥手理解及面试题(很全面)

    a.建立连接

      所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
    在这里插入图片描述

    • (1)第一次握手:Client将报文的标志位SYN置为1,随机产生一个序号seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
    • (2)第二次握手:Server收到数据包后,由报文中的标志位SYN=1知道Client在请求建立连接;Server会发送一个报文,其中标志位SYN和ACK都置为1,确认序号为ack=J+1,随机产生一个值seq=K(这样可避免黑客很容易猜到序列号而发起攻击),并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
    • (3)第三次握手:Client收到确认报文后,检查ack是否为J+1,ACK是否为1,如果正确,则再次发送一个报文,将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
    • 需要注意的是:
      (A)不要将确认序号ack与标志位中的ACK搞混了。
      (B)确认方确认序号ack=发起方序号seq+1,两端配对

    SYN攻击:

    在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击是一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
    #netstat -nap | grep SYN_RECV

    TCP的四次挥手

      所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示(图源:TCP的三次握手与四次挥手理解及面试题(很全面)):
    在这里插入图片描述

    • 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN报文来终止这一方向的连接,收到一个FIN报文只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
    • (1)第一次挥手:Client发送一个FIN报文,其中FIN置为1,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
    • (2)第二次挥手:Server收到FIN报文后,发送一个ACK报文(ACK置为1)给Client,其中确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。这时Client已不能发送数据,Server也不能接收Client的数据。但是Server还是可以给Client发数据,Client也还可以接收数据。
    • (3)第三次挥手:若Server发送一个FIN报文,用来关闭Server到Client的数据传送,则Server进入LAST_ACK状态。
    • (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
    • 上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:
      在这里插入图片描述
      流程和状态在上图中已经很明了了,在此不再赘述,可以参考前面的四次挥手解析步骤。
    顺序问题、丢包问题、流量控制、拥塞控制
    TCP的面试题
    • 关于三次握手与四次挥手通常都会有典型的面试题,在此提出供有需求的XDJM们参考:
      (1)三次握手是什么或者流程?四次握手呢?答案前面分析就是。
      (2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
      这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,Server可以把ACK和SYN同时置为1,放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送

    2.5 应用层

      终于说到应用层了,应用层这一层最接近我们用户了。

      虽然我们收到了传输层传来的数据,可是这些传过来的数据五花八门,有html格式的,有mp4格式的,各种各样。你确定你能看的懂?

      因此我们需要指定这些数据的格式规则,收到后才好解读渲染。 例如我们最常见的 Http 数据包中,就会指定该数据包是什么格式的文件了。
    应用层主要有以下协议:

    • 1、超文本传输协议(HTTP):万维网的基本协议;
    • 2、文件传输(TFTP简单文件传输协议);
    • 3、远程登录(Telnet),提供远程访问其它主机功能, 它允许用户登录internet主机,并在这台主机上执行命令;
    • 4、网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法, 以及配置管理,统计信息收集,性能管理及安全管理等;
    • 5、域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址。

    3 总结

      五层模型至此讲到这里。对于有些层讲的比较简洁,就随便概况了一下。因为如果我说的详细一点的话,篇幅肯定会特别特别长,我着已经是尽最大的努力以最简洁的方式来讲的了。如果你想详细去了解,可以去买计算机网络相应的资料,强烈推荐《计算机网络:自顶向下》这本书。希望我的讲解能让你对计算机之间数据的传输有个大概的了解。
      此外Socket技术即利用了以上原理,他提供了一系列接口(函数),来实现以上协议,使得客户端和服务器主机上的进程之间可以互相通信,具体可参考:Socket技术详解
      
      
      
      

    参考:

    OSI七层模型与TCP/IP五层模型
    一文读懂一台计算机是如何把数据发送给另一台计算机的
    3.HCNA-HNTD——以太网帧结构
    计算机网络漫谈:OSI七层模型与TCP/IP四层(参考)模型
    JavaGuide
    Socket技术详解
    TCP的三次握手与四次挥手理解及面试题(很全面))
    三次握手中为什么使用随机序号

    展开全文
  • 每一依赖底层提供的服务完成一特定的服务/功能 遵循一定的协议、通过内动作完成本的功能,并以此向上一提供服务 即 计算机网络体系结构是计算机网络的各及其协议的集合,是对计算机网络 功能层次及其...


    计算机网络体系结构

    当前计算机网络主要以分层结构来看待、从功能上进行描述
    每一层依赖底层提供的服务完成一种特定的服务/功能
    遵循一定的协议、通过层内动作完成本层的功能,并以此向上一层提供服务

    计算机网络体系结构是计算机网络的各层及其协议的集合,是对计算机网络
    功能层次及其关系的描述
    (每层遵循哪些协议、完成哪些功能,各层之间的关系)
    计算机网络体系结构是抽象的,不关心具体实现方式

    分层结构
    • 有利于描述复杂系统的组成部分之间的关系,
    • 模块化思想的体现
    • 有利于标准化
    • 分层过多时存在效率问题
    分层体系结构中的基本概念

    在分层网络体系结构中
    分层体系结构示意图

    • 实体(entity) 表示任何可以发送或接受信息的硬件或进程(软件)
    • 协议(protocol) 是控制两个对等实体之间的通信规则的集合,是“水平的
    • 每一层的实体需要使用下一层的服务,遵循本层的协议,完成本层功能,向上一层提供服务服务是“垂直的
    • 下层协议的实现对上层是透明的
    • 同系统的相邻层实体之间通过接口进行交互,通过服务访问点SAP,Service Access Point),交换原语(类似于系统调用,如请求、确认、响应等),请求特定的服务

    OSI参考模型

    OSI参考模型 由 ISO(国际标准化组织)于1984年提出
    主要目的是支持异构网络的互联互通
    该模型并未实际应用到市场,但仍具有相当的理论价值
    OSI参考模型
    OSI参考模型将计算机网络分为七层

    • 图中虚线表示对等层在逻辑上相互通信
      如某设备发出的完成网络层功能的数据只有其他设备的网络层功能关心
      更高层/更低层 见不到/不关心 这些信息,即 各层的数据均是发送给对等层的
      所以说对等层之间遵循协议进行通信
    • 图中实线表示数据真正的传递方向
      虚线连接的对等层之间并没有实际的通信链路,数据最终是通过物理层在
      传输介质上进行传递的
    • 相邻层通过接口传递数据
    • 高四层称为端到端层(end-to-end)
      应用层,表示层,会话层,传输层的源与目的地一定都是端系统,或者说
      只有端系统才关心这四层的数据
    数据封装

    OSI参考模型数据封装与通信过程
    用户数据在传递过程中,通常根据各层的协议在数据前加上相应的控制信息
    如应用层头(header)、表示层头,(数据链路层通常会加头加尾,物理层直接传输比特流)
    构成该层的 PDU(protocol data unit,协议数据单元),然后传递给下一层
    特别地,数据链路层的 PDU 又被称为
    增加控制信息构成 PDU 的过程称为数据封装

    控制信息

    增加的控制信息主要 / 可能包括:

    • 地址信息(Address):从哪里来、到哪里去
    • 差错检测编码(Error-detecting code):用于差错检测或纠正
    • 协议控制(Protocol control):实现协议功能的附加信息,如优先级、服务质量和安全控制等

    下面详述 OSI参考模型 各层次的功能


    物理层(Physical )

    在这里插入图片描述
    物理层负责把数据按比特在物理介质上进行传输(发送与接收)

    具体体现为以下内容的定义与规范:
    接口特性(主机与发送设备之间、发送设备与物理介质之间的接口)

    • 机械特性:物理接口的形状、尺寸,引线数目和顺序等
    • 电气特性:接口电缆每条线的电平,电压范围
    • 功能特性:各条线的用途与某电平下电压的意义
    • 规程特性:接口按照怎样的过程工作、各事件的出现顺序

    数据率:以多快的速度发送数据
    比特编码:如何表示一个比特
    比特同步:即时钟同步,同步地发送与接收,如利用一个通道传递时钟信号
    传输模式

    • 单工(Simplex):单向传输
    • 半双工(half-duplex):可交替进行双向传输
    • 全双工(full-duplex):可同时双向传输

    数据链路层(Data Link)

    数据链路层
    物理层仅仅是把比特放到物理介质上 / 从物理介质接收比特
    数据链路层负责完成 由物理链路直接相连的两个结点(主机、交换设备)之间的数据传输
    数据链路层以帧(frame,D-PDU)为单位进行传输

    具体包括以下内容:

    • 成帧:为物理层数据加头加尾形成 N-PDU,使得接收端可以把帧从比特流中识别分割,进一步得到其中的控制信息,以完成数据链路层的其他功能
    • 物理寻址:物理层对数据的发送端与接收端一无所知,因为它的数据单位是比特;数据链路层在帧头中增加发送/接收端的物理地址以标识发送端与接收端
      数据链路层物理寻址
    • 流量控制:避免发送数据太快使接收端来不及处理造成数据丢失
    • 差错控制:比如使用差错编码,检测并重传损坏或丢失帧,并避免重复帧
    • 访问控制:即接入控制,在共享链路中的任一给定时刻决定哪个设备拥有链路的使用权

    网络层(Network)

    网络层
    负责源主机到目的主机数据分组(packet)的交付

    主要功能包括:

    • 逻辑地址:由于分组的的传送可以需要跨越多个网络,因此需要能够唯一标识
      一个主机在网络中位置的逻辑地址,如 IP 地址,这个逻辑地址会保存在网络层头中
    • 路由:路由分组、为分组选择路径
    • 分组转发:即转发分组至下一结点

    路由器转发分组示意图


    传输层(Transport)

    传输层
    负责源到目的(端到端、进程间)的完整报文的传输

    传输层的协议数据单元也叫做
    传输层的主要功能包括:

    • 分段与重组:发送端需要将完整报文分割成数据段并添加传输层头封装为 PDU
      传递给网络层;接收端需要将网络层传递来的 PDU 重组为完整的数据报并向上传递
    • SAP寻址:由于传输层需要实现进程到进程的通信,所以需要某种方法对进程寻址
      OSI参考模型称为SAP寻址,服务访问点(SAP)在 Internet 中即相当于端口号
    • 连接控制:由于传输层是第一个端到端层,因此适合实现连接的控制
      包括连接的建立,维护和拆除
    • 流量控制:有些传输层协议会解决端到端的流量控制
    • 差错控制:有些传输层协议会进行差错控制

    传输层通信示意图
    上图中传输层头 x、y 表示通信双方的端口号


    会话层(Session)

    会话层
    负责控制对话
    主要包括:

    • 对话控制:负责对话的建立、维护
    • 同步:在数据流中插入控制点,一旦数据传输出错,只需从相应的控制点恢复

    会话层是 OSI参考模型中功能最薄弱的一层,实际的网络中可能不单独存在该层


    表示层(Presentation)

    表示层
    负责处理两个系统间交换信息的语法、语义问题

    主要包括数据的表示转化(如编码)、加密 / 解密 和压缩 / 解压缩

    通常该层也不独立存在(应用层就可以直接对数据处理


    应用层(Application)

    应用层
    应用层支持用户通过用户代理(如浏览器)或网络接口使用网络
    典型的应用层服务:文件传输(FTP),电子邮件(SMTP),Web应用(HTTP)等等


    TCP/IP参考模型

    与 OSI 不同,TCP/IP 参考模型是先有实现,后整理总结出的模型
    Internet 与其前身 ARPAnet 符合 TCP/IP 参考模型
    TCP/IP参考模型
    TCP/IP参考模型划分为四个层次
    其中,网络接口层未定义具体的协议,只要求可以封装(向上)和传输(向“下”)网际层的 IP分组
    自顶向下看 是一种 Everything over IP 的局面,所有的应用都架构在 IP 之上
    自底向上看 是一种 IP over everything 的局面,底层网络最少只需要处理 IP分组

    网络接口层的开放性促进了 Internet 的发展


    五层参考模型

    五层参考模型综合了 OSI 与 TCP/IP 的优点,TCP/IP 源于事实,OSI 更清晰规范
    五层参考模型主要将 TCP/IP 中的网络接口层拆分为 OSI 描述的数据链路层与物理层
    五层参考模型
    五层参考模型所解释的通信过程
    五层参考模型所解释的通信过程
    (注意,交换机(switch)是链路层设备,路由器(router)是网络层设备


    三种参考模型的对照

    OSI参考模型 TCP/IP参考模型 五层参考模型
    应用层
    表示层
    会话层 应用层 应用层
    传输层 运输层 传输层
    网络层 网际层 网络层
    数据链路层 网络接口层 数据链路层
    物理层 物理层

    2020/4/25

    展开全文
  • 《复杂网络与大数据》第二章:复杂网络模型的学习笔记 目录 1动态演化网络 1.1以网络演化的部件划分 1.2以是否考虑权重划分 1.3以演化网络采用的演化机制划分 1.4以演化网络是否动态变化划分 2社区网络 2.1...
  • TCP/IP五层网络架构及OSI参考模型

    万次阅读 2018-02-05 10:26:40
    OSI是Open System Interconnection的缩写,意为开放式系统互联,他是一个定义得非常好的协议规范。。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是...传输层 3 网络层 2 数据链路层 1
  • 人工神经网络典型模型

    千次阅读 2010-08-02 17:19:00
    <br />转自学研网http://bbs.matwav.com/viewthread.php?tid=105273&highlight=ART<br />迄今为止,有30多种人工神经网络模型被开发和应用。下面是它们之中有代表性的一些模型。  (1)自适应谐振理论...
  • TCP/IP 网络通信协议 之 OSI 七层模型

    千次阅读 2020-02-06 00:03:17
    3.1 OSI七层模型 TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。...它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和...
  • 转载:https://blog.csdn.net/cxmscb/article/details/71023576 原博客附带tensorflow cnn实现一、CNN的引入在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的。当输入的特征维度变得很高...
  • OSI 7层网络模型和TCP/IP 4层网络模型

    千次阅读 2016-07-07 14:19:04
    一、ISO 7层模型 1、物理(Physical Layer) OSI模型的最低或第一,规定了激活、维持、关闭通信端点之间的机械特性、...属于物理定义的典型规范代表包括:RS-232、RS-449、RS-485、USB2.0、IEEE-1394、xDSL、
  • 计算机网络-OSI七层模型 OSI : Open System Interconnection Reference Model,缩写为 OSI ,中文称开放系统互连参考模型,它定义了异种计算机连接传输的标准 物理(在TCP中为硬件) 二进制传输 主要设备与...
  • 网络层次模型及各对应协议

    千次阅读 2020-02-21 22:12:36
    一、OSI七层模型OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。三、五层...
  • P2P四种网络模型

    千次阅读 2010-08-09 20:33:00
    这种网络结构显示了P2P系统信息量巨大的优势和吸引力,同时也蕴藏着个重大问题:即法律版权问题和资源浪费问题。2.纯P2P模式,也称作广播式。它取消了集中的中央服务器,每个用户随机接入网络,并与自己相邻的一组...
  • 循环神经网络RNN以及几经典模型

    千次阅读 2020-02-20 21:35:32
    RNN简介 现实世界中,很多元素都是相互连接的,比如室外的温度是随着气候的变化而周期性的变化的、我们的语言也需要通过上下文的关系来确认所...循环神经网络的基本结构特别简单,就是将网络的输出保存在一个记忆单...
  • OSI七层模型详解

    千次阅读 多人点赞 2020-05-10 11:07:30
    网络层 常见协议有IP协议、ICMP协议、IGMP协议。 网络接口层 常见协议有ARP协议、RARP协议。 TCP传输控制协议(Transmission Control Protocol)是一面向连接的、可靠的、基于字节流的传输层通信协议。 UDP用户...
  • socket编程有典型的接收发送方式:轮询方式和select侦听及管道中断方式。 Socket是应用与TCP/IP协议族通信的中间软件抽象,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议...
  • OSI七层模型及各作用

    万次阅读 多人点赞 2018-05-16 17:05:34
    整个模型分为七层,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。OSI七层模型 功能 对应的网络协议 TCP/IP四层概念模型 应用层 文件传输,文件管理,电子邮件的信息处理——apdu HTTP、TFTP, FTP, ...
  • 网络层-1、网络层功能概述

    千次阅读 2017-09-28 16:52:01
    网络层功能概述
  • OSI七层模型及对应的网络协议

    千次阅读 2019-05-16 16:34:49
    一、OSI七层模型OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。三、五...
  • 经典的卷积神经网络模型

    万次阅读 多人点赞 2019-03-17 14:34:28
    1.卷积神经网络解决的问题 2.经典的卷积神经网络 2.1 LeNet 2.2 AlexNet 2.3 VGG 2.3.1 VGG块 2.3.2 VGG网络 2.4 NiN 2.4.1 Nin块 2.4.2 Nin网络 2.5 GooLeNet 2.5.1 Inception块 2.5.2 GoogLeNet网络 ...
  • 循环神经网络经典模型

    千次阅读 2018-10-03 10:00:04
    本文主要是利用图片的形式,详细地介绍了经典的RNN、RNN几个重要变体,以及Seq2Seq模型、Attention机制。希望这篇文章能够提供一个全新的视角,帮助初学者更好地入门。 一、从单层网络谈起 在学习RNN之前,首先要...
  • 层次、网状、关系模型

    万次阅读 多人点赞 2017-11-18 17:12:44
    格式化模型中数据结构的基本单位是基本层次联系,基本层次联系指的是个记录以及他们之间的一对多(包括一对一)的联系。它是单记录的操作方式。 格式化模型中实体用记录表示,实体的属性对应记录的数据项(或字段...
  • OSI七层模型基础知识及各常见应用

    万次阅读 多人点赞 2018-03-16 15:37:33
    模型网络通信的工作分为7。1至4被认为是低,这些与数据移动密切相关。5至7是高层,包含应用程序级的数据。每一负责一项具体的工作,然后把数据传送到下一。由低到高具体分为...
  • 一文看懂25个神经网络模型

    万次阅读 多人点赞 2017-06-17 10:26:08
    光是知道各式各样的神经网络模型缩写(如:DCIGN、BiLSTM、DCGAN……还有哪些?),就已经让人招架不住了。因此,这里整理出一份清单来梳理所有这些架构。其中大部分是人工神经网络,也有一些完全不同的怪物。尽管...
  • 基于神经网络的对话模型

    千次阅读 2016-09-15 00:12:24
    在这篇文章中,我们针对这个任务展现了一简单的方法,这种方法使用最近被提出的sequece to sequece 框架。我们的模型通过给定之前的对话中的句子来预测下一个句子的方式进行交谈。我们模型的有点就是它可以进行...
  • 典型的集群架构模型

    千次阅读 2015-05-10 07:12:57
    下面介绍三种典型的集群架构模型。 重客户端系 优势: 1、 注册中心作为协调器,客户端和服务端直连,消费者和提供者只在服务启动时或者服务发生变化时才依赖注册中心,其余时间注册中心出现任何问题,服务...
  • OSI参考模型——物理详解

    万次阅读 多人点赞 2016-12-29 15:59:31
    一、物理的基本功能物理是OSI参考模型的最低,它利用传输介质为通信的主机之间建立,管理和释放物理连接,实现比特流的透明传输(传输单位是比特),保证比特流通过传输介质的正确传输。1. 与数据链路的关系...
  • 生成对抗网络 – Generative Adversarial Networks | GAN文章目录GAN的设计初衷生成对抗...本文将详细介绍生成对抗网络 – GAN 的设计初衷、基本原理、10种典型算法和13种实际应用。 GAN的设计初衷一句话来概括 .
  • 层网络协议

    千次阅读 2019-05-27 20:22:03
    五层网络协议1....OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical...
  • TCP/IP五和七层模型总结(建议全文背诵)

    千次阅读 多人点赞 2020-12-18 12:20:14
    TCP/IP五层和七层模型总结TCP/IP五层参考模型以及对应的典型...TCP/IP的七层模型应用层 (Application):表示层(Presentation Layer):会话层(Session Layer):传输层 (Transport):网络层 (Network):数据链路层

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,319
精华内容 41,727
关键字:

网络层两种典型服务模型