关于计算机网络

一、计算机网络
1、什么是计算机网络
把分布在不同位置上的计算机(PC、手机、可穿戴设备)与专门的网络设备(交换机、路由器等)用通信线程连接成一个规模大、功能强的系统,从而使用众多计算机可以方便的互相传递数据,共享软件、硬件、数据信息等。
简单来说,计算机网络就是由通信线路互相连接的众多自动工作的计算机构成的集合,它是计算机技术与通信技术相结合的产物。
世界第一个计算机网络叫arpanet,是苏美冷战的产物。

2、计算机网络的功能
1、数据通信
2、资源共享
3、提高系统可靠性
4、分布式网络处理和负载均衡
3、计算机网络的组成
1、通信子网
由网上、线缆、交换机、路由器等。
2、资源子网
由网络中的计算机、打印机、可以提供服务的设备组成。
3、计算网络软件
协议软件:它规则了计算机之间的通信准则,TCP/IP协议簇(一堆协议的组合)。
网络通信软件:网络中实现计算机与设备之间通信的软件(运行在交换机、路由器上的系统)。
网络操作系统:可以提供网络服务的计算机操作系统,UNIX、Linux、Windows Server 2008。
网络管理软件:防火墙、SELinux。
网络应用软件:浏览器、迅雷、ftp客户端。
4、计算机网络的分类
1、按网络的作用范围划分
局域网、城域网、广域网。
2、按网络传播技术划分
广播式网络、点到点网络
3、按传输介质划分
有线网、无线网、微波通信、卫星通信
5、计算机网络拓扑结构
1、星型拓扑结构
2、树型拓扑结构
3、总线型拓扑结构
4、环型拓扑结构
5、网络型拓扑结构
6、计算机网络的发展过程
1、以计算机为中心的联机系统。
2、分组交换网络的诞生。
3、网络体系结构化与协议标准化。
20世纪80年代 ISO组织提出 开放式系统互联参考模型简称OSI,由于OSI照顾到了各方的利益所以过于庞大,因此至今还没有推出成熟的产品,但是形成一组符合OSI标准的协议,这些协议叫TCP/IP协议簇(TCP/IP模型)。
windows->C/C+±>socket->TCP/IP <-TCP/IP<-socket<-Java<-Linux。
4、高速计算机网络(5G)。
7、网卡
全名叫网络接口卡(网络适配器),负责把数据传输到网络中去,也负责从网络中获取数据。
它依靠的是世界的独一无二MAC地址(类似网卡的身份证号),是网卡的生产厂商在生产时就固化在网卡芯片上的。

8、OSI参考模型与TCP/IP模型
网络协议是为网络数据交换面制定的规则、约定、标准,一个功能完备的计算机网络需要制定一整套的协议集合,网络协议是按层次来组织的,网络层次结构模型与各层协议的集合称为网络体系结构。
OSI参考模型七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP模型四层:
物理层:负责通信网络收发数据包。
网络层:负责选择、流量控制、网络拥塞的问题,这一层的主协议是IP。
传输层:机器之间建立会话(端到端的连接),用于数据传输,这一层的主协议是TCP/UDP。
应用层:主要为用户提供针对性的服务,这一层的代表协议有:HTTP、FTP、SMTP、TELNET、SSH。

9、IPV4地址(32位二进制组成,逐渐不够使用)、IPV6地址(128位二进制组成范围更大)
在计算机网络中每一台计算机都必须有一个唯一的标识它就是IP地址(因为MAC地址太难记),由4个不超过255的整数组成,用点分十进制表示。
ip地址的分类:
A类:第一个二进制必须是0:(公网IP,只要连网的计算机都能与它数据通信)
0.0.0.0~127.255.255.255
B类:前两位二进制必须是10:(构建节点较多的私有网络)
128.0.0.0~191.255.255.255
C类:前三位二进制必须是110:(私人使用,主要用来构建局域网络)
192.0.0.0~223.255.255.255
D类:前四位二进制必须是1110:(组播、多播)
224.0.0.0~239.255.255.255
E类:前五位二进制必须是11110:(保留)
240.0.0.0~255.255.255.255
10、公有IP和私有IP
公有ip:在网络服务提供商登记过的ip地址叫公有ip,只要连网的计算机都能与它数据通信。
私有ip:由一些公司、组织、家庭自己分配的,不能被直接访问的ip地址。
11、子网掩码:
由4个不超过255的整数组成,用点分十进制表示,它的作用是分别是两个ip地址是否在同一个子网内。
ip地址 & 子网络掩码 = 网络地址

