基础知识
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 并设置错误码