计算机网络面试题

计算机网络模型

键入网址后会发生什么

浏览器对URL进行解析

通过DNS域名解析获取IP地址

生成HTTP请求报文

TCP三次握手建立连接

客户端向服务端发送HTTP请求

服务端收到请求向客户端返回数据

浏览器渲染页面

TCP四次挥手断开连接

HTTP

HTTP是什么?

HTTP是超文本传输协议,是应用层协议,超文本是指可以传输的内容不只是简单的文本还可以有视频图片等,传输协议是指一种计算机之间通信的行为约定和规范

HTTP常见的状态码

HTTP有哪些字段

Host字段:客户端发送请求时用来指定服务器的域名

content-Length字段:服务器返回数据时,用来表明本次回应的数据长度是多少字节

connection字段:用于 TCP持久连接设置成keep-alive即可持久连接

content-Type字段:用于服务器响应时告诉客户端返回数据的格式

content-encoding:说明数据的压缩方式

Get和Post的区别

Get请求的含义是请求从服务器获取资源,Post则是向服务器提交数据,数据放到请求体里

Get请求参数url可见,Post参数url不可见(Post相对安全)

Get请求可以缓存,Post不可以缓存

Get请求传输数据的大小在2k-4k,Post请求可以手动设置,且可以无限大

HTTP的优缺点

优点

简单:基本报文格式是请求行、请求头、请求体而且头部信息是key-value形式好理解

灵活易于扩展:HTTP协议中的各类请求方法都不是固定死的,比如URL、状态码、头信息都可以用户自定义和扩充HTTP位于应用层,所以下层可以发生变化HTTPS就是在应用层和传输层加了SSL/TLS

应用广泛跨平台

缺点

HTTP协议里有优缺点一体的两大双刃剑分别是无状态和透明传输,还要不安全的缺点

无状态

无状态的好处:服务区不需要记忆HTTP状态所以减轻了服务器的负担

无状态的坏处:既然不能记忆状态,那一些相关联的操作会有问题,比如添加购物车、下单、支付

解决方案:会话技术

明文传输

明文传输的好处:明文意味着传输过程中的信息方便阅读通过浏览器f12控制台直接就能看到

明文传输的坏处:正因为方便阅读,HTTP信息容易被人窃取

不安全

  • 通信使用明文,内容可能被窃听。比如账号泄露

  • 不验证通信放的身份,因此有可能遭遇伪装,比如假淘宝

  • 无法证明报文完整性,有可能已经被篡改

HTTP与HTTPS的区别

  • HTTP是明文传输不安全,HTTPS解决了不安全的缺陷在HTTP和TCP之间加了SSL/TLS安全协议,使得报文加密传输提高安全性

  • HTTPS在TCP三次握手之后还需要进行SSL/TLS握手过程,才能进行加密传输

  • HTTP端口号80,HTTPS端口号443

  • HTTPS需要向CA申请数字证书

HTTPS解决了HTTP的窃听风险、篡改风险和冒充风险

HTTP版本的演变

HTTP/1.1相比于1.0多了长连接和管道通信提高了性能

但仍然存在性能瓶颈:

  • 头信息没有压缩就发送,首部信息越大延迟越大

  • 服务器按请求的顺序响应,如果服务器响应慢会导致对头阻塞

  • 没有请求优先级控制

  • 请求只能从客户端开始,服务端只能被动响应

HTTP2协议基于HTTPS相比于HTTP1.1有以下变化

头部压缩:如果同时发送多个请求他们的头是相似的或一样的协议会消除重复的部分

二进制格式:头部信息和数据体都换成了二进制格式

多路复用:HTTP2可以并发处理多个请求或回应而不用按顺序挨个处理

服务器推送:服务器不再被动响应,而可以主动向客户端发送数据

TCP

什么是TCP

TCP是面向连接的、可靠的、基于字节流的传输层通信协议

面向连接:一定是一对一才能进行连接,不像UDP可以一对多发送消息

可靠的:无论网络出现什么状况TCP都可以保证报文一定传输到接收端

字节流:消息是无边界的,无论多大都可以传输

如何唯一确定一个TCP连接

TCP和UDP的区别

TCP面向连接UDP无连接

TCP只能是一对一服务,UDP可以一对一、一对多、多对多

TCP可靠传输、UDP不可靠传输

TCP首部开销最低20个字节、UDP首部开销固定8字节

TCP是流式传输没有边界、UDP是按包传输有边界

TCP三次握手建立连接

  1. 一开始客户端和服务端都处于closed状态

  1. 首先客户端会随机初始化一个序列号将序列号置于TCP首部的序号字段,同时把SYN字段置为1,表示向服务端发起同步请求建立连接

  1. 服务端收到SYN报文后也会初始化一个序列号将其填入TCP报文首部然后把TCP首部的确认应答号填入 客户端序列号+1,接着把ACK和SYN设置成1,发送给客户端

  1. 客户端收到服务端报文后像服务端发送确认应答报文

  1. 服务端和客户端建立连接成功

为什么要三次握手?

三次握手可以阻止重复历史连接和初始化

三次握手可以同步双方序列号

三次握手可以避免资源浪费

TCP四次挥手断开连接

  1. 客户端打算断开连接时会发送一个TCP首部FIN=1的报文

  1. 服务端收到该报文后发送ACK=1的应答报文

  1. 客户端收到ACK应答报文之后进入等待状态

  1. 等服务端处理完数据后像客户端发送FIN=1的报文

  1. 客户端收到FIN=1的报文后回复一个ACK应答报文

  1. 服务端收到应答报文后进入closed状态

  1. 客户端等待2MSL后进入closed状态

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值