192.168.6.66 & 255.255.0.0 = 192.168.0.0
192.168.1.5 & 255.255.0.0  = 192.168.0.0
如果两个ip地址的的网络地址相同,表示它们处在同一个子网内,就可以不依靠路由器直接通信。

12、网关地址
负责子网出口的计算机,一般由路由器担任(路由器就是一台具有路由功能的计算机)。

13、端口号
操作系统会为需要网络通信的进程分配一个独立无二的编号(端口号),端口号就决定了与计算机上的哪个进程通信。
1~1024 基本上已经被操作系统全部占用,一般编程要使用1024以上的,HTTP:80,FTP:21,SSH:22,TELNET:23

二、网络编程相关概念
1、TCP/IP模型与OSI模型的对应关系
OSI TCP/IP
------------
应用层
表示层 应用层 HTTP/TELNET/FTP/SSH
会话层
------------
传输层 传输层 TCP/UDP
------------
网络层 网络层 IP/路由
------------
数据链路层 网络接口层 网卡驱动、设置
物理层
------------
2、TCP/IP簇
TCP:(打电话)面向连接的传输协议,安全、稳定,速度慢。
通信前进行三次握手。
结束前进行四次挥手。
UDP:(发短信)面向无连接的数据报协议,速度快,数据可能会有丢失。
3、socket(套接字)
socket是一种接口技术,无论什么端口、协议都从socket进出数据,它负责进程与协议的连接通信。
套接字类似一个文件描述符,Linux/UNIX把网络当文件来看待,通过网络收发数据其实就是向文件读写数据。
4、网络编程模式
点对点:一对一通信,只有在同一网络中才能直接通信。
C/S(B/S):客户机/服务器模式,是一对多的通信。
5、绑定
要进程网络编程需要有一个套接字(内核对象),以一个整数形式存在,要相能够通信还需要将物理通信载体(用IP地址、端口号代表)与套接字绑定在一起。

三、网络编程相关函数
int socket(int domain, int type, int protocol);
功能:创建套接字
domain:通信方式
AF_UNIX/AF_LOCAL:基于本地的通信,不进行网络通信,可以看作是进程间通信方式的一种。
AF_INET:ipv4方式通信
AF_INET6:ipv6方式通信
type:
SOCK_STREAM 数据流协议(TCP)
SOCK_DGRAM 数据报协议(UDP)
protocol:特别通信协议,一般不使用,写0即可。
返回值:套接字描述符

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:把socket与通信地址绑定
sockfd:socket描述符
addr:通信地址
addrlen:通信地址的长度

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:与addr代表的计算机/文件建立连接
sockfd:socket描述符
addr:目标的地址
addrlen:目标地址的长度

准备通信地址:
1、基本地址类型
	struct sockaddr 
	{
           sa_family_t sa_family; //通信方式
           char sa_data[14];
    }
2、本地地址类型
	struct sockaddr_un
	{
		sa_family_t sun_family; //通信方式
		char sun_path[UNIX_PATH_MAX]; /* 路径名 */
	};
3、网络地址类型
	struct  sockaddr_in 
	{
		sa_family_t sin_family; //通信方式
		unsigned  short  int  sin_port; // 端口号
		struct  in_addr  sin_addr; // ip地址
		...
	};
	struct  in_addr {
		unsigned long s_addr;
	};

四、数据转换
本地字节序:本地计算机数据存储的格式分为大端和小端(不确定)。
网络字节序:是一种采用大端格式进行存储的一个方式。

uint32_t htonl(uint32_t hostlong);
功能:本地字节序long转网络字节序long
uint16_t htons(uint16_t hostshort);
功能:本地字节序short转网络字节序short
uint32_t ntohl(uint32_t netlong);
功能:网络字节序的long转本地字节序的long
uint16_t ntohs(uint16_t netshort);
功能:网络字节序的short转本地字节序的short

