面试、笔试必备技能之——计算机网络

前言:计算机网络作为计算机中非常重要的一部分、和计算机操作系统一样具有不可动摇的地位,不管你是前端岗,还是后端岗,计算机网络都是必须掌握的技能。

计算机网络协议模型

OSI七层协议模型

在这里插入图片描述
OSI七层协议模型是一种概念模型,由国际标准化组织提出,规定了网络之间如何互通,它是一套标准的模型,但是因为只是概念,并且TCP/IP协议在OSI之前提出,并且已经推广,所以OSI只能是一组概念,并未真正的投入使用。

TCP/IP协议

在这里插入图片描述

物理层

物理层规定了使用何种介质去传输比特流(0、1),即解决了在物理链路上传输比特流,光纤以及网线就属于该层。数模转换以及模数转换。网卡就是工作在这一层的。

数据链路层

在传输过程中可能会出现错传或者传输不完整的可能,该层定义了如何格式化数据,并且将其传输,该层提供了三大功能为 封装成帧、差错检验、透明传输
在这里插入图片描述
封装成帧:其中,帧是数据链路层传输的基本单位,我们将上层传来的数据加上本地的IP以及目的IP并且加上头部定界符SOH以及尾部定界符EOT封装成一个帧。
透明传输:有时,在传输的内容中,可能会出现与定界符相同的字符,这时为了不错误的将其当作定界符,我们需要在发送端的数据链路层数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符”ESC”。
差错检验:有时我们在传输过程中可能会出现错传,比如将0传成了1,这就需要我们去检验帧的正确性,目前比较流行的方法是CRC循环冗余校验
交换机就是工作在这一层,对帧解码、将其发送到正确的接收方。

网络层

网络层的作用是将物理地址与网络地址相互转换,以及如何把数据路由到目的地址。
此层传输的是IP数据报,在此层工作的协议有TCP/IP协议中的IP协议。
在这里插入图片描述

IP协议:IP协议规定了IP地址的划分,目前有IPv4以及IPv6的两种协议,其中IPv4已经被广泛使用,且所有的IP地址已经被瓜分完毕。
IPv4:因为目前IPv4使用还是较为广泛,所以来看一下IPv4下的地址划分

  • IP地址由四段组成,每个字段是一个字节8位,最大值是255
  • IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。
  • IP地址的四大类型标识的是网络中的某台主机。IPv4的地址长度为32位,共4个字节,但实际中我们用点分十进制记法。
    IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。

IP地址的A、B、C、D、E类

  1. A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或
    0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
  2. B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。
  3. C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或
    0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。
  4. D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。
  5. E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:

  • A类地址:10.0.0.0~10.255.255.255
  • B类地址:172.16.0.0~172.31.255.255
  • C类地址:192.168.0.0~192.168.255.255

回送地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。

ARP协议以及RARP协议
我们如何将网络地址与本机的MAC地址对应起来呢,这就需要一种协议去记忆,我们常在路由器中存放一张对应表,通过路由器的不断转发以及呼叫,将每个IP地址同MAC地址对应起来。这两种协议虽然是网络层的,但是因为其是在发送时使用,所以会经常工作在链路层。

路由器是属于网络层的。

运输层

解决了如何传输以及使用什么介质传输的问题之后,运输层解决了一个十分重要的问题,如何进行可靠传输。
该层是OSI模型中最重要的一层,具体功能是解决可靠传输的问题。
工作在这层的协议有TCP协议以及UDP协议
因为以太网无法接受大于MTU1500字节的数据包,所以较长的数据报会被强制分割,这就会出现丢失报文的情况,此时就需要有响应的措施来解决这个问题。
TCP的首部
在这里插入图片描述

应用层

我们都知道,计算机之间通信是应用程序之间的通信,所以,为了表示不同计算机的通信双方,我们使用端口+协议+IP地址唯一标记该应用程序。
应用层中重要的协议有SMTP和POP3邮件传输协议、FTP文件传输协议、HTTP超文本传输协议、以及DNS域名解析系统。

