【八股文】计算机网络
1.五层网络协议
2.OSI七层模型
3.TCP三次握手,四次挥手
4.TCP和UDP的区别
5.TCP是如何保证可靠传输的
6.HTTP协议的特点
7.HTTP报文格式
8.HTTP各版本区别
9.HTTPS和HTTP的区别
10.SSL过程
11.浏览器中输入URL到返回的过程
12.DNS解析的过程
13.cookie和session的区别和联系
14.TCP重传机制
15.http常用响应码
16.get请求和post请求的区别
1.五层网络协议
- 应用层
定义的是应用进程间的通信和交互的规则。
- 运输层
主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。
由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,
- 网络层
选择合适的网间路由和交换结点,确保数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。
- 数据链路层
- 物理层
2.OSI七层模型
- 应用层:网络服务与最终用户的一个接口。HTTP,FTP,SMTP
- 表示层:数据的表示,安全,压缩。
- 会话层:建立,管理,终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
- 运输层:定义传输数据的协议端口号,以及流控和差错校验。TCP,UDP
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。ICMP IGMP IP
- 数据链路层:建立逻辑连接,进行硬件地址寻址,差错校验
- 物理层:建立,维护,断开物理连接
3.TCP三次握手,四次挥手
TCP协议目的是为了保证数据能够在两端准确连续的流动,可以想象两个建立起TCP通道的设备如同接起了一根水管,数据就是水管中的水,由一头流向了另一头。然而TCP为了能让一个设备连接多个水管,也就是让一个设备同时与多个设备交互信息,他必须保证不同水管之间不能产生串联或互相影响。
为了确保数据能够正确分发,TCP用一种叫TCB(传输控制块)的数据结构把发给不同设备的数据封装起来。一个TCB数据块包含了数据发送双方对应的socket信息以及拥有装载数据的缓存区。
三次握手
0)准备工作
最开始的客户端和服务器都处于CLOSE状态。主动打开连接的是客户端,被动打开的是服务器
TCP服务器进程先创建传输控制块TCB,时刻准备接收客户端进程的请求,此时服务器就进入LISTEN状态
1)一次握手
TCP客户端也是先创建了传输控制块TCB,然后向服务器发出连接请求报文,SYN,报文首部种的同部位(SYN=1),同时选择一个序列号seq=x
此时,TCP进入SYN-SENT(同步已发送状态)。TCP规定,SYN报文段不能携带数据,但需要消耗一个序号
如果是发送,则需要发送一个标志位SYN=1,同时选择一个初始序列号seq=x(随机,客户端或服务器每发送一次+1)
2)二次握手
TCP服务器收到请求报文后,如果同意连接,则发出确认报文。
收到报文,则需要发送一个确认标志位ACK=1,并且确认序列号ack=x+1,然后发出报文,需要一个发送标志位SYN=1,同时选择一个初始序列号seq=y(随机)
3)TCP客户端收到确认后,还要向服务器给出确认。
收到报文,发送一个确认标志位ACK=1,确认序列号ack=y+1,seq=x+1 。
为什么TCP客户端还要最后再发一次确认呢?
主要防止已经失效的连接请求报文又突然传送到了服务器,从而产生错误
四次挥手
数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于established状态。然后客户端主动关闭,服务器被动关闭。
1)TCP客户端收到一个FIN(关闭连接),用来关闭客户端到服务器的数据传送
2)服务器收到这个FIN,它发回一个ACK
客户端发送完所有的数据,请求关闭连接,向服务器申请关闭,但与此同时,服务器未必就把所有的数据全部向客户端发送完毕,所以在第二步和第三步之间,服务器可以继续数据传输
3)服务器关闭客户端的连接,发送一个FIN给客户端
4)客户端发回ACK报文确认,并将确认序号设置为收到序号+1
为什么客户端最后还要等待2MSL
去向ACK消息最大存活时间(MSL)+ 来向FIN消息的最大存活时间(MSL)
第一,保证客户端发送的最后一个ACK报文能够到达服务器
第二,释放的端口可能重连刚断开的服务器端口,这样依然存活在网络里的老的TCP报文可能与新的TCP连接报文冲突
如果已经建立连接了,但是客户端突然出现故障了怎么办
TCP还设有一个保活计时器。客户端出现故障,服务器不能一直等下去
4.TCP和UDP的区别
- TCP是可靠传输,UDP是不可靠传输;
- TCP面向连接,UDP无连接;
- TCP传输数据有序,UDP不保证数据的有序性;
- TCP不保存数据边界,UDP保留数据边界;
- TCP传输速度相对UDP较慢;
- TCP有流量控制和拥塞控制,UDP没有;
- TCP是重量级协议,UDP是轻量级协议;
- TCP首部较长20字节,UDP首部较短8字节;
5.TCP是如何保证可靠传输的
- 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段不给出响应,这时TCP发送数据段超时后会重发
- 对失序数据包进行重排序:TCP报文段作为IP数据报来传输,可能会失序
- 丢弃重复数据
- 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。
- 超时重发
- 流量控制:TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据
6.HTTP协议的特点
- HTTP允许传输任意类型的数据。传输的类型由Content-Type加以标记
- 无状态。对于客户端每次发送的请求,服务器都认为是一次新的请求,上一次会话和下一次会话之间没有联系
- 支持客户端/服务器模式
7.HTTP报文格式
- 请求行:包括请求方法,url,http版本
- 请求头部:以“属性名:属性值”形式保存,服务端跟据请求头获取客户端的信息
- 空行
- 请求体:用户的请求数据,用户名,密码等等
8.HTTP各版本区别
HTTP1.0和HTTP1.1的区别
- 长连接:HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
- 节约带宽:HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端收到100才开始把请求body发送到服务器。返回401就可以不用发送请求body了
- HOST域:HTTP1.0没有HOST域。由于虚拟技术的发展,一个物理主机可能存在多个ip地址
- 缓存处理:HTTP1.1引入了更多的缓存策略
- 错误通知的管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
HTTP1.1和HTTP2.0的区别
- 多路复用:HTTP2.0使用了多路复用,做到了同一个连接并发处理多个请求
- 头部数据压缩:HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩
- 服务器推送:服务端推送是一种在客户端请求之前发送数据的机制。主要是为了改善延迟。它允许服务端通过本地的方式推送资源给浏览器
长连接是一个http请求结束,tcp连接不会马上关闭,而是会继续存在看是否有下一条http请求,但是一次只能通过一条http请求多路复用是在长连接的基础上,去掉了一次只能通过一条http请求的限制,同一条tcp连接可以一次通过多条http请求
9.HTTPS和HTTP的区别
- HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密传输协议
- HTTP端口80,HTTPS端口443
10.SSL过程
1)客户端提交https请求
2)服务器响应客户,并把数字证书和证书公钥发给客户端,客户端在本地找到CA中心的公钥(根证书),验证证书公钥。
3)客户端验证证书公钥的有效性(能否用证书公钥解开数字证书,解开后得到服务端的公钥)
4)有效后,生成一个会话密钥
5)用服务端的公钥加密这个会话密钥后,发送给服务器
6)服务器收到公钥加密的会话密钥后,用自己的私钥解密,得到会话密钥
7)客户端与服务器双方利用这个会话密钥加密要传输的数据进行通信
11.浏览器中输入URL到返回的过程
1)解析域名,通过dns解析获取IP地址
2)浏览器通过ip地址与网站主机建立TCP连接
3)浏览器向主机发送一个HTTP请求(底层涉及到数据封装,将IP模块封装成网络包,ip头部,加上MAC头部,经过网卡,交换机,路由器)
4)服务器响应请求,返回响应数据(上一部反向的过程)
5)浏览器解析响应内容,渲染呈现
详细版:
1)URL解析
- 首先判断输入的是否是一个合法的url还是一个待搜索的关键词,并且跟据你输入的内容进行自动完成,字符编码等操作,还会有些安全检查,访问限制
2)DNS查询
- 如下
3)TCP连接
- 每层都要进行封装,应用层(HTTP数据)-> 传输层(HTTP数据 + TCP首部)-> 网络层(HTTP数据 + TCP首部 + IP地址)-> 数据链路层(HTTP数据 + TCP首部 + IP地址 + MAC地址)
- 服务端是一个反向删除首部的过程
- 传输层在建立连接前还会进行TCP三次握手
4)处理请求
- 主要是进行一些验证,验证是否配置虚拟主机,是否需要重定向
5)接收响应
- 浏览器接收来自服务器的响应资源,会对资源进行分析。首先查看响应头,跟据不同的码做不同的事情。如果响应资源进行了压缩,还会进行解压,还会做缓存
6)渲染页面
12.DNS解析的过程
1)浏览器先搜索自己的DNS缓存
2)如果没有,搜索操作系统的dns缓存和host文件
3)没有则发送到本地域名服务器,没有则向根域名服务器,顶级域名服务器,权限域名服务器
4)找到后,反向返回,并对应的都会保存这个IP地址
13.cookie和session的区别和联系
cookie:
就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务端发送请求的时候都会带上这些特殊的信息。
cookie工作流程:
- servlet创建cookie,保存少量数据,发送给浏览器
- 浏览器获得服务器发送的cookie数据,将自动的保存到浏览器端
- 下次访问时,浏览器将自动携带cookie数据发送到服务器
session:
session对象可以存储用户在程序中的一些数据,用户在系统中不同的web页面之间进行跳转时,存储在session中的数据不会丢失。
区别:
cookie是存储在客户端的,session是存储在服务端的。
cookie是对客户端可见的,session不存在泄露的风险
单个cookie保存的数据<=4kB,一个站点最多保存20个cookie。对于session来说没有上限,但出于服务端性能的考虑不要放太多。
联系:
session的实现依赖于cookie。当服务器创建session后,sessionid通常以cookie的形式存储在客户端。每次HTTP请求,sessionid都会随着cookie被传递到服务器端,这样服务端就可以找到来自于哪个客户端。
14.TCP重传机制
- 超时重传
设定一个计时器,当超过指定的时间后,没有收到对方的ack确认应答报文,就会重发该数据
有两种情况会使用超时重传,数据包丢失和确认应答丢失
<img src="C:%5CUsers%5C86188%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20220728104231397.png" alt="image-20220728104231397" style="zoom:80%;" />
- 快速重传
不以时间为驱动,而是以数据驱动重传
<img src="C:%5CUsers%5C86188%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20220728104404546.png" alt="image-20220728104404546" style="zoom:80%;" />
发送端收到三个ack=2的确认,知道了seq2还没有收到,就会在定时器过期之前,重传丢失的seq2
- SACK(选择性确认)
需要在TCP头部字段里加一个SACK的东西,它可以将缓存的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息就可以只重传丢失的数据
- D-SACK
其主要使用了SACK来告诉发送方有哪些数据被重复接收了
可以让发送方知道,是发出去的包丢了,还是接收方回应的ack包丢了。还是被网络延迟了
15.http常用响应码
- 100:请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分
- 200:成功
- 404:服务器无法跟据客户端的请求找到资源
- 500:服务器内部错误
16.get请求和post请求的区别
- get请求参数通过url传递(参数直接暴露在url上,相对不安全),post的参数放在请求体中
- get请求可以缓存,post不可以
本专栏是我总结的八股大全