IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络面试题 -> 正文阅读

[网络协议]计算机网络面试题

image.png

  1. 物理层主要定义物理设备标准,主要作用是传输Bit流,网卡工作这这层中,数模转换与模数转换
  2. 数据链路层,在传输bit流的过程中会产生错传、数据传输不完整的可能,因此数据链路层定义如何格式化数据,以及如何控制对物理介质的访问,本层将bit数据组成了帧,其中交换机在本层工作,对帧解码,并根据帧中的信息把消息发送到正确的接收方
  3. 网络层,·主要功能将网络地址翻译成对应的物理地址,路由器数据网络层,此层的数据称为数据包,此层的协议为IP协议,路由器属于本层

image.png

  1. 传输层,传输层解决了主机间的传输,并且解决了传输质量,协议有TCP/UDP
  2. 会话层,建立和管理应用程序之间的通信
  3. 表示层,解决不同系统之间的通信语法问题

image.png

  1. 应用层,更方便的应用层网络接收到的数据 http协议

image.png

TCP/IP

OSI的实现:TCP/IP四层网络模型

TCP/IP是协议族的统称

image.png

image.png

TCP的三次握手与四次挥手

TCP简介:

  • 面向连接的、可靠的、基于字节流的传输通信协议
  • 将应用的数据流分割成报文段并发送给目标节点的TCP层
  • 数据包都有序号,对方收到则发送ACK确认,未收到则重传
  • 用奇偶校验和函数来检验数据在传输过程中是否有误

TCP报文头

2635580881-58b7ca8173112_fix732.webp

源端口:

  • 目的端口:唯一标识一台机器上的一个进程

  • 序号(seq):占四个字节,编号,加入当前是107,数据长度100,下一个报文序号就是207

  • 确认号:4字节,期望收到对方下一个字节的第一个报文的第一个数据字节的序号

  • 数据偏移:头部有可选字段,长度不确定,所它指出tcp数据距离tcp报文的起始处有多远

  • 保留域:以后使用,目前是0

  • Tcp flgs

    • URG:紧急指针标志,1表示有效,为0无效

    • ACK:确认序号标志: 1有效,0为无效,上面的确认号是否有效由此确定

    • PSH:push标志 1表示生效,代表接收方需要尽快将报文段交给应用程序,而不是在队列里排队

    • RST:重置连接标志,重置由于主机崩溃或其他原因出现错误的连接,或者用于拒绝非法的报文段

    • SYN:同步序列号,用于建立连接过程,在连接请求中,syn等于1 ACK等于0代表该数据段没有使用捎带的数据域

    • FIN:finish标志,用于释放连接,为1是表示发送方没有数据要发送了,需要断开连接

  • window:滑动窗口大小,发送端接收端的缓存大小,以此达到控制发送端的发送速率,从而达到流量控制

  • 检验和:奇偶校验,对整个tcp报文段包括TCP头部和tcp数据以16位进行计算,由发送端进行计算和存储,接收端进行校验

  • 紧急指针:上述urg为1生效,指出本报文段的紧急数据字节数

  • 可选项:长度可变,定义其他的可选参数

TCP三次握手流程

image.png

三次握手:首先客户端和服务器都是关闭状态,假设客服端主动打开,服务器被动打开

服务器先创建传输控块时刻准备接收连接请求,服务器进入listen监听状态,客户端发出连接请求报文,报文头syn=1,初始序号seq=x,此时客户端进入同步已发送状态,发送过去的报文段是不能携带数据的,并且会消耗掉一个序号,这是第一次握手

服务器接收到如果同意连接就发送确认报文,确认报文中包含了SYN=1,ACK=1,seq=y,ack=x+1,因为x序列号已经消耗,所以ack等于x+1,发送完成后服务器进入同步收到状态,这是第二次握手

当客户端收到确认报文后,会向服务端一个给出一个确认,ACK=1,seq=x+1,ack=y+1,发送完成后客户端进入已建立连接状态,这个报文段可以携带数据,如果不携带数据就不会消耗seq序号

当服务器收到确认后也会进入已建立连接状态,三次握手完成

总结

image.png

为什么需要三 次握手才能建立连接

