文章目录
- 1.讲一下OSI七层协议
- 2.讲一下TCP/IP参考模型
- 3.网络层常见协议?(IP、ICMP、RIP、IGMP)
- 4. HTTP头部
- 5. HTTP状态码
- 6.GET和POST区别(http请求方法)
- 7. URI和URL的区别(应用层)
- 8.在浏览器输入一个URL(http请求)
- 9.HTTP和HTTPS的区别
- 10. HTTPS加密(SSL是怎么保证安全的)
- 11.Cookie是什么?
- 12. Socket(TCP/IP)
- 13.http 1.0 和1.1区别
- 14.讲一下三次握手(传输层)
- 15.讲一下四次挥手(传输层)
- 16.TCP、UDP区别(传输层)
- 17.TCP是如何保证可靠的
- 18.TCP拥塞控制(慢启动、拥塞避免、拥塞发生。快速回复)
- 19. PING(网络层)
- 20.光猫、路由器和交换机的区别
- 21.IPV6和IPV4的区别
- 22.IP 协议(网络层)
- 23.MAC地址和IP地址(数据链路层)
1.讲一下OSI七层协议
应用层
位于第七层,作用是为用户的应用进程提供网络通信服务。
提供的常用协议有:HTTP(超文本传输协议,底层TCP,默认端口80)、HTTPS(443)、FTP(文本传输协议、TCP、23)、TFTP(简单文本传输协议、21、UDP)
表示层
处理用户信息的表示问题:比如数据的编码,压缩和解压缩,数据的加密和解密、格式转换等。(LPP轻量级表示协议、XDP外部数据表示协议、会话服务协议)
会话层
是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用连接的方法。比如:会话管理、会话流量控制、寻址。(包含SQL结构化查询语言、网络文件系统 NFS、远程过程调用RPC 、DNS协议、SMTP协议)NDS(域名解析服务、53、服务器间进行域传输TCP、客户端查询UDP)
传输层
主要是为两台主机进程之间的通信提供服务。(TCP、UDP)
网络层
将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路
径。(IP、ICMP、ARP、AKP等)
数据链路层
接收来自物理层的位流形式的数据,并封装成帧,传送到上一层(PDN/PPP等)
物理层
利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,如网线;网卡标准。(IEEE 802.1A,IEEE 802.2到IEEE 802.11)
2.讲一下TCP/IP参考模型
应用层、传输层、网际互连层、网络访问层
3.网络层常见协议?(IP、ICMP、RIP、IGMP)
IP(网际协议)
IP协议不但定义了数据传输时的基本单元和格式,还定义了数据报的递交方法和路由选择
ICMP(Internet控制报文协议)
ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性,是ping和traceroute的工作协议
RIP (路由信息协议)
使用“跳数”(即metric)来衡量到达目标地址的路由距离
IGMP (Internet组管理协议)
用于实现组播、广播等通信
4. HTTP头部
通用头:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
请求头:是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
响应头:便于客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如Server头部。
实体头:指的是用于应对实体主体部分的头部,比如,可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。
5. HTTP状态码
HTTP 状态码由三个十进制数字组成,第一个数字定义了状态码的类型,后两个并没有起到分类的作用。HTTP 状态码共有 5 种类型:
1XX 指示信息–表示请求正在处理
2XX 成功–表示请求已被成功处理完毕
3XX 重定向–要完成的请求需要进行附加操作
4XX 客户端错误–请求有语法错误或者请求无法实现,服务器无法处理请求
5XX 服务器端错误–服务器处理请求出现错误
200 响应成功
302 跳转,重定向
403 拒绝访问 404 找不到资源
501 服务器不支持当前请求所需要的某个功能
6.GET和POST区别(http请求方法)
GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
get是获取数据,post是修改数据,而且 post比get更安全,
因为 get t把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。参数直接暴露在 URL中,可能会存在安全问题,因此往往用于获取资源信息。
而 post 参数放在 HTTP的包体内(requrest body )中,并且参数不会被保留,相比get 方法,post 方法更安全,主要用于修改服务器上的资源。
get 请求只支持 URL 编码,post 请求支持多种编码格式。
get 只支持 ASCII 字符格式的参数,而 post 方法没有限制。
GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
get 提交的数据大小有限制(针对浏览器),最大是2k,而 post 方法提交的数据没限制
GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
POST产生两个TCP数据包,浏览器先发送header,服务器响应100 状态码,浏览器再发送data,服务器响应200 ok(返回数据)。
7. URI和URL的区别(应用层)
URL(统一资源定位符),就是平时上网输入的网址,它标识了一个互联网资源,并指定对其进行操作或获取该资源的方法;
URI(统一资源标识符)是一种抽象概念,URL是URI的子集
简而言之就是,只要能唯一标识资源的就是URI,在URI基础上给出其资源的访问方式的就是URL。
8.在浏览器输入一个URL(http请求)
在发送http请求前,需要域名解析(DNS解析),获取对应的IP
浏览器先查看浏览器缓存-操作系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
(1)浏览器缓存:,先在浏览器找之前有没有缓存过的域名所对应的ip地址,如果有,就调用这个 IP 地址映射,解析完成。
(2)操作系统缓存:(查找硬盘的hosts文件)使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
(3) 路由器缓存:向DNS服务器发送DNS请求,查询本地DNS服务器,这其中用的是UDP的协议。在一个子网内采用ARP地址解析协议进行ARP查询,如果不在一个子网那就需要对默认网关进行DNS查询。如果缓存中有此条记录,就可以直接返回结果。
(5)如果没有,本地DNS服务器还要向DNS根服务器进行查询。
拿到解析的IP地址及端口号(http 80 端口,https 443 端口),调用系统库函数Socket,向服务器发起tcp连接,与浏览器建立tcp三次握手。
客户端向服务器发送 HTTP 请求报文。
服务器端经过物理层→数据链路层→网络层→传输层→应用层,解析请求报文,发送 HTTP 响应报文。
关闭连接,TCP 四次挥手。
客户端解析 HTTP 响应报文,浏览器开始显示 HTML
分析页面中的超链接,显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部显示。
(1)应用层:客户端发送 HTTP 请求报文。
(2)传输层:(加入源端口、目的端口)建立连接。实际发送数据之前,三次握手客户端和 服务器建立起一个 TCP 连接。
(3)网络层:(加入 IP 头)路由寻址。
(4)数据链路层:(加入 frame 头)传输数据。
(5)物理层:物理传输 bit。
9.HTTP和HTTPS的区别
1.HTTP协议以明文方式发送内容,数据未加密,安全性较差;而HTTPS数据传输过程是加密的。
2.HTTP和HTTPS使用的连接方式不一样,用的端口也不一样,HTTP使用80端口,HTTPS使用443端口。
3.HTTPS协议需要到数字机构申请证书,要钱。
4.HTTP页面响应比HTTPS快,主要HTTP使用三次握手建立连接,而HTTPS除了三次握手,还需要经历一个SSL协商过程。
10. HTTPS加密(SSL是怎么保证安全的)
HTTPS 采用对称加密和非对称加密相结合的方式。
使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。
对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。
优点:运算速度快 缺点:无法安全地将密钥传输给通信方
非对称密钥加密,,加密(公开密钥)和解密(私有密钥)使用不同的密钥。
优点:可以更安全地将公开密钥传输给通信发送方;缺点:运算速度慢。
使用SSL(安全套阶层)、TLS(安全层传输协议)。SSL 利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证。
(1)客户端向服务器端发起SSL连接请求;
(2)服务器把公钥发送给客户端,并且服务器端保存着唯一的私钥
(3)客户端用公钥对双方通信的对称秘钥进行加密,并发送给服务器端
(4)服务器利用自己唯一的私钥对客户端发来的对称秘钥进行解密,
(5)进行数据传输,服务器和客户端双方用公有的相同的对称秘钥对数据进行加密解密,可以保证在数据收发过程中的安全,即是第三方获得数据包,也无法对其进行加密,解密和篡改。
11.Cookie是什么?
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,
HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务,HTTP/1.1 引 入 Cookie 来保存状态信息,通过在请求和响应报文中写入cookie信息来控制客户端的状态。
可以用在哪些方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
12. Socket(TCP/IP)
socket
是对TCP/IP协议的封装。socket是应用层与TCP/IP协议族通信的一组调用接口(TCP/IP网络的API函数),是基于TCP协议的,所以通常情况下 Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通信双方即可开始相互发送数据内容.
HTTP
连接使用的是**“请求—响应**”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
13.http 1.0 和1.1区别
长连接:
http1.0 中默认使用短连接,服务器和客户端每进行一次 http 操作,就建立一次连接,任务结束就终端连接,
http1.1 :默认使用长连接,用以保持连接特性,当一个网页打开完成后, 服务器和客户端之间用于传输 http 数据的 tcp 连接不会关闭,客户端再次访问这个服务器时, 会继续使用这一条已经建立好的连接。
错误状态响应码 :
在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
缓存处理 :
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准
HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
带宽优化及网络连接的使用 :
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。
14.讲一下三次握手(传输层)
三次握手是TCP连接的建立过程,刚开始,客户端进入close状态,服务端处于listen状态
第一次握手:建立连接时,客户端发送 SYN 包到服务器(标志位SYN=1,初始序号为Seq = X),并进入SYN-SENT 状态, 等待服务器确认;SYN:同步序列编号。
第二次握手:服务器收到 SYN 包,必须确认客户的 SYN,(返回ACK=X+1),同时自己也发送一个 SYN 包(syn=1,Seq = y),即一起发了 SYN+ACK 包,此时服务器进入 SYN-RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=y+1),此包发送完毕,客户端和服务器进入 ESTABLISHED(TCP 连接成功)状态,完成三次握手。
为什么三次
如果只进行两次握手,服务端不知道客户端能否接收消息,同时也不知道自已的消息发出去了没有,三次握手已经保证了TCP连接的需求,所以就不用第四次握手了
15.讲一下四次挥手(传输层)
在挥手之前主动释放连接的客户端结束 ESTABLISHED 阶段,随后开始四次挥手:
第一次挥手
客户端向服务器发送一段 FIN 报文 (FIN=1,序号seq=u),表明其想要释放 TCP 连接,随后 客户端进入FIN-WAIT-1 阶段,并且停止发送通信数据。
第二次挥手
(1)服务端收到 FIN 报文之后,会发送 ACK 报文 (ACK=1 , 确认号 ack=u+1 , 序 号 seq=v),表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
(2) 客户端收到服务器发送过来的报文后,确认服务器已经收到连接释放的请求,随后客户结束 FIN-WAIT-1 阶段,进入FIN-WAIT-2 阶段
第三次挥手
服务器端在发出ACK 确认报文后,会将遗留的待传数据传送给客户端,待传输完成后即经过 CLOSE-WAIT 阶段,便做好了释放服务器端到客户端的连接准备,再次向客户端发出一段连接释放报文段 (FIN=1,ACK=1,序号seq=w,确认号ack=u+1),随后服务器端结束 CLOSE-WAIT 阶段,进入 LAST-ACK 阶段。并且停止向客户端发送数据。
第四次挥手
(1) 客户端收到 FIN 报文之后,再发送一个 ACK 报文作为应答(ACK=1,seq=u+1,ack=w+1),并结束 FIN-WAIT-2 阶段,进入 TIME-WAIT 阶段。
随后客户端开始在 TIME-WAIT 阶段 等待 2 MSL 。
(2)服务器端收到从客户端发出的 TCP 报文之后结束 LAST-ACK 阶段,进入 CLOSED 阶段。由此正式确认关闭服务器端到客户端方向上的连接。
客户端等待完 2 MSL 之后,结束 TIME-WAIT 阶段,进入 CLOSED 阶段,由此完成「四次挥手」。
为什么四次?
在连接中,服务器的 ack 和 syn 包是同时发送的,
而在断开连接的时候,服务器向客户端发 送的 ack 和 fin 包是分两次发送的,因为服务器收到客户端发送的 fin 包时,可能还有数据要传 送,所以先发送 ack,等数据传输结束后再发送 fin 断开这边的连接。
CLOSE-WAIT 和 TIME-WAIT 的状态和意义?
CLOSE-WAIT 状态就是为了保证服务器在关闭连接之前将待发送的数据发送完成。
TIME-WAIT 发生在第四次挥手,当客户端发送 ACK 确认报文后进入该状态,若取消该状态,即客户端在收到 FIN 报文后立即关闭连接,此时服务端相应的端口并没有关闭,若客户端在相同的端口立即建立新的连接,则有可能接收到上一次连接中残留的数据包,可能会导致不可预料的异常出现。
除此之外,假设客户端最后一次发送的 ACK 包在传输的时候丢失了,由于 TCP 协议的超时重传机制,服务端将重发 FIN 报文,若客户端并没有维持 TIME-WAIT 状态而直接关闭的话,当收到服务端重新发送的 FIN 包时,客户端就会用 RST 包来响应服务端,这将会使得对方误认为是有错误发生。
2MSL等待理由?
MSL指最长报文段寿命,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
保证客户端发送的最后一个ACK报文段能够到达服务端。
防止“已失效的连接请求报文段”出现在本连接中。
16.TCP、UDP区别(传输层)
传输控制协议和用户数据报协议区别
面向连接的TCP协议保证了数据的传输可靠性,面向无连接的UDP协议能够实现数据表简单、快速地传输。
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单,传输效率更高
TCP 是面向字节流的,UDP 是基于数据报的
TCP保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
17.TCP是如何保证可靠的
数据分块:应用数据被分割成 TCP 认为最适合发送的数据块。
序列号和确认应答:TCP 给发送的每一个包进行编号,在传输的过程中,每次接收方收到数据后,都会发送 ACK 报文,告诉发送方成功接收了哪些数据以及下一次的数据从哪里开始发。
校验和:TCP 将保持它首部和数据部分的检验和,如果收到报文段的检验和有差错,TCP 将丢弃这个报文段并且不确认收到此报文段。
流量控制:发送方发送的数据量不能超过接收端缓冲区的大小。当接收方来不及处理发送方的数据,会提示发送方降低发送的速率,防止产生丢包。
拥塞协议:当网络某个节点发生拥塞时,减少数据的发送。
ARQ协议:为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
超时重传:当 TCP 发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果超过某个时间还没有收到确认,将重发这个报文段。
TCP 的顺序问题,丢包问题,流量控制都是通过滑动窗口来解决的拥塞控制时通过拥塞窗口来解决的
滑动窗口
TCP 建立连接时,各端分配一个缓冲区用来存储接受的数据,并将缓冲区的尺寸发送给另一 端,接收方发送的确认消息中包含了自己剩余的缓冲区尺寸,剩余缓冲区空间的数量叫做窗口, 所谓滑动窗口,就是接收端可以根据自己的状况通告窗口大小,从而控制发送端的接收,进行流 量控制
18.TCP拥塞控制(慢启动、拥塞避免、拥塞发生。快速回复)
拥塞控制到现在主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发生,4)快速恢复。
慢热启动算法 – Slow Start
所谓慢启动,也就是TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。
慢启动算法:
(1) 连接建好的开始先初始化拥塞窗口cwnd大小为1,表明可以传一个MSS大小的数据。
(2) 每当收到一个ACK,cwnd大小加一,呈线性上升。
(3)每当过了一个往返延迟时间RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指数让升。
(4) 还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”
拥塞避免算法 – Congestion Avoidance
当拥塞窗口大小 >= 慢启动阈值 ssthresh后,就进入拥塞避免算法。
算法如下:
(1) 收到一个ACK,则cwnd = cwnd + 1 / cwnd
(2)每当过了一个往返延迟时间RTT,cwnd大小加一。
(3)过了慢启动阈值后,拥塞避免算法可以避免窗口增长过快导致窗口拥塞,而是缓慢的增加调整到网络的最佳值。
拥塞发生状态时的算法
TCP拥塞控制默认认为网络丢包是由于网络拥塞导致的,所以一般的TCP拥塞控制算法以丢包为网络进入拥塞状态的信号。
(1)对于丢包有两种判定方式,一种是超时重传RTO超时,另一个是收到三个重复确认ACK。
(2)超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
(3)但是如果发送端接收到3个以上的重复ACK,TCP就意识到数据发生丢失,需要重传。这个机制不需要等到重传定时器超时
快速恢复算法 – Fast Recovery
在进入快速恢复之前,拥塞窗口cwnd和慢启动阈值ssthresh已经被更改为原有cwnd的一半。
19. PING(网络层)
ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此测试网络。
两台电脑连起来后 ping 不通,你觉得可能存在哪些问题?
· 首先看网络是否连接正常,检查网卡驱动是否正确安装。
局域网设置问题,检查 IP 地址是否设置正确。
· 看是否被防火墙阻拦(有些设置中防火墙会对 ICMP 报文进行过滤),如果是的话,尝试关闭防火墙 。
· 看是否被第三方软件拦截。
· 两台设备间的网络延迟是否过大(例如路由设置不合理),导致 ICMP 报文无法在规定的时间内收到。
20.光猫、路由器和交换机的区别
交换机:是一种用于光/电信号转发的网络设备,它利用主机的物理地址(MAC 地址)确定数据转发的目的地址,它工作在数据链路层。
路由器:路由器接入光猫,发射wifi信号,实现网络共享,路由器通过数据包中的目的 IP 地址识别不同的网络从而确定数据转发的目的地址,网络号是唯一的。路由器根据路由选择协议和路由表信息从而确定数据的转发路径,直到到达目的网络,它工作于网络层。
光猫:负责的是将通过光纤传送的数字信号和模拟信号之间进行转换,在发送端通过调制将数字信号转换为模拟信号,而在接收端通过解调再将模拟信号转换为数字信号,通俗的说就是数字信号与模拟信号的“翻译员”。
21.IPV6和IPV4的区别
IP地址数量不同。
IPv4的地址是32位,采用A、B、C三类编址方式
而IPv6的地址是128位的。IPv6具有更大的地址空间,
A类
地址范围从1.0.0.1——127.255.255.254 ,
子网掩码为255.0.0.0,适用大型网络,A类网络地址数量较少,有126个网络
B类
地址范围从128.0.0.1——191.255.255.254,
子网掩码为255.255.0.0,适用中型网络,B类网络地址数量适中,有16384个网络
C类
地址范围从192.0.0.1——223.255.255.254,
子网掩码为255.255.255.0,适用小型网络,C类网络地址数量较多,有209万余个网络
22.IP 协议(网络层)
即互联网协议,是支持网间互联的数据报协议。该协议工作在网络层,
主要目的:为了提高网络的可扩展性,和传输层 TCP 相比,IP 协议提供一种无连接/不可靠、尽力而为的数据包传输服务,其与TCP协议(传输控制协议)一起构成TCP/IP 协议族的核心。
IP 协议主要有以下几个作用:
寻址和路由:在IP 数据报中会携带源 IP 地址和目的 IP 地址,来标识该数据报的源主机和目的主机。IP 数据报在传输过程中,每个中间节点(IP 网关、路由器)只根据网络地址进行转发,如果中间节点是路由器,则路由器会根据路由表选择合适的路径。IP 协议根据路由选择协议提供的路由信息对 IP 数据报进行转发,直至抵达目的主机。
分段与重组:IP 数据包在传输过程中可能会经过不同的网络,在不同的网络中数据报的最大长度限制是不同的,IP 协议通过给每个 IP 数据包分配一个标识符以及分段与组装的相关信息,使得数据包在不同的网络中能够传输,被分段后的 IP 数据报可以独立地在网络中进行转发,在到达目的主机后由目的主机完成重组工作,恢复出原来的 IP 数据包。
23.MAC地址和IP地址(数据链路层)
MAC 地址是数据链路层和物理层使用的地址,是写在网卡上的物理地址。用来定义网络设备的位置。
IP 地址是网络层和以上各层使用的地址,是一种逻辑地址。IP 地址用来区别网络上的计算机。