C++面试宝典——计算机网络

  • 三次握手和四次挥手

C++面试宝典——计算机网络

SYN请求建立连接

ACK确认

ack 确认号

seq同步***

  • 为什么是三次握手

第一次握手:客户端发送能力和服务端接收能力没问题

第二次握手:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

第三次握手:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

如果两次,客户端第一次发送请求报文丢失,第二次发送建立连接,数据传输完毕后,就释放了连接。但此时客户端的第一个发送到达服务器再次建立连接而不传送数据。

  • 为什么是四次挥手

因为TCP的半关闭,TCP提供了连接的一端在结束它的发送后还能接收另一端的数据。

服务器收到FIN,发送ack确认我已经收到,但此时还继续把没发送完的数据发给客户端,然后再发送FIN。

  • 四次挥手释放连接等待2MSL的意义?

MSL报文在网上存在的最长时间,超过这个时间的报文会被丢弃。

1.保证客户端发送的最后一个ACK能后到达服务端。

2.使本连接持续时间内所有的报文段都从网络中消失,使下一个新的连接不会有旧的连接。

  • HTTP和HTTPS的区别?

1.HTTP以明文的方式在网络中传输数据,而HTTPS则是经过TLS加密

2.HTTPS经过三次握手还需进行SSL的handshake揭秘

3.HTTPS需要服务器申请证书而浏览器安装对应的根证书

4.HTTP协议端口号是80,HTTPS协议端口号是443

HTTPS优点:安全性高,确保发送到正确的用户和服务器

缺点:时延高,部署成本高,占用CPU资源多

  • HTTP返回码

1xx:指示信息请求已接收,继续处理

2xx:成功

3xx:重定向,要完成请求必须要进一步操作

4xx:客户端错误

5xx:服务端错误

200 OK:客户端请求成功

300 :可选重定向,被请求的资源有一系列可供选择的反馈信息,由浏览器/用户自行选择其中一个。

301:永久重定向,该资源已被永久移动到新位置,将来任何对该资源的访问都要使用本响应返回的若干个URI之一。

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

Not Found:请求资源不存在

  • IP地址和MAC地址作用

MAC地址是硬件设备地址,数据链路层负责

IP地址:IP协议提供,每个网络和主机号的一个逻辑地址,屏蔽物理地址的差异

  • OIS七层模型和TCP/IP四层模型

物理层:通过媒介传输比特流,确定机械和电器规范,IE802.3,RJ45

数据链路层:将比特组装成帧和点到点的传递,MAC,VLAN,PPP

网络层:负责数据包从源到宿的传递和网际互连,包,IP,ARP,ICMP,IGMP

传输层:提供端到端的可靠报文传递和错误恢复,报文,TCP,UDP

会话层:建立、管理和终止会话,传输单位为SPDU, RPC,NFS

表示层:对数据进行翻译,加密和压缩,PPDU, JPEG,ASII

应用层:允许访问OSI环境, APDU, FTP,DNS, HTTP

TCP/IP四层模型

网络接口层:MAC,VLAN

网络层:IP, ARP, ICMP负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机

传输层:TCP,UDP提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。

应用层:HTTP,DNS,SMTP,应用程序间沟通

  • 测试百度搜索框

1.功能测试:输出内容(特殊字符,空格,图片,声音,非法字符)等,长度,是否支持粘贴复制,删除,搜索的内容

2.性能测试:页面跳转,加压测试,搜索出结果消耗的时间

3.UI测试:UI显示,页面布局,组件,查看过的没没查看过的的区别

4.安全性测试:SQL注入攻击规范,脚本注入测试,敏感搜索禁止,被删除加密授权的数据不允许查出来

5.兼容性:不同系统,不同浏览器,不同移动端

6.易用性测试:对用户是否友好,是否有在线文档.

7.中断测试:前后台切换,断网重连,app切换,来电,拔数据线.

  • TCP可靠的保障机制

1.***,确认号,超时重传

2.检验和

3.连接管理:三次握手,四次挥手

4.流量控制:根据接收端的处理能力,来决定发送端的发送速度

