3.1.1 OSI与TCP/IP各层的结构与功能,都有哪些协议?
OSI七层协议:
从下到上,1.物理层2.数据链路层3.网络层4.传输层5.会话层6.表示层7.应用层
TCP/IP四层协议:
从下到上,1.网络接口层2.网络层3.传输层4.应用层
折中的五层协议:
从下到上,1.物理层2.数据链路层3.网络层4.传输层5.应用层
每层都是干什么的?
1.物理层:
物理层传输比特流。
物理层的作用是:在两个计算机节点之间传输比特流,尽可能忽略传输介质以及物理设备之间的差异。
2.数据链路层:
主机之间的数据需要在链路上传递。
数据链路层的作用:把网络层传过来的IP数据包组装成帧,然后在节点之间传输帧。
3.网络层:
主机间的数据交换可能会经过多个数据链路。
把传输层的报文段组装为IP数据报。
网络层的作用:选择合适的路由和交换节点,来确保数据的及时送达。传送的是IP数据报。
4.传输层:
传输层的作用:为主机进程之间通信提供通用的数据传输服务。
传输的是应用层的报文。
传输层的复用与分用功能:
复用:多个应用层进程可同时使用传输层的服务。
分用:把传输层的数据分别给各自的应用层进程。
运输层主要有两个协议:
1.TCP协议(Transmission Control Protocol,传输控制协议):
TCP提供面向连接的,可靠的传输服务。
2.UDP协议(User Datagram Protocol,用户数据报协议):
UDP提供无连接的,不保证可靠性但尽最大努力的传输服务。
5.应用层:
应用层的作用:应用的进程进行交互来完成网络应用服务。
对于不同的网络应用需要不同的网络应用服务。
域名系统——DNS协议(Domain Name System,域名系统),网站协议——HTTP协议(HyperText Transfer Protocol,超文本传输协议),网络邮件协议——SMTP协议。
3.1.2 TCP 三次握⼿和四次挥⼿(⾯试常客)
TCP的三次握手和四次挥手能干什么?
作用:把数据准确无误地送到目的地。
记客户端为A,服务端为B。
三次握手:
1.A向B发送带有SYN的数据包
2.B向A发送带有SYN/ACK的数据包
3.A向B发送带有ACK的数据包
为什么要三次握手?
目的是建立发送方和接收方可靠的连接。
从细节上说是:保证发送方和接收方各自的发送和接受功能正常。
记客户端为A,服务端为B。
1.A向B发送SYN,说明A的发送功能正常
2.B向A发送SYN/ACK,说明B的接受和发送功能正常
3.A向B发送ACK,说明A的接受功能正常
综合起来说明A和B各自的发送和接受功能都正常。
为什么要B要向A传回SYN?
表示B接收到了上一个A发送的带有SYN的数据包。也验证了B的接受功能正常。
B传了SYN为什么还要传ACK?
为了让A下次把ACK传到B,来验证A的接受功能正常。
发送时已经证明发送功能正常,但是接受功能是否正常还得看下一次的回传。
四次挥手:
记A为客户端,B为服务器端。
四次挥手:
1.A给B发送带有FIN的数据包
2.B给A发送一个带有ACK的数据包,这个ACK的序号为上次接受A的FIN序号加1。
3.B给A发送一个带有FIN的数据包。
4.A给B发送一个带有ACK的数据包,同ACK的序号为上个FIN加1
为什么需要四次挥手?
可以保证双方的连接都完全释放。
A告诉B说我要结束了,B说你结束吧,这时A才能真正的结束。同理,当B告诉A说我要结束了,A需要给B说你结束吧,B才能真正结束。
为什么握手(建立连接)是三次,而挥手(释放连接)是四次?
因为握手中间有一次即发送了SYN又发送了ACK,所以少了一次。
3.1.2 TCP,UDP 协议的区别
1.TCP是面向连接的,可靠的数据传输协议。而UDP是无连接的,不保证可靠但尽量去传送数据的协议。
2.TCP因为要保证数据传输可靠,所以需要更多机制来保证,从而增大了数据单元的大小,效率变慢(而且建立和是否连接也需要耗费系统资源)。而UDP不需要提前建立连接,它的数据单元就没那么大,效率很高。
3.1.3 TCP 协议如何保证可靠传输
1.TCP可以保证数据的有序性。
TCP给每个数据包编号,接收方接受后对数据包进行排序,把有序的数据送给应用层。
2…校验和机制:
TCP保证数据包发送时和接收时,数据头和数据的校验和不变。
如果接收方的校验和和发送时不同时,接收方就丢弃该数据包和不确认收到该数据包。
3.流量控制:
TCP连接的两边都有一个固定大小的缓冲区域。TCP接收端只接受小于等于该缓冲区域的数据。
当接收方来不及接受发送方发送的数据时,会提醒发送方减慢发送速度。
TCP的流量控制是通过大小可变的滑动窗口实现的。
4.拥塞控制:
当网络拥塞时,降低发送数据的速度,减少数据阻塞的方式。
5.ARQ协议:
(自动重传协议)发送方每次发送数据时,都先发送一个分组的数据(就停止发下一个分组),当确定接收方接收到时。再进行下一个分组数据的发送。
6.超时重传:
当发送方发送一个分组的数据后,开始一个计时器。如果在规定时间内没有收到接收方的收到反馈。那么就重新发送该分组的数据。
ARQ协议和超时重传协议可以配合使用,不冲突:
当发送方发送一个分组后停止发送(停止等待ARQ协议),直到收到发送方的相应数据(ACK),才进行下一个分组的发送。
发送方发送一个分组后计时器开始计时,如果在计时中间还没有收到发送方发来的相应ACK,则超时重发该分组数据。
不论怎样,接收方在接收到分组数据后都需要向发送方发送相应数据(ACK)。
3.1.4 ARQ协议
ARQ协议(Automatic Repeat-reQuest),自动重发请求协议。
它用在数据链路层和传输层,是一个错误纠正协议。
作用:它通过确认和重发机制,在不可靠的通信中实现了可靠的通信。
它的内容是:当发送方发送数据后一段时间内没有收到对方的确认信号,通常会再次发送数据。
ARQ协议包括:停止等待ARQ协议,连续ARQ协议。
1.停止等待ARQ协议:
过程:
发送方给接收方发送一个分组数据后就停止发送,等待接收方相应(发回ACK)。如果在一段时间后,发送方并没有收到相应ACK则重新发送该分组数据。
在停止等待ARQ协议中,如果接收方收到了重复的分组,则丢弃。但是也要向发送方发送相应ACK信号。
优点:方法简单
缺点:效率低,需要等待的时间长。
2.连续ARQ协议:
过程:
发送方维护了一个发送的窗口。窗口里的许多分组可以一起发送,不需要等待接收方的确认。
但是接收方也会向发送方发送确认(ACK),只需要对窗口里的最后一个分组发送确认信号(ACK)就可以,来表示这个分组和它前面的分组都已经发送成功了。
优点:发送方不需要进行等待,效率高。
缺点:接收方的确认信号(ACK)不能完全反应已经发送成功的分组信息。(窗口中间有一个分组丢失了,但是确认信号ACK只能发到前几个,所以这个丢失分组后面的分组的情况就不知道了)
举例:一个窗口里有5个分组,发送方发送,但是第3个分组丢失了,但是接收方只能对第2个分组发送ACK。然后接收方就不知道第4和第5个分组的情况。
只能超时再从第3个分组重传。
3.1.5 滑动窗⼝和流量控制
TCP的流量控制是用来控制发送方发送数据的速度的,用来保证接收方能够接收的过来。
TCP的流量控制是用滑动窗口实现的。
接收方式怎么告诉发送方要调整发送速率呢?
A:接收方向发送方相应的ACK数据里有发送方的滑动窗口的大小,这样接收方便可以动态地调整发送方的滑动窗口的大小来控制发送方发送数据的速率。
如果相应数据(ACK)里窗口大小设置为0,则发送方则没有办法发送数据。
3.1.6 (网络)拥塞控制以及4种拥塞控制算法
发送方维护了一个拥塞窗口的状态信息。该窗口的大小随着网络拥塞的情况来动态变化。
发送方的发送窗口的大小为拥塞窗口(cwnd)和接收方能接收的窗口较小的那个。
拥塞窗口(congestion window) cwnd
4种,其实是3种(网络)拥塞的控制算法:
慢开始,拥塞避免,快重传和快恢复
拥塞控制算法控制的是拥塞窗口。
慢开始:
开始时发送方的发送窗口由小变大,也就是发送方的拥塞窗口由小变大。cwnd拥塞窗口该开始是1,然后过一轮(发送到接收方,接收方再反馈过来),拥塞窗口的大小加倍。
拥塞避免:
让发送方的拥塞窗口的大小缓慢增大,每轮cwnd加1.
快重传和快恢复:
FRR,fast retransmit and recovery
正常的话发送方发送给接收方的数据包丢失了,需要等到计时器结束时才能去重发之前丢失的数据包。
过程:
接收方会自己去校验接收的数据是不是有序的,来判断数据包有没有丢失。如果有丢失的话,就直接给接收方发相应信息(ACK),(发送方收到3个相应的信息)后,发送方立马重发该组数据。
这样就不用等到计时器结束再去重发该组数据了,提升了效率,减少了网络阻塞,实现了阻塞控制。
FRR适用场景:
当单数据包丢失时,FRR能很有效地工作。
当多数据包一起丢失时,则FRR则不能很好地工作。
不知道为什么?
3.1.7 在浏览器中输⼊url地址 ->> 显示主⻚的过程(⾯试常客)
1.DNS解析。由域名得到ip地址。
2.建立TCP连接
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析并渲染html页面
6.结束TCP连接
都用到了哪些协议?
DNS协议,可以由域名得到ip地址。
TCP/IP协议:可以使客户端和服务器端建立连接。
HTTP协议:浏览器访问网页的协议。
OPSF协议:数据包在路由器之间进行路由选择的协议。
ARP协议:可以把ip地址转化为MAC物理地址的协议。用在路由器和服务器的通信上。知道MAC地址后才能进行通信。
3.1.8 状态码
1XX informational(信息状态码) 表示该请求正在处理
2XX Success(成功状态码) 表示该请求处理成功
3XX Redirection(重定向状态码) 表示该请求需要更多的后续处理
4XX Client Error(客户端错误状态码) 表示服务器无法处理该请求。
5XX Server Error (服务器错误状态码) 表示服务器请求出错。
3.1.9 说说各种协议与HTTP协议之间的关系
说说A然后请求到B的资源的过程,其它协议都干了什么。
记A为客户端,B为服务器端。
A想访问通过url请求到服务器的资源,A先用DNS协议以域名来得到ip地址。然后通过HTTP协议生成对应的HTTP报文,然后TCP协议把HTTP报文分割成一组一组标着顺序的小报文,实现可靠传输。通过IP协议来把这些报文通过路由器向服务器传送。到服务器端时,TCP协议再按照顺序把小报文组装为HTTP报文,然后服务器就知道A想要的资源是什么了。
然后B反向的把资源传递给A。
3.1.10 HTTP⻓连接,短连接
http1.0时默认使用短连接。
短连接:客户端和服务器端每进行一次http操作就建立一次http连接。操作结束则连接断开。
http1.1开始默认使用长连接。
使用长连接的响应头前面会加上Connection:keep-alive
长连接:客户端和服务器端进行一次http操作后建立的http连接在该http操作结束后不会断开。
这个连接不是永久的,而是有一定存活时间,当存活时间到了而且并没有再进行http操作就把该长连接释放了。
http的长连接和短连接本质上是tcp的长连接和短连接。
3.1.11 HTTP是不保存状态的协议,如何保存⽤户状态?
http协议是无状态的,不能保存用户状态。
用session来保存用户状态,session是存储在服务器端的。
当服务器给不同的用户创建特定的session后就可以来保存用户状态了。
那服务器是怎么通过session来保存用户状态(session跟踪)呢?也就是这个过程是怎么样的呢?
cookie只是session机制中的一种方式,cookie是保存在客户端本地的。
过程为:
session机制中在服务器端生成了带有session_id的cookie,把它交给了要保存用户状态的客户端。
当客户端需要请求服务器端时,就从cookie中拿着session_id去找服务器端。这样就实现了session维护用户状态的功能。
cookie只是一种方式,有的时候当cookie被禁用时,一个常用的方式就是在url后面加上生成的session_id,这样也能实现session维护用户状态的功能。
3.1.12 Cookie的作⽤是什么?和Session有什么区别?
1.cookie可以保存用户的一些缓存信息,比如之前登录过,下次再访问该网页的时候就不用重复登录了。(存储了一个登录Token在cookie中,下次查找Token就行了)
2.可以通过里面的session_id在想要请求服务器端时,可以实现服务器端以session方式维护用户状态的功能。
区别:
cookie保存在客户端,session保存在服务器端。
共同点:
都是实现服务器端维护用户状态信息的方式。
3.1.13 HTTP 1.0和HTTP 1.1的主要区别是什么?
1.http1.0使用短连接,而http1.1使用长连接。
短连接:每次请求都要建立和释放连接。
长连接:当一次请求后,这个连接维持在这里,下次请求可以继续使用这个连接。
2.http1.1错误码更新类型变多了。
3.http1.1的缓存方式也更新了多种方式,优化了缓存效率。
4.http1.1对带宽和连接进行了优化。之前http1.0时不论请求哪一部分数据都会把数据所在的一整块发过来,但其实根本没有必要。而http1.1时对这个带宽利用做了优化,可以想要哪一部分数据就返回哪一部分数据,从而优化了带宽和连接的效率。
URI和URL的区别是什么?
I-identifier 标识符,L-location 定位符。
URL是一种具体的URI,除了URI唯一标识资源的功能之外,还提供了对资源的定位功能。
URI(uniform resource identifier),统一资源标识符。用来唯一标识资源。
URL(uniform resource location),统一资源定位符。是一种具体的URI,不仅可以用来唯一标识资源,而且提供了对资源的定位功能。
3.1.13 HTTP 和 HTTPS 的区别?
1.url格式和默认端口不同。http协议域名是以http://开头的,默认端口是80。而https协议域名默认是以https://开头的,默认端口是443。
2.安全性和资源消耗不同。http协议是基于tcp协议的,而https协议是基于ssl/tls协议,ssl/tls协议是在tcp协议之上的。
http是以明文传输的,https基于的ssl/tls协议给数据加密,。
所以https的安全性更高。https对内容进行对称加密,但是这个进行对称加密的密钥是在服务器端进行非对称加密。(正好符合对称加密适合对大量数据加密,而非对称加密适合对少量数据加密的使用场景)
由于https需要额外的加密和解密,所以https对资源的消耗也更多。
3.1.14什么是ssl/tls?说一说
ssl/tls:
l都是layer层的意思。s都有一个security安全的意思。
ssl(security socket layer)安全套接字层,tls(transport layer security)传输层安全。(这两个是一个东西)
ssl后来被列为标准,改名为tls。现在我们用的都是tls,但是ssl叫的多了,还以SSL来叫它。
这两个协议为数据加密。且这两个协议分为记录和握手两部分协议。
3.1.15非对称和对称加密?有什么区别?
对称加密:加密和解密用的是同一个密钥。
非对称加密:加密和解密分开用公钥和私钥。公钥加密,私钥解密。
区别:
1.加密过程不同,如概念。
2.加密速度不同。对称加密快,因为用的一个密钥,非对称加密慢,因为用的不同密钥,解密时间更长。
3.非对称加密和对称加密的安全性不同。对称加密的安全性没有非对称加密的安全性好。因为对称加密的加密和解密用的是同一个密钥,如果该密钥泄漏就失效了。
但是非对称加密的加密用公钥,解密用私钥。而且公钥没办法得到私钥,所以安全性更高。
使用场景:
对称加密适合对大量数据加密,而非对称加密适合对少量数据加密。
常见的对称加密算法:数据加密标准DES(D-data),高级加密标准AES(A-advanced)
(ES-Encryption Standard)
D Encryption Standard 数据加密标准
A Encryption Standard 高级加密标准
非对称算法:RSA,DSA。
R signature algorithm 由三个人一起发明,R无实际含义
D signature algorithm 数字签名算法