01 计算机网络 OSI TCP三次握手 四次挥手 UDP TCP滑动窗口 HTTP HTTPS Socket

目录

OSI模型和TCP/IP模型

概念

OSI 7层模型

物理层

数据链路层

网络层

传输层

会话层

表示层

TCP的三次握手

传输控制协议TCP简介

TCP报文头

三次握手流程图

面试:说说TCP的三次握手

面试:为什么需要三次握手才能建立起连接

面试:SYN超时--首次握手的隐患

面试:建立连接之后,客户端突然出现故障咋办?

TCP的四次挥手

概念

面试:谈谈TCP的四次挥手

面试:为什么会有TIMEWITE状态

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

面试:服务器出现大量CLOES_WITE状态原因

UDP

概念

面试:UDP的特点

面试:TCP和UDP的区别

TCP滑动窗口

概念

作用

滑动窗口相关概念

滑动机制

发送方的4种报文

接收方的三种报文

HTTP

特点

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

HTTP状态码

面试:GET和POST的区别

Cookie和Session

HTTP和HTTPS

HTTPS

概念

加密方式

面试:HTTP和HTTPS的区别

面试:HTTPS真的安全吗?

Socket

概念

socket通信流程


  1. OSI模型和TCP/IP模型

    1. 概念

      1. OSI模型只是提供各种层的概念,TCP/IP模型则是对OSI的具体实现
    2. OSI 7层模型

      1. 物理层

        1. 定义光纤的类型,各种传输介质的传输速率
        2. 网卡工作在这一层
      2. 数据链路层

        1. 可以对物理层中的数据进行检错
        2. 将物理层的数据封装成帧进行传输
        3. 交换机工作在这一层
      3. 网络层

        1. 为帧在路由器中选择最佳的传输路径
        2. 将网络地址翻译成对应的物理地址
        3. 路由器工作在这一层
      4. 传输层

        1. OSI模型中最重要的一层
        2. 作用
          1. 丢失的数据用不用重传
          2. 数据帧用不用顺序到达
          3. 规定适当的收发速率
          4. 将较长的数据宝进行强制分割
            1. 以太网无法接受大于1500字节的数据包
      5. 会话层

        1. 作用
          1. 解决不同操作系统之间数据传输的问题(Linux Windows)
      6. 表示层

        1. 规定消息头的格式
  2. TCP的三次握手

    1. 传输控制协议TCP简介

      1. 面向连接的、可靠的、基于字节流的传输层控制协议
        1. 面向连接的:通信之前需要建立连接
        2. 可靠的
          1. 数据包都有序号,对方收到就发送ACK确认,未收到则重传
          2. 使用效验来检验数据传输是否发生错误
    2. TCP报文头

      1. Source Port、Destination Port
        1. 用于指定发送方和接收方的端口号
          1. 端口号可以唯一确定一个计算机中的一个进程
          2. ip地址+协议+端口号 可以唯一确定互联网中任意一个进程
      2. seq
        1. 发送方用于告诉接收方,我当前发送的数据是从哪里开始的
      3. ack
        1. 发送方告诉接收方:接收方再给发送发发送数据的时候应该从哪里开始
        2. 下一个
      4. TCP Flags
        1. ACK
          1. 确认序号标志
          2. 1代表有效
        2. SYN
          1. 同步序号,仅仅用于建立连接的这个过程
          2. 1代表有效
        3. FIN
          1. finish标志,用于释放连接
          2. 1代表发送方已经没有要发送的数据了
      5. Window
        1. 滑动窗口
        2. 表示接收的缓存大小,以此来控制发送方的发送速率
      6. Checksum
        1. 奇偶校验和
    3. 三次握手流程图

      1. 初始状态
        1. A和B都是关闭的
      2. 请求头(客户A发送的第一片报文)是不包含任何数据的
    4. 面试:说说TCP的三次握手

      1. TCP提供可靠的连接服务,需要三次握手来建立连接
      2. 第一次握手,客户端会向服务器发送一个SYN包,假设这个SYN包的Sequence number=a,然后客户端进入SYN_SEND状态,等待服务器确认
      3. 第二次握手,服务器收到客户端发来的SYN包,如果服务器可以与客户端建立连接的话就会发送一个SYN+ACK,假设这个Sequence number=b,ack=a+1,此时服务器进入SYN_RECV阶段
      4. 第三次握手,客户端收到服务器发来的SYN+ACK包,向服务器发送一个ACK的确认包,Sequence number=a+1,ack=b+1,此时,客户端和服务器都进入ESTABLISHED阶段,完成三次握手。
    5. 面试:为什么需要三次握手才能建立起连接

      1. 为了初始化Sequence number的值
      2. Sequence number作为通信的序号,可以保证应用层接收到的数据不是乱序的
    6. 面试:SYN超时--首次握手的隐患

      1. 隐患分析
        1. 就是前两次握手成功进行了,第三次握手没有成功进行
        2. 服务器会不断的重试,直至超时
          1. Linux系统默认等待63秒才会断开连接
            1. 第一次等待1秒,第二次2秒,第三次4秒,8秒,16秒,32秒。
        3. 坏人可能不断的只进行第一次握手,不进行第三次握手,短时间内用尽SYN队列,就会导致其他链接无法建立起来
      2. 预防SYN Flood攻击
        1. SYN队列满后,通过tcp_syncookies参数回发SYN Cookie
        2. 若是一个正常的连接,则客户端是可以同样回发一个SYN Cookie的
    7. 面试:建立连接之后,客户端突然出现故障咋办?

      1. 保活机制
        1. 开启保活机制的一方会向另一方发送保活探测报文,如果未收到响应就继续发送
        2. 当尝试次数已经超过保活探测次数而仍未收到响应,接收方就会被确定是不可达的,那么发送方就会中断连接
  3. TCP的四次挥手

    1. 概念

      1. 挥手是用于断开连接的
      2. 流程图
      3. CLOSE-WITE状态
        1. 服务器已经收到了关闭连接的请求,但是此时服务器还会再多留出一点时间,把最后剩余的数据也发出去
      4. TIME-WITE状态
        1. Linux的MSL的值是30s,所以整个TIME-WITE状态的持续时间是1min
    2. 面试:谈谈TCP的四次挥手

      1. TCP采用四次挥手来释放连接
      2. 第一次挥手:客户端向服务器发送一个FIN包(FIN=1,seq=u),然后客户端进入FIN_WITE_1状态
      3. 第二次挥手:服务器收到客户端的FIN包,服务器向客户端发送一个ACK包(ACK=1,seq=v,ack=u+1),然后服务器进入CLOSE_WITE状态
      4. 第三次挥手:服务器完成最后的数据发送,向客户端发送一个FIN包(FIN=1,ACK=1,seq=w,ack=u+1),然后服务器进入LAST_ACK状态
      5. 第四次挥手:客户端收到服务器发来的FIN包,客户端向服务器发送一个ACK包(ACK=1,seq=u+1,ack=w+1),然后客户端进入TIME_WITE阶段,服务器收到客户端的ACK包之后直接就进入了CLOSED状态,完成四次挥手
    3. 面试:为什么会有TIMEWITE状态

      1. 确保有足够的时间完成第四次挥手
        1. 如果客户端发送的ACK包服务器没有收到的话,那么服务器就会再次发送一个FIN包,这样一来一回的时间刚好是两个MSL,所以2个MSL时间一定能确保服务器如果没有收到ACK的包我客户端还可以收到服务器再次发来的FIN包
      2. 避免新旧连接的数据包发生混淆
        1. 因为有些路由器会缓存数据包,如果客户端没有经过TIME_WITE时间而立即建立下一个连接,那么上一个连接的数据包就有可能和下一个连接的数据包发生混淆
    4. 面试:为什么需要四次挥手才能断开连接

      1. 因为TCP是全双工的,而且断开连接的话需要客户端和服务器都分别发送FIN报文和ACK报文,这样,客户端需要发送2次,服务器也需要发送2次,加起来就需要4次,所以就需要四次挥手才能断开连接
    5. 面试:服务器出现大量CLOES_WITE状态原因

      1. 这个时候一般都是服务器这边的原因,因为极有可能是服务器通知应用进程要关闭连接的,而应用进程却没有及时响应关闭连接,导致服务器的FIN报文一直没有发送出去,CLOSE_WITE状态达到上限,新的请求就无法被处理
      2. 解决办法
        1. 检查代码,特别是释放资源的代码
        2. 检查配置,特别是处理请求的线程配置
  4. UDP

    1. 概念

      1. 用户数据报
      2. 报文结构
    2. 面试:UDP的特点

      1. 面向无连接的
      2. 不维护连接状态,支持同时向多个客户端传输同样的信息
      3. 额外开销小,报文头部只有8个字节
      4. 吞吐量只受限于数据生成速率、传输速率以及机器性能
      5. 尽最大了解交付,不保证可靠交付,不需要维持复杂的链接状态表
      6. 面向报文,不对应用程序提交的报文信息进行拆分或者合并
    3. 面试:TCP和UDP的区别

      1. 面向连接vs面向无连接
      2. 可靠性
      3. 有序性
      4. 速度
  5. TCP滑动窗口

    1. 概念

      1. 重传机制
        1. RTT:从发送送一个数据包到收到对应的ACK所花费的时间
        2. RTO:重传时间间隔
          1. 客户
          2. 端发送一个数据包,如果超过RTO规定的时间还没有收到对应的ACK,就会触发重传机制
      2. 通过控制窗口的大小即可实现流量控制
    2. 作用

      1. 可以实现流量控制和乱序重排
      2. 加快TCP的数据传输速率
    3. 滑动窗口相关概念

      1. 概念
        1. a:a之前的数据都已经全部发完并收到ACK确认了
        2. b:指向下一个要发送的报文
        3. c:c之后的报文是不允许发送的
        4. e:e之前的都是已经全部收到的报文
        5. g:g后面的报文就算收到也不会做处理的
    4. 滑动机制

      1. 发送窗口
        1. 只有最左端的收到ACK报文发送窗口才会向前移动
      2. 接收窗口
        1. 只有最左端的收到报文接收窗口才会向前移动
    5. 发送方的4种报文

      1. 已经发送并且收到确认的
      2. 已经发送未收到确认
      3. 没有发送但可以发送
      4. 没有发送且不允许发送
    6. 接收方的三种报文

      1. 已经接收到的报文
      2. 可以接收但还没有接收到的报文
      3. 可以接收但接收到不会发送确认的报文
  6. HTTP

    1. 特点

      1. 支持客户/服务器模式
      2. 简单快速
      3. 灵活
        1. 可以传输任意类型的数据
      4. 无连接
        1. 不是udp的那个无连接,而是限制服务器每次只处理一个请求,处理完了之后就断开连接了
      5. 无状态
        1. 对事务处理没有记忆能力,意味着如果后续处理需要以前的信息则必须重传
    2. 面试:在浏览器地址栏输入URL,按下回车之后经历的流程

      1. DNS解析
        1. 先解析域名对应的ip地址,有了ip地址才能简历TCP连接
          1. 浏览器缓存
          2. 系统缓存
          3. 路由器缓存
          4. ips服务器缓存
          5. 根域名服务器缓存
          6. 顶级域名服务器缓存
      2. TCP连接
        1. 使用ip地址和端口号建立tcp连接
        2. 三次握手
      3. 发送HTTP请求
      4. 浏览器处理请求并返回HTTP报文
      5. 浏览器解析渲染页面
      6. 连接结束
        1. 四次挥手
    3. HTTP状态码

      1. 状态码分类
        1. 1xx
          1. 指示信息
          2. 表示请求已接收,继续处理
        2. 2xx
          1. 成功
        3. 3xx
          1. 重定向
          2. 要完成请求需进行进一步操作
        4. 4xx
          1. 客户端错误
          2. 请求有语法错误或请求无法实现
        5. 5xx
          1. 服务器端错误
          2. 服务器未能实现合法的请求
      2. 常见的状态码
    4. 面试:GET和POST的区别

      1. GET可以被浏览器缓存,而POST不能
        1. 如果想减轻服务器的压力,那就应该尽量使用GET请求
    5. Cookie和Session

      1. Cookie
        1. 概念
          1. 是服务器给浏览器发送的特殊信息,以文本的形式存储在浏览器中
          2. 客户端再次请求的时候,会把Cookie发回
          3. 服务器接收到后,会解析Cookie生成与浏览器相对应的内容
      2. Session
        1. 概念
          1. 服务器生成一个Session,并产生一个与之对应的Session Id
          2. 然后将sessionId放进cookie中返回给浏览器
      3. 面试:Cookie和Session的区别
        1. Cookie存放在浏览器上,Session存放在服务器上
        2. Session更安全
        3. 如果想减轻服务器的压力,应尽量使用Cookie
  7. HTTP和HTTPS

    1. HTTPS

      1. 概念

        1. 超文本传输安全协议
        2. 他比HTTP协议多了一层SSL层
        3. 普通的HTTP协议全部都是明文传输,没有任何的加密,很容易被黑客劫持
      2. 加密方式

        1. 对称加密
          1. 加密和解密使用同一个秘钥
        2. 非对称加密
          1. 加密和解密使用不同的秘钥
          2. 很安全,但是效率要低很多
        3. 哈希算法
          1. 将任意长度的信息转为固定长度的值
          2. 算法不可逆
          3. MD5
        4. 数字签名
          1. 证明某个信息或某个文件是某人发出/认同的
      3. 面试:HTTP和HTTPS的区别

        1. HTTPS需要到CA申请证书(需要花钱),HTTP不需要
        2. HTTPS密文传输,HTTP明文传输
        3. 连接方式不同,HTTPS默认使用443端口,HTTP默认使用80端口
        4. HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全
      4. 面试:HTTPS真的安全吗?

        1. 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险
          1. 服务器收到http协议的请求,会进行跳转,而在跳转的过程中是有被劫持的风险的
        2. 可以使用HSTS(HTTP Strict Transport Security)优化
          1. 不是主流,了解即可
  8. Socket

    1. 概念

      1. 可以应用于多种传输协议,将协议里面的细节都封装起来了,形成一些基础的函数接口(create、connect、send、accept、read、close)
      2. socket起源于Unix,而Unix是基于一切皆文件的哲学,服务器和客户端各自维护一个socket文件,他们可以通过往socket文件中写入数据供对方读取,也可以读取对方往socket中写入的数据
    2. socket通信流程

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值