5.拥塞控制:慢启动,

  • 浏览器输入URL后,执行的全部过程?(一个完成的HTTP请求过程)
  • 域名解析(DNS) URL解析为IP地址
  • 为了将消息从你的PC上传到服务器,需要用到IP协议、ARP协议和OSPF协议
  • 发起TCP三次握手
  • 建立TCP连接后发起HTTP请求
  • 服务器响应HTTP请求
  • 浏览器解析html代码,并请求HTML的资源(js,css,图片等
  • 断开TCP连接
  • 浏览器对页面进行渲染呈现给用户
  • 进程通信的几种方式
  1. 管道:面向字节流,生命周期随内核,自带同步互斥机制,半双工,单向通信,两个管道实现双向通信
    1. 匿名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。
    2. 命名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以进程间通信。
  2. 消息队列:在内核中创建一队列,队列中每个元素是一个数据报,不同的进程可以通过句柄去访问这个队列。 消息队列提供了⼀个从⼀个进程向另外⼀个进程发送⼀块数据的⽅法。
    1. 消息队列可以认为是一个全局的一个链表,链表节点中存放着数据报和类型和内容,有消息队列的标识符进行标记.
    2. 消息队列也许一个或多个进程写入或者读取信息
    3. 消息队列的生命周期随内核
    4. 消息队列可实现双向通信
  3. 信号量:在内核中创建一个信号量集合(本质是个数组),数组的元素(信号量)都是1,使用P操作进行-1,使用V操作+1,对临界资源进行保护
    1.  P(sv):如果sv的值⼤大于零,就给它减1;如果它的值为零,就挂起该进程的执⾏ 。
    2.  V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运⾏,如果没有进程因等待sv⽽挂起,就给它加1。
    3. PV用于同一个进程实现互斥,不同线程实现同步
  4. 共享内存: 将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。
    1. 不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以.
    2. 共享内存是临界资源,所以需要操作时必须要保证原子性.使用信号量或者互斥锁都可以
    3. 生命周期随内核
  • 数据库的索引

数据库索引,是数据管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据,索引的实现通常是B树或者B+ 树.

主键索引:某一个属性组能唯一标识一条记录,确保数据记录的唯一性,不允许有空值

唯一索引:避免同一个表中数据列中的值重复,唯一索引可有多个

常规索引:快速定位特定的数据

全文索引:快速定位特定的数据

  • HTTP请求都有哪些
  1. GET:请求指定的页面的信息,并返回实体的主体
  2. HEAD:类似于get请求,返回的响应没有具体内容,用于获取报头
  3. POST:向指定资源提交数据进行处理请求(提交表单或者上传文件)
  4. PUT:从客户端向服务器传送的数据取代指定的文档内容
  5. DELETE:请求服务器删除指定页面
  6. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
  7. OPTIONS:允许客户端查看服务器的性能
  8. TRACE:回显服务器收到的请求,主要用于测试和诊断

HTTP/1.1共定义了八种方法,

HTTP/1.0定义了三种请求:GET,POST,HEAD

  • 优化慢查询

数据库慢查询:就是查询时间超多了我们设定的时间的语句

优化慢查询:1.索引没起作用, % 不在第一个索引才会起作用

2.优化数据库结构

           1.将字段很多的表拆解成多个表

           2.设置中间表

           3.分解关联查询

  • TCP拥塞控制算法

1.慢开始:拥塞窗口cwmd<开始门限ssthresh,指数增长

2.拥塞控制:到达cwmd=ssthresh,开始使用拥塞避免,线性增长

3.快重传:发送方只要连续收到3个重复确认,立即重传.不用等到超时重传

4.快恢复:只是丢失个别报文段,将开始门限和拥塞窗口设置为当前窗口的一半

  • 说一说很http协议

1.http是服务器传输超文本到本地浏览器的传送协议

2.http是基于TCP/IP通信协议来传递数据

3.http属于应用层的面向对象协议. 简捷、快速(只需传送方法和路径)的方式,适用于分布式超媒体信息系统

请求步骤如下

  • 客户端连接到Web服务器:与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
  • 发送HTTP请求:通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
  • 服务器接受请求并返回HTTP响应:Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
  • 释放连接TCP连接:服务器主动关闭TCP连接,客户端被动关闭连接
  • 客户端浏览器解析HTML内容

举例子:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2、解析出 IP 地址后,根据该 IP 地址和默认端口80,和服务器建立TCP连接;

3、浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5、释放 TCP连接;

6、浏览器将该 html 文本并显示内容;

  • GET和POST的区别

1.GET请求:浏览器会把http header和data一并发送出去,服务器响应200

2.POST:浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200

区别

  • get参数通过url传递,post放在request body中
  • get请求在url中传递的参数是由限制的,post没有
  • get比post不安全,因为参数直接暴露在url中
  • get请求只能进行url编码,而post支持多种编码方式
  • get请求会浏览器主动cache,而post支持多种编码方式
  • get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
  • GET产生一个TCP数据包;POST产生两个TCP数据包。