zoukankan      html  css  js  c++  java
  • 【知识强化】第五章 传输层 5.1 传输层提供的服务

    从这节课开始呢我们将来学习传输层的内容。

    首先我们来看一下传输层的概述。

    那传输层呢它是作为主机才会有的层次,也就是在端系统、两个主机之间才会有一层叫传输层。那最高层呢如果是五层结构的话,就到应用层。而中间的这些网络设备,它们最多呢只能到网络层,也就是最多只有三个层次,因此是到不了传输层的。所以我们说它是主机才会有的层次。

    那传输层呢位于这5层的网络体系结构当中的第四层,上面是应用层,下面是网络层。那我们在第一章就讲过,下层是要为上层提供服务的。所以呢传输层是为应用层提供服务,同时呢它也可使用网络层的服务。那我们来看一下传输层的功能。首先第一个功能呢,啊也是传输层的概念,它可以提供进程和进程之间的逻辑通信,注意这里面我们说的是进程与进程之间,那在网络层的时候我们学的这个网络层它的功能,是为主机之间的通信啊提供一个服务。但是我们知道在实际应用的时候在实际通信的时候,比如说我们的QQ或者是微信,在聊天的时候呢如果这个数据只是到达这个主机,还没有通信结束,只有把这个数据送交到某一个具体的进程或者说这个进程具体的一个窗口,也是进程当中一个具体线程的时候,我们才能够实现这个通信的过程。所以说到网络层呢这个通信是没完成的,还要到传输层,也就是实现一个进程和进程之间的逻辑通信。那之所以是逻辑通信呢,就好像表面上啊是两个主机的进程之间在通信,我的QQ在跟你的QQ通信,实际在通信的时候呢是把数据从最上层进行一步一步的封装传给下层,也就是到了物理层。然后呢物理层再放到链路上传输。那到了这一端呢,就要经过物理层再自下而上的把这个数据解封装,然后再交付给最终的应用层。所以我们说传输层它提供的是进程与进程之间的一个逻辑通信,而网络层呢提供的是主机与主机之间的逻辑通信。

    接下来我们再看第二个功能,复用和分用。这个复用指的是发送方不同的应用进程,比如说QQ或者微信,它们都可以使用同一个传输层的协议来传送数据。而这个分用呢,指的是接收方它传输层在剥取报文的首部之后,能够把这些数据送交给正确的一些进程。比如说我们现在这个一个主机它打开了QQ,打开了微信,那这个打开了两个进程。那两个进程在使用的时候一定要进行数据的通信。假如说我QQ发了一个话,发了一句话,给我的女友1。那微信呢我发了一句话,给我的女友2。那这两个话呢就作为我们传输层的一个传送单元,我们称之为报文段。那这些报文段呢啊就可以交付给网络层,然后这一堆报文段或者说这一些报文段,就在链路上面进行传输。那这其实就是把这两个进程的一个数据进行了一个复用,也就是把两个进程的数据都使用的同一个传输层的协议进行传输。同样呢,如果收到了女友1和女友2两个人的消息,那这两个消息呢到了我的这个主机这儿,啊就要经历这个传输层的分用过程,也就是把传来的报文段送交给对应的某一个进程。那这就是复用和分用的过程。其实就好比我们生活当中寄信的一个例子,假如说我们家有4口人,那这4个人呢分别都想给他们的好朋友写信,那我们就会把这些信写好之后放到家门口的信箱当中,再由邮局小哥呢把信箱当中的信,啊收集好再放到邮局里面发送出去。那这个就是传输层的复用过程。那对应于分用呢就是我们4个人写的信全部收到了回信,那这些回信呢,就全部放到我们的信箱当中。那这个信箱当中的信我们就会取出来,然后分发给我们四个人当中的具体某一个人。那这个对应的过程呢其实就类似于我们传输层的分用过程。

    那接下来我们再来看第三个传输层的功能,就是对收到的报文进行一个差错检测。我们之前在讲网络层的时候,学过一个首部校验和。那这个校验呢只是校验头部,但是没有校验数据部分。那因此,就需要它这个高层,也就是传输层来实现对于这个数据的一个检错。因为网络层的数据部分就是传输层的报文段,因此这个传输层如果对这个报文段进行了差错检测,那么网络层就不需要再对这个报文差错检测了,也就只需要检测IP数据报的头部,而不用检查数据部分。那可以看到这个传输层和网络层加一块儿呢,就可以实现一个可靠传输的功能。

    当然这个传输层啊,并不是一定会实现一个可靠传输的,就是因为传输层它有两种协议,一个叫做TCP,一个叫做UDP。

    接下来我们就看一下这两种协议。那这两个协议呢,给大家一个打油诗,就是传输层有两个好兄弟,大哥TCP和二弟UDP,大哥很靠谱,二弟不靠谱。有关于传输层的协议呢,我们不会像网络层学那么多,只学这两个就够了,TCP协议和UDP协议。而这个大哥靠谱说的就是TCP它是一个比较靠谱、比较可靠的协议,而UDP呢它是一个不可靠的协议。TCP呢它就是一个面向连接的传输控制协议,而UDP呢是一个无连接的用户数据报协议。那有的时候我们会说UDP的协议当中,传输单元是一个用户数据报。而这个TCP当中,TCP协议当中,传输单元呢是一个报文段。但是方便起见呢,我们不把它们做太大的区分,我们都把它们的传输单元称之为报文段。那接下来我们看一下TCP。它是传送数据之前一定要建立一个连接,那数据传送结束之后呢就要释放连接。它不提供广播或者是多播的服务。由于TCP要提供可靠的面向连接的传输服务,因此呢就会有一定的开销,比如说要回复确认、流量的控制、计时器以及连接管理等等。那再来看这个UDP协议,UDP呢是指传送数据之前不需要建立连接,那收到UDP报文之后呢,也不需要给出任何确认。那可以看到这个UDP的过程非常的简单,啊它的时延比较小。但是这个TCP呢由于要建立连接、管理连接、释放连接,就需要一定的时延。但是TCP呢,由于它面向连接,所以它是一个比较可靠的协议。也就是说TCP的特点呢就是可靠、面向连接、时延大,适用于大文件。而这个UDP协议呢,不可靠、无连接、时延小,适用于小文件。比如说我们这个发送QQ的一条消息,啊发个在吗或者发个表情包,那这些呢都是使用的UDP协议。为什么使用UDP呢?就是要发送的数据非常的短小,那我们就没有必要再去建立一个连接。那有的同学可能会问,那我们这个数据,如果这条消息没发送出去怎么办呢?这就是大家非常常见的一种现象,如果你发的一条QQ消息没发出去,由于网络拥塞的问题等等,你这个发送的消息前面就会有一个感叹号,啊一个红点,白字的感叹号。那这个感叹号其实就告诉你没有发送出去,没有发送成功。那你就需要再次发送一次,啊你只需要点重新发送,那就可以再次发送了。所以可以看到,使用UDP协议的应用程序呢它们的特点就是,要发送的数据,是比较小的。而且呢对于这个可靠性要求并不高,但是我们想,如果要传送一个大文件,比如说我们在QQ上面发送一个很大的文件,几百兆的文件,那这个时候呢,其实就需要使用的是TCP协议了。那关于TCP和UDP这两个协议呢,我们暂时只需要记住,TCP呢它是面向连接,一个可靠的传输层协议。UDP呢是无连接,不可靠的一个传输层协议。

    接下来我们就看一下传输层的寻址与端口这个问题。在之前我们讲传输层的功能的时候我们说过,它有分用和复用的功能。复用指的就是应用层所有的应用进程都可以通过传输层再传输到网络层。分用指的是传输层从网络层收到数据后,可以交付给指明的或者是对应的应用进程。那是如何指明给具体的应用进程呢,我们先想在网络层和链路层,对于一个主机如果我们要把这个数据发送给它,我们只需要知道它的IP地址就可以了。那在这个网络当中就只需要根据IP地址寻找到它所在的网络,那进入到它所在的网络之后呢,就要靠它的物理地址,也就是MAC地址。根据MAC地址,再定位到具体哪一个主机,那因此我们就找到了这个主机。但是我们说,如果找到了主机这个通信还不算结束,我们还应该找到这个主机当中的要接收这个数据的进程。那因此,就要涉及到传输层的问题,也就是要指明交付给一个具体的应用进程。那如何指明呢?其实在传输层呢,也会有这样一个概念。它和网络层的IP地址以及链路层的MAC地址一样,都可以唯一地标识一个主机。

    那在传输层呢都可以标识唯一的一个进程,就叫做端口。这个端口呢它是传输层的SAP,也就是服务访问点,它可以唯一地标识主机当中具体的一个应用进程。那这个端口呢,它是一个逻辑端口,也叫做软件端口。这个要和我们讲的硬件端口区分开,比如说路由器,或者交换机。它们上面的端口呢,直接插上去的那种端口,叫做硬件端口。而这种端口呢,传输层的端口,是我们看不见、摸不着的,所以我们叫它逻辑端口或者是软件端口。

    那这个端口呢我们会有一个具体数字来标识。那对于每一个端口呢我们都会有一个数字来标识它,又就叫做端口号。端口号要注意它只有本地意义,在因特网当中不同计算机的相同端口号是没有联系的。啊比如说我的主机和你的主机,我们有两个不同的进程。但是呢可以使用相同的端口号。那如果我们两个正在使用相同的进程,也可以对应不同的端口号,所以说端口号只需要在本机内有唯一性,可以唯一标识一个进程就可以了。在不同主机之间这个端口号是没有区分的意义的。那接下来我们看这个端口号它的长度是16比特,也就是能表示2^16也就是65536个不同的端口号。那对于这个端口号呢,我们根据它这个数字大小的范围,可以给它区分成服务端使用的端口号,以及客户端使用的端口号。那这个服务端呢指的就是服务器端所使用的端口号,客户端呢就是使用服务器服务的这些用户,也就是我们所使用的主机,主机当中的进程使用的端口号就叫做客户端使用的端口号。那服务端使用的端口号呢我们也可以分成两种,一个是熟知端口号,一个叫做登记端口号。那熟知端口号的范围呢是0-1023,登记端口号呢是1024-49151。因此服务端使用的端口号就是从0到49151。那熟知端口号指的就是给TCP/IP当中一些最重要的应用程序所标识的端口号,它是要所有用户都知道的。所以这个熟知端口号也叫做知名端口号,就是一些非常重要的程序才会固定确定好这样一个端口号,全人类都知道的。那这个登记端口号呢,就是稍微没有那么重要的一些应用程序,也就是为没有熟知端口号的应用程序所使用的端口号。那接下来我们就看这个客户使用的端口号,也就是从49152一直到最后的65536。那这个端口号呢仅仅在客户进程运行的时候才动态选择,为什么说它动态选择呢?因为这个客户端使用的端口号啊只有在使用的时候啊才会给它分配一个,而且是主机当中的操作系统给它随机分的。那这个进程只要一结束,这个端口号呢就可以分配给新的一个进程,所以这个端口号呢是可以循环利用可以动态选择的。

    那刚才在讲熟知端口号的时候呢我们知道在这个熟知端口号当中的所有应用程序,都是非常重要的。因此我们就要记住这个一些非常重要的应用程序以及它所对应的端口号。那具体的应用程序呢我们会在应用层这一章详细地讲解到,现在我们只需要找一个办法来一一对应,然后记住这些应用程序和它们的端口号。

    首先这个FTP,我们取第一个F,F就是发现。也就是我们在21岁的时候发现一个特别漂亮的姑娘,21岁。那再过了两年呢我们俩就在一起开始谈恋爱,那再过两年呢,就开始闹矛盾了,于是就彼此删好友,就是S。那再过了20多年,也就是到了53岁的时候,我现在开始后悔了,就给她打电话,也就是D。但是呢这个打电话并没有挽回,到了80岁,他还是很想再见面,这个就是H。所以呢就是根据一个这样的小故事,把这些应用程序和端口号串联起来,方便大家记忆。那最后呢,我们再讲这样一个概念,也就是套接字。套接字是什么呢?它其实就是一个主机IP地址和端口号的组合。那看到这个大家就应该清楚,根据IP地址可以找到主机,根据端口号可以找到主机当中的具体进程。因此我们说套接字它就可以唯一标识网络当中的一个主机,以及它上面的一个进程。也就是说一个套接字它是可以标识一个端点的。端点也就是我们最终通信的那个终点,也就是具体主机当中的一个具体进程。那有关于传输层的概述呢我们讲到这里,下节课我们开始学习UDP协议。

  • 相关阅读:
    USACO / Longest Prefix最长前缀(DP)
    (转)HDOJ 4006 The kth great number(优先队列)
    STL priority_queue(优先队列(堆))
    康托展开
    USACO / Magic Squares(经典BFS+Cantor展开hash)
    国家集训队论文分类整理
    国家集训队论文分类整理
    国家集训队论文分类整理
    OI / ACM 知识归纳
    学年总结跋涉ACM之路
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/11446492.html
Copyright © 2011-2022 走看看