前言
距离上一次发文章已经有一个月没更新了,这一个月里因为考试和项目,有点小忙哈哈,不得不说,看书和学习一定要养成习惯不能落下,不然像我一样有了断层,再往下跟进就太困难了。
话不多说啦,这次我讲的是书中的第三章:运输层,中的前两小节内容,包括了运输层的概述与多路复用、多路分解的内容。并且会大致对比UDP与TCP的多路复用和多路分解。
提示:以下是本篇文章正文内容,下面案例可供参考
一、运输层是什么?
1.数据传输过程
在了解运输层是什么之前,需要先了解数据是如何从一个主机上传输到另外一台主机上的。这里设置两个角色:Alice(发送方)、Bob(接收方)。大致流程如下:
Alice将所需要发送的数据内容通过应用层变为报文。
应用层将报文提交给进程的套接字接口,套接字接口将报文附着源端口地址,发送给运输层。
运输层收集套接字接口的端口号,并将报文分组,变为报文段。注意:这里报文段是加入了运输层的首部,这些运输层首部中包含源端口地址、目的端口地址等等(本节着重讲源端口地址与目的端口地址)。
运输层将这些报文分组(报文段)发送给网络层。
网络层接收到运输层传输的报文段后,将其封装成数据报,并通过数据链路层传递至Bob的网络层。Bob则一一进行分解最终至应用层。
2.运输层与运输层协议
从数据传输过程中我们可以看出,运输层位于应用层与网络层之间,是分层的网络结构中的重要组成部分。网络层是提供主机与主机之间的逻辑通信,运输层则是提供进程与进程之间的逻辑通信,运输层是在本地主机上运行的,并没有实际的与目的主机进行交互,它是将网络层的两个端系统之间交付服务扩展到运行在不同端系统上的应用层进程之间的交付服务。
运输层协议的服务是运行在不同的两台主机上的应用程序提供逻辑通信,从应用程序的角度上看,通过这种逻辑通信,两个进程好像直接进行连接了一样。网络中也有许多运输层协议,而大家都有所耳闻的协议就是TCP与UDP协议。UDP提供面向无连接的、不可靠的服务,TCP提供面向连接的、可靠的服务。这里简单介绍下网络层。因特网的网络层协议有一个名字叫做IP,网际协议。是主机与主机之间进行逻辑通信的重要协议。IP的服务模型是“尽力而为交付服务”,即不保证报文段的完整性,与报文段的交付。由于这些原因,IP服务被称之为不可靠服务。在了解了IP之后,简单总结一下UDP与TCP,它们的基本责任是,将两个端系统间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务。将主机间的交付服务扩展为进程间的交付服务称为多路复用与多路分解。
二、多路复用与多路分解
1.主要工作
这里需要强调的是多路复用与多路分解是因特网中所有的端系统都需要的。在之前的数据传输过程中我们已经了解到,一个进程是有一个或者多个套接字接口的,这相当于数据由进程向网络传输或者网络向进程传输的一个门户,则源主机在向目的主机从应用层传输数据时候,先传递到了进程的套接字接口,而由套接字再将报文传输给运输层,接收方也是一样的,数据报并不是由运输层直接传输给应用层的,而是由运输层将数据包分解为报文段,将报文段传输给套接字接口。
如何能正确的将报文段从运输层交付到对应的套接字,这是多路分解的主要工作。在源主机上手机不同套接字传输过来的块,并为每个报文分组都添加上首部信息从而生成报文段,并传输至网络层,这称之为多路复用的主要工作。
2.运输层报文段中的字段
| 源端口号 | 目的端口号 |
| 其他首部字段 | |
| 应用层数(报文) | |
3.UDP与TCP多路复用与分解的不同
首先在之前的文章中我们也有做过UDP与TCP的练习,我们可以清楚的知道,使用UDP与TCP传输交互的不同点,这与多路复用、多路分解中也有相似之处。
首先一个UDP套接字是由一个二元组全面标识的,包含,源IP地址/源端口地址、目的端口地址。因此如果两个UDP报文段拥有不同的源IP地址/源端口地址,但拥有相同的目的端口地址,则UDP将两个不同的报文段将通过相同的目的套接字接口被定向到相同的目的进程
TCP是由四元组全面标识的,包含,源IP地址、源端口号、目的IP地址、目的端口号。而TCP的欢迎套接字一直是由自己定义的一个值eg:12000,在服务段接收到具有目的端口号的12000的请求报文段后,则生成一个新的套接字接口,与客户进行连接,也就是TCP的握手。而新创建的套接字使用接收到的报文段中的四元组进行标识,如果有新的报文段交付,则判断这个四元组是否符合已经创建了的套接字标识,如果全部符合则定向到相应的套接字,如果不符合则再创建新的套接字,随着TCP的连接完成,客户和服务端便可以相互发送数据了。所以UDP即使源IP地址不同但目的端口地址相同也可以定向到相同的套接字上,而TCP不能,TCP必须要求源IP地址也要相同,这可以视为,给一个IP地址建立一个专门传输的信道。
总结
今天所讲述的是运输层的大致概述与多路复用、多路分解的内容,在UDP与TCP协议上可以看出多路复用与多路分解的详细运作流程,也可以更好地了解到数据在生活中到底是怎么传输的,其实我读到这里就更想往下挖掘,因为到现在数据从一个主机到另一台主机的信息传递也不算详细,只是将应用层与运输层在数据传输过程中的原理理解了,之后的网络层与数据链路层、物理层还需继续学习。
在这里书中提出了一点,之前的章节中提到过TCP的持续连接与非持续连接,在我们传输响应报文的同时如果采用持续链接,则TCP创建的套接字不会响应一下就关闭,如果采用非持续连接,在不断的交互过程中,TCP套接字会频繁的创建与关闭套接字接口,这种条件会影响服务器的性能。我们在学习的过程中,一定要时刻的提醒,与服务器交互的是成千上万甚至百万的用户请求,服务器的性能也是一大开放性问题所在。关于文章中提出的这一点,我现在是提不出任何建设性的想法,只知道在不同的应用场景下使用不同的连接方式,会减少服务器的性能压力。可能是学术造诣还浅,需要继续学习。今天就到这里啦。接下来的一节就是详细介绍UDP与TCP!
本文介绍了运输层相关内容,包括数据传输过程,指出运输层位于应用层与网络层之间,提供进程间逻辑通信。还阐述了多路复用与多路分解的主要工作,对比了UDP与TCP在这方面的不同,最后提到TCP连接方式对服务器性能的影响。

被折叠的 条评论
为什么被折叠?



