网络编程基础知识

基础知识

1、什么叫网络?

网络是信息传输、接受、共享的虚拟平台,通过它把各个点、面、体的
信息联系到一起,从而实现这些资源的共享。

*》IPV4分类(4个字节):
	点分十进制的方式表示
	*A类型 :
		以0开头
		1个字节的网络地址  3个字节的主机地址
		0x00 00 00 00 ~  0x7f ff ff ff
		0.0.0.0 ~ 127.255.255.255
		0.0.0.1 ~ 127.255.255.254

主机地址不能全部为1或者全为0:
全为0 为 网络ID号
全为1 为 广播地址

	*B类地址:
		以10开头
		2个字节的网络地址  2个字节的主机地址
	1000 0000 0000 0000 0000 0000 0000 0001
	1011 1111 1111 1111 1111 1111 1111 1110
		128.0.0.1 ~ 191.255.255.254
		*C类地址:
			以110开头
			3个字节的网络地址  1个字节的主机地址
		1100 0000 0000 0000 0000 0000 0000 0001
		1101 1111 1111 1111 1111 1111 1111 1110		
			192.0.0.1 ~ 223.255.255.254
	*D类地址:
		以1110开头
		4个字节的网络地址  0个字节的主机地址
	1110 0000 0000 0000 0000 0000 0000 0001
	1110 1111 1111 1111 1111 1111 1111 1110
		224.0.0.1 ~ 239.255.255.254
		*E类地址:
			以11110开头  待使用
* 子网掩码:
	*格式:
		网络地址全为1 主机地址全为0 
	*作用:
		判断是否在同一局域网类
		当前教室的子网掩码:
			255.255.255.0
		
		判断 192.168.10.12  和  192.168.10.89是否在同一局域网??
			192.168.10.12
		&	255.255.255.0
	-----------------------------
	        192.168.10.0    ---》网络ID号
		
			192.168.10.89
		&   255.255.255.0
	------------------------------
			192.168.10.0    
			
			255.255.255.00  000000---》 255.255.255.192
			
		192.168.10.12	     00 00 1100
		255.255.255.192      11 00 0000
	-----------------------
	    192.168.10.0
		
		
		192.168.10.89		01 01 1001
		255.255.255.192     11 00 0000
	-----------------------
	    192.168.10.64
	
	子网掩码为 255.255.255.192 拥有4个子网:
	四个子网: 192.168.10.00 000001 ~ 192.168.10.00 111110
			   192.168.10.01 000001 ~ 192.168.10.01 111110
			   192.168.10.10 000001 ~ 192.168.10.10 111110
			   192.168.10.11 000001 ~ 192.168.10.11 111110
			   
	
	IPV4 : 4个字节
	IPV6 : 16个字节
	MAC  :  6个字节
	
* 网关:
	
* DNS域名解析

=============
OSI架构 ISO是一个组织:
目的: 将用户的数据 一步一步 变成 网络帧 然后网络发送

IP地址 和 端口号
IP地址:在网络去寻找发送的对象(数据发送给谁)
端口号:在某设备中,数据发送给哪个应用(在哪里显示)

数据是如何一步一步变成以太网帧发送的??


TCP/IP 四五层架构
			数据 
应用层:	HTTP/POP3 + 数据 
传输层:    TCP + HTTP/POP3 + 数据					(TCP/UDP)
网络层:    IP + TCP + HTTP/POP3 + 数据				(IP)
接口层:    以太网帧协议 + IP + TCP + HTTP/POP3 + 数据
			将该联合的数据 通过 网络发送
			
			
ARP : 通过ip地址寻找到 mac地址
RARP: 通过mac地址寻找其对于的IP地址

============
IP地址 TTL : 一跳 8

==================================
TCP:
网络必须事先连接,数据稳定(不丢包)发送
UDP:
不需要事先连接,直接发送数据,有可能数据丢失

网络编程中TCP的三次握手,四次挥手:
三次握手:建立连接

四次挥手: 断开连接

见图

======================================
TCP服务器:
*》 建立socket连接(产生socket套接字)
*》 绑定IP和PORT
*》 监听
*》 等待客户连接

TCP客户端:
*》 建立socket连接(产生socket套接字)
*》 连接服务器

