计算机网络知识
-
互联网的组成:html
- 边缘部分(全部链接的主机,用户能够直接的使用)
- 核心部分(由大量网络和链接网络的路由器组成,为边缘部分的主机提供服务)
-
三大交换方式:前端
- 电话交换:创建专用的物理链路,始终占用;简单粗暴,资源利用率不高,
- 报文交换:就是把整个报文完整的发送到链路中,在某个节点存储下来以后再发送到下一个节点。
- 分组交换:将一个长报文先分割为若干个较短的分组,而后把这些分组(携带源、目的地址和编号信息)逐个地发送出去。
-
时延=发送时延+传播时延+处理时延+排队时延。git
- 发送时延(传输时延):从开始发送数据帧,到数据帧发送完毕所需的所有时间。
- 传播时延:发送端开始发送数据到接收端收到数据所须要的所有时间。(电磁波在信通中的时间)
-
七层协议:应用层-表现层-会话层-传输层-网络层-数据链路层-物理层github
- 应用层:各类应用程序协议:HTTP、FTP
- 表现层:信息的语法语义以及他们的关联,:加密解密,转换翻译,解压缩。
- 会话层:不一样机器上的用户之间创建及管理会话。
- 传输层:提供的是进程间的通用数据传输服务端到端的链接。(TCP、UDP)
- 网络层:为主机间提供服务,网络层把运输层产生的报文段或者用户数据报封装成分组来进行传输。(路由器)
- 数据链路层:为相邻结点之间提供服务,数据链路层把网络层传来的分组封装成帧。(网桥)
- 物理层:考虑的是怎么在传输媒体上传输数据比特流,尽量的屏蔽传输媒体和通讯手段的差别。(中继器。)
数据在各层之间的传递过程:在向下的过程当中,须要添加下层协议所需的各类首部或者尾部,而在向上的过程当中不断地拆分首部和尾部,路由器只有三层协议,由于路由器位于网络的核心中,不须要为进程或者应用程序提供服务,所以也就不须要运输层和应用层。web
-
OSI模型:算法
-
TCP/IP 分为四层数据库
-
复用技术:跨域
- 频分复用:在相同的时间占用不一样的频率带宽资源。
- 时分复用:在不一样的时间占用相同的频率带宽资源。
-
交换机与路由器的区别:浏览器
- 交换机工做于数据链路层,能识别MAC地址,根据MAC地址转发链路层数据帧。具备自学机制来维护IP地址与MAC地址的映射。
- 路由器位于网络层,能识别IP地址而且根据IP地址转发分组。维护路由表,根据路由表选择最佳的路线。
-
路由器分组转发的流程:缓存
- 首先从数据报的首部提取目的主机的IP地址D,获得目的网络地址N。若是N与此路由器之间相连的某个网络地址,则直接交付。
- 若路由表有目的地址为D的特定主机路由,则把数据报直接传送给表中所指明的下一跳路由器。
- 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器。
- 如路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由。报告转发分组出错
-
UDP和TCP的特色:
- UDP:是无链接的,尽最大的可能交付,没有拥塞控制,面向报文,支持一对1、一对多、多对1、多对多。
- TCP是面向链接的,提供可靠交付,有流量的控制、拥塞控制,提供全双工通讯,面向字节流。须要维护链接状态,报文头里面的确认序号,累计确认以及超时重传机制保证不丢包,不重复,按序到达。一对一
-
UDP和TCP首部格式
-
UDP首部格式:
- 只有八个字节,包括源端口,目的端口,长度,检验和
- 12字节的伪首部是为了计算检验而临时添加的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MKdzgnKc-1583117494913)(https://raw.githubusercontent.com/iszhonghu/Picture-bed/master/img/20200302102355.png)]
-
TCP首部格式:
- 序号:对于字节流进行编号。
- 确认号:指望收到的下一个报文段的序号。例如序号为 301,表示第一个字节的编号为 301,若是携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
- 数据偏移:指数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
- 确认ACK:当ACK=1时确认号字段有效,不然无效,TCP规定,在链接创建后全部传送的报文段都必须把ACK置1.
- 同步SYN:在链接创建时,用来同步序号,当SYN=1,ACK=0表示这是一个链接请求报文段。若对方赞成创建链接,则相应报文中SYN=1,ACK=1。
- 终止FIN:用来释放一个链接,当FIN=1时表示此报文段的发送方的数据已发送完毕,并要求释放运输链接。
- 窗口:窗口值做为接收方让发送方设置其发送窗口的依据,之因此要有这个限制是由于接收方的数据缓存空间是有限的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBDrGxll-1583117494915)(https://raw.githubusercontent.com/iszhonghu/Picture-bed/master/img/20200302102408.png)]
-
TCP的三次握手:采用请求——应答——应答之应答
- 首先服务器端处于监听状态,等待客户的链接请求。
- 而后客户端发送链接请求的报文段SYN=1,ACK=0.选择一个初始的序号x(随时间变化)。
- 服务器端收到链接请求报文段,若是赞成创建创建,则向A发送链接确认报文段其中SYN=1,ACK=1,确认号为x+1,同时也选择一个初始的序号y。
- 客户端收到服务器端的链接确认报文后,还要向服务器发送确认,确认号为y+1,序号为x+一、
- 服务器端收到客户端的确认后链接创建。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAffhaav-1583117494915)(https://raw.githubusercontent.com/iszhonghu/Picture-bed/master/img/20200302102013.png)]
-
TCP的四次挥手:
- 客户端发送链接释放报文段,FIN=1;
- 服务器端收到之后发送确认,此时TCP处于半关闭的状态,服务器端能向客户端发送数据,可是客户端不能像服务器端发送数据。
- 当服务器端不在须要链接的时候,发送链接释放请求报文段FIN=1.
- 客户端收到发送确认,此时链接释放。
- TIME_WAIT:客户端收到服务器端的FIN报文后进入此状态,此时并非直接进入CLOSED状态,还须要等待一个时间计时器设置的时间,为了确保最后一个确认报文段可以到达。可能存在已失效的链接请求报文段,为了防止这种报文段出如今本次链接意外,须要等待一段时间。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7oiYQmDy-1583117494915)(https://raw.githubusercontent.com/iszhonghu/Picture-bed/master/img/20200302102043.png)]
-
TCP滑动窗口:窗口是缓存的一部分,用来暂存字节流,发送方和接受方各有一个窗口,接收方经过TCP报文段中的窗口字段告诉发送方本身的窗口大小,发送方根据这个值和其余信息设置本身的窗口大小。
-
TCP拥塞控制:
-
TCP粘包:发送方发送的多个数据包,到接收方缓冲区收尾相连,粘成一个包,被接收
- 缘由:TCP 协议默认使用 Nagle 算法可能会把多个数据包一次发送到接收方。读取速度小于接收速度,缓存中的多个数据包会被应用程序当成一个包一次读取。
- 处理方式:
- 发送方使用 TCP_NODELAY 选项来关闭 Nagle 算法;
- 数据包增长开始符和结束,应用程序读取、区分数据包
- 在数据包的头部定义整个数据包的长度,应用程序先读取数据包的长度,而后读取整个长度的包字节数据,保证读取的是单个包且完整。
-
域名系统DNS:它做为将域名和IP地址相互映射的一个分布式数据库。
-
解析过程:
- 主机将本地域名服务器解析过程采用递归
- 本地域名服务器向其余域名服务器解析可使用递归和迭代两种发放。
- 迭代的方式下,本地域名服务器向一个域名服务器解析请求解析之后,结果返回本地域名服务器,而后本地域名服务器继续向其余域名服务器请求解析。
- 在递归下,结果不是直接返回而是继续向前请求解析,最后的结果才会返回。
-
文件传输协议FTP:FTP在运输层使用TCP,而且须要创建两个并行的TCP链接:控制链接和数据链接。控制链接在整个会话期间一直保持打开,而数据链接在数据传送完毕之后就关闭。控制链接使用端口号21,数据链接使用端口号20。
-
WEB页面请求过程:
- 向DNS服务器发送DNS查询报文来解析域名。
- 开始进行HTTP会话,须要先创建TCP链接。
- 在运输层的传输过程当中,HTTP报文被封装进TCP中。HTTP请求报文使用端口号80,由于服务器监听的是80端口。链接创建之后,服务器会随机分配一个端口号给特定的客户端,之后的TCO传输都是使用这个端口号。
- 在网络层的传输过程当中,TCP报文段会被封装进IP分组中,IP分组通过路由选择,最后到底目的地。
- 在链路层,IP分组会被封装进MAC帧中,IP地址解析成MAC地址须要使用ARP。
- 客户端发送HTTP请求报文,请求获取页面。
- 服务器发送HTTP相应的报文,客户端从而获取该页面。
- 浏览器获得页面内容之后,解析并渲染,向用户展现页面。
-
网络系统:
- LAN:局域网
- MAN:城域网
- WAN:广域网
- 无线局域网:有固定基础设施的和无固定基础设施(自组网络)的。其中自动自组网络和移动IP并不相同。
-
MAC地址是12位16进制的。
- 127.0.0.1是送回地址,指本机通常用于测试。
- 192.168.0.1属于IP地址的C类地址,属于保留IP专门用于路由器设置。
- 10.0.0.1是内部地址,与172.15..-172.31.. 192.168.*.*同样,内部网用的地址,不会出如今公网Internet上;
-
当一个主机请求查询域名时,先查本地缓存;没有缓存时请求本地域名服务器;本地域名服务器没有请求根域名服务器。
-
以太网的MAC协议提供的是无链接不可靠的服务。
-
数据通讯中:单工通讯,半双工通讯,全双工通讯。
-
ICMP协议是IP协议:a.差错报告报文;b.ICMP询问报文。
-
HTTP的基础是TCP/IP。
- X.25:分组交换网。
- IPX/SPX:全称顺序包交换协议的组合,它是Novell公司为了适应网络的发展而开发的通讯协议,具备很强的适应性,安装方便,同时还具备路由功能,能够实现多网段间的通讯。其中,IPX协议负责数据包的传送;SPX负责数据包传输的完整性。
-
SNMP 简单网络管理协议。该协议能支持网络管理系统,用于监测链接到网络上的设备是否有任何引发管理者关注的状况。
FTP 文件传输协议,用于Internet上的控制文件的双向传输。
ICMP Internet控制报文协议。用于IP主机、路由器之间传递控制消息。
SMTP 是简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,帮助每台计算机在发送或中转信件时找到下一个目的地。是TCP协议支持的应用协议。
通常地,邮件客户端只能用SMTP发送邮件,接收邮件通常采用IMAP或者POP3。
-
交换机有五种攻击类型:vlan跳跃攻击;生成树攻击;MAC表洪水攻击;arp攻击;vtp攻击。
-
局域网拓扑结构通常有三种:星形,总线形,环形。
A类网络的IP地址范围为:1.0.0.1-126.255.255.254;
B类网络的IP地址范围为:128.1.0.1-191.255.255.254;
C类网络的IP地址范围为:192.0.1.1-223.255.255.254
-
IP地址中的网络号:指定了主机所属的网络。
-
路由协议的选择:首先路由选择协议都是自适应的,通常分为两类
内部网关协议IGP在自治系统内部使用,如RIP和OSPF。
外部网关协议EGP在自治系统之间使用,如BGP。
内部网关协议RIP:是一种分布式的基于距离向量的路由选择协议。距离是指跳书。RIP按固定的时间间隔仅和相邻的路由器交换本身的路由表,通过若干次交换之后,全部路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。实现简单,开销小,可是最大距离15限制了网络的规模。而且当网络出现估值的时候须要较长的时间才能将消息传递到全部的路由器。
内部网关协议OSPF:最短路径优先OSPF,是为了克服RIP缺点而开发出来的。是只用了最短路径算法SPF,具备如下的特色,向本自治系统中的全部路由器发送信息,发送的信息及时与相邻路由器的链路状态,链路状态包括与那些路由器相连以及链路度量,度量用的费用,距离,时延,带宽来表示。只有当链路状态发生变化的时候,路由器才会发送信息。
外部网关协议BGP:BGP只能寻找一条比较好的路由可是不必定是最佳路由,它采用路径向量路由选择协议,每个AS都必须配置BGS发言人,经过在两个相邻BGP发言人之间创建TCO链接来交换路由信息
-
浏览器输入URL按下回车发送了什么:
- 浏览器查找域名的IP地址:
- 查找浏览器缓存:DNS记录
- 查找系统缓存:hosts文件
- 查找路由器缓存:DNS缓存
- 递归查询
- 迭代查询
- 浏览器与目标服务器创建TCP链接
- 经过DNS解析找到IP地址创建TCP链接
- 三次握手
- 浏览器经过http协议发送请求
- 浏览器向主机发送一个HTTP—GET方法报文请求。
- 某些服务器会作永久重定向响应
- 重定向的做用:为了负载均衡或者导入流量,提升SEO排名,利用一个前端服务器接受请求,而后负载到不一样的主机上,能够大大提升站点的业务并发处理能力;重定向也可将多个域名的访问,集中到一个站点;
- 浏览器跟踪重定向地址
- 服务器处理请求
- 服务器发送一个HTML响应
- 释放TCP链接
- 浏览器显示页面
- 浏览器发送获取嵌入在HTML中的其余内容
-
jsp和servlet区别:Servlet适合动态输出Web数据和业务逻辑处理,对于html页面内容的修改很是不方便;JSP是在Html代码中嵌入Java代码,适合页面的显示。内置对象不一样,获取内置对象的方式不一样。
- Servlet
- 一种服务器端的Java应用程序,是接收网络服务的请求和产生响应的一种方式。
- 由Web容器加载和管理
- 用于生成动态Web内容
- 接受 http 请求,产生动态 http 响应。Web容器负责将 HTTP 请求转换为 HttpServletRequest 对象
- Jsp
- 是Servlet的扩展,本质上仍是Servlet
- 每个Jsp页面就是一个Servlet实例
- Jsp页面会被Web容器编译成Servlet,Servlet再负责响应用户请求
-
JSP内置对象
|
内置对象 |
做用 |
1 |
request |
客户端的请求信息:Http协议头信息、Cookie、请求参数 |
2 |
response |
用于服务器响应客户端请求、返回信息 |
3 |
pageContext |
页面的上下文 |
4 |
session |
客户端与服务端之间的会话 |
5 |
application |
用于获取服务端应用生命周期的信息 |
6 |
out |
用于服务器传输内容到客户端的输出流 |
7 |
config |
初始化时,Jsp引擎向Jap页面传递的信息 |
8 |
page |
指向Jsp页面自己 |
9 |
exception |
页面发送异常,产生的异常对象 |
-
JSP的做用域
做用域 |
名称 |
描述 |
page |
当前页面做用域 |
至关于Java关键字中this。在这个做用域中存放的属性值,只能在当前页面中取出,一个页面相关的对象和属性 |
request |
请求做用域 |
范围是从请求建立到请求消亡这段时间,一个请求能够涉及的多个页面。jsp:forward和jsp:include跳转到其余页面,也在做用域范围。 |
session |
会话做用域 |
范围是一段客户端和服务端持续链接的时间,用户在会话有效期内屡次请求所涉及的页面。seesion会话器,服务端为第一次创建链接的客户端分配一段有效期内的属性内存空间。 |
application |
全局做用域 |
范围是服务端Web应用启动到中止,整个Web应用中全部请求所涉及的页面。当服务器开启时,会建立一个公共内存区域,任何客户端均可以在这个公共内存区域存取值。 |
-
session和cookie区别(肯定会话中的身份):
- session:在服务器端记录信息,保存的数据大小取决于服务器的程序设计。能够被服务器的程序处理为key-value类型的如何对象;存在服务器端,安全性高。量用户会话服务器端保存大量 session 对服务器资源消耗较大。
- cookie:在浏览器端记录信息,保存数据大小不超过4kb,大多数浏览器显示一个站点最多20个cookie;存在浏览器里的一端文本;可能被其余程序分析获取,安全性低。信息保存在 cookie 中缓解了服务器存储用信息的压力
- 生命周期:
- Expires:过时时间
- Max-Age用的是一段时间间隔,单位是秒,从浏览器收到报文开始计算
- 做用域:Domain和path, 给 Cookie 绑定了域名和路径,在发送请求以前,发现域名或者路径和这两个属性不匹配,那么就不会带上 Cookie。值得注意的是,对于路径来讲,
/
表示域名下的任意路径都容许使用 Cookie。
- 缺点:
- 容量过小
- 性能缺陷:请求都会带上Cookie,请求增多性能浪费,能够经过Domain和Path指定做用域来解决
- 安全缺陷:以纯文原本传递,有危险
通常实际使用中,都是把关键信息保存在 session 里,其余信息加密保存到cookie中。
-
forward和redirect的区别:
- 浏览器url地址显示不一样:服务端经过 forward 返回,浏览器 url 地址不会发生变化;服务器经过 redirect 返回,浏览器会从新请求, url 地址会发生变化
- 先后台二者页面跳转的处理方式不一样:forward 跳转页面,是服务端进行页面跳转加载(include)新页面,直接返回到浏览器;redirect 跳转页面,是服务端返回新的 url 地址,浏览器二次发出 url 请求
- 参数携带状况不同,forward 跳转页面,会携带请求的参数到新的页面;redirect 跳转页面,属于一次全新的 http 请求,没法携带上一次请求的参数
- http请求次数不一样:forward 1次;redirect 2次
-
HTTP报文结构
- 对于TCP来讲,在传输的时候分为两个部分:TCP头和数据部分
- HTTP相似,也是header+body的结构
* 起始行+头部+空行+实体
- 请求报文和响应报文有所不一样
- 起始行
- 请求报文
* 方法+路径+http版本 GET /home HTTP/1.1
- 响应报文(状态行)
- http版本+状态码+缘由 HTTP/1.1 200 OK
- 每两个部分之间用空格隔开,最后一个部分应该接一个换行
- 头部
* 字段众多,且牵扯到http不少特性
- 格式
* 字段名不区分大小写
* 字段名不容许出现空格,不能够出现下划线_
* 字段名后面必须紧接:
-
HTTP请求方法
- HTTP/1.0:支持GET、POST、HEAD三种HTTP请求方法。
- HTTP/1.1:该版本默认采用持久链接,并能很好地配合代理服务器工做。还支持以管道方式同时发送多个请求,以便下降线路负载,提升传输速度。新增了
- GET: 一般用来获取资源
- HEAD: 获取资源的元信息
- POST: 提交数据,即上传数据
- PUT: 修改数据
- DELETE: 删除资源(几乎用不到)
- CONNECT: 创建链接隧道,用于代理服务器
- OPTIONS: 列出可对资源实行的请求方法,用来跨域请求
- TRACE: 追踪请求-响应的传输路径
-
GET和POST区别
- GET: 一般用来获取资源
- HEAD: 获取资源的元信息
- POST: 提交数据,即上传数据
- PUT: 修改数据
- DELETE: 删除资源(几乎用不到)
- CONNECT: 创建链接隧道,用于代理服务器
- OPTIONS: 列出可对资源实行的请求方法,用来跨域请求
- TRACE: 追踪请求-响应的传输路径
-
URI的结构
- scheme 表示协议名,好比
http
, https
, file
等等。后面必须和://
连在一块儿。
- user:passwd@ 表示登陆主机时的用户信息,不过很不安全,不推荐使用,也不经常使用。
- host:port表示主机名和端口。
- path表示请求路径,标记资源所在位置。
- query表示查询参数,为
key=val
这种形式,多个键值对之间用&
隔开。
- fragment表示 URI 所定位的资源内的一个锚点,浏览器能够根据这个锚点跳转到对应的位置。
-
Http状态码
- 1xx: 表示目前是协议处理的中间状态,还须要后续操做。
- 101 Switching Protocols。在
HTTP
升级为WebSocket
的时候,若是服务器赞成变动,就会发送状态码 101。
- 2xx: 表示成功状态。
- 00 OK是见得最多的成功状态码。一般在响应体中放有数据。
- 204 No Content含义与 200 相同,但响应头后没有 body 数据。
- 206 Partial Content顾名思义,表示部份内容,它的使用场景为 HTTP 分块下载和断点续传,固然也会带上相应的响应头字段
Content-Range
。
- 3xx: 重定向状态,资源位置发生变更,须要从新请求。
- 301 Moved Permanently即永久重定向,存在缓存优化
- 302 Found,即临时重定向。
- 304 Not Modified: 当协商缓存命中时会返回这个状态码。
- 4xx: 请求报文有误。
- 400 Bad Request: 开发者常常看到一头雾水,只是笼统地提示了一下错误,并不知道哪里出错了。
- 403 Forbidden: 这实际上并非请求报文出错,而是服务器禁止访问,缘由有不少,好比法律禁止、信息敏感。
- 404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
- 405 Method Not Allowed: 请求方法不被服务器端容许。
- 406 Not Acceptable: 资源没法知足客户端的条件。
- 408 Request Timeout: 服务器等待了太长时间。
- 409 Conflict: 多个请求发生了冲突。
- 413 Request Entity Too Large: 请求体的数据过大。
- 414 Request-URI Too Long: 请求行里的 URI 太大。
- 429 Too Many Request: 客户端发送的请求过多。
- 431 Request Header Fields Too Large请求头的字段内容太大。
- 5xx: 服务器端发生错误。
- 500 Internal Server Error: 仅仅告诉你服务器出错了,出了啥错咱也不知道。
- 501 Not Implemented: 表示客户端请求的功能还不支持。
- 502 Bad Gateway: 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道。
- 503 Service Unavailable: 表示服务器当前很忙,暂时没法响应服务。
-
Http
- 介绍:超文本传输协议,是一个基于TCP/IP通讯协议来传递数据,默认端口号80
- 特色:
- 灵活可扩展
- 可靠传输
- 请求-应答:
- 无状态:状态指通讯过程的上下文信息,而每次http请求都是独立、无关的、默认不须要保留状态信息
- 缺点
- 无状态:
- 在须要长链接的场景中,须要保存大量的上下文信息,以避免传输大量重复信息
- 明文传输
- 协议里的报文(头部)不使用二进制数据,而是文本形式
- 队头阻塞问题
- 当http开启长链接时,公用一个TCP链接,同一队列只能处理一个请求。
-
Accept系列字段
-
对于定长和不定长的数据HTTP是怎么传输的
- 定长包体:
- 在传输的时候会带上Content-Length来指明包体的长度。太大会致使报错
- 不定长包体:
- 使用Thransfer-Encoding:chunked
-
HTTP大文件传输
- 采起了范围请求,运行客户端仅仅请求一个资源的一部分
- 前提是服务器要支持范围请求
- Range字段拆解
- 格式bytes=x-y
- 0-499:表示从开始到第499个字节
- 500-表示从第500个字节到文件终点
- -100表示文件的最后100个字节
- 服务器收到请求之后,首先验证范围是否合法,若是越界了那么返回416错误码,不然读取相应片断,返回206状态码
-
HTTP1.1如何处理队头阻塞
- 队头阻塞:收发报文的任务被放到一个队列中串行执行,一旦队首的请求处理太慢,就会阻塞后面请求的处理
- 解决
-
HTTP代理
- 功能
- 负载均衡:代理服务器拿到请求后根据算法(随机算法、轮询、一致性hash、LRU)来分发到不一样的服务器
- 保障安全:发现故障将其剔除、对于上下文数据进行过滤,对非法ID限流
- 缓存代理
- 头部字段
- Via:via中代理的顺序即为在HTTP传输中报文传达的顺序
- X-Forwarded-For:记录的是请求方的ip地址
- X-Real-IP:得到真实IP字段
-
Http: