ping源码代阅读(二) 基本知识介绍

我们先把在ping代码中的需要的知识学习下,然后我们在阅读代码部分只需要把流程讲清楚就可以了。

网络程序之间的连接需要五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。

结合上篇中的流程图,把用到的api介绍下。

A.int socket(int domain, int type, int protocol);

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);用来建立一个新的socket,也就是向系统注册,通知系统建立一通信端口。

1.domain协议族

AF_INET:等同于PF_INET,(Internet协议族,也就是TCP/IP)

2.type

SOCK_STREAM:流式套接字,面向连接和可靠的通信类型

SOCK_DGRAM:数据套接字,非面向连接和不可靠的通信类型

SOCK_RAW:原始套接字,用来直接访问IP协议

3. IPPROTO_ICMP

这里指定了通信协议,我们可以通过返回值套接字号可进行下一步操作。

B.int bind(int socket, struct sockaddr *my_addr, int addrlen);

bind(icmp_sock, (struct sockaddr*)&source, sizeof(source))

将套接口和机器上一定的端口号绑定在一起.包括了本机地址和本地端口地址。

struct sockaddr_in{  
short sin_family; /*AF_INET*/  
u_short sin_port; /*16位端口号,网络字节顺序*/  
struct in_addr sin_addr; /*32位IP地址,网络字节顺序*/  
char sin_zero[8]; /*保留*/  
}

C.  int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);

serv_addr是包含远端主机IP地址和端口号的指针;

D. int setsockopt ( int sockfd, int level, int optname, const void * optval, socklen_t *opteln )

lever:类型

IPPROTO_IP:IPv4套接口
optname:选项名称
optval(选项值):指向变量的指针。

E.int recvmsg(int sockfd, struct msghdr *msg, int flags);

cc = recvmsg(icmp_sock, &msg, polling);   

用来接收远程主机经指定的socket传来的数据。参数s为已建立好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据结构内容,参数flags一般设0

主要的函数只有这几个。

你可能感兴趣的:(数据结构,socket,struct,网络,Stream,internet)