多路复用和解复用

【IP向上层提供的服务是主机到主机的,从一个IP传到另一个IP。到了传输层不管是TCP还是UDP怎么样区分到进程到进程?增加了个端口号的机制,TCP有TCP的端口号,UDP有UDP的端口号。TCP使用端口的方式和UDP使用端口的方式不一样。】

【源端口、目标端口用于封装TCP的头部信息,往下交的封装成TCP的segment,同时往下交的是源IP和目标IP;这样IP协议实体就知道如何封装IP datagram,然后传到对方,对方往上交的是IP的数据部分,同时往上交的是源IP目标IP;TCP的segment有源端口、目标端口,再加上有往上交的源IP、目标IP,就能够找到相应的socket、port】

【UDP的socket和本地的IP、端口相捆绑,应用进程往下交的是数据部分、socket、&cad(对方的IP和UDP端口);UDP知道怎么封装UDP的源port(socket)和目标port(cad有);再往下交的有UDP datagram,还有我的、对方的IP地址;IP知道怎么把UDP datagram、源IP、目标IP封装成IP分组;这样就能正确的传到对方的IP实体,对方IP往上交的是UDP datagram、源IP、目标IP;在UDP datagram当中有源port、目标port;目标IP和,目标port拿到一起可以找到相应的socket,然后交给相应的PID、相应的进程】

【本质上就是引入了TCP的port和UDP的port,引入socket概念就是使得穿过层间的信息来的最少、最方便而已。因为两个应用进程在使用TCP的通信时需要握手,握手通信关系就搞定了,用一个整数关系来代表我跟你的会话关系,用起来方便。UDP是不需要握手的,在创建的实体的时候不知道要跟谁通信、谁跟我通信,我只能知道我的IP和相应的端口,所以我的socket只是和我的IP和相应的端口相捆绑,所以发的时候不仅要告诉下层我的socket,同时要告诉他我要发的内容,还要告诉下层对方的IP和对方的UDP 端口号】

多路复用/解复用

【复用:一个TCP实体或者一个UDP实体上面有很多应用进程借助它来发送】

在发送方主机多路复用

        从多个套接字接受来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)【TCP的时候要联合源IP、目标IP,源端口、目标端口来使用、来封装TCP报文段】

在接受方主机多路解复用

        根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)【TCP使用端口的方式和UDP使用端口的方式不太一样】

多路解复用工作原理

  • 解复用作用:TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程
  • 主机收到IP数据报
    • 每个数据报有源IP地址和目标地址
    • 每个数据报承载一个传输层报文段
    • 每个报文段有一个源端口号和目标端口号(特定应用有著名的端口号)
  • 主机联合使用IP地址端口号将报文段发送给合适的套接字

无连接(UDP)多路解复用

  • 创建套接字:

        服务器端:

                serverSocket = socket(PF_INET, SOCK_DGRAM, 0);

                bind(serverSocket, &sad, sizeof(sad));

        serverSocket和Sad指定的端口号捆绑【服务器在创建本地的socket的时候只是和本地的IP和端口相捆绑】

        UDP和TCP不同

        客户端:

                ClientSocket = socket(PF_INET, SOCK_DGRAM, 0);

        没有bind,ClientSocket和os为之分配的某个端口号捆绑(客户端使用什么端口号无所谓,客户端主动找服务器)【隐含的bind,客户端创建的整数和IP和端口也做了相捆绑,只不过没有指定IP和端口号而已,但是也是做了个捆绑】

  • 在接收端,UDP套接字使用二元组标识(目标IP地址、目标端口号)
  • 当主机收到UDP报文段:
    • 检查报文段的目标端口号
    • 用该端口号将报文段定位给套接字
  • 如果两个不同源IP地址/源端口号的数据报,但是有相同的目标IP地址和端口号,则被定位到相同的套接字

 无连接多路复用:例子

 

【因为UDP只是跟本机的IP和相应端口相关联,只要目标端口是同一个IP的相应端口,都发给同一个应用进程】

面向连接(TCP)的多路复用

  • TCP套接字:四元组本地标识
    • 源IP地址
    • 源端口号
    • 目的IP地址
    • 目的端口号
  • 解复用:接收主机用这四个值来将数据报定位到合适的套接字
  • 服务器能够在一个TCP端口上同时支持多个TCP套接字:
    • 每个套接字由其四元组标识(有不同的源IP和源port)
  • Web服务器对每个连接客户端有不同的套接字
    • 非持久对每个请求有不同的套接字

面向连接的解复用:例子

  【一个socket四元组只要任何一个不一样就定位到不一样的socket,从而发给不同的应用进程。如果是一个多线程的话,可能是发给同一个进程下面的不一样的线程】

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值