新版博客SEO优化基本完成,新老博客内容正在整合中,保证每篇文章高质量。 SiteMap RSS Github
网络通信面试题---长期更新
嘉美伯爵   2019年4月20日 11:58   面试   scoket   218  

七层网络协议及其每层的典型协议

物理层(将数据转化成0和1)

  • 物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输;
  • Rj45,802.3

数据链路层(确定网络数据包的形式)

  • 物理编址、网络拓扑结构、错误校验、数据帧序列以及流控
  • ATM,FDDI

网络层(确定计算机的位置)

  • 网络层负责在源和终点之间建立连接
  • IP,IPX

传输层(端口与端口的通信)

  • 传输层向高层提供可靠的端到端的网络数据流服务
  • TCP,UDP

会话层(建立一个连接)

  • 会话层建立、管理和终止表示层与实体之间的通信会话
  • RPC,SQL

表示层(解决不同系统之间的通信)

  • 供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息 可以被另一个系统应用层识别
  • 加密,ASCII

应用层(规定数据的传输协议)

  • OSI 的应用层协议包括文件的传输、访问及管理协议(FTAM) ,以及文件虚拟终端协议(VIP)和公用管理系统信息(CMIP)等;
  • TELNET,HTTP,FTP,NFS,SMTP

输入url经历了什么

DNS查询--->TCP握手--->HTTP请求--->反向代理Nginx--->uwsgi/gunicorn--->web app 响应--->tcp挥手

三次握手

三次握手,是指建立一个TCP连接时,需要客户端和服务器总共发送3个包

  • 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数 A。
  • 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。
  • 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1。

四次挥手

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

  • 客户端发送一个数据分段, 其中的 FIN 标记设置为1. 客户端进入 FIN-WAIT 状态. 该状态下客户端只接收数据, 不再发送数据.
  • 服务器接收到带有 FIN = 1 的数据分段, 发送带有 ACK = 1 的剩余数据分段, 确认收到客户端发来的 FIN 信息.
  • 服务器等到所有数据传输结束, 向客户端发送一个带有 FIN = 1 的数据分段, 并进入 CLOSE-WAIT 状态, 等待客户端发来带有 ACK = 1 的确认报文.
  • 客户端收到服务器发来带有 FIN = 1 的报文, 返回 ACK = 1 的报文确认, 为了防止服务器端未收到需要重发, 进入 TIME-WAIT 状态. 服务器接收到报文后关闭连接. 客户端等待 2MSL 后未收到回复, 则认为服务器成功关闭, 客户端关闭连接.

Cookie和Session

Cookie Session
储存位置 客户端 服务器端
目的 跟踪会话,也可以保存用户偏好设置或者保存用户名密码等 跟踪会话
安全性 不安全 安全

XSRF和XSS

  • CSRF(Cross-site request forgery)跨站请求伪造
  • XSS(Cross Site Scripting)跨站脚本攻击

apache和nginx的区别

nginx 相对 apache 的优点:

  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源
  • 抗并发,nginx 处理请求是异步非阻塞的,支持更多的并发连接,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
  • 配置简洁
  • 高度模块化的设计,编写模块相对简单

apache 相对nginx 的优点:

  • rewrite ,比nginx 的rewrite 强大
  • 模块超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相对较多, 稳定

如何提高并发

  • HTML静态化
  • 数据库集群、库表散列
  • 缓存
  • 负载均衡
  • CDN
  • 文件服务器、业务服务器、数据存储服务器、缓存服务器、路由服务器、容错服务器

RESTful架构

理解

  • 每一个URI代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

方式

  • GET用来获取资源
  • POST用来新建资源(也可以用于更新资源)
  • PUT用来更新资源
  • DELETE用来删除资源。

socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

  • socket层次

  • socket具体连接处理

Get和Post的区别

  • GET使用URL或Cookie传参;POST将数据放在BODY中。
  • GET的URL会有长度上的限制,则POST的数据则可以非常大。
  • POST比GET安全,因为数据在地址栏上不可见。
  • 最重要的区别:Get用来获取资源,Post用于新建或更新资源。

HTTP常用状态码

2xx 表示成功

  • 200:OK 表示请求服务器成功
  • 201:Created 表示创建实体成功
  • 204 Not Content:表示已处理,但未返回内容;例如 delete 删除成功

