秋招准备(一)计算机网络校招笔试面试整理

这几天都在复习一些基础知识,打算把一些常见的笔试面试整理一下。

一、计算机网络的分层

在这里插入图片描述
图上我们已经直观的学习到了OSI的七层协议和TCP/IP协议以及五层协议各层的内容,下面就来简单总结一下各层的内容

  • 物理层
    该层包括物理连网媒介,该层的协议产生并检测电压以便发送和接收携带的数据信号。(网卡)
  • 数据链路层
    网络层和物理层之间的通信,从网络蹭接收到的数据被分割成特定的可被物理层输送的帧。(交换机)
  • 网络层
    负责为分组交换网上的不同主机提供通信服务,在发送数据时,网络层把运输层产生的报文段或用户数据封装成分组和包进行传送。
  • 传输层
    为两台主机进程直接的通信提供通用的数据传输服务。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。
  • 会话层
    负责建立两点之间维持的通信
  • 表示层
    应用程序和网络之间的翻译官
  • 应用层
    应用程序

二、TCP三次握手和四次挥手

1. 三次握手
在这里插入图片描述
第一次:
建立连接时,客户端发送syn包到服务器,并进入SYN-SENT状态,等服务器确认;SYN:同步序列编号。
第二次:
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
2.四次挥手
在这里插入图片描述
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

为什么要三次握手?

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

为什么是四次挥手?

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

三、TCP、UDP协议的区别

UDPTCP
UDP是面向无连接的TCP是面向连接的
UDP的结构比较简单
UDP是基于数据报的TCP是面向字节流的
UDP可能丢包TCP保证数据正确性
UDP不保证数据顺序TCP保证数据顺序

四、TCP协议如何保证可靠传输

  • 超时重传
    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续ARQ协议可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。

  • 停止等待

    • 停止等待是为了实现可靠传输,它的基本原理是没发完一个分组就停止发送,等待确认。在收到确认之后再发下一个分组。
    • 为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停下来等待对方确认。这样可使信道上一直有数据不间断的在传送。这种传输方式可以明显提高信道利用率。
  • 滑动窗口
    滑动窗口机制通俗来说就是一种流量控制技术
    它的本质是描述接收方TCP数据报缓冲区大小的数据,发送方根据这个数据计算自己能发送多长的数据,如果发送方收到接收方的窗口大小为0的TCP数据报,那么发送方停止发送数据,等到接收方发送窗口大小不为0的数据报的到来。

    • 以活动的方式,由接收方反馈会窗口大小后再发送别的字段。
  • 拥塞控制
    在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
    为了进行拥塞控制,TCP发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
    TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理AQM),以减少网络拥塞的发生。

  • 拥塞避免
    让拥塞窗口缓慢的增加而不是加倍的增长,每经历一次往返时间就使拥塞窗口+1。

  • 慢启动
    主机开始发送数据报的时候行测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认的报文段。那么就从小到大增大拥塞窗口大小(翻倍)

  • 快重传
    快重传算法要求首先接收方收到一个失序的报文段后立刻发出重复确认,而不要等待自己发送数据时进行捎带确认。

五、在浏览器中输入url地址 ->> 显示主页的过程

  1. 浏览器查找域名的IP地址(DNS查找过程、浏览器缓存、路由器缓存、DNS缓存)
    使用的协议:DNS,获取域名对应的ip
  2. 浏览器向web服务器发送一个HTTP请求(cookies会随着请求发送给服务器)
  3. 服务器处理请求(请求 处理请求&它的参数 coookies,生成一个HTML响应)
  4. 服务器发回HTML响应
  5. 浏览器开始显示HTML

使用协议:

  • TCP:与服务器建立TCP连接
  • IP:建立TCP协议时,需要发送数据、发送数据在网络层使用IP协议
  • OPSF:IP数据包在路由器之间,路由选择使用OPSF协议
  • ARP:路由器在与服务器通信时,需要将ip地址转换为MAC地址
  • HTTP:在TCP建立完成后,使用HTTP协议访问网页

六、状态码

在这里插入图片描述

七 、各种协议与HTTP协议之间的关系

在这里插入图片描述

八、Http和Https的区别

HTTPHTTPS
端口80443
资源由于加减密消耗更多CPU
开销需要数字证书

Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。

IO,NIO,AIO

  • BIO 同步阻塞IO(BIO)

    • 一个socket连接一个处理线程(这个线程负责这个Socket连接的一系列数据传输操作)。阻塞的原因在于:操作系统允许的线程数量是有限的,多个socket申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。
  • 同步非阻塞的NIO

    • NIO的最重要的地方是当一个连接创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程就可以搞定,当这个线程中的多路复用器进行轮询的时候,发现连接上有请求的话,才开启一个线程进行处理,也就是一个请求一个线程模式。
  • 异步非阻塞的AIO

    • 与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。 即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。 在JDK1.7中,这部分内容被称作NIO.2,主要在java.nio.channels包下增加了下面四个异步通道:

      • AsynchronousSocketChannel
      • AsynchronousServerSocketChannel
      • AsynchronousFileChannel
      • AsynchronousDatagramChannel

      其中的read/write方法,会返回一个带回调函数的对象,当执行完读取/写入操作后,直接调用回调函数。

BIO、NIO、AIO适用场景分析:

  • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
  • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值