目录
1、优点 传输安全性,可靠,通过严格的报文格式和传输方式进行控制
2、缺点 传输效率慢,实时性差,只能进行一对一方式的传输,并且实现方式困难,对资源的要求高
一、无线传输方式
1、视频基带传输;2、光纤传输;3、网络传输 4、微波传输;5、双绞线传输;6、宽频共缆传输;7、无线SmartAir传输
简单回答: 网络、蓝牙、红外等
二、网络编程VS进程通信
进程间通信解决的是本机内通信,网络通信解决的是任意不同机器通信,进程间通信方式有信号、管道、消息队列、共享内存、信号量,而网络编程的通信方式是套接字
三、怎么才能实现网络通信,需要那些支持
不同通信机器使用相同的通信协议,用通信设备(硬件)提供信号传输和转换最终实现通信。
1、通信设备
网卡 (PC机自带) 路由器,交换机 光纤、电缆、基站
网络通信中各设备的作用_Return_YJ的博客-优快云博客_通信设备的作用
2、 通信协议
嵌入式开发中,移植操作系统都自带协议栈,只有裸机开发需要独立的协议栈,简单网络通信只需要学会使用系统API
四、什么是通信协议,有什么作用
通信协议是指双方实体完成通信或服务所必须遵循的规则和约定, 通信协议用于实现计算机与网络连接之间的标准,相当于通信双方设备进行通信时的语言,通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,使其能协同工作实现信息交换和资源共享。
五、window和Linux的网络协议模型和作用
1、Windows七层网络模型
1、物理层:物理连接,把电信号转成二进制信号
2、数据链路层:连接的校验,保证连接的正确性,可以通过mac地址进行连接
3、网络层:ip 路由
4、传输层:TCP UDP 定义端口
5、会话层:会话管理
6、表示层:数据压缩、加密等
7、应用层:http https 与用户交互,把信号给应用程序
OSI七层协议大白话解读_taotongning的博客-优快云博客_7层协议
2、 协议栈为什么要分层?
1.各层次之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口所提供的服务。这样,整个问题的复杂程度就下降了。也就是说上一层的工作如何进行并不影响下一层的工作,这样我们在进行每一层的工作设计时只要保证接口不变可以随意调整层内的工作方式。
2.灵活性好。当任何一层发生变化时,只要层间接口关系保持不变,则在这层以上或以下层均不受影响。当某一层出现技术革新或者某一层在工作中出现问题时不会连累到其它层的工作,排除问题时也只需要考虑这一层单独的问题即可。
3.结构上可分割开。各层都可以采用最合适的技术来实现。技术的发展往往不对称的,层次化的划分有效避免了木桶效应,不会因为某一方面技术的不完善而影响整体的工作效率。
4.易于实现和维护。这种结构使得实现和调试一个庞大又复杂的系统变得易于处理,因为整个的系统已经被分解为若干个相对独立的子系统。进行调试和维护时,可以对每一层进行单独的调试,避免了出现找不到、解决错问题的情况。
5.能促进标准化工作。因为每一层的功能及其所提供的服务都已有了精确的说明。标准化的好处就是可以随意替换其中的某一层,对于使用和科研来说十分方便。
六、 什么是IP地址VS mac地址
IP地址是指互联网协议地址,又译为网际协议地址,是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。mac是实际的物理地址,是出厂就已经固化在机器上的,一般情况下不能改变。
ip地址和mac地址的区别:
1、MAC地址是物理地址,IP地址是逻辑地址;
2、MAC地址具有唯一性,IP地址不具备唯一性;
3、二层基于MAC地址转发数据帧,三层基于IP地址转发报文。
七、公网ip和私网ip
1、公网ip(广域网通信)
a类 1.0.0.1~126.255.255.254
b类 128.0.0.1~191.255.255.254
c类 192.0.0.1~223.255.255.254
d类 224.0.0.1—239.255.255.254 组播,VRRP协议,keepalive高可用
e类 240.0.0.1—255.255.255.254 科研
2、私网ip(局域网通信)
A 10.0.0.0~10.255.255.255
B 172.16.0.0~172.31.255.255
C 192.168.0.0~192.168.255.255
八、子网掩码的作用
在设置电脑IP时,会碰到两个重要的参数,一个是IP地址,一个是子网掩码,二者是结合使用(IP与掩码地址进行与运算)。IP地址是互联网上每个子网或每个主机在网络上的唯一身份标签,是一个逻辑地址,而子网掩码是为了有序地区分和管理不同的子网,不同子网下的IP可以相同,这样可以节约IP地址。功能上可以认为子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。通过改变子网掩码的大小可以决定该网段的大小(可用ip的数量,减小子网掩码就会增加IP个数)。在同一个网段的ip地址,才能直接相互通信,不同网段的ip地址,需要路由器才能相互通信。
原文链接:https://blog.youkuaiyun.com/kongguguren/article/details/79427465
九、如何解决IP地址荒
1、问题提出
刚开始使用的是IPV4地址,IP个数为2的32次方,但不管地址个数为IP地址有多少,相对庞大的人口和使用机器的个数都是有限的,这样就会造成IP地址不够分配,也就是IP地址荒。
2、 如何解决IP地址荒?
1、 ipv4(32位)升级到ipv6(128位)
2、 NAT技术
如今使用的大多还是IPV4地址,而IP地址荒的解决用到了多种方法和技术的组合,首先是网络划分为公网和私网,通过子网掩码划分网段,通过NAT技术将内网ip转为公网ip
3、IPV4和IPV6的区别
1.IPv6的地址空间更大。IPv4中规定IP地址长度为32,即有2^32-1个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。夸张点说就是,如果IPV6被广泛应用以后,全世界的每一粒沙子都会有相对应的一个IP地址。
2.IPv6的路由表更小。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
3.IPv6的组播支持以及对流的支持增强。这使得网络上的多媒体应用有了长足发展的机会,为服务质量控制提供了良好的网络平台。
4.IPv6加入了对自动配置的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。
5.IPv6具有更高的安全性。在使用IPv6网络中,用户可以对网络层的数据进行加密并对IP报文进行校验,这极大地增强了网络安全。
十、NAT技术
NAT技术是指网络地址转换,将内网ip转为公网ip。NAT技术能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机
十一、什么是域名
因为IP地址是由网络层分配的,具有临时性,同时IP地址数字不容易记忆,域名是在此问题基础上,根据IP地址创造的另一套字符型的地址方案。IP地址和域名是一一对应的,这份的域名地址信息存放在域名服务器(DNS)的主机内,使用者只需了解易记的域名地址,其对应转换工作就留给了域名服务器。域名服务器工作时会把域名和IP地址进行相互转换。
这是一种分层的管理模式,域名用文字表达比用数字表示的IP地址容易记忆。加入因特网的各级网络依照域名服务器的命名规则对本网内的计算机命名,并在通信时负责完成域名到各IP地址的转换。由属于美国国防部的国防数据网络通信中心( DINNIO)负责因特网最高层域名的注册和管理,同时它还负责IP地址的分配工作。域名由两种基本类型组成:以机构性质命名的域和以国家地区代码命名的域。常见的以机构性质命名的域一般由三个字符组成。
十二、什么是端口号
IP和端口号组成了你的网络地址,IP就是一个电脑节点的网络物理地址(你在网络的那个地方,端口是该计算机逻辑通讯接口(在精确到要通信的应用)。客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,端口号的主要作用是表示一台计算机中的特定进程所提供的服务。
十三、TCP和UDP的区别
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,UDP(用户数据报协议)是一种不可靠的面向报文(每个数据报都是一个独立的信息)的传输协议,TCP协议传输时,要先进行多次连接和确认,在根据复杂的报文格式进行传输;UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,不需要重发,因为UDP不必进行收发数据的确认,而且资源消耗小,处理速度快,所以它的实时性更好,传输速率更高。
十四、TCP协议如何实现可靠传输
1、通过连续ARQ协议与发送-确认回复模式来保证每一个数据包都到达接收方
2、通过给字节编号的方法,来标记每一个数据是属于重传还是新的数据
3、通过超时重传的方式,来解决数据包在网络中丢失的问题
4、通过滑动窗口来实现流量控制
5、通过累积确认+选择确认的方法来提高确认回复与重传的效率
十五、TCP传输协议的优缺点
1、优点 传输安全性,可靠,通过严格的报文格式和传输方式进行控制
2、缺点 传输效率慢,实时性差,只能进行一对一方式的传输,并且实现方式困难,对资源的要求高
3、应用场景
TCP协议适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种连接概念的场景下。例如:TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等。
十六、UDP传输协议的优缺点
1、优点
1、 效率更快;不需要建立连接以及拥塞控制
2、连接更多的客户;没有连接状态,不需要为每个客户创建缓存等
3、分组首部字节少,开销小;TCP首部固定首部是20字节,而UDP只有8字节;更小的首部意味着更大比例的数据部分
2、缺点
1、无法保证消息完整、正确到达,UDP是一个不可靠的传输协议;
2、缺少拥塞控制容易互相竞争资源导致网络系统瘫痪
3、 应用场景
在一些需要高效率允许可限度误差的场景下可以使用。如直播场景,UDP并不是面向连接的,所以可以同时对多个进程进行发送报文,可以进行广播和组播。
十七、TCP流量控制
通过滑动窗口技术,发送方需要根据接收方的缓冲区大小,设置自己的可发送窗口大小,处于窗口内的数据表示可发送,之外的数据不可发送,当窗口内的数据接收到确认回复时,整个窗口会往前移动,直到发送完成所有的数据。
十八、TCP拥塞控制
在TCP报文传输中,两台主机在传输数据包的时候,如果发送方迟迟没有收到接收方反馈的ACK,那么发送方就会认为它发送的数据包丢失了,进而会重新传输这个丢失的数据包。造成网络更加拥挤,为避免网络过分拥挤导致丢包严重使网络效率降低,通信时要进行拥塞控制,TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
十九、 拥塞控制 VS 流量控制
流量控制是拥塞控制的手段,为了避免拥塞,必须对流量进行控制。拥塞控制目的是限制每个主机的发送的数据量,避免网络拥塞使网络效率下降,流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
问八:TCP 拥塞控制是什么?_向代码提问-优快云博客_什么是拥塞控制
二十、TCP协议的三次握手和四次挥手
1、三次握手
1、实现过程
机器A发送syn包向机器B请求建立TCP连接,并附加上自身的接收缓冲区信息等,机器A进入SYN_SEND状态,表示请求已经发送正在等待回复;机器B收到请求之后,根据机器A的信息记录下来,并创建自身的接收缓存区,向机器A发送syn+ack的合成包,同时自身进入SYN_RECV状态,表示已经准备好了,机器A收到回复之后记录机器B 的信息,发送ack信息,自身进入ESTABLISHED状态,表示已经完全准备好了,可以进行发送和接收机器B收到ACK数据之后,进入ESTABLISHED状态三次消息的发送,称为三次握手
2、存在的缺点
(1)拒绝服务攻击(DOS)通过各种技术手段导致目标系统进入拒绝服务状态的攻击
(2)分布式拒绝服务攻击(DDOS) 利用合理的请求造成资源过载,导致服务不可用,从而造成服务器拒绝正常流量服务
(3)SYN Flood攻击
2、 四次挥手
机器A发送完数据之后,向机器B请求断开连接,自身进入FIN_WAIT_1状态,表示数据发送完成且已经发送FIN包(FIN标志位为1);机器B收到FIN包之后,回复ack包表示已经收到,但此时机器B可能还有数据没发送完成,自身进入CLOSE_WAIT状态,表示对方已发送完成且请求关闭连接,自身发送完成之后可以关闭连接;机器B数据发送完成之后,发送FIN包给机器B ,自身进入LAST_ACK状态,表示等待一个ACK包即可关闭连接;机器A收到FIN包之后,知道机器B也发送完成了,回复一个ACK包,并进入TIME_WAIT状态机器A等待两个报文存活最大时长之后,机器B 接收到ACK报文之后,均关闭连接,进入CLASED状态
二十一、抓包工具Wireshark的作用
1、概念
Wireshark是一个网络数据包分析软件,可以拦截查看网络数据包内容。通过截取网络数据包,对数据通信过程中的所有lP报文实施捕获并进行逐层拆包分析,所以一直是传统固网数通维护工作中罐常用的故障排查工具。
2、工作原理:
我们的计算机通过向网络上传和从网络下载一些数据包来实现数据在网络中的传播。通常这些数据包会由发出或者接受的软件自行处理,普通用户并不过问,这些数据包一般也不会一直保存在用户的计算机上。抓包工具可以帮助我们将这些数据包保存下来,如果这些数据包是以明文形式进行传送或者我们能够知道其加密方法,那么我们就可以分析出这些数据包的内容以及它们的用途。目前抓包工具更多的用于网络安全,比如查找感染病毒的计算机。有时也用于获取网页的源代码,以及了解攻击者所用方法、追查攻击者的ip地址等。
二十二、什么是网络编程
网络传输是一种无线传输方式,为了实现这种传输不仅需要通信设备的支持,在软件编程方面编写程序进行对处理发送、接受方式进行处理,最终在程序中实现任意两台或多台计算机的通信这种编程就是网络编程。而通信方式是使用套接字进行通信。
二十三、TCP C/S服务器的实现
1、TCP服务器的实现过程
1、 创建套接字: socket函数
2、给套接字绑定ip地址和端口号:bind函数
3、将套接字文件描述符,从主动变为被动文件描述符(做监听准备):listen函数
4、被动监听客户的连接并响应:accept函数
5、 服务器调用read(recv)和write(send),收发数据,实现与客户的通信
6、调用close或者shutdown关闭TCP的连接
服务器server.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<signal.h>
#include<error.h>
#define PORT 5555
int sockfd;
void server_exit(int sig)
{
if(sig == SIGINT)
{
shutdown(sockfd,SHUT_RDWR);
printf("server exit!\n");
}
else if(sig == SIGINT)
{
shutdown(sockfd,SHUT_RDWR);
exit(1);
}
}
int main(int argc,char**argv)
{
if(argc != 2)
{
printf("Please input ip addr!\n");
exit(1);
}
signal(SIGPIPE,SIG_IGN);
signal(SIGINT, server_exit);
int cfd;
int r_n;
int w_n;
char message[1024];
socklen_t c_size;
struct sockaddr_in s_addr;
struct sockaddr_in c_addr;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0 )
{
perror("socket errror!\n");
exit(1);
}
printf("socketfd successfully!\n ");
int opt = 1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
s_addr.sin_family =AF_INET;
s_addr.sin_port = htons(PORT);
s_addr.sin_addr.s_addr = inet_addr(argv[1]);
if(bind(sockfd,(struct sockaddr*)&s_addr,sizeof(struct sockaddr_in)) != 0)
{
perror("bind error!");
exit(1);
}
printf("bind successfully\n");
if(listen(sockfd,20) != 0)
{
perror("listen error");
exit(1);
}
printf("listen successfully!\n");
while(1)
{
c_size = sizeof(struct sockaddr_in);
cfd = accept(sockfd,(struct sockaddr *)&c_addr,&c_size);
if(cfd < 0)
{
perror("accept error!\n");
exit(1);
}
printf("info client:ip = %s port = %d\n",inet_ntoa(c_addr.sin_addr),ntohs(c_addr.sin_port));
if((r_n = recv(cfd,message,sizeof(message)-1,0)) < 0)
{
perror("recv message error!\n");
exit(1);
}
if(0 == r_n)
{
printf("client is close!\n");
}
else
{
printf("client to msg:%s\n",message);
while(1)
{
memset(message,0,sizeof(message));
scanf("%s",message);
w_n = send(cfd,message,strlen(message),MSG_NOSIGNAL);
if(w_n < 0)
{
perror("send data error!");
shutdown(cfd,SHUT_RDWR);
}
printf("send to msg successfully! size = %d\n",w_n);
}
}
shutdown(cfd,SHUT_RDWR);
}
return 0;
}
2、TCP客户端的实现过程
1、用socket创建套接字文件,指定使用TCP协议
2、调用connect主动向服务器发起三次握手,进行连接
3、调用read(recv)和write(send)收发数据
4、调用close或者shutdown关闭连接
客户端cilent.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<error.h>
#include<signal.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
int main(int argc, char**argv)
{
if(argc != 3)
{
printf("PLease input server ip and port!\n");
exit(1);
}
int r_n;
int sockfd;
struct sockaddr_in s_addr;
char message[1024];
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
perror("socket error!");
exit(1);
}
printf("socket successfully!\n");
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(atoi(argv[2]));
s_addr.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sockfd,(struct sockaddr*)&s_addr,sizeof(struct sockaddr)) != 0 )
{
perror("connect error!");
exit(1);
}
memset(message,0,sizeof(message));
printf("Please input send to msg:\n");
scanf("%s",message);
if(write(sockfd,message,strlen(message)) < 0)
{
perror("write data error!");
exit(1);
}
memset(message,0,sizeof(message));
r_n = read(sockfd,message,sizeof(message));
if(r_n == 0)
{
printf("server is exit!\n");
exit(1);
}
else
{
message[r_n] = '\n';
printf("recv server msg:%s\n",message);
}
shutdown(sockfd,SHUT_RDWR);
return 0;
}
服务器和客户端运行结果
二十五、UDP C/S实现
1、概念(相当于两个客户端)
UDP协议没有建立连接特性,所以UDP协议没有自动记录对方IP和端口的特点,每次发送数据时,必须亲自指定对方的IP和端口,只有这样才能将数据发送给对方。
2、UDP通信过程
1、调用socket创建套接字文件
2、bind绑定固定的ip和端口
3、调用sendto和recvfrom函数,发送和接收数据
二十四、UDP的广播和组播
1、广播
一个人发,然后其它所有人都接收,这就是广播。广播只能在局域网内部有效,广播数据是无法越过路由器的,也就是说路由器就是广播数据的边界。实现方法:ip地址写成广播地址;例如:192.168.1.255;接收端的ip地址不能设置为固定ip,要指定为INADDR_ANY
2、组播
广播是给其他所有计算机广播数据,而组播只对其它所有计算机中的某部分计算机广播数据
二十五、C/S架构&B/S架构
C/S(Client-Server)架构——服务器-客户机。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
B/S(Brower/Server)架构——浏览器-客户端,是Web兴起后的一种网络结构模式。Web浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用;客户机上只需要安装一个浏览器,服务器上安装SQL Server, Oracle, MySql等数据库;浏览器通过Web Server同数据库进行数据交互。
B/S架构及其运行原理_mike_jun的博客-优快云博客_bs架构
二十六、服务器模型
1、 概念
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求, 对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:
a\循环服务器:服务器在同一个时刻只可以响应一个客户端的请求
b\并发服务器:服务器在同一个时刻可以响应多个客户端的请求
2、UDP循环服务器
每次从套接字上读取一个客户端的请求->处理->然后将结果返回给客户机。
3、TCP循环服务器
TCP服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接,TCP循环服务器一次只能处理一个客户端的请求。只有在这个客户的所有请求都满足后, 服务器才可以继续后面的请求。这样如果有一个客户端占住服务器不放时,其它的客户机都不能工作了,因此,TCP服务器一般很少用循环服务器模型的。
4、TCP并发服务器
并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理TCP并发服务器可以解决TCP循环服务器客户机独占服务器的情况。但同时也带来了问题:为了响应客户的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作。
5、多路复用I/O select poll epoll
B/S架构及其运行原理_mike_jun的博客-优快云博客_bs架构
网络通信中各设备的作用_Return_YJ的博客-优快云博客_通信设备的作用
网络编程面试题(2020最新版)_ThinkWon的博客-优快云博客_网络编程面试题
tcp协议和udp协议对⽐的优缺点 - T---bag - 博客园
并发服务器和循环服务器_bv1315008634的博客-优快云博客_循环服务器