目录
OSI 七层协议是什么?每一层的作用是什么?
TCP / IP 四层模型是什么?每一层的作用是什么?
应用层(Application Layer)
传输层(Transport Layer)
网络层(Network Layer)
网络接口层(Network Interface Layer)
为什么网络需要进行分层?
TCP 和 UDP 之间的区别?
什么时候选择 TCP 什么时候选择 UDP?
使用 TCP 的协议有哪些?使用 UDP 的有哪些?
TCP 三次握手和四次挥手(非常重要!)
为什么要进行三次握手?
第二次握手传回了 ACK,为什么还要传回 SYN?
三次握手过程中可以携带数据吗?
断开连接 - TCP 四次挥手
为什么需要四次挥手?
为什么不能把服务端发送的 ACK 和 FIN 合并起来变成三次挥手?
如果第二次挥手时服务端的 ACK 没有送达客户端会怎么样?
为什么第四次挥手客户端需要等待 2 * MSL(报文段最长寿命)时间后才能进入 CLOSED 状态?
TCP 如何保证传输的可靠性?(重要)
TCP 如何实现流量控制?
TCP 的拥塞控制是怎么实现的?
ARQ 协议了解吗?
停止等待 ARQ 协议
连续 ARQ 协议
超时重传如何实现?超时重传时间如何确定?
从输入 URL 到页面展示发生了什么事情?(重要!)
HTTP 状态码有哪些?
HTTP 和 HTTPS 有什么区别?(重要!)
HTTP 1.0 和 HTTP 1.1 有什么区别?
HTTP 是不保存状态的协议,如何保存用户状态?
Session 机制
如果 Cookie 被禁用怎么办?
URI 和 URL 的区别是什么?
OSI 七层协议是什么?每一层的作用是什么?
OSI 七层模型 是国际标准化组织提出的一个网络分层模型,其大体结构以及每一层提供的功能如下图所示:
每一层专注于一件事件,并且每一层都需要使用下一层提供的功能,比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去。
OSI 七层体系结构概念清晰,理论完整,但层数过多过于复杂且不实用,而且有些功能在多个层中重复出现。
OSI 七层模型一直被大公司甚至政府支持,但最终失败!原因有如下:
1、OSI 专家缺乏实际经验,他们在完成 OSI 标准时缺乏商业驱动力
2、OSI 协议实现过于复杂,运行效率低
3、OSI 指定标准的周期太长,因而使得按照 OSI 标准生成的设备无法及时进入市场(TCP / IP 已经提前抢占市场了)
4、层次划分不合理,相同功能在多个层中出现
TCP / IP 四层模型是什么?每一层的作用是什么?
TCP / IP 模型分为四层:
1、应用层
2、传输层
3、网络层
4、网络接口层(数据链路层 物理层)
应用层(Application Layer)
应用层位于传输层之上,它的作用是终端之间应用程序之间的信息通信,它定义了信息交换的格式,消息会交给下一层传输层来传输。应用层交互的数据单元为报文。
应用层协议定义了网络通信规则,对于不同的网络应用需要使用不同的应用层协议。例如支持 Web 应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。
传输层(Transport Layer)
传输层的主要任务是负责两台终端设备之间的通信。应用程序利用该服务传送应用层报文。
传输层主要使用以下两种协议:
1、传输控制协议 TCP(Transmission Control Protocol) -- 提供 面向连接的,可靠的数据传输服务。
2、用户数据协议 UDP(User Datagram Protocol) -- 提供 无连接的,尽最大努力的数据传输服务(不保证可靠性)。
网络层(Network Layer)
网络层负责在分组交换网络中的不同主机之间提供通信服务,它还有一个任务就是选择合适的路由,使得传输层传下来的分组可以通过网络层找到目的主机。
在 TCP / IP 体系结构中,网络层使用 IP 协议,因此分组也叫 IP 数据报,简称数据报。
互联网是通过大量的异构网络和路由器进行连接的,互联网使用的网络层协议是无连接的网际协议和许多路由选择协议,因此互联网的网络层也被叫做网际层或 IP 层。
网络层常见协议:
1、IP(网际协议):TCP / IP 协议中最重要的协议之一,网络层最重要的协议之一,IP 协议的作用包括寻址、定义数据包格式等。包括 IPv4 和 IPv6,这两种协议同时使用。
2、ARP 协议:全称地址解析协议,解决网络层和链路层地址之间的转换问题,IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 解决了 IP 转 MAC 的一些问题。
网络接口层(Network Interface Layer)
数据链路层 和 物理层 的集合
1、数据链路层的作用是将网络层的 IP 数据包组装成帧,在两个相邻节点之间的链路上传递帧。帧包括数据和必要的控制信息。
2、物理层的作用是传输比特流(相邻计算机节点),尽可能屏蔽掉具体传输介质和物理设备的差异。
为什么网络需要进行分层?
分层的原因:每一层专注于做一件事情
1、各层之间相互独立:各层只需要专注于自己的事情,而不需要关心其它层的具体实现
2、提高了整体灵活性:每一层都可以用最适合的技术进行实现,只需要保证提供的服务和暴露的接口不变即可
3、大问题化小:功能问题分解
TCP 和 UDP 之间的区别?
TCP 传输控制协议:面向连接的 可靠的
UDP 用户数据协议:不面向连接 不可靠的
其他区别:
1、TCP 传输是有状态的,TCP 会去记录自己发送消息的状态;UDP 是无状态服务,不管发送后的事情。
2、传输效率:UDP > TCP
3、传输形式:TCP 字节流,UDP 报文
4、头部开销:TCP 20-60bytes UDP 8bytes
5、是否提供广播:TCP 不提供;UDP 提供
什么时候选择 TCP 什么时候选择 UDP?
UDP 用于即时通信
TCP 用于对传输准确度较高的场景,文件、邮件等
使用 TCP 的协议有哪些?使用 UDP 的有哪些?
TCP:
1、HTTP:用于 Web 浏览器和 Web 服务器之间的通信
2、HTTPS:身披 SSL 外衣的 HTTP 协议,更安全
3、FTP:文件传输协议
4、SMTP:邮件传输协议
5、POP3:负责邮件接收的协议
6、Telent:远程登陆协议,被 SSH 取代
7、SSH:专为远程登录会话和其他网络服务提供安全性的协议,SSH建立在可靠的传输协议 TCP 上
UDP:
1、DNS:域名系统,将人类可读的域名转换为机器可读的 IP 地址。实际上 DNS 同时支持 UDP 和 TCP。
2、DHCP:动态主机配置协议,动态配置 IP 地址
TCP 三次握手和四次挥手(非常重要!)
建立连接(三次握手):
第一次:客户端发送 SYN 到服务端
第二次:服务端发送 SYN 和 ACK 到客户端
第三次:客户端发送 ACK 到服务端
TCP 三次握手过程中,linux 内核会维护两个队列来管理:
1、半连接队列:当服务端收到来自客户端的 SYN 后,放入半连接队列
2、全连接队列:当服务端收到来自客户端的 ACK 后,放入全连接队列
为什么要进行三次握手?
总的来说就是为了建立可靠的数据传输通道
1、第一次:客户端发送 SYN,但客户端无法确认
2、第二次:客户端确认服务端接收到请求并确认,但服务端无法确认
3、第三次:客户端和服务端都可以确认
双方都需要确认对方收到了自己的序列号。
第二次握手传回了 ACK,为什么还要传回 SYN?
传 ACK:告诉对方我收到了你的信号
传 SYN:建立并确认从服务端到客户端的通信
三次握手过程中可以携带数据吗?
第三次握手可以携带数据
断开连接 - TCP 四次挥手
1、第一次客户端发送 FIN 到服务端
2、服务端接收到 FIN,发送一个 ACK 到客户端
3、服务端发送一个 FIN,请求关闭连接
4、客户端发送 ACK 到服务端,服务端收到 ACK 后关闭
只要四次挥手没有结束,客户端和服务端就可以继续传输数据。
为什么需要四次挥手?
TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传输结束后发出连接释放的通知,等待对方确认后进入半关闭状态。当另外一方也没有数据再发送的时候,则发出连接释放通知,对方确认后完全关闭 TCP 连接。
为什么不能把服务端发送的 ACK 和 FIN 合并起来变成三次挥手?
因为服务端收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务端到客户端的数据传送。
如果第二次挥手时服务端的 ACK 没有送达客户端会怎么样?
客户端没有收到 ACK,会再次发送 FIN 请求。
为什么第四次挥手客户端需要等待 2 * MSL(报文段最长寿命)时间后才能进入 CLOSED 状态?
第四次挥手的时候,客户端发送给服务端的 ACK 可能会丢失,此时服务端没有接收到 ACK,重新发送 FIN,如果客户端收到了 FIN,就会重新发送 ACK到服务端。发送后再等待 2 * MSL 的时间,避免服务端没有收到 ACK 而一直重发 FIN。
TCP 如何保证传输的可靠性?(重要)
TCP 如何实现流量控制?
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方的发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,影响发送效率。如果窗口字段设置为0,那么发送方不能发送数据。
TCP 的拥塞控制是怎么实现的?
流量控制是点对点通信量的控制,是个端到端的问题。而拥塞控制是一个全局性的过程,涉及到所有主机、路由器、以及与降低网络传输性能有关的所有因素。
TCP 发送方要维持一个 拥塞窗口(cwnd)的状态变量。
TCP 的拥塞控制采用了四种算法:慢开始、拥塞避免、快重传、快恢复。
ARQ 协议了解吗?
ARQ(Automatic Repeat-reQuest)自动重传请求,是 OSI 模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时两个机制,在不可靠服务的基础上实现可靠的信息传输,如果发送方在发送后一段时间内没有收到 ACK,它会重新发送,直到收到确认或者重试超过一定次数。
ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。
停止等待 ARQ 协议
每发送一个分组后就停止,等待 ACK。如果一段时间没收到 ACK,认为没有发送成功,重新发送,直到收到 ACK 再发送下一个分组。
若接收方收到重复分组,丢弃之,但要发送 ACK。
连续 ARQ 协议
可提高信道利用率。发送方维持一个发送窗口,位于发送窗口内的分组可以连续发送出去,而不需要等待确认。接收方采用累计确认,对按序到达的最后一个分组发送确认,表面这个分组之前的都已经收到。
优点:利用率高,容易实现
缺点:中间只有某一分组丢失,重传时需要重传该分组及后续所有分组。(也叫 Go-Back-N GBN 回退N)
超时重传如何实现?超时重传时间如何确定?
超时重传使用超时重传计数器进行实现,如果发送端在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设已丢失并进行重传。
RTT:往返时间
RTO:超时重传时间
RTO的确定是关键问题,TCP 不能直接使用 RTT 作为 RTO 的时间,因为网络存在一定程度的波动。但我们可以根据 RTT 时间的变化去估算 RTO 超时重传时间。
从输入 URL 到页面展示发生了什么事情?(重要!)
另外的问法:打开一个网页,过程使用了哪些协议?
1、DNS 解析
2、TCP 连接
3、发送 HTTP 请求
4、服务器处理 HTTP 请求并返回
5、浏览器解析渲染页面
6、连接结束
1、DNS 解析:通过 DNS 解析,将域名转换为 IP 地址进行访问
2、建立 TCP 连接:获取到 IP 地址后,浏览器向服务器 80 端口发起 TCP 连接请求。(三次握手,建立连接)
3、发送 HTTP 请求:建立连接后,浏览器向服务器发送 HTTP GET 请求;
4、服务器收到请求后,发回一个 HTTP 响应报文,内容包括相关响应头和 HTML 正文。
5、浏览器解析渲染页面:不同浏览器渲染过程不一样
6、连接结束:TCP 四次挥手
HTTP 状态码有哪些?
比较常见的 200 404 500
200 成功 404 页面找不到 500 服务器出问题了
HTTP 和 HTTPS 有什么区别?(重要!)
HTTP 和 HTTPS 最大的区别在于它们的安全性。
1、端口号:HTTP 默认为 80;HTTPS 默认为 443。
2、URL 前缀:http:// https://
3、安全性和资源消耗:HTTP 协议运行在 TCP 之上,所有传输的内容基本都是明文,客户端和服务端都无法验证对方的身份。HTTPS 协议运行在 SSL / TLS 之上的 HTTP 协议,SSL / TLS 运行在 TCP 之上。所有传输的内容都会进行加密,加密采用的是对称加密,但对称加密的密钥在服务端用证书进行了非对称加密。HTTP 安全性弱于 HTTPS,但 HTTPS 比 HTTP 耗费更多资源。
HTTP 1.0 和 HTTP 1.1 有什么区别?
HTTP 是不保存状态的协议,如何保存用户状态?
HTTP 是一种无状态协议。也就是说 HTTP 协议本身不对请求和响应之间的通信状态进行保存,但我们怎么保存用户状态呢?
Session 机制
通过服务端记录用户的状态。例如购物车,因为 HTTP 是无状态的,所以我们不知道是谁将商品添加到了购物车中,但我们可以通过服务端给特定的用户创建特定的 session 之后,就可以标识这个用户并且跟踪他了。
在服务端保存 session 的方法很多,最常用的就是内存和数据库(redis)。大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 的方式来追踪。
如果 Cookie 被禁用怎么办?
利用 URL,把 Session ID 直接附加在 URL 路径后面。
URI 和 URL 的区别是什么?
一个是 identifier 标志符;一个是 locator 定位符;
一个用来唯一标识一个资源;一个用来找到这个资源。