3xx 表示重定向

  • 301:Moved Permanently 永久重定向
  • 302:Found 临时重定向
  • 304:有缓存在客户端

4xx 表示客户端错误

  • 400:Bad Request 请求错误
  • 401:Unauthorized 用户认知失败
  • 403:Forbidden 需要授权,服务器禁止
  • 404:Not Found 未请求到资源
  • 405:方法不被允许

5xx 表示服务器错误

  • 500:Internal Server Error 系统Bug
  • 501:Service Unavailable 服务器超负荷或维护

TCP和UDP的区别

TCP

  • tcp是面向连接的,提供可靠的服务
  • tcp是面向字节流的,全双工通信
  • tcp是点到点的

UDP

  • udp是无连接的,不需要三次握手和四次挥手,通信双方不知道是否接受到了数据
  • udp是面向报文的,udp没有拥塞机制,因此不会堵塞
  • UDP支持一对一,一对多,多对一和多对多的交互通信

用途

  • tcp:FTP、Telnet、SMTP、HTTP、POP3
  • udp: DNS、SNMP、语音广播、视频

RESTFul api 规范

  • 方法(在使用restful后状态码即意味着返回的说明,非前后端分离则应使用{"status":"suceess", "message":"content"})来判断
GET:读取(Read)
POST:新建(Create)
PUT:更新(Update)
PATCH:更新(Update),通常是部分更新
DELETE:删除(Delete)
------
GET: 200 OK
POST: 201 Created
PUT: 200 OK
PATCH: 200 OK
DELETE: 204 No Content
  • 请求规范
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
  • 过滤规范
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

HTTPS和HTTP的区别

  • HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

Http 请求包含几部分

  • 状态行
  • 响应头
  • 响应正文
C:\Users\Gage>http gaozhe.top -v
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: gaozhe.top
User-Agent: HTTPie/1.0.2

HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Content-Length: 185
Content-Type: text/html
Date: Mon, 12 Aug 2019 00:42:37 GMT
Location: https://gaozhe.top/
Server: nginx/1.15.2

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.15.2</center>
</body>
</html>

长连接与短链接/HTTP 1.1与HTTP 1.0的比较

  • http1.0(请求--->获取资源--->断开连接(服务器不跟踪客户端请求,每次请求和响应都需要建立一个单独的连接))
HTTP 1.0不支持Host请求头字段
  • http1.1(一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟)
HTTP 1.1中增加Host请求
HTTP 1.1还提供了与身份认证、状态管理、Cache缓存等请求头和响应头
Connection:Keep-Alive 长连接
Transfer-Encoding: chunked 分块传输
Content-Length: 1024 声明传输数据的大小

常用的HTTP请求头与响应头

  • 请求头
Accept: text/plain  可接受的响应内容类型
Accept-Charset: utf-8   可接受的字符集
Accept-Encoding: gzip, deflate  可接受的响应内容的编码方式
Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE==   用于表示HTTP协议中需要认证资源的认证信息  
Cache-Control: no-cache 用来指定当前的请求/回复中的,是否使用缓存机制
Connection: keep-alive/Connection: Upgrade  客户端(浏览器)想要优先使用的连接类型
  • 响应头
Age: 12 响应对象在代理缓存中存在的时间,以秒为单位   
Cache-Control: max-age=3600  通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间

谷歌浏览器开发者工具的作用

1.Elements:元素面板,用来操作DOM和样式、编辑html

2.Console: 控制台console.log(data)来打印出数据,控制台输入javascript进行操作,直接获取元素

3.Sources: 页面源代码,进行断点调试

4.Network: 网络请求,记录当前页面的网络操作,包括详细的时间,http请求和相应,cookies等

5.Application:可以检查加载的所有资源,应用缓存,数据库,cookies,图片等

6.Security:可以再面板当中调试安全问题

7.Performance:性能测试

参考链接

深入浅出-网络七层模型&&网络数据包

TCP和UDP的最完整的区别

常用的HTTP请求头与响应头

HTTP 响应代码

常用HTTP状态码总结

RESTful API 设计指南

HTTP与HTTPS的区别

HTTP 1.1与HTTP 1.0的比较