从概念上讲,我认为 TCP 连接有两个方面。
- “连接” - 即两个主机“同意”相互通信的安排。松散地类似于打电话给某人的电话,当他们在另一端接电话时,您就有了“联系”。
- 数据传输
TCP 的连接方面在网络上的文档中有很好的介绍,主机通过 3 次握手等方式协商连接,但此时您只有一个空闲连接 - 再次类似于有人在另一端拿起电话并拥有“死气”
我的问题是,一旦建立此连接,数据(例如文件传输)如何启动?我想它看起来像发送者概述它要发送的内容,即“我要发送给你......,当你有一个 X 字节的文件时,你会知道传输完成,或者你收到来自的预告片我”。TCP 数据/文件传输如何开始?
TCP是面向流的传输协议;它只关心从一个主机到另一个主机以正确的顺序获取字节,它不关心这些字节的内容或它们可能形成的任何消息。建立连接后,连接的任一端都可以向另一端发送字节。
要赋予消息意义,您需要就 TCP 之上的协议达成一致。正是这个协议决定了应该发送哪些消息,以及如何解释接收到的消息;这包括确定消息何时完成。例如,在 HTTP 中,如果存在“Content-Length”标头,接收者可以使用它来判断它是否已收到所有数据;如果不是,则使用其他方法(有关详细信息,请参阅RFC),直到简单地等待服务器关闭连接(这在某种程度上使用 TCP 来确定消息长度,尽管以相当昂贵的方式)。
如果您想使用面向消息的传输协议发送单个消息,您可以使用UDP或SCTP而不是 TCP。