计算机的网络的知识点总结

一、 计算机网络:
1、 什么是计算机网络
计算机网络是指将地地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
2、 计算机网络的功能:
数据通信
资源共享
提高系统的可靠性
分布网络处理和负载均衡
3、 计算机网络组成
通信子网:网卡,线缆、集线器、中继器、交换机、路由器。
资源子网:网络中的计算机、打印机、电话等一些可以提供服务的设备。
计算机网络软件:
协议软件:它规定了计算你之间通信的规则。TCP/IP协议族。
网络通信软件:网络中实现计算你与设备之间通信的软件(网卡驱动)。
网络管理软件:防火墙,SELinux,
网络应用软件:浏览器、迅雷
网络操作系统:可以提供网络服务的计算机操作系统,windows server2008、UNIX、Linux。
4、 计算机网络的分类
按网络作用范围划分:局域网、城域网、广域网
按网络技术划分:广播式网络、点到点网络
按传输介质划分:有线网,无线网,微波通信,卫星通信。
5、 计算机网络的拓扑结构:
1、 星型
2、 树型
3、 总线型
4、 环型
5、 网状型
6、计算机网络的发展过程
1、以计算机中心的联机系统
2、分组交换网络的诞生。
3、 网络体系结构与协议标准化
20世纪80年代ISO组织提出开放式系统互联参考模型(OSI参考模型)。
但由于这个模型照顾到了各方的利益,所以太过庞大,因此至今都没有成熟的产品,目前我们所用是一系列协议的集合,简称TCP/IP族,通常叫TCP/IP模型
目前所有的计算机系统都按照这份协议进行通信,所有不同的操作系统之间才可能进行网络通信。
c/c++/Java/python->windows->socket->TCP/IP<->TCP/IP->socket->Linux-> c/c++/Java/python。
4、 高速计算机网络(5G)
7、网卡
他负责将数据发送到网络上,也负责从网络中获取数据,每个网卡上都有一个独一无二的MAC地址。
8、OSI参考模型与TCP/IP参考模型
网络协议是为网络数据交换而制定的规则、约束、标准,一个功能完备的计算机网络需要制定一套复杂的协议集,目前网络协议是按层次结构组织的,网络层次结构模型与各层协议的集合称为网络体系结构。
OSI从下到上:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
目前只实现四层:
物理层:负责通信网络收发数据包
网络层:选择、流量控制、网络拥塞,IP协议是该层的核心
传输层:机器之间用于会话的端到端连接(用于数据传输),该层核心是TCP/UDP。
应用层:主要为用户提供针对性的服务,这一层代表的协议有:HTTP,SMTP,FTP,SNMP,TELNET。
OSI TCP
物理层,数据链路层 物理层
网络层 网络层
传输层 传输层
会话层,应用层,表示层 应用层
9、IP地址
在计算机网络中每一台计算机都必须有唯一的标识(MAC地址不容易记忆),就是IP地址,目前在计算机中以.分十进制表示(4个不超过255的整数),但在程序中他就是4字节的整数。
IP地址的分类:
A类:第一个二进制是0
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类:前四位是1111
240.0.0.0~255.255.255.255
10、共有IP和私有IP
公有IP:在网络服务提供商登记过的IP叫公有IP。
私有IP:由一些公司或组织自己分配的,不能在网络中公开直接访问的。
11、子网掩码:
4个不超过255的整数,以.分十进制表示
网络地址=IP地址 按位& 子网掩码
只有在同一子网内的IP地址才可能直接进行通信,否则必须经过路由器。

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

A 路由交叉 交换机直通

