一--- 导读

我们现在来看这样一个案例,张三家很有钱,川普是张三家的老管家。张三有两个儿子,大三和二三,一个女儿,姗姗。李四也是富豪,李四的管家叫巴马,李四也有两个儿子一个女儿。大李,二李,和莉莉。

现在两家因为是亲戚,所以子女间会有书信往来,大三,二三,莉莉写完信以后,交给管家川普去封装,写上张三家的地址还有各自所在的房间门牌号。于是把信交给邮递员。另一边,邮递员到达李四家以后,李四 的管家 巴马开始收信,然后检查信上的目的房间,如果是大李的就送到大李那里去,是莉莉的就送到莉莉那里。邮递员相当于网络层,两个管家相当于运输层。门相当于套接字。门牌号就是端口号,川普收信的过程相当于多路复用,而巴马分发信的过程相当于多路分解。儿子女儿就相当于应用层的进程。

二---多路复用与多路分解的种类 

  正如我们所猜测的那样,多路复用与多路分解分为有连接的和无连接的,因为运输层协议分为可靠的 ,面向连接的TCP协议和不可靠不面向连接的UDP协议,这里想象成两个管家,一个靠谱一个不靠谱即可

A:无连接的多路复用与多路分解技术

进程(少爷或小姐)需要发送​​UDP​​数据报时,首先要创建一个UDP套接字(少爷或小姐的门),然后应用层通过这个​​UDP​​套接字将数据传递到运输层(管家),运输层为数据加上源端口号(房间门牌号)以及目的端口号,封装成数据报后交给网络层(邮递员),网络层再为数据报封装上源IP(张三家地址)以及目的IP(李四家地址)。由于​​UDP​​​协议仅仅只是将数据发出,所以对于​​UDP​​​报文来说,最重要的就是目的地址的所在。一个​​UDP​​套接字的标识就是目的IP+目的端口号(张三家地址,莉莉的房间门牌号)。因此对于多个不同的​​UDP​​​数据报,只要它们的目的​​IP​​​+端口号相同,就算源地址不同,也会在目的主机中被定向到同一个​​UDP​​套接字中,被同一个进程所接收。目的IP决定了数据报将要发送到哪台主机,而目的端口号为运输层的的分解提供了标识。

B:有连接的多路复用与多路分解技术

既然有无连接的实现,自然就有连接的实现。运输层乃至整个计算机网络最著名的协议——​​TCP​​​协议,就是一个面向连接的协议。​​TCP​​​是一个面向连接,可靠的运输层协议。既然面向连接,那它就需要关注两个方面:源地址和目的地址,因为​​TCP​​​的传输,需要两边协作完成。正因为​​TCP​​​的特性,导致​​TCP​​​的套接字和​​UDP​​​也有所区别。​​TCP​​套接字的标识是一个四元组,即源IP+源端口+目的IP+目的端口(​​UDP​​​是目的​​IP​​+目的端口)

三--实例演示

当我们在浏览器中请求一个页面时,将经历以下过程:

  1. ​Web​​​服务器监听​​80​​端口,等待客户端的连接;(也叫做欢迎套接字)
  2. 用户在浏览器输入一个​​URL​​​,回车后,浏览器进程创建一个套接字,此套接字由服务器​​IP​​​,服务器​​80​​​端口,本地​​IP​​,本地进程端口,四部分标识;
  3. 浏览器进程将数据通过此套接字从应用层传入运输层,运输层为​​TCP​​​报文加上首部(包括源端口和目的端口)后,交给网络层,网络层为其加上网络层首部(包括源​​IP​​​和目的​​IP​​​)传输传输到​​Web​​服务器;
  4. ​Web​​​服务器接收到此数据报后,检测到数据报请求的是端口​​80​​​,于是检测​​80​​​端口正在运行,且允许连接,则创建一个新的套接字(把门打开),此套接字由服务器​​IP​​​,服务器​​80​​​端口,源​​IP​​,源端口,这四部分标识;
  5. 此后到达的​​Web​​服务器的数据报,若以上四部分完全相等,则将进入此套接字中;