`
liufei.fir
  • 浏览: 686207 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

BSD 的IP结构体定义(IPv4)

阅读更多
/*
 *	@(#)tcp.h	8.1 (Berkeley) 6/10/93
 */

typedef	u_long	tcp_seq;
/*
 * TCP header.
 * Per RFC 793, September, 1981.
 */
struct tcphdr {
	u_short	th_sport;		/* source port */
	u_short	th_dport;		/* destination port */
	tcp_seq	th_seq;			/* sequence number */
	tcp_seq	th_ack;			/* acknowledgement number */
#if BYTE_ORDER == LITTLE_ENDIAN 
	u_char	th_x2:4,		/* (unused) */
		th_off:4;		/* data offset */
#endif
#if BYTE_ORDER == BIG_ENDIAN 
	u_char	th_off:4,		/* data offset */
		th_x2:4;		/* (unused) */
#endif
	u_char	th_flags;
#define	TH_FIN	0x01
#define	TH_SYN	0x02
#define	TH_RST	0x04
#define	TH_PUSH	0x08
#define	TH_ACK	0x10
#define	TH_URG	0x20
	u_short	th_win;			/* window */
	u_short	th_sum;			/* checksum */
	u_short	th_urp;			/* urgent pointer */
};

#define	TCPOPT_EOL		0
#define	TCPOPT_NOP		1
#define	TCPOPT_MAXSEG		2
#define    TCPOLEN_MAXSEG		4
#define TCPOPT_WINDOW		3
#define    TCPOLEN_WINDOW		3
#define TCPOPT_SACK_PERMITTED	4		/* Experimental */
#define    TCPOLEN_SACK_PERMITTED	2
#define TCPOPT_SACK		5		/* Experimental */
#define TCPOPT_TIMESTAMP	8
#define    TCPOLEN_TIMESTAMP		10
#define    TCPOLEN_TSTAMP_APPA		(TCPOLEN_TIMESTAMP+2) /* appendix A */

#define TCPOPT_TSTAMP_HDR	\
    (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)

/*
 * Default maximum segment size for TCP.
 * With an IP MSS of 576, this is 536,
 * but 512 is probably more convenient.
 * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
 */
#define	TCP_MSS	512

#define	TCP_MAXWIN	65535	/* largest value for (unscaled) window */

#define TCP_MAX_WINSHIFT	14	/* maximum window shift */

/*
 * User-settable options (used with setsockopt).
 */
#define	TCP_NODELAY	0x01	/* don't delay send to coalesce packets */
#define	TCP_MAXSEG	0x02	/* set maximum segment size */
分享到:
评论

相关推荐

    通过IP获取主机的名字

    这个函数定义在`&lt;netdb.h&gt;`头文件中,属于BSD Socket API的一部分。 下面,我们详细分析`gethostbyaddr.c`这个示例程序: ```c #include #include #include #include #include int main(int argc, char *...

    BSD套接字PDF 高清

    - **协议栈**:BSD套接字通常基于TCP/IP协议栈工作,包括Internet协议版本4(IPv4)、用户数据报协议(UDP)、传输控制协议(TCP)等。 - **应用场景**:常见的应用场景包括一对一通信(客户端/服务器模型)、一对多...

    TCP-IP-Socket-master.zip

    3. **结构体sockaddr**:用于存储IP地址和端口号,根据不同的地址族,可以是sockaddr_in(IPv4)或sockaddr_in6(IPv6)。 4. **绑定与监听**:服务器端通过bind函数将Socket与特定的IP地址和端口绑定,然后用...

    TCP/IP _Socket 基本编程

    - IP 地址的二进制表示和不同类型的 IP 地址,如 IPv4 和 IPv6 - 网络字节序和主机字节序的区别和转换函数,比如 `ntohl` 和 `htonl` - 端口号的作用和范围(通常是 0 到 65535) - Socket 地址结构体 `sockaddr...

    Linux网络编程中IP地址的处理

    - **INET Sockets**:基于IP协议的Sockets,支持IPv4和IPv6。 **3. 传输协议** - **UDP (User Datagram Protocol)**:一种无连接的服务,数据传输不可靠但速度快。 - **TCP (Transmission Control Protocol)**:...

    linux tcpip协议栈.doc

    1. BSD Socket层:这是用户空间应用程序与内核网络接口交互的起点。`struct socket`结构体在内核中代表了一个socket。主要处理如socket创建、绑定、监听、接受等操作,相关代码位于`/net/socket.c`和`/...

    Socket_M_Client_sockettcp_TCP/IPclient_C++socket_

    2. `struct sockaddr_in`: 定义TCP/IP套接字的结构体,用于存放服务器的IP地址和端口号。 ```cpp struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(server_...

    《LINUX内核网络栈源代码情景分析》笔记

    这个文件包含了与INET域相关的结构体和宏定义,例如`in_addr`和`ip_mreq`等,主要用于处理IP地址和多播组信息。 - **in_addr**:存储IPv4地址的结构体。 - **ip_mreq**:存储多播组请求信息的结构体。 ##### inet_...

    VC++ winsocket编程,局域网聊天室

    3. **地址结构**: 使用`sockaddr_in`结构体定义服务器或客户端的网络地址,包括IP地址和端口号。 4. **绑定**: 对于服务器端,调用`bind()`函数将套接字与特定的本地地址和端口关联。 5. **监听与接受**: 服务器端...

    互联网络程序设计PPT学习教案.pptx

    套接字(Socket)源于Unix和BSD系统,其发展是为了实现TCP/IP协议。Socket API成为了一种标准化的网络编程接口,不仅用于TCP/IP,还支持如Unix域、TLI和XNS等多种协议栈。在系统中,套接字不仅控制传输层,还可以...

    《unix网络编程》源码

    - 在Unix网络编程中,网络地址通常用`sockaddr`结构体表示,如`struct sockaddr_in`用于IPv4,`struct sockaddr_in6`用于IPv6。 - `bind()`函数将套接字与特定的IP地址和端口绑定,以便接收数据。 4. **监听与...

    client.rar

    这里,`SERVER_PORT`和`SERVER_IP`是需要替换为实际服务器端口和IP的宏定义。`BUFSIZE`是定义的缓冲区大小,用于存储发送和接收的数据。 理解了这些基本概念和操作后,你可以根据"client.c"源代码进行调试和学习,...

    socket内部实现及其头文件

    接下来,为了与远程主机建立连接,我们需要设置一个`sockaddr_in`结构体,包含IP地址和端口号,然后调用`connect()`函数。对于服务器端,使用`bind()`函数绑定本地端口,`listen()`函数等待客户端连接,并通过`...

    ipv6初始化和处理流程分析报告.doc

    - Socket层:这是应用程序与网络交互的接口,基于BSD Socket API,允许用户空间程序使用统一的接口与不同协议族进行通信。 - 协议族层:包含如INET(TCP/IP协议族)和INET6(IPv6协议族)。其中,传输层处理如TCP...

    linux下简单聊天工具

    头文件中,通常会定义常量、结构体以及函数原型,方便客户端和服务端的代码共享。例如,可能会定义用于数据传输的数据结构,如消息结构体,包含发送者ID、时间戳和消息内容等字段。此外,头文件中还可能包含错误处理...

    嵌入式笔试

    IPv4地址根据其网络标识符的长度分为五类:A、B、C、D和E。每类地址的格式和用途不同: - **A类地址**:以0开头,网络标识符占7位,地址范围从1.0.0.1至126.255.255.254。每个网络最多可有约1677万个主机地址。 - *...

    C\C++语言网络开发详解

    大多数 UNIX 系统(如 Linux、BSD、SunOS 和 IRIX)中的编译命令如下: ```bash gcc my_socket_program.c -o my_socket_program ``` 而在 Solaris 系统中,则需要显式地链接 Socket 和网络服务库: ```bash cc my...

    winsocket实现多线程连接

    - 创建 `SOCKADDR_IN` 结构体 `addr` 来存储服务器的 IP 地址和端口号。 - 使用 `inet_addr` 函数将字符串形式的 IP 地址转换为整数。 4. **连接到服务器**: - 使用 `connect` 函数连接到指定的服务器和端口。 ...

    winsock

    这个接口遵循了Berkeley套接字API(BSD Sockets),使得在Windows操作系统上开发网络应用程序变得更加方便。在本文中,我们将深入探讨Winsock的相关知识点,并结合提供的源码文件进行解析。 1. **Winsock的基本概念...

    udp接收端程序参考

    - **用途**:定义了一个用于存储客户端信息的结构体。 - **成员变量**: - `buff`:接收数据的缓冲区指针。 - `len`:接收数据的长度。 - `cl_sin`:客户端地址结构指针。 ##### 3. 处理客户端消息 ```cpp int ...

Global site tag (gtag.js) - Google Analytics