我想知道当我用电脑接入网络时什么样的信息被传递给我的网络适配器。
操作系统将如何处理收到的数据包?它们如何解释这些数据包?有些数据包是发往某些应用程序(如 ftp 或在线游戏)的。操作系统如何知道如何传递这些数据包?
我了解 TCP/IP 堆栈的基础知识。但这些只是理论,我无法将“现实”与理论联系起来。
答案1
您的问题非常模糊,因此很难提供“答案”。如果您想以程序员的身份学习 TCP/IP,以下是有关它的“教科书”:
http://www.kohala.com/start/tcpipiv1.html
以下是该主题的另一篇介绍: http://its.psu.edu/training/handouts/GS_TCP-IPandOSIModel.pdf
回答“操作系统如何知道如何处理传入的数据包?”这个问题(我过于简单化了)
传入的数据包要么是新的,要么属于现有通信。让我们看看“新”数据包:它们到达目标端口(就像传入的 FTP 连接到达的端口一样21/tcp
- 在 中查找更多“默认”目标/etc/services
)。操作系统将该端口的任何内容交给“侦听”该端口的本地应用程序(此处为 FTP 守护程序 - 查看谁在何处侦听netstat -a
)。如果应用程序正确回答,则开始“对话”。
评论中问题的扩展:端口号在哪里编码?源端口号和目标端口号位于 TCP 段头的第一个八位字节中,该八位字节通常作为 IP 数据报传输,而 IP 数据报通常作为以太网帧的有效负载在以太网上发送。
答案2
答案3
简而言之,TCP 所属的网络堆栈由多层组成。这称为 OSI 网络模型。
我认为对数据传输到何处的控制是在第 4 层。
TCP/IP 中哪个应用程序查看哪些数据取决于端口号,我希望您通过阅读有关 TCP/IP 的内容已经熟悉了端口号。但如果不是这样,每个连接都有一个端口,它有点像一组邮局邮箱。这些邮箱位于一个地址,每个邮箱都有编号。同样,计算机可以有一个 IP 地址(就像物理地址一样),邮箱号与端口号相对应。
第四层的软件会把数据包放入正确的位置,就像邮递员把邮件放入正确的邮箱一样。
数据包的解释发生在 OSI 模型的不同层上。例如,TCP 实际上是建立在 IP 之上的协议。IP 在网络层 (4) 实现。而 TCP 位于(更高级别的)会话层 5。TCP 实际上是建立在 IP 之上的。UDP 也是如此。UDP 建立在 IP 之上。
OSI 模型的最顶层是应用层。FTP 等应用程序就驻留在此层。
这是一个非常简短的总结,但我希望它能有所帮助。