我对网络还很陌生,并且很难理解这一点。
我知道 Internet 协议套件中的传输层(至少是 UDP 和 TCP 协议)包含源和目标端口号,并且有一与该端口号关联的机器上运行的应用程序。
因此,当来自互联网的帧到达机器时,操作系统是否执行传输层的功能(保证交付等),然后将有效载荷转发给应用程序?挂号的本身与操作系统在帧的传输层指定的目标端口号?
有人可以提供更详细的解释,说明操作系统如何做到这一点吗?(例如,它是操作系统内置内核的一部分吗?操作系统如何掌握框架?等等)
答案1
问题的简要回答:网络接口硬件/固件和操作系统完成所有这些工作。
更准确地说,涉及几个驱动程序。设备通常覆盖 OSI 第 1 层(物理)和第 2 层(数据链路),即物理信号(电、无线电)和位之间的转换以及将它们分组到帧由硬件/固件完成。设备驱动程序控制相应的功能。第 3 层(网络)和第 4 层(传输)由操作系统覆盖,尽管特权用户空间进程可以访问数据。
操作系统如何获取框架?
一旦网络接口有可用的帧,它就会触发中断,因此内核可以从相应的 I/O 内存区域读取它。
帧头数据指示如何处理该帧。如果内核(更准确地说:网络驱动程序)知道有效负载的类型(例如 IPv4 或 IPv6),则数据包(在剥离第 2 层报头和尾部后)将传递到相应的网络层驱动程序。
它将处理网络层协议的所有特性,例如分片和重组、校验和计算和验证等,以及所有网络层特定任务,例如路由和数据包过滤。根据有效负载(TCP、UDP、ICMP、ICMPv6、GRE、SCTP、DCCP 等),数据包将进一步传递到相应的传输层驱动程序。它将处理所有传输层特定内容;对于面向连接的协议(如 TCP),这意味着例如跟踪连接状态、维护队列和进行簿记;另一件事是拥塞控制。
一旦数据包通过了该层,它就会被进一步向上传递(再次剥离传输层报头),但这次是传递到用户空间进程。用户空间进程实际上看不到任何较低级别的处理。
现在,可以从用户空间访问和处理原始数据(例如帧),您可以使用 libpcap 等软件来实现这一点。但是,在内核中执行所有这些操作效率更高。
答案2
看传输层在哪里运行?在 stackoverflow 上
EJP 的回答:
它是操作系统的一部分吗?
是的。
它是在自己的进程或线程中运行吗?
不,它作为操作系统的一部分运行。
如何将信息传递给其他应用程序
通过系统调用,例如 Berkeley Sockets API、WinSock 等。
或者深入到其他层?
通过内部内核 API。
也请参阅其他答案。