在这里插入图片描述

面试必知——TCP三次握手

传输控制协议TCP

  • 面向连接的、可靠的、基于字节流的传输层通信协议
  • 将应用层的数据流分割成报文段并且发送给目标节点的TCP层(报文段的长度首最大传输单元MTU 1500字节限制)
  • 数据包都有序号、对方接收到之后则发送ACK确认,(在往返时间RTT内未收到则默认丢失)未收到则重传
  • 使用奇偶校验和来检验是否有错

在这里插入图片描述
IP+协议+端口号=套接字
TCP Flags
URG:紧急指针
ACK:确认序号
PSH:push标志,尽快交付
RST:重置连接标志
SYN:同步序号,用于建立连接过程
FIN:用于释放连接,finish标志

当一个应用程序想要同另一个应用程序通信时,会发送一个通信请求,TCP建立连接后,双方会建立一个全双工的通信路线,除非有一方释放连接才会结束通信。
在这里插入图片描述
CLOSE:当没有任何连接的动作时,会处于该状态
LISTEN:用于监听连接请求的状态
SYN-SENT:同步已发送,当某一方发送连接请求时,会处于该状态
SYN-RCVD:同步收到,服务器收到一次握手之后,发出确认号之后会处于该状态。
ESTAB-LISHED:已建立连接

在三次握手的前两次中,是不允许报文携带数据的,只是单纯的用来建立连接,并且要牢记序号以及确认号的联系,以及所处的状态。
回答三次握手的时候,切记不要通俗化回答,因为面试官都是计算机出身,对于这些术语,他一定比你记得牢,所以一定要结合状态以及术语来回答。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并且进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包之后,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTAVLISHED状态,完成三次握手。

为什么要三次握手建立连接?
为了初始化Sequence Number的初始值,通信双方要互相通知对方自己发送数据的初识序号,为了接下来通信时可以知道对方的序号,方便接下来的通信。
首次握手的隐患——SYN超时
起因分析:

  • Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认
  • Server不断的重试直到超时,Linux默认等待63秒之后才断开连接

针对SYN Flood的防护措施

  • SYN队列满了之后,会将原端口,目的端口,时间戳合成一个tcp_syncookies参数回发SYN Cookie
  • 若为正常的连接,则Client则会回发SYN Cookie,直接建立连接
  • 若为恶意攻击,则不会发送

保活机制
如果Client突然出现故障,掉线,则会向其发送保活探测报文,如果未收到响应则继续发送
尝试次数达到保活探测次数仍未收到响应,则中断连接。

面试必知——TCP四次挥手

挥手是为了终止连接
在这里插入图片描述

TCP采用四次挥手来释放连接
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN-WAIT-1状态
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE-WAIT状态
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST-ACK状态
第四次挥手:Client收到FIN后,Client进入TIME-WAIT状态,接着发送一个ACK给Server,确认序号为收到的序号+1,Server进入CLOSED状态,完成四次挥手。

为什么会有TIME-WAIT状态

  • 确保有足够的时间让对方收到ACK包,如果被动端没有收到ACK确认的话,会重发FIN包,来回正好是2MSL
  • 避免新旧连接混淆,

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

  • 因为全双工,发送方和接收方都需要FIN报文和ACK报文

服务器出现大量的CLOSE-WAIT状态的原因

  • 对方关闭socket连接,我方忙于读或写,没有及时关闭连接
  • 检查代码,特别是释放资源的代码
  • 检查配置,特别是处理请求的线程配置

面试必知——TCP和UDP的区别

UDP报文结构
在这里插入图片描述

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

结论

  • 面向连接VS面向非连接
  • 可靠性
  • 有序性
  • 速度
  • 量级(头部)

面试必知——TCP的滑动窗口

RTT和RTO

RTT:发送一个数据包到收到ACK,所花费的时间
RTO:重传时间间隔
TCP使用使用滑动窗口做流量控制和乱序重排