为了初始化Sequence Number的初始值,通信的双方要互相通知对方自己的初始化的seq,就是上面的x和y,这个号要作为以后通讯的标志,以保证应用层接收到的数据不会因为网络上的传输而乱序,

即tcp会用这个序号拼接数据

首次握手的隐患-syn超时

问题原因

  • Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认
  • Server不断重试直至超时,Liunx默认等待63秒才断开连接(5次)
  • 可能会收到SYN Flood风险,恶意程序不停的发,让连接耗尽不能处理正常请求

针对SYN Flood的防护措施

SYN队列满后,通过tcp_syncookies参数回发SYN Cookie (原地址端口+目标地址端口+时间戳)

若为正常连接则Client会回发SYN Cookie,直接建立连接

建立连接后,Client出现故障怎么办

保活机制

  • 向对方发送保活探测报文,如果未收到响应则继续发送
  • 尝试次数达到保活探测数仍未收到响应则中断连接

TCP的四次挥手

image.png

第一次挥手:seq的值等于之前最后发送过来的数据最后一个字节的序号+1,此时客户端进入FIN-WAIT-1状态,tcp规定,就算fin报文段不携带数据也要消耗掉序号

第二次挥手,服务端发送ACK包到客户端,并且进入close-wait状态

image.png

为什么会有Time_wait状态

原因

  • 确保有足够的时间让对方收到ACK包
  • 避免新旧连接混淆

为什么需要四次挥手才能断开连接

因为全双工,发送方和接收方都需要FIN报文和ACK报文

服务器出现大量CLOSE_WAIT状态的原因

对方关闭socket连接,我方忙于读或写,没有及时关闭连接

  • 检查代码,特别是释放资源的代码
  • 检查配置,特别是处理请求的线程配置

TCP与UDP区别

UDP简介

UDP报文结构

v2-84c4fa70b1d2ebd55e835edc78c56493_720w.png

image.png

UDP的特点

  • 面向非连接
  • 不维护连接状态,支持同时向多个客户端传输相同的消息
  • 数据包报头只有8个字节,额外开销较小
  • 吞吐量只受限于数据生成速率、传输速率以及机器性能
  • 尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
  • 面向报文,不对应用程序提交的报文信息进行拆分或合并

TCP与UDP区别

结论

  • 面向连接vs无连接 Udp适合消息的多播发布
  • 可靠性
  • 有序性(TCP利用序列号保证消息报的顺利交付,到达可能无序,但是最终会排序,而UDP不具备有序性)
  • 速度(TCP要建立连接保证消息的可靠性和有序性)
  • 量级TCP重量级UDP轻量级体现在元数据的头大小,TCP是20字节,UDP是8字节

TCP的滑动窗口

RTT和RTO

  • RTT:发送一个数据包到收到对应的ACK,所花费的时间
  • RTO:重传时间间隔

TCP使用滑动窗口做流量控制与乱序重排

  • 保证TCP的可靠性
  • 保证TCP的流控特性

窗口数据的计算过程

image.png

LastByteAcked:接收端已确认的ACK确认的seq位置

LastByteSent:以发送但未收到ack确认的长度

LasByteWritten:指向上层应用已写完的最后一个字节

滑动窗口的基本原理

TCP会话的发送方

image.png

数据分为四类:已发送并且得到回应的,已发送但未得到回应的,未发送但得到端允许发送的,未发送且由于达到了window的大小不允许发送

image.png

TCP会话的接收方,和发送方一致

image.png

HTTP

http是属于应用层的协议,是基于请求与响应模式的无状态的基于应用层的协议,主要特点:

  • 支持客户/服务器模式
  • 简单快速(客户端向服务端请求服务的时候只需传送请求方法和路径,请求方法有get,post)
  • 灵活 http允许传输任意类型的数据对象
  • 无连接 无连接的含有是限制每一次连接只处理一个请求,节省传输时间,http1.1起使用长连接
  • 无状态 协议对事务处理没有记忆能力,

HTTP请求结构

image.png

包含:请求行 请求头部 空行 请求正文 四个部分组成

请求行包含:

请求方法:get post

URL:

协议版本

请求头部包含:

由若干头部字段组成,用来设置一些http请求的参数,例如host,Connection

请求空行是必须的,即使请求正文为空

请求正文:

HTTP响应结构

image.png

状态行,响应头部 空行 响应正文

