/*
* @(#)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 */
分享到:
相关推荐
这个函数定义在`<netdb.h>`头文件中,属于BSD Socket API的一部分。 下面,我们详细分析`gethostbyaddr.c`这个示例程序: ```c #include #include #include #include #include int main(int argc, char *...
- **协议栈**:BSD套接字通常基于TCP/IP协议栈工作,包括Internet协议版本4(IPv4)、用户数据报协议(UDP)、传输控制协议(TCP)等。 - **应用场景**:常见的应用场景包括一对一通信(客户端/服务器模型)、一对多...
3. **结构体sockaddr**:用于存储IP地址和端口号,根据不同的地址族,可以是sockaddr_in(IPv4)或sockaddr_in6(IPv6)。 4. **绑定与监听**:服务器端通过bind函数将Socket与特定的IP地址和端口绑定,然后用...
- IP 地址的二进制表示和不同类型的 IP 地址,如 IPv4 和 IPv6 - 网络字节序和主机字节序的区别和转换函数,比如 `ntohl` 和 `htonl` - 端口号的作用和范围(通常是 0 到 65535) - Socket 地址结构体 `sockaddr...
- **INET Sockets**:基于IP协议的Sockets,支持IPv4和IPv6。 **3. 传输协议** - **UDP (User Datagram Protocol)**:一种无连接的服务,数据传输不可靠但速度快。 - **TCP (Transmission Control Protocol)**:...
1. BSD Socket层:这是用户空间应用程序与内核网络接口交互的起点。`struct socket`结构体在内核中代表了一个socket。主要处理如socket创建、绑定、监听、接受等操作,相关代码位于`/net/socket.c`和`/...
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_...
这个文件包含了与INET域相关的结构体和宏定义,例如`in_addr`和`ip_mreq`等,主要用于处理IP地址和多播组信息。 - **in_addr**:存储IPv4地址的结构体。 - **ip_mreq**:存储多播组请求信息的结构体。 ##### inet_...
3. **地址结构**: 使用`sockaddr_in`结构体定义服务器或客户端的网络地址,包括IP地址和端口号。 4. **绑定**: 对于服务器端,调用`bind()`函数将套接字与特定的本地地址和端口关联。 5. **监听与接受**: 服务器端...
套接字(Socket)源于Unix和BSD系统,其发展是为了实现TCP/IP协议。Socket API成为了一种标准化的网络编程接口,不仅用于TCP/IP,还支持如Unix域、TLI和XNS等多种协议栈。在系统中,套接字不仅控制传输层,还可以...
- 在Unix网络编程中,网络地址通常用`sockaddr`结构体表示,如`struct sockaddr_in`用于IPv4,`struct sockaddr_in6`用于IPv6。 - `bind()`函数将套接字与特定的IP地址和端口绑定,以便接收数据。 4. **监听与...
这里,`SERVER_PORT`和`SERVER_IP`是需要替换为实际服务器端口和IP的宏定义。`BUFSIZE`是定义的缓冲区大小,用于存储发送和接收的数据。 理解了这些基本概念和操作后,你可以根据"client.c"源代码进行调试和学习,...
接下来,为了与远程主机建立连接,我们需要设置一个`sockaddr_in`结构体,包含IP地址和端口号,然后调用`connect()`函数。对于服务器端,使用`bind()`函数绑定本地端口,`listen()`函数等待客户端连接,并通过`...
- Socket层:这是应用程序与网络交互的接口,基于BSD Socket API,允许用户空间程序使用统一的接口与不同协议族进行通信。 - 协议族层:包含如INET(TCP/IP协议族)和INET6(IPv6协议族)。其中,传输层处理如TCP...
头文件中,通常会定义常量、结构体以及函数原型,方便客户端和服务端的代码共享。例如,可能会定义用于数据传输的数据结构,如消息结构体,包含发送者ID、时间戳和消息内容等字段。此外,头文件中还可能包含错误处理...
IPv4地址根据其网络标识符的长度分为五类:A、B、C、D和E。每类地址的格式和用途不同: - **A类地址**:以0开头,网络标识符占7位,地址范围从1.0.0.1至126.255.255.254。每个网络最多可有约1677万个主机地址。 - *...
大多数 UNIX 系统(如 Linux、BSD、SunOS 和 IRIX)中的编译命令如下: ```bash gcc my_socket_program.c -o my_socket_program ``` 而在 Solaris 系统中,则需要显式地链接 Socket 和网络服务库: ```bash cc my...
- 创建 `SOCKADDR_IN` 结构体 `addr` 来存储服务器的 IP 地址和端口号。 - 使用 `inet_addr` 函数将字符串形式的 IP 地址转换为整数。 4. **连接到服务器**: - 使用 `connect` 函数连接到指定的服务器和端口。 ...
这个接口遵循了Berkeley套接字API(BSD Sockets),使得在Windows操作系统上开发网络应用程序变得更加方便。在本文中,我们将深入探讨Winsock的相关知识点,并结合提供的源码文件进行解析。 1. **Winsock的基本概念...
- **用途**:定义了一个用于存储客户端信息的结构体。 - **成员变量**: - `buff`:接收数据的缓冲区指针。 - `len`:接收数据的长度。 - `cl_sin`:客户端地址结构指针。 ##### 3. 处理客户端消息 ```cpp int ...