tcp/ip 是如何实现的

网络工程 通讯协议 协议理论 第4层 传输协议 联网
2021-07-30 20:48:58

好吧,首先我是网络新手。

并且研究了tcp/ip协议栈的分层结构。

我知道分层结构是一个抽象模型,但我不知道协议栈在操作系统中是如何实现的。

HTTP 消息是如何创建的?

TCP 位于何处以及如何在传输层对数据进行分段?等等..

请帮助我并纠正我的错误

3个回答

你的问题很广泛,但我会给你一些广泛的答案,因为这个网站的细节太大了。您还涉及此处不允许的主题,例如 OSI 第 4 层之上的协议和应用程序。

http消息是如何创建的?

HTTP 是一个应用层协议(这里是题外话),消息是由应用程序创建的。

tcp 在传输层如何对数据进行分段?

主机操作系统实现 TCP 和其他传输协议。源应用程序将向源 TCP 发送数据流,源 TCP 将处理所有分段并将数据段传送到目标 TCP,在那里为目标应用程序重新组装数据流。


您应该阅读并理解有关 TCP 和 IP 等内容的 RFC。只需搜索像rfc tcp或 之类的东西rfc ipTCP 的定义在RFC 793,传输控制协议中这将为您提供 TCP 工作原理的完整解释,包括它如何对数据流进行分段。

堆栈中的每一层都有自己的功能,所有层一起形成完整的功能,即“堆栈”。

以太网(物理和数据链路层)传输分组数据一个内以帧当地段虽然该段的物理大小可能有很多公里,但它通常受到的限制要大得多,例如,对于建筑物。

IP(网络层)使用此功能并将逻辑地址放在可以在全球范围内路由的顶部。它的 IP 数据包被包裹在以太网帧中,以便在本地网段中传送。多段 = IP 子网由路由器连接。帧不能穿过路由器,但内部的 IP 数据包可以。

IP 仍然只传输易于打包的数据。为了获得应用程序可以轻松使用的数据流,像 TCP 这样的传输层协议创建了一个虚拟的双边流连接(套接字),它与简单的串行连接非常相似——想想两个人之间的电话呼叫派对。TCP 的内部工作原理远比底层的大多数事情复杂得多,而且不是那么容易掌握。美妙之处在于您不一定需要知道它是如何工作的才能使用它。

HTTP 是一种应用层协议,它利用此套接字连接从 Web 服务器(网页、图形文件等)获取资源。

因为 TCP 负责所有打包和重组工作,IP 负责全球范围内的所有工作,以太网负责处理电缆和硬件接口的所有工作,所以 HTTP 可以专注于自己的工作并保持(相当)简单。

这是一个简化的粗略概述。当然,您可以使用其他带有 IP 的物理层和链路层协议,但以太网非常流行。您还可以在 IP 之上使用其他传输协议,具体取决于应用程序的要求。很明显,您可以在 TCP 或 UDP 或其他协议之上使用种类繁多的应用程序协议。

分组网络的关键是您可以在一个功能极其强大的网络中同时运行所有这些。

互联网的建立是为了在各种网络上互连各种计算机系统。

因此,一般而言,互联网标准侧重于在线上看到的内容。如何在任何给定主机上实现这些进程的细节取决于主机操作系统的设计。

实际上,在绝大多数主机上,作为操作系统一部分的网络堆栈(通常在内核中)和使用它的应用程序之间存在分裂。

要在此拆分中传送信息,需要一个 API。“Berkerly Sockets”API 的变体成为所有主要操作系统的规范。对于类 Unix 系统,Berkerly Sockets 的一个变体被标准化为 Posix 的一部分。Windows 上的 Winsock 也是这个 API 的一个变体。

通常在用户空间库中也实现了一些东西。例如,在类 Unix 系统上,名称解析通常由 libc(它是操作系统的一部分,但不是内核的一部分)处理。

核心的 Berkerly Sockets API 并未在 RFC 中定义,但对其进行了许多扩展。

请注意,Berkerly Sockets API 使用术语套接字与 TCP RFC 不同。berkerly 套接字意义上的套接字是一个操作系统对象,表示应用程序和操作系统之间的通信接口。

使用 TCP,应用程序使用字节流。这些使用类似文件的接口传入和传出操作系统。在类 Unix 系统上,套接字实际上由文件描述符表示,应用程序可以使用套接字 api 提供的 send 和 recv 调用或正常的文件描述符读写调用。在 Windows 上,套接字有自己的描述符类型,应用程序必须使用套接字 API 提供的发送和接收调用。