网络1-28

Posted Jeff的技术栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络1-28相关的知识,希望对你有一定的参考价值。

1.TCP 的粘包和拆包

tcp:流失协议、可靠协议,socket套接字传输,tcp没有报头会出现粘包,udp自带报头
TCP是面向流,没有界限的一串数据。TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分,所以在业务上认为:
  1):一个完整的包可能会被 TCP 拆分成多个包进行发送
  2):也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题

2.为什么会产生粘包和拆包呢?解决方案?

1):要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包;
2):接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包;
3):要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包;
4):待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。即 TCP 报文长度 - TCP 头部长度 > MSS。

解决方案:
1):发送端将每个数据包封装为固定长度
2):在数据尾部增加特殊字符进行分割
3):将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小。

3.tcp与udp区别,udp优点,适用场景

TCP:类似打电话(有人接听,有人回复)
 1.不允许发空(没有报头)
 2.会粘包(没有报头)
 3.安全系数高(有三次握手)

UDP:类似发短信(只管往某个电话发短信,不管对方有没有看)
 1.允许发空(自带报头)
 2.不会粘包(自带报头)
 3.UDP支持并发
 4.UDP服务协议不安全(没有三次握手)
 5.UDP速度更快

使用场景:
  如果对实时性要求高和高速传输的场合下需要使用udp;
  如果需要传输大量数据且对可靠性要求高的情况下应该使用tcp;
  在可靠性要求较低,追求效率的情况下应该使用udp。

4.http能不能一次连接多次请求,不等后端返回

http本质上市使用socket连接,因此发送请求,接写入tcp缓冲,是可以多次进行的,这也是http是无状态的原因

1.http2.0支持多路复用,可以一次连接多次请求。目前http1.1是主流
2.想要一次连接多次请求可以使用:开启长链接,go中net/http可以开启Keep-Alive实现长链接

5.讲讲怎么理解网络编程

网络编程:网络通信数据,socket,tcp,udp

6.网络编程过程,建立一个socket连接步骤过程

tcp:

udp:

7.tcp协议过程

TCP协议又叫:流失协议、可靠协议

1.TCP协议像流水一样一直发送,一直接收

2.TCP协议可靠的原因:有反馈机制(发送一句,回复一句才会发送下一句)

洪水攻击:同一时间发送给服务器大量请求

8.TCP 有哪些状态?

CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。
LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
SYN_RCVD :表示服务器接收到了来自客户端请求连接的SYN报文。
SYN_SENT :这个状态与SYN_RCVD 状态相呼应
ESTABLISHED :表示TCP连接已经成功建立。
FIN_WAIT_1:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。
FIN_WAIT_2 :而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。
TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。
CLOSING: CLOSING状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文.比较罕见的例外状态
CLOSE_WAIT :表示正在等待关闭。
LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。

9.TCP 的 LISTEN 状态是什么?

LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

10.TCP 的 CLOSE_WAIT 状态是什么?

CLOSE_WAIT :表示正在等待关闭。

11.TCP的TIME_WAIT状态存在的理由

主动发送fin关闭的一方,在4次挥手最后一次要等待一段时间我们称这段时间为2MSL
TIME_WAIT状态的存在有两个理由:
1.让4次挥手关闭流程更加可靠
2.防止丢包后对后续新建的正常连接的传输造成破坏

12.协程,线程,进程的区别

进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。

线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

13.并发编程概念是什么?

并行是指两个或者多个事件在同一时刻发生;并发是指两个或多个事件在同一时间间隔发生。

并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。而并行是真正意义上的“同时执行”。

并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

14.负载均衡原理是什么?

负载均衡Load Balance)是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。负载均衡,其核心就是网络流量分发,分很多维度。

负载均衡(Load Balance)通常是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

负载均衡是建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

15.说一下同步和异步,阻塞和非阻塞的区别?

同步与异步是对应的,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。

阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。

阻塞是使用同步机制的结果,非阻塞则是使用异步机制的结果。

16.HTTP1.0,HTTP1.1,HTTP2.0的主要特征对比

HTTP1.0:无状态、无连接

HTTP1.1:
  1.字符串传输
  2.持久连接,支持长链接
  3.请求管道化
  4.增加缓存处理
  5.增加Host字段、支持断点传输等

HTTP2.0:
  1.二进制传输
  2.支持服务器主动推送
  3.头部压缩
  4.支持多路复用,连接共享

HTTP1.1和HTTP2.0区别:

1.二进制协议 HTTP/1.1的头信息是文本格式,数据体可以是文本,也可以是二进制。HTTP/2的头信息和数据体均为二进制,并且统称为“帧(frame)“:头信息帧和数据帧。

2.头信息压缩 HTTP是无状态协议,每次请求都要带上头信息,请求的很多字段都是重复的,会浪费很多带宽。HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用gzip或compress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

3.多路复用 即在一个连接里,客户端可以同时发送多个请求,服务器可以同时发送多个响应,而且不用按照顺序一一对应,这样就避免了“队头阻塞”。举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。

4.数据流 HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧),取消这个数据流。1.1版取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。

5.服务器推送 常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发给客户端了。

17.常见的 HTTP 状态码有哪些?

用数字来表示一大堆提示信息
  1XX:服务端已经成功接收到客户端的数据正在处理  你可以继续提交
  2XX:200请求成功 服务端已经返回了你想要的数据
  3XX:重定向(原本想访问A但是内部自动给你转到了B上面)
  4XX:404请求资源不存在,403你当前不具备请求该资源的条件
  5XX:500服务端内部错误 机房卓火了 宕机  爆炸了
  
