不管作前端开发仍是后端开发,网络知识是必备的知识。这部分知识是基础中的基础,是咱们必须掌握的内容。网络相关的问题也是在面试过程当中常常被问到的内容。本文主要梳理了一下网络相关的主要知识点及面试中常常被问到的内容,但愿对你们有所帮助。前端
OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。其一共有7层: web
1. 应用层(数据):肯定进程之间通讯的性质以知足用户须要以及提供网络与用户应用
2. 表示层(数据):主要解决拥护信息的语法表示问题,如加密解密
3. 会话层(数据):提供包括访问验证和会话管理在内的创建和维护应用之间通讯的机制,如服务器验证用户登陆即是由会话层完成的
4. 运输层(段):实现网络不一样主机上用户进程之间的数据通讯,可靠
与不可靠的传输,传输层的错误检测,流量控制等
5. 网络层(包):提供逻辑地址(IP)、选路,数据从源端到目的端的
传输
6. 数据链路层(帧):将上层数据封装成帧,用MAC地址访问媒介,错误检测与修正
7. 物理层(比特流):设备之间比特流的传输,物理接口,电气特性等*
复制代码
TCP/IP分层模型(TCP/IP Layening Model)被称做因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。 面试
1. 应用层(TELNET、FTP、SMTP)
2. 运输层(TCP、UDP)
3. 网际层(IP、ICMP)
4. 网络接口层(PPP)*
复制代码
在广域网场景下,整个网络传输须要通过不少设备,包括网关、交换机、路由器等等, 算法
TCP是基于传输层的协议,协议文件可从RFC793获得,使用普遍,面向链接的可靠协议。它能把报文分解为数段,在目的站再从新装配这些段,支持从新发送未被收到的段,提供两台设备间的全双工链接,容许它们高效地交换大量数据。TCP使用滑动窗口协议来高效使用网络。因为TCP不多干预底层投递系统的工做,它适应各类投递系统,且提供流量控制,能使各类不一样速率的系统进行通讯。报文段是TCP所使用的基本传输单元,用于传输数据或控制信息。以下是TCP协议的报文格式: 编程
IP是Internet最基本的协议。IP是面向报文的协议,它独立处理每一个报文包,每一个报文包必须含有完整的寻址信息。IP报文包的格式如图所示: 后端
关于TCP/IP的内容,请参考本号以前的文章《从socket到TCP协议,透彻理解网络编程》。浏览器
用于在IP主机、路由器之间传递控制消息 缓存
IP地址的类型共有4种(如图3所示):A类用于处理超大型网络,最多16387064个主机(1~126);B类网络最多可有64516个主机(网络地址的第一段为128~191);C类用于小型网络,最多可有254个主机(网络地址的第一段为192~223);D类用于多点播送,用于多目的信息的传输。全零(“0.0.0.0”)地址对应于当前主机,全1地址(“255.255.255.255”)是当前子网的广播地址。安全
1. A类地址:首位为0,1.0.0.1~~126.255.255.254;主机号24位
2. B类地址:首位为10,128.0.0.1~~191.255.255.254;主机号16位
3. C类地址:首位为110,192.0.0.1~~223.255.255.254;主机号8位
4. D类地址(多播地址,也叫作组播地址):首位为1110,224.0.0.1~~239.255.255.254
5. E类地址:此类地址是保留地址,首位为11110,240.0.0.1~~254.255.255.254
复制代码
1. TCP面向链接,UDP面向无连接
2. TCP面向报文,UDP面向字节流
3. TCP提供可靠传输服务(数据顺序、正确性),UDP传输不可靠
4. TCP协议传输速度慢,UDP协议传输速度快
5. TCP协议对系统资源要求多(头部开销大),UDP协议要求少*
复制代码
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无链接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。 服务器
1. 流量控制
2. 让发送方的发送速率不要太快,要让接收方来得及接收
3. 窗口大小是一个能够改变的值,它由接收端主机控制,附加在 TCP 首部的“窗口大小”字段中
4. 拥塞控制
5. 防止过多的数据注入到网络中,这样可使网络中的路由器或链路不致过载
6. 拥塞控制方法:慢开始、拥塞避免、快重传和快恢复* ### 三次握手,四次断开过程
复制代码
1. LISTEN - 侦听来自远方TCP端口的链接请求;
2. SYN-SENT -在发送链接请求后等待匹配的链接请求;
3. SYN-RECEIVED - 在收到和发送一个链接请求后等待对链接请求的确认;
4. ESTABLISHED- 表明一个打开的链接,数据能够传送给用户;
5. FIN-WAIT-1 - 等待远程TCP的链接中断请求,或先前的链接中断请求的确认;
6. FIN-WAIT-2 - 从远程TCP等待链接中断请求;
7. CLOSE-WAIT - 等待从本地用户发来的链接中断请求;
8. CLOSING -等待远程TCP对链接中断的确认;
9. LAST-ACK - 等待原来发向远程TCP的链接中断请求的确认;
10. TIME-WAIT -等待足够的时间以确保远程TCP接收到链接中断请求的确认;
11. CLOSED - 没有任何链接状态;*
复制代码
拥塞算法:
慢启动(Slow Start)发送方维护拥塞窗口变量cwnd,先用小数据试探网络拥塞,没问题后来断加倍 拥塞避免(Congestion voidance):拥塞窗口缓慢增加,即每通过一个往返时间RTT就把发送方的拥塞窗口cwnd加1 重传机制 快速重传(Fast Retransmit):快重传要求接收方收到失序报文段后当即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到本身发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当当即重传对方还没有收到的报文段,而没必要继续等待设置的重传计时器时间到期。 快速恢复(Fast Recovery):当发送方连续收到三个重复确认时,就把慢开始门限ssthresh门限减半。接下来将cwnd设置为ssthresh的大小,而后执行拥塞避免算法
拥塞控制:对网络中的路由和链路传输进行速度限制,避免网络过载;包含四个过程:慢启动、拥塞避免、快重传和快恢复。 流量控制 :对点和点/发送方和接收方之间进行速度匹配,因为接收方的应用程序读取速度不必定很迅速,加上缓存有限,所以须要避免发送速度过快。
三次握手:防止已过时的链接请求报文忽然又传送到服务器,于是产生错误 四次挥手:确保数据可以完成传输,但关闭链接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你全部的数据都所有发送给对方了,因此你能够未必会立刻会关闭SOCKET,也即你可能还须要发送一些数据给对方以后,再发送FIN报文给对方来表示你赞成如今能够关闭链接了,因此它这里的ACK报文和FIN报文多数状况下都是分开发送的*
数据包校验:目的是检测数据在传输过程当中的任何变化,若校验出包有错,则丢弃报文段而且不给出响应,这时TCP发送数据端超时后会重发数据; 对失序数据包重排序:既然TCP报文段做为IP数据报来传输,而IP数据报的到达可能会失序,所以TCP报文段的到达也可能会失序。TCP将对失序数据进行从新排序,而后才交给应用层; 丢弃重复数据:对于重复数据,可以丢弃重复数据; 应答机制:当TCP收到发自TCP链接另外一端的数据,它将发送一个确认。这个确认不是当即发送,一般将推迟几分之一秒; 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段; 流量控制:TCP链接的每一方都有固定大小的缓冲空间。TCP的接收端只容许另外一端发送接收端缓冲区所能接纳的数据,这能够防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
HTTP请求
HTTP响应
通常用于获取/查询资源信息;GET参数经过URL传递,传递的参数是有长度限制,不能用来传递敏感信息。 当客户端给服务器提供信息较多时可使用POST;POST会附带用户数据,通常用于更新资源信息;POST将请求参数封装在HTTP 请求数据中,能够传输大量数据,传参方式比GET更安全。
TCP/IP表明传输控制协议/网际协议,指的是一系列协组
HTTP自己就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议
Socket是TCP/IP网络的API其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议
综上所述:须要IP协议来链接网络;TCP是一种容许咱们安全传输数据的机制,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。HTTP基于TCP协议,可是却可使用socket去创建一个TCP链接
cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,能够用来在某个WEB站点会话间持久的保持数据 session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session实际上是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上建立了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过时了 cookie数据保存在客户端,session数据保存在服务器端*
1. DNS解析(经过访问的域名找出其IP地址,递归搜索)
2. HTTP请求,当输入一个请求时,创建一个Socket链接发起TCP的3次握手
3. 若是是HTTPS请求创建链接后,则看Q26
4. 客户端向服务器发送请求命令(通常是GET或POST请求)
5. 客户端发送请求头信息
6. 服务器发送应答头信息
7. 服务器向客户端发送数据
8. 服务器关闭TCP链接(4次挥手)
9. 客户端根据返回的HTML,CSS,JS进行渲染
复制代码
1. HTTPS须要用到CA申请证书
2. HTTP是超文本传输协议,信息是明文的;HTTPS则是具备安全性的SSL加密传输协议
3. HTTP是80,HTTPS是443
4. HTTP的链接很简单,是无状态的,HTTPS是HTTP+SSL协议构建的,可进行加密传输、身份认证的网络协议,比HTTP协议安全*
复制代码
1. 加密方法:
* 对称加密(加密和解密使用相同的密钥的加密算法) :DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC四、IDEA
* 非对称加密(非对称加密算法有两个密钥:公开密钥(public key)和私有密钥(private key);而且加密密钥和解密密钥是成对出现的):RSA、DSA/DSS
* 不可逆加密:数字摘要是采用单项Hash函数将须要加密的明文"摘要"成一串固定长度(128位)的密文,“数字摘要”是https能确保数据完整性和防篡改的根本缘由。经常使用的摘要主要有MD五、SHA一、SHA256等。
2. 数字签名:
数字签名技术就是对"非对称"和"数字摘要"两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一块儿传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,而后用HASH函数对收到的缘由产生一个摘要信息,与解密的摘要信息对比。若是相同,则说明收到的信息是完整的,在传输的过程当中没有被修改,不然说明信息被修改过,所以数字签名可以验证信息的完整性。明文——>hash运算——>摘要——>私钥加密——>数字签名
3. 数字证书
复制代码
1. 客户使用https的URL访问Web服务器,要求与Web服务器创建SSL链接(通知可加密的算法)。
2. Web服务器收到客户端请求后,会将网站的电子证书(证书中包含公钥)传送一份给客户端。
3. 客户端确认电子证书是否刚才访问网站所属
4. 客户端的浏览器根据双方赞成的安全等级,创建会话密钥,而后利用网站的公钥将会话密钥加密,并传送给网站。
5. Web服务器利用本身的私钥解密出会话密钥(客户端发来的对称加密密钥)。
6. Web服务器利用对称密钥加密与客户端之间的通讯。* ### HTTPS的结构图

