1. 什么情况下用了多路分用和多路复用?
- 如果某层一个协议直接对应直接上层的多个协议/实体,则需要分用/复用
2. 怎么做的分用和复用?
- 多路分用:在接收端,传输层依据头部信息将收到的segment交给正确的Socket,即不同的进程
- 多路复用:在发送端,从多个Socket接收数据,为每块数据封装上头部信息,生成segment交给网络层
3. 无连接的分用(UDP)vs面向连接的分用(TCP)
无连接的分用:
- UDP的Socket用二元组标识 (目的IP地址,目的端口号)
- 主机收到UDP段后,检查段中的目的端口号,将UDP段导向绑定在该端口号的Socket
- 来自不同的源IP地址和/或端口号的段被导向同一个Socket
面向连接的分用(一对一):
- TCP的Socket用四元组标识 (源IP地址,源端口号,目的IP地址,目的端口号)
- 接收端利用所有的四个值将segment导向合适的Socket
- 服务器可能同时支持多个TCP的Socket
- web服务器(端口#80)为每个客户端开不同的Socket
个人感悟:
- 由于UDP是无连接,所以不管来自哪个主机的段,只要是发送到我这个主机的我这个端口,我就接收并送到唯一的端口,所以只需要目的IP地址寻找主机,目的端口号知道送到哪个端口进行就可以了。这也就会产生一种现象,来自不同主机或进程的消息可能被送到同一个端口去。
- 由于TCP是面向连接的,它是一对一的,每一个前来的TCP连接都要对应的有一个端口与之相连接,(Socket连接可以理解为插座和插销的关系),也就可能出现一种现象,同一个端口号开辟了多个端口,用二元组进行标识是不够识别目的端口的,所以需要提供源端口号,但是不同源主机上又可能有相同的源端口号,还需要源IP地址用来识别,这样每一个用四元组标识的segment就可以传送到相应的唯一端口了。