协议版本 状态码 状态码描述

请求响应步骤

客户端连接到web服务器建立一个tcp套接字连接

  • 发送http请求
  • 服务端接收到请求并返回HTTP响应
  • 释放连接TCP连接(若连接模式为close则服务器主动断开连接,若为长连接则会保持一段时间连接)
  • 客户端浏览器解析HTML内容

在浏览器地址栏键入URL,按下回车之后经历的流程

DNS解析:首先浏览器会依据URL逐层查询DNS服务器缓存,解析URL的域名所对应的ip地址,DNS缓存从近到远依次是,浏览器缓存->系统缓存->路由器缓存->ips服务器缓存->根域名服务器缓存->顶级域名服务器缓存 , 从哪个缓存找到对应的ip就直接返回,不再查找后续缓存,

**TCP连接:**根据Ip地址和对应端口和服务器建立TCP连接

发送HTTP请求:该请求发送给服务器

服务器处理请求并返回HTTP报文

浏览器解析渲染页面

连接结束:释放TCP连接,TCP四次挥手

**
**

HTTP状态码

五种可能都取值

**1xx:**指示信息请求已接收

**2xx:**成功-表示请求已被成功接收、理解、接受。

**3xx:**重定向–要完成请求必须进行更进一步的操作

**4xx:**客户端错误–请求有语法错误或请求无法实现

**5xx:**服务器错误–服务器未能实现合法的请求

常见状态码

200 OK:正常返回信息

400 Bad Request:客户端请求有语法错误,不能被服务器所理解

401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden:服务器收到请求,但是拒绝提供服务

404 Not Found:请求资源不存在,eg,输入了错误的URL

500 Internal Server Error:服务器发生了不可预期的错误

503 Server Unavailable:服务器当前不能处理客户端请求,一段时间后可能恢复

GET请求和POST请求的区别

从三个层面来解答:

Http报文层面:GET将请求信息放在URL,POST放在报文体中 post更安全 get的参数是有长度限制的,post没有

数据库层面:GET符合幂等性和安全性,POST不符合

其他层面:GET可以被缓存、被存储,而POST不行

COOKIE和Session的区别

Cookie

  • 是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端
  • 客户端再次请求的时候,会把Cookie回发
  • 服务器接收到后,会解析Cookie生成与客户端相对应的内容

cookie的设置与发送过程

image.png

Seesion简介

    • 服务器端的机制,在服务器上保存的信息
    • 解析客户端请求并操作session id,按需保存状态信息

session实现方式

    • 使用Cookie来实现
    • 使用URL回写来实现‘

image.png

cookie和seesion的区别

    • cookie数据存放在客户的浏览器上,session数据放在服务器上
    • Session相对于Cookie更安全
    • 若考虑减轻服务器负担,应当使用cookie

HTTP和HTTPS的区别

image.png

SSL(Security Sockets Layer 安全套接层)

  • 为网络通信提供安全及数据完整性的一种安全协议
  • 是操作系统对外提供的API,SSL3.0后更名为TLS
  • 采用身份验证和数据加密保证网络通信段安全和数据的完整性

加密方式:

  • 对称加密:加密和解密都使用同一个密钥 效率高
  • 非对称加密:加密使用的密钥和解密使用的密钥是不相同的,加密的数据是有限的
  • 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆,MD5
  • 数字签名:在数据后面加上某些内容给你,证明某个消息或者文件是某人发出/认同的

HTTPS数据传输流程

  • 浏览器将支持的加密算法信息发送给服务器
  • 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
  • 浏览器验证证书合法性(在浏览器会有标志显示),(当证书受信以后,web会随机生成一串密码,并使用证书中的公钥加密,之后使用约定好的hash算法握手消息并生成随机数对消息进行加密)并结合证书公钥加密信息发送给服务器
  • 服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
  • 浏览器解密响应消息,并对消息进行验证,之后进行加密交互数据

HTTP和HTTPS的区别

  • HTTPS需要到CA申请证书,HTTP不需要
  • HTTPS密文传输,HTTP明文传输
  • 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
  • HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全

HTTPS真的很安全吗

  • 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险
  • 可以使用HSTS优化

Socket简介

Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口

image.png

Socket通信流程

image.png

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:49:47  更:2021-08-31 15:50:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:00:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码