网络面试核心知识

OSI 开放互联参考模型

七层协议

  • 物理层 bit 网线类型 传输介质 10二进制数据转电流 数模转换 网卡工作
  • 数据链路层 格式化数据进行传输 错误检测 纠正 帧 交换机
  • 网络层 路由器 分组传输 ip协议 包
  • 传输层 segment 传输质量 tcp udp 协议 分片 序列号
  • 会话层 建立管理应用程序
  • 表示层 不同通信系统能理解的解析
  • 应用层 http协议

TCP/IP

  • 应用层
  • 传输层
  • 网络层
  • 链路层

TCP 三次握手

  • tcp 传输控制协议
  • 面向连接,可靠,基于字节流的传输层控制协议
  • 应用层数据分割成报文段并发送给目标节点的tcp层
  • 数据包都有序号,对方受到则发送ack确认,未受到就重传
  • 使用奇偶校验和来检验是否错误

tcp 源端口 目的端口各占两个字节 不包括ip

进程信息交互:管道 内存共享 信号量 消息队列

进程号pid 本地唯一,通过协议端口号标识进程 套接字

序号字段 4个字节

ack字段 4个字节,期望受到的下一个报文的字段号

offset 偏移量

tcp flag

  • urg 紧急指针标志
  • ack 确认序号标志
  • psh push标志
  • rst 重置连接标志
  • syn 同步序号 用于建立连接
  • fin 释放连接用

window 滑动窗口

urgent pointer紧急指针

握手达到全双工通信 对等的

流程

  • 开始都是close状态
  • syn=1 seq=x
  • syn=1 ACK=1 seq=y ack=x+1
  • ACK =1 seq = x+1 ack = y+1

为什么需要三次握手?

  • 初始化Sequence Number 初始值

首次握手隐患——SYN超时

  • Server 受到Client SYN 回复SYN-ACK 时候未收到ACK确认
  • Server 不断重试直至超时,LINUX 默认等待63秒才能断开连接

可能会SYN Flood攻击

  • SYN 队列满,tcp_syncookies参数回发SYN cookie
  • 正常连接则CLient 回发cookie ,才能建立连接

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

保活机制

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

四次挥手

终止tcp连接

  • FIN =1 seq=u
  • ACK = 1,seq=v,ack=u+1 半关闭
  • FIN = 1 ACK=1 seq=w ack = u+1
  • ACK=1,seq=u+1,ack=w+1
  • 客户端等待2 MSL 真正释放 linux 20s 服务器直接关闭连接

为什么有TIME_WAIT状态

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

为什么需要四次挥手?

  • 全双关,双方都需要FIN ACK报文 2*2=4

服务器大量CLOSE_WAIT

  • 对方关闭socket连接 我方由于忙于读写 没有及时关闭连接
    • 检查代码,特别是释放资源的代码
    • 检查配置,特别是处理请求的线程配置
    • netstat -n | awk ‘/^tcp{++$[NF]}END{for(a in S) print a,s}/’ 获取服务器下处于各个状态的连接数 检查CLOSE_WAIT 数量

TCP UDP区别

UDP报文

源端口 目的端口 长度 校验和 数据

特点

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

区别

  • tcp 可靠 udp速度
  • 连接 无连接
  • 握手 多播放
  • 有序保证 不保证
  • 速度

滑动窗口

  • RTT RTO
  • RTT 发送包到受到ACK的时间
  • RTO 重传间隔

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

  • 保证TCP 流控特性
  • 保证有效性

发送方

  • 发送且收到
  • 发送未受到 发送窗口
  • 没法但是在窗口允许范围的 发送窗口
  • 超过范围不能发送的

接受

  • 已经接受
  • 没接受但是准备接受
  • 不能接受

确认重传机制

滑动窗口可以调整

HTTP

超文本传输协议

1.1 持续连接

  • 支持客户/服务器模式
  • 简单快速
  • 灵活
  • 无连接
  • 无状态

报文

  • 请求行
  • 请求头
  • 请求体

http响应

  • 状态行
  • 响应头部
  • 响应体

http简介

web 服务器和客户端传输数据

响应步骤

  • 客户端连接到web服务器
  • 发送http请求
  • 服务器接收并返回http响应
  • 释放tcp连接
  • 客户端浏览器解析html内容

url地址栏输入url流程

  • dns解析 浏览器缓存 系统缓存 路由器缓存 ips缓存 根域名服务器缓存 顶级域名服务器缓存
  • tcp 连接 三次握手
  • 发送HTTP请求
  • 服务器返回HTTP报文
  • 浏览器解析页面
  • 连接结束

HTTP 状态码

1xx 接收,继续处理

2xx 成功接受并处理

3xx 重定向

4xx 客户端错误——语法错误或者找不到页面

5xx 服务器端错误 原因类似

200 ok 正常

400 客户端请求有语法错误

403 被禁止

404 资源不存在

500 服务器不可预期的错误

503 服务器不能处理,一段时间恢复

get post 请求的区别

  • Http get 请求信息在url 有长度限制 post 放在报文体中 没有限制
  • 数据库 get符合幂等性 一次多次结果三一样的 安全性 post不会
  • 其他 get 可以浏览器缓存 存储 post不会缓存

Cookie Session区别

  • 服务器发送给客户端的特殊信息,以文本形式存放在客户端
  • 客户再次请求,直接携带cookie回发
  • 受到后解析cookie得到对应的内容

cookie设置 发送过程

session

  • 服务器机制,保存信息

  • 解析客户请求并操作session id 按需要保存状态信息

  • 实现

    • cookie实现 为主
    • url回写 cookie禁止后使用

cookie session

  • 0 cookie 浏览器 session服务器

  • session相对于cookie更安全

  • 减轻负担 使用cookie

HTTP HTTPS区别

  • 加入ssl层 更加安全

SSL 安全套接层

  • 网络通信提供的安全协议
  • 身份验证和数据加密

加密方式

  • 对称加密
  • 非对称加密 公钥私钥
  • 哈希算法 任意长度转换固定长度md5
  • 数字签名 证明信息没有改

数据传输流程

  • 浏览器支持加密算法发送给服务器
  • 服务器选择一套浏览器支持的加密算法,以证书形式回发浏览器
  • 浏览器证书合法性,结合证书公钥加密信息发送给服务器
  • 服务器使用私钥,验证哈希,加密信息回发浏览器
  • 浏览器响应信息,对消息进行验证,之后进行加密交互数据

Http https区别

  • https 需要ca申请证书 http 不需要
  • s加密传输 明文传输
  • 连接方式不同s 442 http 80
  • https 在http基础上加密 认证 完整性保护 更加安全

真的安全吗?

  • 默认填充http:// 请求需要跳转,有被劫持的风险
  • hsts优化之
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值