复制代码
1. SSL(Secure Sokcet Layer,安全套接字层)
2. TLS(Transport Layer Security,传输层安全协议)

复制代码
1. 代理做用:提升访问速度、Proxy能够起到防火墙的做用、经过代理服务器访问一些不能直接访问的网站、安全性获得提升

复制代码
1. SPDY能够说是综合了HTTPS和HTTP二者有点于一体的传输协议
2. 下降延迟、请求优先级、header压缩、服务端推送* ### HTTP2.0
复制代码
播放视频用TCP仍是UDP?为何?
播放视频适合用UDP。UDP适用于对网络通信质量要求不高、要求网络通信速度能尽可能快的实时性应用;而TCP适用于对网络通信质量有要求的可靠性应用。
get和post的区别?
HTTP和TCP的区别
TCP是传输层协议,定义数据传输和链接方式的规范。经过三次握手创建链接、四次挥手释放链接。 HTTP是应用层协议,定义的是传输数据的内容的规范。HTTP的链接使用"请求-响应"方式。基于TCP协议传输。
HTTP和Socket的区别
HTTP是应用层协议;基于TCP协议;使用“请求—响应”方式创建链接,在请求时须要先创建链接且客户端要先发出请求,可见服务器须要等到客户端发送一次请求后才能将数据传回给客户端。 Socket(套接字)是对TCP/IP协议的封装,是接口而不是协议;建立Socket链接时能够指定传输层协议TCP或UDP;Socket创建链接过程三步骤:服务器监听->客户端请求->链接确认,可见服务器能够直接将数据传送给客户端。
Http和Https的区别
端口不一样:Http与Http使用不一样的链接方式,用的端口也不同,前者是80,后者是443; 资源消耗:和HTTP通讯相比,Https通讯会因为加减密处理消耗更多的CPU和内存资源; 开销:Https通讯须要证书,而证书通常须要向认证机构购买;
客户端向服务端发送请求连接数据包 服务端向客户端发送确认数据包 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认
DDos 预防 ( 没有完全根治的办法,除非不使用TCP )
限制同时打开SYN半连接的数目 缩短SYN半连接的Time out 时间 关闭没必要要的服务
Get与POST的区别
从功能上讲,GET通常用来从服务器上获取资源,POST通常用来更新服务器上的资源; 从REST服务角度上说,GET是幂等的,即读取同一个资源,老是获得相同的数据,而POST不是幂等的,由于每次请求对资源的改变并非相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变; 从请求参数形式上看,GET请求的数据会附在URL以后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,若是数据是英文字母/数字,原样发送;不然,会将其编码为 application/x-www-form-urlencoded MIME 字符串(若是是空格,转换为+,若是是中文/其余字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。 就安全性而言,POST的安全性要比GET的安全性高,由于GET请求提交的数据将明文出如今URL上,并且POST请求参数则被包装到请求体中,相对更安全。 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,容许发送的数据量比较小,而POST请求则是没有大小限制的。
TCP和UDP分别对应的常见应用层协议 TCP对应的应用层协议
FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务即是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。 Telnet:它是一种用于远程登录的端口,用户能够以本身的身份远程链接到计算机上,经过这种端口能够提供一种基于DOS模式下的通讯服务。如之前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。 SMTP:定义了简单邮件传送协议,如今不少邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,因此在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。 POP3:它是和SMTP对应,POP3用于接收邮件。一般状况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就能够不以Web方式登录进邮箱界面,直接用邮件程序就能够收到邮件(如是163邮箱就没有必要先进入网易网站,再进入本身的邮-箱来收信)。 HTTP:从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的应用层协议
DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。 SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。 TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务
** 79. http 响应码 301 和 302 表明的是什么?有什么区别?**
答:301,302 都是HTTP状态的编码,都表明着某个URL发生了转移。
**区别: **
301 redirect: 301 表明永久性转移(Permanently Moved)。
302 redirect: 302 表明暂时性转移(Temporarily Moved )。
80. forward 和 redirect 的区别?
Forward和Redirect表明了两种请求转发方式:直接转发和间接转发。
直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每一个信息资源是共享的。
**间接转发方式(Redirect)**实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另一个URL发出请求,从而达到转发的目的。
举个通俗的例子:
直接转发就至关于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;
间接转发就至关于:"A找B借钱,B说没有,让A去找C借"。
81. 简述 tcp 和 udp的区别?
TCP面向链接(如打电话要先拨号创建链接);UDP是无链接的,即发送数据以前不须要创建链接。
TCP提供可靠的服务。也就是说,经过TCP链接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
Tcp经过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还能够对次序乱掉的分包进行顺序控制。
UDP具备较好的实时性,工做效率比TCP高,适用于对高速传输和实时性有较高的通讯或广播通讯。
每一条TCP链接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通讯。
TCP对系统资源要求较多,UDP对系统资源要求较少。
①. 发送方产生粘包
采用TCP协议传输数据的客户端与服务器常常是保持一个长链接的状态(一次链接发一次数据不存在粘包),双方在链接不断开的状况下,能够一直传输数据;但当发送的数据包过于的小时,那么TCP协议默认的会启用Nagle算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已是粘包的状态了。
②. 接收方产生粘包
接收方采用TCP协议接收数据时的过程是这样的:数据到底接收方,从网络模型的下方传递至传输层,传输层的TCP协议处理是将其放置接收缓冲区,而后由应用层来主动获取(C语言用recv、read等函数);这时会出现一个问题,就是咱们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等咱们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址能够被Bookmark,而POST不能够。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,由于参数直接暴露在URL上,因此不能用来传递敏感信息。
GET参数经过URL传递,POST放在Request body中。
http是在tcp基础上的请求响应式协议。 tcp为传输层协议,http为应用层协议
http1.1增长了以下功能
可扩展性(1.1增长了版本号,OPTIONS,Upgrade等) 缓存强化(cache相关) 带宽优化(文件断点续传,range相关) 长链接(keep-alive相关) host头 身份认证,状态管理
举例:
Expire If-Modified-Since Last-Modefied Pragma:no-cache ETag If-None-Match Cache-Control Accept-Language Accept-Charset Content-Range Transfer-Encoding Origin Host User-Agent Access-Control-Allow-Origin Access-Control-Allow-Credentials Access-Control-Expose-Headers Content-Type
无链接的意思是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。与TCP链接不是同一个意思。 但实际上如今的HTTP支持keepalive等模式,支持单个链接处理多个请求应答。
HTTP1.1及更新的HTTP协议都支持keepalive长链接,甚至http2还支持服务端向客户端推送数据
客户端SYN_SENT,服务端则接收到SYN并发出ACK后转为SYN_RECV
send返回发送数据大小后,说明数据已经到达或到达客户端内核缓存,但并不能代表客户端的进程已经拿到数据。若是须要确认对方客户端进程收到,则须要与该进程在应用层实现相应的确认机制
304校验缓存:浏览器端cache的信息发送到服务器校验,若是服务器认为cache依然有效,则返回304,浏览器能够继续使用该cache
304校验时,客户端发送条件请求,带If-Modified-Since头,值为服务器上次返回的Last-Modified头中的时间,还会带If-None-Match头,值为服务器上次返回的ETag响应头的值 A 类地址和 B 类地址的区别