我正在设计一种名为DITP的新协议。它是一种面向连接的协议,它将TCP用作传输层。使用常见的Internet协议,当建立TCP连接时,服务器首先向客户端响应的内容发送问候消息,然后发送第一个请求。
我想通过反转初始协议事务可以节省一个往返时间。客户端首先发送问候语,然后发送第一个请求。
下图显示了两个协议事务时间之间的比较以及它如何节省一个往返时间。
您可能需要阅读以下博客说明,以获取更详细的说明。 http://www.disnetwork.info/1/post/2008/08/optimizing-ditp-connection-open.html
我向StackOverflow的网络编程专家提出了两个问题:
这个假设是否正确?
为什么常用协议不使用此功能?
这种方法可以为通信延迟很高且经常建立连接的长距离连接提供显着的性能优化。 HTTP本来是一个很好的候选人。
编辑:哎呀大错。 HTTP使用客户端直接发送请求的优化方法。与SMTP一样没有问候交易。请参阅Wikipedia Hypertext Transfer Protocol页面。答案 0 :(得分:1)
这主要是因为因为:
a。)客户端可能需要知道服务器使用的协议版本
b。)你甚至不知道你真的在和支持协议的服务器交谈。
简而言之,在向数据发出数据之前知道你在说什么通常是有意义的。
答案 1 :(得分:1)
我想知道这个设计是否可能不会被视为违反Postel's Law,因为它在接受之前会假设有关接收器的事情,从而知道什么是合法的。
我至少会期望这个原则成为大多数协议设计的原因,以便他们在发送可能根本无法理解的数据之前花费一些往返来更多地了解另一端。
答案 2 :(得分:0)
如果延迟是您的主要考虑因素,您可能需要查看LPT,这是专为极长往返时间连接而设计的协议。
在设计新的传输协议时,您应该注意拥塞控制以及防火墙在遇到未知协议的数据包时要做什么。
答案 3 :(得分:0)
HTTP,SMTP等协议的设计目标不是速度,而是在片状物理网络条件下的可靠性和微薄的带宽利用率。现在,这些条件已经改变,硬件更好。
您的设计应根据您必然会遇到的网络条件,所需的可靠性,延迟和预期应用的带宽利用情况来看待。
答案 4 :(得分:0)
为什么不打开几个TCP套接字并通过这些多个连接发送单独的请求?这里没有开销!哦,这已经完成,f.e。一些现代的网络浏览器。使用wireshark
或tcpdump
检查数据包并查看自己。
还有更多。 TCP套接字需要时间来设置(SYN,一段时间,SYN + ACK,一段时间,ACK ......)。有人认为在每次请求后重置连接是一种浪费,因此一些现代HTTP服务器和客户端使用Connection: keep-alive
来表示他们希望重用连接。
我很抱歉,但我认为您的想法很棒,但您可以在RFC中找到它们。继续思考,我相信有一天你会发明一些辉煌的东西。见f.e. here用于优化的bitorrent客户端。