网络-程序框架

Linux 网络程序

目标

网络协议:ipv4 ipv6 icmp arp  ospf rip igmp mpls pppoe ptp...  
	1. 网络数据分析   直接分析数据包---抓包分析  
	2. 协议图 (静态 动态)
网络服务器模型:  
	1. 数据通信模块  
  		1.1 阻塞接收  
		1.2 非阻塞接收
		1.3 IO复用接收 select poll epoll 
		1.4 异步接收 signal sigation 
	2. 数据处理模块
		2.1 多进程数据处理能力
		2.2 多进程的IPC	
			有名管道
			无名管道
			信号
			消息队列
			信号量
			共享内存
			域socket
		2.3 多线程数据处理能力
		2.4 多线程的互斥与同步
			  mutex 
			  spin
			  rwlock
			  condition
		2.5 多线程多进程(线程池 任务池)
	3. 数据存储模块
	4. 网络服务器设计框架
		4.1 reactor
		4.2 practor
	5. 功能协议实现
		5.1  http
		5.2  https
		5.3  ftp 
		...
	6. 功能框架
		6.1  web服务器框架 

网络协议

一切应用层的功能,都是内核层实现
Linux中都是面向对象的思想

aaaaa --> fd ----> open(/tmp/test.txt)—>write---->read
aaaaa -->socket ----> socket()–>write—read—accetp–connect–setsocketopt

网络编程的基础知识 
* TCP/IP协议镞 
	1. 分层的概念 
		物理层 :PCS(物理编码层) PMA(物理适配层)  
		LLC层  :局域网链路问题  ARP   
		IP层   :网络传输问题   
		TCP层  :进程接收数据
		应用层 :HTTP HTTP FTP TELNET SSH  
	2. ip 格式
	   点分十进制  二进制
	   网络字节序(大端序)  本地字节序(小端序 )
	   0x12345678
	   0x78 0x56 0x34 0x12

	   case 1: 点分十进制------>网络字节序的二进制 
		in_addr_t inet_addr(const char *cp);
	   case 2: 网络字节序的二进制 --->点分十进制
	    char *inet_ntoa(struct in_addr in);
	   case 3:点分十进制------>网络字节序的二进制 
	    int inet_aton(const char *cp, struct in_addr *inp);
	3. 子网掩码
	   24  11111111111111111100000000
	   255.255.255.0 
	   ip---->ip段 
	   192.168.1.1 --->192.168.1.1/24
	4.拆包和封包 
		HTTP协议

tcp的编程原理和编程流程 
	监听句柄-->接收新的链接--->电话号
	链接句柄-->接收新的客户端--->呼入电话

socket模型

五元组:源IP 目的IP 源port 目的port 类型type

1.创建对象

fd=socket(协议簇,类型,协议)
int  socket(int protofamily, int type, int protocol);//返回sockfd
协议族:
	AF_INET
	AF_INET6
	AF_LOCAL
	AF_ROUTE
套接字类型
	SOCK_STREAM
	SOCK_DGRAM
	SOCK_RAW
协议:
	IPPROTO_TCP
	IPPTOTO_UDP
	IPPROTO_SCTP
	IPPROTO_TIPC
2.设置对象

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

地址填充 ,端口填充使用
struct sockaddr_in {
	 sa_family_t    sin_family; /* address family: AF_INET */
	 in_port_t      sin_port;   /* port in network byte order */ short 
	 struct in_addr sin_addr;   /* internet address */		
};
struct in_addr {
	    uint32_t       s_addr;     /* address in network byte order */
};

字节序概念
	本地字节序
	网络字节序
	htons()
	htonl

	hton
	htons(80)
    ntohs
	ntohl
			
0x5689
x86 win   小端序  89 56
x86 linux 大端序  56 89 
	   网络字节序 大端序

发送构造数据包   本地字节序---->网络字节序
接收解析数据包   网络字节序---->本地字节序 

192.168.1.1  点分十进制ip地址 
unsigned int ip 	

 点分十进制 转化为无符号整形;
 int =inet_addr(str)
 无符号整形转化为点分十进制 
 str=inet_ntoa(uint32_t s_addr)
3.使用对象
listen(fd,100);
socket_fd=accpet(fd)

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                    struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                  const struct sockaddr *dest_addr, socklen_t addrlen);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值