TCP服务器:
》 建立socket连接(产生socket套接字)
socket();
#include <sys/types.h> /
See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
功能:
建立socket连接(产生socket套接字)
参数:
domain : 协议
AF_UNIX, AF_LOCAL Local communication unix(7)
本地连接协议
AF_INET IPv4 Internet protocols ip(7)
IPV4协议
AF_INET6 IPv6 Internet protocols ipv6(7)
IPV6

		type : 类型
			 SOCK_STREAM :流式套接字   (TCP)
				需要连接后稳定发送数据
			 SOCK_DGRAM  :数据报套接字 (UDP)
				不需要连接
			 SOCK_RAW    :原始套接字
			 
		protocol: 协议  0
	返回值:
		成功返回 套接字文件描述符
		失败返回-1 并设置错误码
	
	
*》 绑定IP和PORT
	bind 
	#include <sys/types.h>          /* See NOTES */
	#include <sys/socket.h>
	int bind(int sockfd, const struct sockaddr *addr,
            socklen_t addrlen);
	功能:
		绑定IP和PORT
	参数:
		sockfd : 套接字文件描述符
		addr   : struct sockaddr * 
		addrlen: addr的长度
	返回值:
		成功返回0 
		失败返回-1 并设置错误码
		
struct sockaddr:
	   struct sockaddr {
           sa_family_t sa_family;		// unsigned short  
           char        sa_data[14];		
       }    -----> 16个字节 
	   
	   
struct sockaddr_in :

#define __SOCK_SIZE__   16              /* sizeof(struct sockaddr)      */
struct sockaddr_in {
	__kernel_sa_family_t  sin_family;    /* Address family*/ unsigned short
	__be16                sin_port;      /* Port number*/  12345
	struct in_addr        sin_addr;      /* Internet address*/ 192.168.10.xx

	/* Pad to size of `struct sockaddr'. */
	unsigned char         __pad[__SOCK_SIZE__ - sizeof(short int) -
						sizeof(unsigned short int) - sizeof(struct in_addr)];
};

	__be16 : 大端序16位
	__le32 : 小端序32位

大端序:地位数据保存在高位的地址上,高位数据保存在低位的地址上
小端序:地位数据保存在低位的地址上,高位数据保存在高位的地址上

:16位  本地转网络传输  
htons    // host to net short
#include <arpa/inet.h>
uint16_t htons(uint16_t hostshort);
功能:
	本地转网络传输(2个字节)
参数:
	hostshort : 本地short 
返回值:
	网络short 
	
	
struct in_addr	:
	struct in_addr {
		__be32  s_addr;		//大端序的32位
	};
	
IP地址:本地变网络
第一种方式:
inet_aton  // address  to  net 
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);
功能:
	本地地址 变 网络地址
参数:
	cp : 字符串IP地址 192.168.10.20
	inp : 转换后数据保存的地方
返回值:
	如果address 有效,返回非0
	address 无效,返回0
	
第二种:
inet_addr
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
功能:
	本地地址 变 网络地址
参数:
	cp : 字符串IP地址 192.168.10.20
返回值:
	如果address 有效,返回 网络二进制数据
	address 无效,返回INADDR_NONE
	
第三种:
inet_pton
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
功能:
	将字符串src转换为af地址族中的一个网络地址
    的网络地址结构
参数:
	af : 协议  AF_INET  AF_INET6
	src  : IP地址  192.168.10.20
	dst  :转换后的网络address
	
返回值:
	成功返回1 
	如果转换失败返回0
	如果af不匹配返回-1


*》 监听:
	listen :
	#include <sys/types.h>          /* See NOTES */
	#include <sys/socket.h>
	int listen(int sockfd, int backlog);
	功能:
		监听,将主动连接变成被动连接
	参数:
		sockfd : 
		backlog : 同一瞬间允许同时连接服务器的 数量
	返回值:
		成功返回0 
		失败返回-1 并设置错误码


*》 等待客户连接	
	accept:
	#include <sys/socket.h>
	int accept(int socket, struct sockaddr *restrict address,
       socklen_t *restrict address_len);
	功能:
		阻塞等待客户连接
	参数:
		socket : sockfd 
		address: struct sockaddr * ---》 用来保存客户端的IP和端口
		address_len :长度的指针类型
	返回值:	
		成功返回非负的 文件描述符 
		失败返回-1 并设置错误码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值