一--- 导读
我们现在来看这样一个案例,张三家很有钱,川普是张三家的老管家。张三有两个儿子,大三和二三,一个女儿,姗姗。李四也是富豪,李四的管家叫巴马,李四也有两个儿子一个女儿。大李,二李,和莉莉。
现在两家因为是亲戚,所以子女间会有书信往来,大三,二三,莉莉写完信以后,交给管家川普去封装,写上张三家的地址还有各自所在的房间门牌号。于是把信交给邮递员。另一边,邮递员到达李四家以后,李四 的管家 巴马开始收信,然后检查信上的目的房间,如果是大李的就送到大李那里去,是莉莉的就送到莉莉那里。邮递员相当于网络层,两个管家相当于运输层。门相当于套接字。门牌号就是端口号,川普收信的过程相当于多路复用,而巴马分发信的过程相当于多路分解。儿子女儿就相当于应用层的进程。
二---多路复用与多路分解的种类
正如我们所猜测的那样,多路复用与多路分解分为有连接的和无连接的,因为运输层协议分为可靠的 ,面向连接的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
+目的端口)
三--实例演示
当我们在浏览器中请求一个页面时,将经历以下过程:
Web
服务器监听80
端口,等待客户端的连接;(也叫做欢迎套接字)- 用户在浏览器输入一个
URL
,回车后,浏览器进程创建一个套接字,此套接字由服务器IP
,服务器80
端口,本地IP
,本地进程端口,四部分标识; - 浏览器进程将数据通过此套接字从应用层传入运输层,运输层为
TCP
报文加上首部(包括源端口和目的端口)后,交给网络层,网络层为其加上网络层首部(包括源IP
和目的IP
)传输传输到Web
服务器; Web
服务器接收到此数据报后,检测到数据报请求的是端口80
,于是检测80
端口正在运行,且允许连接,则创建一个新的套接字(把门打开),此套接字由服务器IP
,服务器80
端口,源IP
,源端口,这四部分标识;- 此后到达的
Web
服务器的数据报,若以上四部分完全相等,则将进入此套接字中;