一 概论

1.1 操作系统

操作系统在面试中一般问的较少,占比不大。可分为以下几个部分(注:本文只关注重点内容)。

Ps:本文中不常用指在低级的java开发中不常用,不涉及到网络架构与底层协议。

  • 进程与线程

    • 区别联系
    • 线程调度:会在后续多线程中出现。重点关注调度算法如时间片轮转调度,先来先服务调度,优先级调度,多级反馈队列调度以及高响应比优先调度
    • 线程切换步骤:上下文的切换代价
    • Liunx下的IPC:进程间的通信
    • 协程:简单了解协程更轻量化,是在用户态进行调度
  • Liunx命令

    ​ 了解 awk,top,netstart,grep,less,tail即可

  • 死锁

    ​ 了解产生原因和解决办法即可

  • 内存分页管理与Swap

    ​ 不常用,如有需求可自行了解

  • 任务队列与CPU Load

    ​ 不常用,如有需求可自行了解

  • 扩展知识点

    ​ 不常用,如有需求可自行了解

img

1.2 计算机网络

  • 4/7层网络模型

    这是最基础的,最重要的部分,在这些里面,tcp和http是最重要的两个部分

  • TCP协议

    • 三次握手与四次挥手

    • 报文状态标志与链接状态

    • Nagel算法与ACK延迟

      需要了解产生的背景:解决小包问题,提高数据荷载比。知道对于延迟比较敏感且频率较低的场景下可关掉Nagel算法

    • Keepalive

    • 滑动窗口与流量控制

      TCP是如何通过滑动窗口来进行流量控制的

  • UDP

    其作用范围没有TCP广,面试中,常与TCP对比

  • HTTP

    • 协议

      了解在http协议当中 有哪些方法,状态码,Cookies

    • HTTPS:

      了解交互过程

  • QUIC

    不常用,如有需求可自行了解

    img

二 操作系统

三 计算机网络

本章参考博客:

https://blog.csdn.net/weixin_45067603/article/details/106974036

本章参考视频:

https://www.bilibili.com/video/BV19E411D78Q?from=search&seid=2570167473232350454&spm_id_from=333.337.0.0

3.1 4/7层网络模型

概述

7层模型是由国际组织统一规定的,也称OSI。4层模型是TCP/IP体系结构。

7层模型包括应用层,表示层,会话层,传输层,网络层,链路层,物理层。

4层模型包括应用层,运输层,网际层,网络接口层。

这里写图片描述

本文采用5层网络模型讲解。具体如下

物理层

定义:解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。

传输介质:网线,网揽,光纤,无线波

任务:确定与传输媒体接口相关的一些特性:机械特性,电气特性,功能特性,规程特性

传输比特流(由1,0转化为电流强弱来进行传输,达到目的之后再传话为1,0。也就是我们常说的数模转化和模数转化,这一层的数据都叫做比特)。

数据链路层

定义:在物理层提供的服务基础上向网络层提供服务。将网络层来的数据可靠的传输到相邻节点的目标机网络层。主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,使之对网络层表示成一条无差错的链路。

媒介承载:网桥,交换机

(注解:路由器是具有多个输入和输出端口的特殊的计算机。其端口也具备物理层、数据链路层和网络层的功能,但是路由器的核心功能还是三层网络功能。因此链路层功能只体现在接口功能上。)

作用:

  1. 为网络层提供服务:无确认无连接服务,有确认无连接服务,有确认面向连接服务。
  2. 链路管理,即连接的建立,维护,释放(用于面向连接的服务)。
  3. 组帧:将网络数据报加头加尾。让接收端可以识别帧的开始与结束。
    格式: 帧头-》ip数据包-》帧尾
  4. 流量控制:见补充
  5. 差错控制:见补充

协议:SDLC、HDLC、PPP、STP、帧中继等

补充:

​ 帧:一组电信号构成一个数据包,即帧,每一帧分为两个部分,表头和数据。表头:包含数据项的一些说明:如发送者,接收者,数据类型等。数据长度固定为18字节(数据的长度为46~1518字节,数据过长则分割成多个帧)。

​ 物理寻址过程:首先广播在同一个子网络上,通过ARP协议确认MAC地址。

​ 透明传输:数据链路层是透明传输:不管所传数据有什么样的比特组合,都应当在链路上传送。但是这样做可能会与标记符重合,所以采用一些方法进行标识。本文不做赘述。

​ 差错控制:为了及早的发现错误,不至于到了最后才发现浪费网络资源,所以在数据链路层进行检测。2种方法进行检测:奇偶检验码,循环冗余码CRC。 纠错编码使用海明码。

​ 流量控制:为了在传输中进行发送速度和接受的匹配。减少传输出错和资源浪费。

​ 介质访问控制技术:当传输介质传输多个不同主机之间的数据是,可能会造成干扰。通过复用协议来解决。

​ 局域网:指在某一区域中由多台计算机互联组成的计算机组,使用广播信道。

​ 广域网:

网络层

定义:向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务

作用:通过网络地址来寻找不同的子网进行传输。建立主机到主机的通信。

媒介承载:路由器(物理层处理-》数据链路层处理 -》网络层处理分组排队 - 》交换结构)

补充:

​ IP数据报和分组:是网络层传输的单元。数据报是一段比较长的数据,将它进行切割成一段段之后就得到分组。

传输层

定义:使用网络层的服务,为应用层提供通信服务(使用不同的端口号区分不同的进程,解决不同的应用传输数据)

作用:

1. 传输层提供进程与进程之间的逻辑通信。
2. 复用和分用
3. 传输层对收到的报文进行差错检测
4. 传输层的两种协议(TCP/IP)

应用层

定义:应用层对应用程序的通信提供服务

