type
status
date
slug
summary
tags
category
icon
password
💡
tansport-layer multiplexing and demultiplexing
extending the host-to-host delivery service provided by the network layer to a process-to-process delivery service for applications running on the hosts.
🔥
将运输层报文段中的数据交付到正确的套接字的工作称为多路分解(demultiplexing) 在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用(multiplexing)

TCP复用解复用(有连接)

🔥
TCP 套接字是由一个四元组组成的,它们分别是源IP地址、源端口号、目的IP地址、目的端口号来标识的。 因此当一个 TCP 报文段从网络到达一台主机时,该主机使用全部4个值来将报文段分解到相应的套接字。

示意图

notion image

示意图解释

server复用
  • App向传输层交两个东西:message本身和socket
    • socket包括本地IP、本地端口号、目标IP、目标端口号
  • TCP封装成段 segment
  • IP封装成数据报 datagram
  • 通过网卡打出
client解复用
  • 拿出IP的datagram的body给TCP,也就是TCP的segment
  • 取出TCP segment的body
  • 取出message
 

UDP复用解复用(无连接)

🔥
一个 UDP 套接字是由一个二元组全面标识的,该二元组包含一个目的 IP 地址和一个目的端口号 因此,如果两个 UDP 报文段有不同的源 IP 地址或源端口号,但具有相同的目的 IP 地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程
  • 主机要发送:创建要发送到UDP套接字的数据报时,必须指定
    • 目标IP地址
    • 目标端口
  • 主机接收UDP段时:
    • 检查段中的目标端口
    • 将UDP段定向到具有该端口的套接字
这里需要辨析一下UDP报文段内容和UDP套接字(socket)的区别 UDP报文段的内容是包含源端口号和目的端口号的(准确一点是报文段的首部内容包含),不包含源IP地址和目的IP地址(这部分是属于网络层而不是传输层),但是,接收方接收到UDP报文,需要定位到对应的进程的时候,是通过一个二元组(目的IP地址,目的端口号)来找到对应的UDP套接字从而找到对应的进程。而这里目的IP地址就不是从UDP报文段里面找到的,而是从网络层的数据报里面找到的。 其实同样的TCP报文段也只是包含了源端口和目的端口,并没有包含源IP地址和目的IP地址,然后TCP的套接字是通过四元组(源端口、目的端口,源IP地址、目的IP地址)来定位的,从而找到对应的进程。多的源信息,就是因为TCP是面向连接的,所以需要知道对方,不同的来源会有不同的套接字(对应进程/线程)来处理。

Web Servers and TCP

  • 现在的web server通常只使用一个进程,并且给每个新的客户端连接创建一个带有新的socket的新线程
    • In fact, today’s high-performing Web servers often use only one process, and create a new thread with a new connection socket for each new client connection.(A thread can be viewed as a lightweight subprocess)
  • 如果服务器和客户端在使用持久性的http,则二者通过同样的socket来进行http信息的交换
    • 如果用的不持久的http,则每次有request/response的时候,TCP连接将重新建立,并且也会新建socket
      This frequent creating and closing of sockets can severely impact the performance of a busy Web server (although a number of operating system tricks can be used to mitigate the problem).
 
数组Computer Networking Notes
  • Giscus