注意:在网络通信时需要把数据先转换成网络字节序再发送,但是为了避免转换的麻烦一般都只发char类型的数据。

int inet_aton(const char *cp, struct in_addr *inp);
功能:把点分十进制的字符串ip地址转换成struct in_addr

in_addr_t inet_addr(const char *cp);
功能:把点分十进制的字符串ip地址转换成网络字节序32位整数

in_addr_t inet_network(const char *cp);
char *inet_ntoa(struct in_addr in);
struct in_addr inet_makeaddr(int net, int host);
in_addr_t inet_lnaof(struct in_addr in);
in_addr_t inet_netof(struct in_addr in);

五、基于TCP协议的C/S(客户机/服务器)编程模型
1、TCP协议的特点
1)、通信之前先进程连接(面向连接的)。
2)、可靠,保证数据的完整性和有序性,每个发送都有应答,基在时间范围内没有收到反馈,就再发一遍历。
A ->1
<- 1 OK B
A ->2
<- 2 OK B
A ->3
A ->3
<- 3 OK B
A ->4
<- 4 OK B
编程模型:
服务端S: 客户端C:
创建socket 创建socket
准备地址(自己的) 准备地址(服务器的,为连接准备)
绑定地址与socket
设置监听socket
等待连接 连接服务器
接收消息 发送消息
发送消息 接收消息
关闭socket 关闭socket

int listen(int sockfd, int backlog);	
功能:设置该socket对象监听的数据(排队的数量)。
sockfd:socket描述符
backlog:监听的数量
	正在处理的+排队+连接失败
	
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:等待客户的连接
sockfd:socket描述符
addr:获取客户的地址
addrlen:获取/设置客户的地址的长度。
返回值:会返回一个用于专门通信描述符

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:向网络发送数据
sockfd:socket文件描述符、或accept函数的返回值。
buf:要发送的数据的首地址
len:数据的字节数
flags:是否阻塞,0表示阻塞
返回值:成功发送的字节数


ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:从网络接收数据
sockfd:socket文件描述符、或accept函数的返回值。
buf:要接收数据的缓冲区首地址
len:缓冲区的大小
flags:是否阻塞,0表示阻塞
返回人值:成功接收到的字节数

六、TCP的三次握手(创建连接)和四次挥手(关闭连接)

TCP的三次握手(目的是为了上C知道:C能到S,S也能到C,让S知道:C能到S,S也能到C):
C -----> S(S知道:C能到S)
C <----- S(C知道:C能到S,S能到C)
C -----> S(S知道:S能到C)

TCP的四次挥手(防止在关闭时还有未发送完成的数据):
C --(C向S请求关闭)--> S
C <--(请已经收到,等我检查一下是否还有未发完的数据)-- S
...如果有则把未完成的全部发送完毕...
C <--(已经发送完成可以关闭)-- S
C --(要关了)-- S

七、基于UDP协议的点到点通信。
1、基本特点
1)、通信前不需要连接,直接发送数据
2)、不可靠,不保证数据的完整性和有序性。
3)、效率高,速度快。
2、编程模型
A B
创建socket对象 创建socket对象
准备地址(A自己的) 准备地址(目标A)
绑定socket与地址 …
接收数据 发送数据
发送数据 接收数据
关闭socket 关闭socket

3、接收、发送函数
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen)
功能:向目标计算机发送数据(并且附加本机地址和端口)。
sockfd:socket描述符
buf:要发送的数据首地址
len:要发送的数据的长度
flags:是否阻塞,0表示阻塞
dest_addr:目标计算机的地址
addrlen:地址结构体的大小
返回值:成功发送的字节数

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
功能:从网络上接收数据(并获取数据的来源地址,数据返回时按此地址返回)。
sockfd:socket描述符
buf:缓冲区首地址
len:缓冲区大小
flags:是否阻塞,0表示阻塞
src_addr:数据的来源地址
addrlen:地址结构体的大小(不是获取,而告诉)。

猜你喜欢

转载自blog.csdn.net/weixin_44041847/article/details/88942711
今日推荐