100:客户端继续发送请求,这是临时响应
101:服务器根据客户端的请求切换协议,主要用于websocket或http2升级

200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回
201(已创建):请求成功并且服务器创建了新的资源
202(已创建):服务器已经接收请求,但尚未处理
203(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源
204(无内容):服务器成功处理请求,但没有返回任何内容
205(重置内容):服务器成功处理请求,但没有返回任何内容
206(部分内容):服务器成功处理了部分请求

300(多种选择):针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择
301(永久重定向):请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
302(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
303(查看其他位置):请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码
305(使用代理):请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理
307(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

302与307区别:
301,302和303的处理结果是一样的,直接跳转到web页面
307的会重新post请求到web页面,并且给出页面提示

400(错误请求):服务器不理解请求的语法
401(未授权):请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403(禁止):服务器拒绝请求,身份验证不通过
404(未找到):服务器找不到请求的网页
405(方法禁用):禁用请求中指定的方法
406(不接受):无法使用请求的内容特性响应请求的网页
407(需要代理授权):此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理
408(请求超时):服务器等候请求时发生超时

500(服务器内部错误):服务器遇到错误,无法完成请求
501(尚未实施):服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码
502(错误网关):服务器作为网关或代理,从上游服务器收到无效响应
503(服务不可用):服务器目前无法使用(由于超载或停机维护)
504(网关超时):服务器作为网关或代理,但是没有及时从上游服务器收到请求
505(HTTP 版本不受支持):服务器不支持请求中所用的 HTTP 协议版本

18.301和302有什么区别?

301(永久重定向):请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
302(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

19.504和500有什么区别?

500(服务器内部错误):服务器遇到错误,无法完成请求
504(网关超时):服务器作为网关或代理,但是没有及时从上游服务器收到请求

20.HTTPS 和 HTTP 有什么区别?

  HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安
全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于
对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协
议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:
  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、
身份认证的网络协议,比http协议安全

21.说一下HTTP协议以及协议头部中表示数据类型的字段?

请求报文的组成:
	请求行	信息头	请求头	实体头	报文主体
响应报文的组成:
	状态行	信息头	响应头	实体头	报文主体

22.简述OSI七层协议

应用层:HTTP,FTP,NFS

表示层:Telnet,SNMP

会话层:SMTP,DNS

传输层:TCP,UDP

网络层:IP,ICMP,ARP,

数据链路层:Ethernet,PPP,PDN,SLIP,FDDI

物理层:IEEE 802.1A,IEEE 802.11

23.什么是C/S和B/S架构?

软件系统体系结构:
C/S体系结构:client/server
指的是客户端/服务端    例如;QQ,微信

B(browser)/S体系结构:browser/server
指的是浏览器/服务端      例如12306(网站);购物网站,微信小程序


两者区别:
C/S :优点:交互性好,对服务器压力小,安全 ;缺点:服务器更新时需要同步更新客户端
B/S:优点:不需要更新客户端   缺点:交互性差,安全性低

24.什么是arp协议?

ARP协议,全称“Address Resolution Protocol”,中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。

25.什么是局域网和广域网?

两者范围不一样:
        局域网就是在固定的一个地理区域内由2台以上的电脑用网线和其他网络设备搭建而成的一个封闭的计算机组,范围在几千米以内;
        广域网是一种地域跨度非常大的网络集合,范围在几十公里到几千公里。

两者的IP地址设置不一样:
        局域网里面,必须在网络上有一个唯一的IP地址,这个IP地址是唯一的,在另外一个局域网,这个IP地址仍然能够使用。
        广域网上的每一台电脑(或其他网络设备)都有一个或多个广域网IP地址,而且不能重复。

26.什么是防火墙以及作用?

   在互联网上防火墙是一种非常有效的网络安全模型,通过它可以隔离风险区域(即Internet或有一定风险的网络)与安全区域(局域网)的连接,同时不会妨碍人们对风险区域的访问。所以它一般连接在核心交换机与外网之间。
    作用:
        1.过滤进出网络的数据 
        2.管理进出访问网络的行为 
        3.封堵某些禁止业务 
        4.记录通过防火墙信息内容和活动 
        5.对网络攻击检测和告警

27.select、poll、epoll模型的区别?

				I/O多路复用的本质就是用select/poll/epoll,去监听多个socket对象,如果其中的socket对象有变化,只要有变化,用户进程就知道了。

        select是不断轮询去监听的socket,socket个数有限制,一般为1024个;

        poll还是采用轮询方式监听,只不过没有个数限制;

        epoll并不是采用轮询方式去监听了,而是当socket有变化时通过回调的方式主动告知用户进程。

28.用浏览器访问www.baidu.com的过程

1.浏览器敲www.baidu.com,向DNSf服务器发出域名解析请求
2.DNS服务器将"www.baidu.com"域名解析为对应的IP地址,并返回给浏览器;
3.浏览器带着ip访问百度服务器进行三次握手,建立TCP连接;
4.浏览器发出HTTP请求报文;
5.ingress nginx service均衡,域名转发到集群内部对应的网关服务
6.网关转到对应的服务
7.服务器回复HTTP响应报文;
8.浏览器解析响应报文,渲染HTML内容,并显示在页面上;
9.收发报文结束,释放TCP连接,执行四次挥手。

以上是关于网络1-28的主要内容,如果未能解决你的问题,请参考以下文章

MNIST数据集上卷积神经网络的简单实现(使用PyTorch)

人工智能深度学习:如何实现CNN变体网络?

matlab 神经网络 ANN 分类

卷积层的算力评估(MACC和FOPS)

[转]关于网络通信,byte[]和String的转换问题

LeNet-5——CNN经典网络模型详解(pytorch实现)