保证TCP可靠性
保证TCP的流量控制特性

在这里插入图片描述
发送方的窗口大小是由接收方确定的,接收方会发送一个ACK确认包,里面有窗口大小以及期待下一个接受的报文的序号。
滑动窗口是基于确认重传机制产生的。

面试必知——HTTP协议

超文本传输协议HTTP协议主要特点

  • 支持客户/服务器模式
  • 简单快速
  • 灵活,允许传输任意类型的数据
  • 无连接,每次处理一个请求返回响应后断开连接
  • 无状态
  • 1.1相较于1.0来说,增加了长连接

在这里插入图片描述
在这里插入图片描述

请求/响应的步骤

  • 客户端连接到Web服务器,建立一个TCP链接
  • 发送HTTP请求
  • 服务器接受请求并返回HTTP响应
  • 释放TCP连接(在HTT1.0下)
  • 客户端浏览器解析HTML内容

在浏览器中输入URL后,按下回车之后的流程

  1. DNS解析(浏览器缓存、系统缓存、路由器缓存、DNS服务器缓存、跟服务器缓存、顶级域名服务器缓存)
  2. 建立TCP连接(三次握手)
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束

HTTP状态码

  • 1XX:指示信息–表示请求已接受,继续处理
  • 2XX:成功–表示请求已经被成功接收、理解、接受
  • 3XX:重定向—要完成请求必须更进一步的操作
  • 4XX:客户端错误–请求有语法错误或请求无法实现
  • 5XX:服务器端错误–服务器未能实现合法的请求

200 OK:正常返回信息
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 :请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 :服务器收到请求,但是拒绝提供服务
404 : 请求资源不存在,eg,输入了错误的URL
500 : 服务器发生不可预料的错误
504 : 服务器不能处理客户端的请求,一段时间后可能恢复正常

GET请求和POST请求的区别

  1. Http报文方面:GET将请求信息放在URL,POST放在报文体中
  2. 数据库层面:GET符合幂等性和安全性,POST不符合
  3. 其他层面:GET可以被缓存、被存储,而POST不行

Cookie和Session的区别

Cookie

  • 由服务器发送给客户端的特殊信息,以文本的形式存放在客户端
  • 客户端再次请求的时候,会把Cookie回发
  • 服务器接收到后,会解析Cookie生成与客户端相对应的内容

Session

  • 服务器端的机制,在服务器上保存的信息
  • 解析客户端请求并操作session id,按需保存状态信息

Cookie数据存放在客户的浏览器上,Session数据存放在服务器上
Session相对于Cookie更加安全
若考虑减轻服务器压力,应当使用Cookie

面试必知——HTTP和HTTPS的区别

在这里插入图片描述
SSL(Security Socket Layer,安全套接层)

  • 为网络通信提供安全以及数据完整性的一种安全协议
  • 是操作系统对外的API,SSL3.0之后更名为TSL
  • 采用身份验证和数据加密保证网络通信的安全和数据的完整性

加密方式

  • 对称加密:加密和解密都是用同一个密钥
  • 非对称加密:加密使用的密钥和解密使用的密钥是不相同的,其中公钥的算法是公开的,私钥则不是(加密长度是比较短的)
  • 哈希算法:将任意长度的信息转化为固定长度的值,算法是不可逆的(MD5)
  • 数字签名:证明某个消息或者文件是某人发出/认同的

HTTPS数据传输流程

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

HTTP和HTTPS的不同点

  • HTTPS需要到CA申请证书,HTTP不需要
  • HTTPS密文传输,HTTP明文传输
  • 连接方式不同,HTTPS默认使用443端口,HTTP使用80
  • HTTPS=HTTP+加密+认证+完整性保护,较HTTP协议安全

HTTPS真的很安全吗

  • 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险
  • 可以使用HSTS

面试必知——Socket相关

使用IP地址+协议+端口
Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口
在这里插入图片描述

Socket相关面试题
编写一个网络应用程序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值