gpt4 book ai didi

c++ - 什么时候在网络编程中使用ntohs函数?

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:42 26 4
gpt4 key购买 nike

我正在使用 WinPcap 学习网络编程。这是片段:

int ip_hlen = (ih->ver_ihl & 0xf) * 4; /* get ip header length */
tcp_header *th = (tcp_header *) ((u_char*)ih + ip_len);
int tcp_hlen = (ntohs(th->th_len_resv_code) & 0xf000) >> 12)*4; /* get tcp header length */

问题是为什么ntohs只在获取tcp_hlen而不是ip_hlen时使用。
事实上,ntohs 只接受 u_short 作为参数解释一点。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740075%28v=vs.85%29.aspx

我还在疑惑什么时候用ntohs,什么时候不用。

这里是IP和TCP数据包定义的结构:

/* ipv4 header */
typedef struct ip_header {
u_char ver_ihl; /* version and ip header length */
u_char tos; /* type of service */
u_short tlen; /* total length */
u_short identification; /* identification */
u_short flags_fo; // flags and fragment offset
u_char ttl; /* time to live */
u_char proto; /* protocol */
u_short crc; /* header checksum */
ip_address saddr; /* source address */
ip_address daddr; /* destination address */
u_int op_pad; /* option and padding */
}ip_header;

/* tcp header */
typedef struct tcp_header {
u_short th_sport; /* source port */
u_short th_dport; /* destination port */
u_int th_seq; /* sequence number */
u_int th_ack; /* acknowledgement number */
u_short th_len_resv_code; /* datagram length and reserved code */
u_short th_window; /* window */
u_short th_sum; /* checksum */
u_short th_urp; /* urgent pointer */
}tcp_header;

最佳答案

因为 IP header length field太小了(只有四位),假设它适合一个字节,因此它永远不会有任何字节顺序问题。只有一个字节,因此无需使用 ntohs() 函数交换字节。

关于c++ - 什么时候在网络编程中使用ntohs函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19784627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com