首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在三路握手阶段,应用层中有什么东西吗?

在三路握手阶段,应用层中有什么东西吗?
EN

Network Engineering用户
提问于 2018-07-25 16:42:26
回答 1查看 908关注 0票数 1

那么,无论协议是什么,TCP握手包的应用层都是空的吗?

当TCP握手的第一个包(第一阶段)到达服务器时,如果该数据包中没有应用层,并且基本上没有消息,那么服务器将该数据包交给哪个进程呢?我的意思是这个过程会用一个空的信息做什么?你们能详细解释一下吗?(例如,如果O.S处理3路握手数据包,那么它是如何发生的,以及哪个进程得到了数据包?)

EN

回答 1

Network Engineering用户

回答已采纳

发布于 2018-07-25 17:00:33

TCP段中不需要有任何有效负载数据。该段只能包含TCP报头中所指示的控制信息。如果一个段到达时没有有效负载数据,则接收TCP不需要向应用程序发送任何内容,除非控制信息要求它(例如,标志表示FIN或RST,TCP需要向应用程序发送信号)。

有趣的是,在三方握手期间,没有什么能阻止TCP在TCP有效负载中发送应用程序数据。如果TCP在完成三方握手之前接收有效负载数据,则必须缓冲数据,在握手完成和连接处于已建立状态之前,不将数据传递到应用程序。

来自RFC 793:

尽管这些示例不显示使用数据承载段的连接同步,但这是完全合法的,只要接收TCP不向用户传递数据,直到数据清楚无误(即,数据必须在接收方缓冲,直到连接达到既定状态为止)。这种三方握手减少了错误连接的可能性。它是在内存和消息之间进行权衡的实现,以便为此检查提供信息。

还有一个名为that (RFC 7413)的扩展,它对于短暂的连接非常有用,并且允许在特定条件下,在三方握手完成之前将数据发送到应用程序。

因此,要回答您的问题,这取决于实现和应用程序是否有任何数据要发送在三方握手。有些连接在握手段的有效负载中没有应用程序数据,而其他连接则没有。

对于每个TCP连接,总是有一个应用程序要将数据传递给它(除非它试图连接到未打开的端口)。一方的应用程序启动连接(通过TCP),另一方的应用程序打开端口并监听该端口(通过TCP)。如果段没有有效负载数据,则TCP不需要向应用程序发送任何内容。如果是这样的话,它可以在建立连接后发送它,或者在快速打开之前发送它。

票数 2
EN
页面原文内容由Network Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://networkengineering.stackexchange.com/questions/52031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档