前言
大概总结一下后端面试的计网方面的问题吧 主要面向的是校招 所以题目的回答可能不是那么深入。
首先 :鹰标会的传人、王树武(应表会传网数物),恭喜你已经记住OSI七层协议模型了
网络分层的真实含义
网络为什么要分层?
因为,是个复杂的程序都要分层。 重点 1.只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。 2.始终想象自己是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去
举例子 就像公司里面的总经理 经理 主管 员工四层一样 总经理交流的时候 需要下面的每一个层次都来提供帮助 员工帮助主管 帮助经理 每一位都只需要做好自己的事情就ok了。
描述一下每一层的作用?
我们一般来说用七层模型的机会要少于五层模型 因为七层过于繁琐 所以 这里描述的就是五层模型的作用。
应用层:负责进程间的数据沟通;(应用层协议都为程序员自己定义的,如:http,ftp,ssh等协议)源数据 传输层:负责进程间的数据传输;(TCP/UDP协议) 段 网络层:负责地址管理与路由选择;(IP协议) 数据报 链路层:负责相邻设备的数据传输;(以太网协议-Ethernet)帧 物理层(可无):负责光电信号的传输
下面是tcp/ip协议栈
你了解http协议吗?
超文本传输协议 http 首先是协议 用来约定双方的一些规范 可以类比于租房合同,其次是传输 这个是通过tcp/ip协议栈来实现的,最后就是超文本 图片文字还有超链接 大概就是这样了。综合一下 就是通过tcpip协议栈来传输超文本的一种规范。
http1.0
特点 首先是简单 好学 ,但是他在互联网上传输基本上是明文 ,因此非常不安全。其次就是推tcp的链接 是传输一次就会建立一次 这就导致性能不高 后续的http的优化基本上就围绕这两点来进行的。还有特点就是无状态 意思就是说你发给服务器的请求 他并不关心你是谁 而且传输完就直接断开了。
http 1.1
这个版本首先是将tcp进行默认长链接了 在一次http请求之后并不会断开 提高了性能 这样不用每次来进行http请求都建立一次链接。 同时,HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间 ,支持断点续传。同时,HTTP1.1在HTTP1.0的基础上,增加更多的请求头和响应头来完善的功能,如下:
引入了更多的缓存控制策略,如If-Unmodified-Since, If-Match, If-None-Match等缓存头来控制缓存策略
引入range,允许值请求资源某个部分
引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点
http 2.0
采用二进制格式而非文本格式
完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行
使用报头压缩,降低开销
服务器推送
https
HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。 TLS如何实现安全的 —>四次握手
梳理一下计算机网络的相关操作
要知道通信的含义是什么 首先你需要提出一个请求,请求的话就会有请求的对象和请求的东西,具体下来的话就是我们访问一个网页 ,发出一个get请求 ,那么服务器给我们的相应也就是一个网站。那我现在就围绕这个操作 来梳理一下。 假设就是我的iPad来请求我的电脑,他们都连上了我的手机热点,那么我的手机热点实际上就充当了一个网关。 现在我iPad上发出了一个请求,请求的是一个域名,他现在是不知道我电脑在哪里的,于是 他就解析了这个域名,通过dns 发现他的ip地址是 172.20.10.4 这是我电脑的网址 当然这是通过我的网关发给我的一个地址 然后我的ipad就得到了这个地址 那么现在他需要的就是我电脑的mac地址 他首先会对这个ip发一个请求里面包含了ipad的地址还有一个请求mac地址的信息,由于连上我热点的不止这一个电脑,其他的电脑也会收到这个请求,但是由于ip不同 他们只会 丢弃掉这个请求 但是我的ipad就会听到这个请求 然后发出一个响应 告诉我的电脑我的iPad的mac地址是多少 ,接着 电脑就会将这个ip地址还有mac地址产生一个映射 然后两者就能建立链接了 这时候两者实际上就已经能进行通信了,当我的ipad发出请求的时候 手机作为网关会将这个请求转发给下面电脑。
那么如果是外网呢? 当我们请求百度的网站会是一个什么样的过程呢? 首先 我们知道百度的网站名是www.baidu.com 然后我们直接输入这个网址 传给dns服务器 发现他的网站名所对应的ip地址 但是 这个ip地址很明显是一个a类地址 其中包含了数不清的ip如何确保这个ip就是真的只有百度一家在用呢? 实际上他也像我们一样是一个网关 对于手机热点来说 我们电脑的操作实际上都是由手机的这个ip发出的,ipad的操作也是一样 由手机负责发送,由上面的ipconfig可以看出来 我们的子网掩码是255.255.255.240意思是我们这个ip能分身出16个ip出来 也就是给16个主机使用。我们16台服务器通过一个ip发出消息 那外面的服务器又怎么将消息准确的发送到某一台主机上面呢? 这就有一个新的技术 NAT “Network Address Translation” 网络地址转换技术 NAT是将IP数据报文头中的IP地址转换为另一个IP地址的过程,主要用于实现内部网络(私有IP地址)访问外部网络(公有IP地址)的功能
那么我们访问局域网之外的主机会是一个什么样的过程呢? 或者说 当我的电脑 和我的iPad并不在同一个主机上的时候 那我需要怎么做才能让我的iPad访问到我的电脑呢? 首先是上面讲的nat技术 我们pc处于一个路由器的局域网内 当我们想要去请求我电脑上的网页时首先我们会将我们的请求带上我们的ipad的局域网内的ip地址 还有我们请求的电脑的他们的路由器的公网地址,因为我们也不知道电脑所处的局域网内的ip是多少 所以我们只能发给他们的网关 但是我们需要带上请求的端口号 这样我们就有了四个要素 哪个地址请求的 地址上的哪个端口请求的 请求的是哪个地址 请求的那个地址的端口是多少 这样一个包我们就算是完成了 然后将它交给网关 也就是路由器的LAN口 让他帮我们转发一下 他拿到这个包后就进行加工 因为我们携带的是内网的ip 这个在公网上是找不到的 所以我们需要加工一下将其中的ip 和我们路由器的公网的ip映射一下 再讲这个包的ip换成公网的ip 将其中的端口也加入到上面的映射当中 这样就可以放心的交给其他的路由器进行转发了。经过路由器的转发终于到达了这个电脑的ip了 我们去找电脑上面的端口号为我们请求的端口号的进程,将数据交付给他就算是完成请求的任务了。接下来就只要等他处理完数据 然后发出响应就可以了。(问,我请求的这个电脑的ip会不会也是一个网关呢?不会 这个ip一般来说会是一个服务器 ) 当数据处理完成后,会产生一个响应,这相对于上一步来说就是一个反向的过程 我们产生的响应包进行返回 通过路由选择算法 到达了我们的网关 然后网关按照映射表 发现这个包是我们发出去的请求包 他就将这个ip进行映射 原本是我们的网关的ip的响应包就变成了 我们私网的ip 端口号也变成了我们请求的那个端口,到这里为止一个请求和响应就完成了。
|