传统的应用程序协议解析方法是什么?
在已经设计好的协议(例如SMTP)的套接字流中,处理协议的通常方式是什么?它是基于yacc解析器、基于正则表达式的方法还是其他方式?
传统的应用程序协议解析方法是什么?
在已经设计好的协议(例如SMTP)的套接字流中,处理协议的通常方式是什么?它是基于yacc解析器、基于正则表达式的方法还是其他方式?
GET /path/file.html HTTP/1.0
From: someuser@jmarshall.com
User-Agent: HTTPTool/1.0
[blank line here]
HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/html
Content-Length: 1354
<html>
<body>
<h1>Happy New Millennium!</h1>
(more file contents)
.
.
.
</body>
</html>
ASN.1
大多数工具都很昂贵。 ASN.1 UPER
,你可以定义一个简单的元素,例如(来自这里的例子):myQuestion FooQuestion ::= {
trackingNumber 5,
question "Anybody there?"
}
01 05 0e 83 bb ce 2d f9 3c a0 e9 a3 2f 2c af c0
通过位移和掩码实现并不容易,这就是为什么支持PER
的开源ASN.1
库如此罕见的原因。
这两种方法都有其优缺点。基于文本的协议有些更易于正确地编写、调试和理解。它们通常非常善于交流,但在某些情况下这很重要。这就是当人们选择例如ASN.1 PER
时,虽然它非常难以实现或调试,但非常紧凑。