【1】网络历史
【2】网络体系结构即指网络的层次结构和每层所使用协议的集合
两类非常重要的体系结构:OSI与TCP/IP
OSI 模型:
应用层
表示层
会话层
传输层
网络层
数据链路层
应用层
传输层
网络层
物理层
【3】TCP 协议
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信
(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
【4】基本知识
Socket 定位读写操作 是一个编程接口 是一种特殊的文件描述符 (everything in Unix is a file) 并不仅限于TCP/IP协议
功能:创建一个网络套接字,用来进行通信
参数:domain : AF_UNIX, AF_LOCAL 本地通信
AF_INET 网络通信
type : SOCK_STREAM 流式套接字 tcp
SOCK_DGRAM 数据报套接字 udp
SOCK_RAW 原始套接字
protocol :0
返回值:成功 新的文件描述符
参数:sockfd 文件描述符
addr 网络地址通信结构体
addrlen 结构体大小
返回值:成功0,
出错-1
***************************************************************************
/* Structure describing an Internet socket address. */
225 struct sockaddr_in
226 {
227 __SOCKADDR_COMMON (sin_); // sa_family_t sin_family;
228 in_port_t sin_port; /* Port number. */ 端口号(无符号16位短整形数据)
229 struct in_addr sin_addr; /* Internet address. */ ip地址
230
231 /* Pad to size of `struct sockaddr'. */ 填充结构体大小,使其与struct sockaddr 大小一致
232 unsigned char sin_zero[sizeof (struct sockaddr) -
233 __SOCKADDR_COMMON_SIZE -
234 sizeof (in_port_t) -
235 sizeof (struct in_addr)];
236 };
237
***********************************************************************************
#define __SOCKADDR_COMMON(sa_prefix) \
36 sa_family_t sa_prefix##family
## 表示拼接符,
typedef unsigned short int sa_family_t; 无符号的短整形
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
【7】地址转换
in_addr_t inet_addr(const char *cp);
功能:将点分十进制的ip地址转换为网络字节序二进制数据
参数:cp ip字符串
返回值: 成功 网络字节序数据
失败 -1
返回值:转换后的值
【8】int listen(int sockfd, int backlog);
功能:将sockfd 置为被动监听模式
参数: sockfd 网络套接字
backlog 监听队列的大小
返回值:成功0,出错 -1
【9】int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:接受客户端的连接请求
参数:sockfd 监听套接字
addr 对方的网络地址结构体
addrlen 结构体大小
返回值:成功 新的文件描述符(针对连接者进行通信的套接字)
出错 -1
【10】将网络字节序的IP地址转换为 点分十进制的 字符串
【11】ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:发送消息
参数:sockfd 网络套接字
buf 发送缓存区的首地址
len 发送消息的大小
flags 0 阻塞
返回值:成功 发送的字节数
失败 -1
【12】 ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:接收消息
参数:sockfd 网络套接字
buf 接收缓存区的首地址
len 发送消息的大小
flags 0 阻塞
返回值:成功 接收的字节数
失败 -1
【2】网络体系结构即指网络的层次结构和每层所使用协议的集合
两类非常重要的体系结构:OSI与TCP/IP
OSI 模型:
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
应用层
传输层
网络层
物理层
【3】TCP 协议
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信
(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
【4】基本知识
Socket 定位读写操作 是一个编程接口 是一种特殊的文件描述符 (everything in Unix is a file) 并不仅限于TCP/IP协议
IP地址 定位主机 IP地址是Internet中主机的标识
端口号 定位应用程序(进程) 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别
字节序
小端存储:低字节存储在低地址,高字节存储在高地址。LSB大端存储:低字节存储在高地址,高字节存储在低地址。HSB
网络字节序:大端字节序。
【5】 int socket(int domain, int type, int protocol);功能:创建一个网络套接字,用来进行通信
参数:domain : AF_UNIX, AF_LOCAL 本地通信
AF_INET 网络通信
type : SOCK_STREAM 流式套接字 tcp
SOCK_DGRAM 数据报套接字 udp
SOCK_RAW 原始套接字
protocol :0
返回值:成功 新的文件描述符
出错 -1
【6】int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:绑定网络套接字(ip、端口、sockfd 捆绑在一起)参数:sockfd 文件描述符
addr 网络地址通信结构体
addrlen 结构体大小
返回值:成功0,
出错-1
***************************************************************************
/* Structure describing an Internet socket address. */
225 struct sockaddr_in
226 {
227 __SOCKADDR_COMMON (sin_); // sa_family_t sin_family;
228 in_port_t sin_port; /* Port number. */ 端口号(无符号16位短整形数据)
229 struct in_addr sin_addr; /* Internet address. */ ip地址
230
231 /* Pad to size of `struct sockaddr'. */ 填充结构体大小,使其与struct sockaddr 大小一致
232 unsigned char sin_zero[sizeof (struct sockaddr) -
233 __SOCKADDR_COMMON_SIZE -
234 sizeof (in_port_t) -
235 sizeof (struct in_addr)];
236 };
237
***********************************************************************************
#define __SOCKADDR_COMMON(sa_prefix) \
36 sa_family_t sa_prefix##family
## 表示拼接符,
typedef unsigned short int sa_family_t; 无符号的短整形
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
【7】地址转换
in_addr_t inet_addr(const char *cp);
功能:将点分十进制的ip地址转换为网络字节序二进制数据
参数:cp ip字符串
返回值: 成功 网络字节序数据
失败 -1
注意: 255.255.255.255 不能被用来转换
uint16_t htons(uint16_t hostshort);
功能:将端口号,由本地字节序转换为网络字节序返回值:转换后的值
【8】int listen(int sockfd, int backlog);
功能:将sockfd 置为被动监听模式
参数: sockfd 网络套接字
backlog 监听队列的大小
返回值:成功0,出错 -1
【9】int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:接受客户端的连接请求
参数:sockfd 监听套接字
addr 对方的网络地址结构体
addrlen 结构体大小
返回值:成功 新的文件描述符(针对连接者进行通信的套接字)
出错 -1
【10】将网络字节序的IP地址转换为 点分十进制的 字符串
char *inet_ntoa(struct in_addr in);
uint16_t ntohs(uint16_t netshort);
功能:将 网络端口号 转换为 本地端口号【11】ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:发送消息
参数:sockfd 网络套接字
buf 发送缓存区的首地址
len 发送消息的大小
flags 0 阻塞
返回值:成功 发送的字节数
失败 -1
【12】 ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:接收消息
参数:sockfd 网络套接字
buf 接收缓存区的首地址
len 发送消息的大小
flags 0 阻塞
返回值:成功 接收的字节数
失败 -1