1、定位

运输层在我们举的例子中,就是Ann的定位。
传输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。

2、概述和运输层服务

1、运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。(Bill和Ann为给自己的兄弟姐妹们收集信件、将信件交给邮局)
2、运输层协议是在主机中,而不是在路由器中实现的。(Bill和Ann只是在家庭中收集信件,而不会自己去送)
3、因特网为应用层提供了两种截然不同的可用传输协议,分别是UDP和TCP协议。UDP和TCP最基本的责任是,将两个主机间IP的交付服务扩展为运行在主机上的两个进程之间的交互服务。将主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解。(UPD和TCP协议是传输层协议,即Bill和Ann可以使用UPD和TCP两种方式来处理信件)

3、多路复用与多路分解

1、在目的主机,运输层从紧邻其下的网络层接收报文段。运输层负责将这些报文段中的数据交付给在主机上运行的适当运用程序进程。(Bill在收到邮局发送过来的信件后,将这些信件分别交给不同的家庭成员),那么这个过程是怎么实现的呢?
2、一个进程有一个或多个套接字,(每个家庭成员都有自己的房间,这个房间好就是套接字),它相当于从网络向进程传递数据和从进程向网络传递数据的门户。因此,在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了中间的套接字。(Bill在给家庭成员送信件的时候,家庭成员不一定在家,所以将信封直接放在了门口的收件箱中。)
\"在这里插入图片描述\"
3、现在需要考虑到的是接收主机怎样将一个到达的传输层报文段定向到适当的套接字。(Bill如何将信件交给正确的收件人)。为此目的,每个传输层报文具有几个字段(信件上有收件人姓名、房间号)。在接收端,运输层检查这些字段,标识出接收套接字。进而将报文段定向到该套接字。将传输层报文段中的数据交付到正确的套接字的工作成为多路分解。(Bill根据信封上的收件人,然后将信件放到指定门的收件箱中去。)在源主机从不同套接字中收集数据库,并为每个数据库封装上首部信息–用于分解,从而生成报文段,然后将报文段传递到网络层,所有这些工作成为多路复用。(写信人在写信的时候,会写明收件人的姓名、收件地址、门牌号等信息)

4、无连接的多路复用与多路分解

如下为python创建一个UDP套接字的代码:
\"在这里插入图片描述\"
假定在主机A中的一个进程具有UDP端口19157,它要发送一个应用程序数据库给位于主机B的另一个进程。该进程具有UDP端口46428,主机A中的运输层创建一个运输层报文段,其中包括应用程序数据、源端口19157、目的端口号46428。然后,运输层将得到的报文段传递到网络层。(Bill将写好的信件交给邮局),网络层将该报文段封装到一个IP数据报中,并尽力而为地将报文段交付给接收主机。如果该报文段到达接收主机B(邮局成功将信件送到了目的地的家庭),接收主机的运输层就检查该报文段中的目的端口号46428并将该报文段交付给端口号46428所标识的套接字。(Bill收到了信件后,检查信件中的收件人的门牌号是46428,然后将该信件放到该房间口的收件箱里即可。)

5、面向连接的多路复用与多路分解

6、无连接传输:UDP

首先需要明确的是:UDP和TCP都是传输层的协议。也就是说,研究UDP和TCP就是研究(Bill在家庭内部收邮件和发邮件的行为)

假如你对设计一个不提供不必要服务的最简化的运输层协议感兴趣。你也许会首先考虑使用一个无所事事的运输层协议。特别是在发送方一侧,你可能会考虑将来自应用程序的数据直接交给网络层。(Bill拿到信件后,什么也不做,直接给邮局),在接收方一测,你可能会考虑将从网络层到达的报文直接交给应用程序(Bill收到信件后,什么也不做,直接丢给家庭成员)。但是实际上,运输层必须要做一点事情的,就是我们上面说的多路复用和多路分解,不然信件的接收和发送就会乱套。

1、实际上,UDP只是做了运输层协议能够做的最少工作,除了复用、分解功能以及少量的差错检测外,它几乎没有对IP增加别的东西。实际上,如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是直接与IP打交道。

2、UDP报文段:
\"在这里插入图片描述\"

7、面向连接传输:TCP

UDP和TCP的原理以后再说

收藏 打印