B
13、端口号
IP地址能决定我们与哪一台计算机通信,而端口号决定了我们与计算机的哪个进程进行通信。
1~1024基本上已经操作系统预定完了,因此我们在编程时一般要1024以上。
http:80
ftp:21
ssh:22
telnet:23
二、 网络通信的基本概念
1、 TCP和UDP区别
TCP:传输控制协议,面向连接的服务(打电话),安全,可靠(三次握手、响应+重传、四次挥手)。速度相对较慢,一般应用在对安全性、完整性有严格要求的场景:ftp,SMTP、HTTP
三次握手:
A要知道A能到B,B也能到A
B也要知道A能到B,B也能到A
四次挥手:
目的:让关闭前发送完所有未发送的数据。(应用层已经交给底层,底层还没有完全发送出去)
A 发送关闭请求-> B
A<-发送请求响应 B
B检查是否有未发送完成的数据
<-可以关闭 B
A 发送关闭消息-> B
UDP:用户数据报文协议,面向无连接的服务(发短信),不保证安全,可靠,但大多数情况下是可靠的,速度相对较快,流媒体(在线视频,音频)
2、 消息流
应用层->表示层->会话层->网络层->传输层->数据链路层->物理层->物理层-数据链路层-传输层->网络层->会话层->表示层->应用层-
3、 消息包
当socket收到一个要送的数据时,要先把数据拆分成Bit流,然后再组成(防丢失)数据包(可能会丢包)。
三、 套接字
socket是一种接口机制,可以让程序无论使用什么端口、协议,都可以从socket进出数据,负责进程与协议之间的连接。
1、 编程模式
点对点通信(p2p):一对一通信。
客户机/服务器(C/S):一对多通信
2、 绑定
是socket描述符与物理通信载体(网卡或文件)绑定在一起。
3、 函数
创建int socket(int domain, int type, int protocol);
功能:创建socket描述符,可以把socket当做文件来看待,发数据就是写文件,接收数据就是读文件。
domain:地址类型
AF_UNIX/AF_LOCAL/AF_FILE:本地通信(进程间通信)。
AF_INET:基本32位IP地址通信,IPv4
AF_INET6 基本128位IP地址通信,IPv6
type:通信协议
SOCK_STREAM 数据流协议,TCP
SOCK_DGRAM 数据报协议,UDP
protocol:特别通信协议,给0即可
返回值:socket描述符,类似文件描述符
4、 通信地址
注意:函数接口定义是sockaddr,而实际提供的是sockaddr_in或sockaddr_un
Struct sockaddr{
Sa_family_t sa_family;
Char sa_data[14];
}
Struct sockaddr_un
{
SOCKADDR_COMMON (sun);//地址类型 参考domain
Char sun_path[108];//socket文件路径
}
Struct sockaddr_in
{
SOCKADDR_COMMON (sin);
In_port_t sin_port;//端口号 大端字节序
Struct in_addr sin_addr;//IP地址 大端4字节整数
}
5、 绑定
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
sockfd:socket描述符:socket函数的返回值
addr:通信地址结构体,实际给的是sockaddr_in和sockaddr_un,需要强制类型转换
addrlen:通信地址结构体类型的字节数,使用sizeof计算。
6、连接
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
sockfd:socket描述符
addr:通信目标地址
addrlen:通信地址结构体类型的字节数,使用sizeof计算。
返回值:在本地通信成功0,失败-1
6、 数据连接/接收与发送:read/write
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
recv/send与read/write功能一样,flags多了是否阻塞功能(0阻塞,1不阻塞)。
7、 关闭套接字:close
如果是网络通信,端口号并不会立即回收,大概会占用三分钟左右。
8、 字节序转换
uint32_t htonl(uint32_t hostlong);
功能:把32位本机字节序转换成32位的网络字节序
uint16_t htons(uint16_t hostshort);
功能:把16位本机字节序转换成16位网络字节序
uint32_t ntohl(uint32_t netlong);
功能:把32位网络字节序转换成32位的本机字节序
uint16_t ntohs(uint16_t netshort);
功能:把16位网络字节序转换成16位的本机字节序
9、 IP地址转换
int inet_aton(const char *cp, struct in_addr *inp);
功能:把点分十进制的ip地址(字符串)转换成32位无符号整数,使用结构指针获取。
in_addr_t inet_addr(const char *cp);
功能:把点分十进制的ip地址(字符串)转换成32位无符号整数,使用返回值直接返回。
char *inet_ntoa(struct in_addr in);
功能:32位无符号整数表示的ip地址,转换成点分十进制的ip地址(字符串)
10、 本地通信编程模型
进程A 进程B
创建套接字(AF_LOCAL) 创建套接字
准备地址(sockaddr_un) 准备地址
绑定(自己的socket/地址) 连接(connect,连接进程A的地址)
接收数据 发送数据
关闭套接字 关闭套接字
四、 基于TCP协议的C/S模型
Int listen(int sockfd,int backlog);
功能:设置等待连接的最大数量
socket:被监听的socket描述符
backlog:等待连接的最大数量(排队的数量)

int accept(int sockfd,struct sockaddraddr,socklen_taddrlen);
功能:等待连接socket连接
addr:获取连接的地址
addrlen:设置连接地址结构体的长度
返回值:专门用于通信的描述符

编程模型:
Server client
创建socket套接字 创建socket套接字
准备地址(sockaddr_in,本机地址) 准备地址(服务器地址)
绑定(bind) ………
监听(listen) …….
等待连接(accept、fork) 连接(connect)
接收请求 read/recv 发送请求(write/send)
响应请求send/write 接收响应(read/recv)
关闭(close) 关闭
五、 与阿里的ECS服务器进行网络通信
1、 开启端口号
2、 使用FlashFXP上传视频
3、 使用putty远程登录ECS服务器,修改代码,编译,执行
六、 基于UDP协议的C/S模型
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr,socklen_t addrlen);
功能:UDP协议专用的数据发送函数
Sockfd:套接字描述符
Buf:待发送的缓冲区首地址
Len:待发送的数据字节数
Flags:0 阻塞,1 不阻塞
Dest_addr:目标计算机地址
Addrlen:地址结构体的字节数
返回值:成功发送的字节数
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
功能:UDP协议专用的数据接收函数
Sockfd:套接字描述符
Buf:数据存储位置
Len:最大接收字节数
Flags:0阻塞,1不阻塞
Src_addr:获取发送者的地址
Addrlen:设置地址结构体的字节数
返回值:成功接收的字节数

编程模型:
Server Client
创建套接字(socket) 创建套接字(socket)
准备地址(本机地址sockaddr_in) 准备地址(目标机地址sockaddr_in)
绑定(bind(sockfd+addr)) …………………
接收请求(recvfrom) 发送请求(sendto)
响应请求(sendto) 接收响应(recvfrom)
关闭套接字(close) 关闭套接字(close)
注意:从服务器到客户端返回的路线是UDP协议自己设计的。

七、 windows下的网络的编程
一般的软件都Linux/NUIX系统作为服务器,而windows作为客户端,windows下的socket编程的接口与linux基本一致,函数都声明在winsock.h头文件中。
Int WSAStartup(WORD,LPWSADATA);
功能:初始化网络库
WORD:设置网络库版本
MAKEWORD(1,2) 第一个是主版本号,第二个是副版本号
LPWSADATA:WSADATA数据结构的指针,用来获取网络的相关信息

closesocket(sockfd);
功能:关闭
Int WSACleanup(void);
功能:卸载网络库
z注意:编译时加 –lws2_32 编译结果是a.out

你可能感兴趣的:(计算机的网络的知识点总结)