作用:因为不同的网络应用之间需要有一个确定的通信规则,如应用程序交换的报文类型是请求还是响应?字段的语义

3.2 TCP协议

概述

本章节参考博客

​ https://www.cnblogs.com/bj-mr-li/p/11106390.html

TCP协议属于运输层的协议。

特点:

	1. 面向连接(虚连接)的传输层协议
	2. 每一条TCP连接只能有两个端点,每条TCP连接只能是点对点的。
	3. TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达。可靠有序,不丢不重。
	4. TCP提供双工通信
	5. TCO面向字节流:tcp把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。

报文状态标志与链接状态

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

确认号:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效

同步位SYN:A和B主机要建立连接,就A先发一个报文,其中SYN=1,B收到之后也回复一个SYN=1的报文,代表接受连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-090aZr4z-1646029001395)(C:\Users\qq\AppData\Roaming\Typora\typora-user-images\image-20220221113911820.png)]

三次握手与四次挥手

三次握手

第一次握手:客户端发送连接请求报文段到服务器,无应用层数据。SYN=1,seq=x(随机)

第二次握手:服务器端为该TCVP连接分配缓存和变量,并向客户端返回确认报文段,允许连接。无应用层数据。SYN=1,ACK=1,seq=y(随机),ack=x+1

第三次握手:客户端为TCP连接分配缓存和变量,并向服务端返回确认的确认,可以携带数据。

第一次握手 : 服务器端知道 客户端的发送没有问题

第二次握手 : 客户端知道服务器的发送和接受是没有问题

第三次握手: 服务端知道 客户端的接受是没有问题

注释

SYN
同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1

FIN
用于释放连接,为1时表示发送方没有发送了

ACK(确认位)
为1表示确认号有效,为0表示报文不含确认信息,忽略确认号字段,上面的确认号是否有效就是通过该标识控制的

ack(确认号)
是期望收到对方下一个报文段的第一个数据字节的序号

seq
TCP连接中传送的字节流中的每个字节都按顺序编号
在这里插入图片描述

四次挥手

第一次挥手:客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。FIN=1,seq=u(是有确认值的)

第二次挥手:服务器端会送了一个确认报文段,客户到服务器这个方向的连接就释放了 -》半关闭状态。ACK=1,seq=v,ack=u+

1

第三次挥手:服务端发完数据,就发出连接释放报文段,主动关闭TCP连接。FIN=1,ACK=1,seq=w,ack=u+1

第四次挥手:客户端会送一个确认报文段,在等到时间计时器设置的2MSL(最长报文段寿命)后,连接彻底的关闭。ACK=1,seq

=u+1,ack=w+1

注释

SYN
同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1

FIN
用于释放连接,为1时表示发送方没有发送了

ACK
为1表示确认号有效,为0表示报文不含确认信息,忽略确认号字段,上面的确认号是否有效就是通过该标识控制的

ack
是期望收到对方下一个报文段的第一个数据字节的序号

seq
TCP连接中传送的字节流中的每个字节都按顺序编号

在这里插入图片描述

滑动窗口与流量控制

滑动窗口

TCP每发送一个数据,都要收到一个确认应答。并且序列号是递增的。当上一个数据包收到应答,再发送下一个。这样效率很低。
于是,引入了窗口的概念,窗口大小,就是一次能并行发送消息的最大值。

相应的序列号应答,即使中间有丢失,收到最后的应答,也认为是成功接收所有数据了,这种模式就是 累计确认 或 累计应答。

窗口实际上是操作系统开辟的缓存区域,发送方的叫发送窗口,接收方的叫接收窗口。(发送窗口应该小于等于接收窗口。)

发送方,依据发送窗口发送数据,接收方接收到数据,放在接收窗口中,此时接收窗口减小,接收方返回window字段,告诉发送方,
接收窗口大小,发送窗口减小。两端的窗口不断变化,这个就是滑动窗口的机制。当然,如果接收方不能及时的返回窗口大小,发送方可能过量的发送数据,这样会造成数据丢失。

流量控制

也是依据滑动窗口的原理,调整窗口的大小,避免流量过大或过小。

3.3 TCP和UDP的相关考点

  1. TCP、UDP区别及使用场景

区别:

​ TCP面向连接,UDP是无连接的

​ TCP提供可靠的服务(可靠有序,不丢不重。)UDP尽最大努力交付。

​ UDP具有较好的实时性,工作效率比TCP搞,适用于对告诉传输和实时性有较高的通信和广播通信。

​ TCP是点对点,UDP支持一对一,一对多,多对一和多对多的交互通信。

​ TCP对系统资源要求较多,UDP对系统资源要求较少。

  1. TCP两次握手可以吗?

    • 防止已失效的连接请求报文段突然又传输到了服务端
    • 通过前两次的握手,服务端还无法确认客户端的接受是没有问题的
  2. 为什么要三次握手

    三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

  3. 为什么要四次挥手
    任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

  4. TCP 协议如何保证可靠传输

    应用数据被分割成 TCP 认为最适合发送的数据块。

    TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

    校验和:
    TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
    TCP 的接收端会丢弃重复的数据。

    流量控制:
    TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
    拥塞控制:
    当网络拥塞时,减少数据的发送。
    停止等待协议
    也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

  5. 第四次挥手为什么要等待2MSL?

    客户端发送完释放连接,如果网络出现不可靠交付。也就说服务端没有收到ACK报文时,那么在等待1MSL后,服务端会不断重发FIN片段。当客户端收到后会重发ACK报文,并再次等待2MSL。

四 时间计划

日期内容批注
2022年2月20日完成概论和计算机网络4/7层网络模型(物理层,数据链路层)的编写。
2022年2月21日完成4/7层网络模型,TCP协议以及相关面试点的编写
2022年2月28日复习计算机网络
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