首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HOPOPT协议是什么?套接字()是如何工作的?

HOPOPT协议是什么?套接字()是如何工作的?
EN

Stack Overflow用户
提问于 2017-10-18 06:38:03
回答 1查看 9.7K关注 0票数 0

我正在处理C中的套接字,这个协议继续出现,我找不到任何关于它的东西,那么它是用来做什么的呢?HOPOPT和IP有什么区别?

另外,我不明白为什么套接字()函数的最后一个参数应该是0。根据手册页:

该协议指定要与套接字一起使用的特定协议。通常只存在单个协议来支持给定协议族中的特定套接字类型,在这种情况下,协议可以指定为0。但是,可能存在许多协议,在这种情况下,必须以这种方式指定特定的协议。要使用的协议号特定于进行通信的“通信域”;参见协议(5)。有关如何将协议名称字符串映射到协议编号的方法,请参见getprotoent(3)。

据我所知,将最后一个参数设置为0将让标准库决定使用哪个协议,但在这种情况下,其中一个将使用0以外的数字?

EN

回答 1

Stack Overflow用户

发布于 2018-02-28 13:49:39

HOPOPT是逐跳IPv6扩展头的缩写。它是一个允许向IPv6数据包添加更多选项的头。正常情况下,IPv6数据包包含此报头。

socket()是BSD等人的系统调用(Linux等人)。提供以创建新套接字,即网络连接的内部表示形式。在创建新套接字时,必须指定所需的协议: TCP、UDP等,这些协议可能会通过IPv4、IPv6等。

您所引用的段落解释了每个套接字类型可能存在一个或多个协议。

如果只有一个,则protocol参数必须为零。例如,SOCK_STREAM套接字仅由TCP实现:

代码语言:javascript
运行
复制
int sk = socket(AF_INET, SOCK_STREAM, 0);

如果存在更多,则必须指定要特别使用的协议。例如,SOCK_SEQPACKET类型可以用SCTP协议实现:

代码语言:javascript
运行
复制
int sk = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

因此,结论是:

  • 如果要创建套接字,请选择要使用的协议,例如,通过IPv4使用TCP。
  • HOPOPT在IPv6包中是完全正常的。如果您看到它出现在您的跟踪中,因为您创建了一个IPv6套接字(使用AF_INET6),那么它是可以的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46804125

复制
相关文章

相似问题

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