最后更新:2022-01-26 11:15:34 手机定位技术交流文章
?博客首页:崇尚学技术的科班人
小肖来了?
?今天给大家带来的文章是《【面试题】计算机网络 -- 常见面试题总结》?
?希望各位小伙伴们能够耐心的读完这篇文章?
?博主也在学习阶段,如若发现问题,请告知,非常感谢?
?同时也非常感谢各位小伙伴们的支持?
本文参考于 JavaGuide
| 层次名称 | 定义 | 传输单元 | 常见协议 |
|---|---|---|---|
| 物理层 | 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异, 使其上面的数据链路层不必考虑网络的具体传输介质是什么。 | 比特流 | |
| 数据链路层 | 数据链路层通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 | 帧 | ARQ |
| 网络层 | 在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 | 数据包 | IP |
| 运输层 | 运输层的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。 | 报文段 | TCPUDP |
| 应用层 | 应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。 | 报文 | DNSHTTPSMTPFTP |
简单示意图

客户端–发送带有SYN标志的数据包–一次握手–服务端
服务端–发送带有SYN/ACK标志的数据包–二次握手–客户端
客户端–发送带有带有ACK标志的数据包–三次握手–服务端
详细示意图

建立过程中,TCP客户机会首先发送给TCP服务器一个TCP连接请求报文(SYN = 1, seq = x);
TCP服务器进程收到后发送一个TCP连接请求确认报文(SYN = 1,ACK = 1,seq = y,ack = x + 1),TCP客户端进程收到相应的报文后进入连接已建立状态;
然后向TCP服务器进程发送一个TCP普通确认报文段,然后TCP服务器进程进入连接已建立状态。
三次握手的目的是
建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
SYN同步序列编号进行介绍,SYN同步序列编号是TCP/IP建立连接时使用的握手信号。当我们需要在客户端和服务器端建立TCP连接的时候,客户端需要向服务器端发送一个带有SYN标志的数据包。TCP连接已经完全建立。那么只剩下服务器端的TCP连接还未完全建立。而回传SYN则是为了建立并确认从服务端到客户端的通信。(1)、 TCP客户进程向TCP服务器发送TCP连接释放报文
当TCP客户端进程要主动关闭连接时,TCP客户端进程就会向TCP服务器端发送一个TCP连接释放报文(FIN = 1 ,ACK= 1,seq = u,ack = v)。此时TCP客户端进入终止等待状态。

(2)、TCP服务器端进程向TCP客户端进程发送一个普通的TCP确认报文
然后TCP服务器端进程会向TCP客户端进程发送一个普通的TCP确认报文(ACK = 1,seq = v,ack = u+ 1),且此时的TCP服务器端进入关闭等待状态,TCP客户端进程进入终止等待状态。

此时TCP客户端进程到TCP服务器端的进程的连接已经关闭,而TCP服务器端到TCP客户端进程的连接还未关闭。所以此时TCP服务器端进程还可以给TCP客户端进程进行数据传输。
(3)、TCP服务器端进程向TCP客户端进程发送TCP连接释放报文
当TCP服务器端的进程数据传输完毕后,TCP服务器端进程会向TCP客户端进程发送TCP连接释放报文(FIN = 1,ACK = 1,seq = w,ack = u + 1),且此时TCP服务器端进程进入最后确认状态。
(4)、TCP客户端进程向TCP服务器端进程发送普通的TCP连接释放确认报文
TCP客户端进程收到TCP服务器端进程发送而来的TCP连接释放报文后,TCP客户端进程会向TCP服务器端进程发送一个普通的TCP连接释放确认报文。且此时从TCP服务器端进程到TCP客户端进程的连接关闭。TCP服务器端进程进入关闭状态,而TCP客户端进程进入时间等待状态。经过2MSL后进入关闭状态。

MSL的意思是报文的最长寿命。要确保服务器是否已经收到了我们的ACK报文,过了一个MSL后如果没有收到的话,服务器会重新发报FIN文给客端,此时又花了一个MSL,客户端再次收到FIN报文之后,就知道之前的ACK报文丢失了,然后再次发送ACK报文,一来一去正好2个MSL。
| 类型 | 是否面向连接 | 传输可靠性 | 传输形式 | 传输效率 | 所需资源 | 应用场景 | 首部字节 | 真实应用场景 |
|---|---|---|---|---|---|---|---|---|
| TCP | 面向连接 | 可靠 | 字节流 | 慢 | 多 | 要求通信数据可靠 | 20-60 | 文件传输、发送和接收邮件 |
| UDP | 无连接 | 不可靠 | 数据报文段 | 快 | 少 | 要求通信速度高 | 8个字节 | QQ语音、QQ视频、直播 |
流量控制:TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。
慢开始 、 拥塞避免 、快重传 和 快恢复
。DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址
TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手
发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求
服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处 理,并将处理结果及相应的视图返回给浏览器
浏览器解析渲染页面
连接结束
期间所涉及到的协议
首先浏览器查找域名的IP地址的过程会使用DNS协议
与服务器建立TCP连接使用到了TCP协议
建立TCP协议时,需要发送数据,发送数据在网络层使用IP协议
IP数据包在路由器之间,路由选择使用OPSF协议
路由器在与服务器通信时,需要将ip地址转换为MAC地址,需要使用ARP协议
在TCP建立完成后,使用HTTP协议访问网页
| 类别 | 原因短语 | |
|---|---|---|
| 1XX | 信息状态码 | 接受的请求正在处理 |
| 2XX | 成功状态码 | 请求正常处理完毕 |
| 3XX | 重定向状态码 | 需要进行附加操作以完成请求 |
| 4XX | 客户端错误状态码 | 服务器无法处理请求 |
| 5XX | 服务器错误状态码 | 服务器处理请求出错 |
短连接:在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如 JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。
长连接:而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie数据保存在客户端(浏览器端),Session数据保存在服务器端。HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 1.1起,默认使用长连接 ,默认开启Connection: keep-alive。HTTP1.1中新增了24个错误状态响应码。HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since,If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。HTTP 1.0中会存在浪费带宽的现象,主要是因为不支持断点续传功能,客户端只是需要某个对象的一部分,服务端却将整个对象都传了过来。在HTTP1.1中请求头引入了range头域,它支持只请求资源的某个部分,返回的状态码为206。URI是统一资源标志符,可以唯一标识一个资源。URL是统一资源定位符,可以提供该资源的路径。它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源HTTP的端口号是80,HTTPS的端口号是443。HTTP协议运行在TCP协议之上,但其传输的时候都是明文传输,所以十分的不安全。而HTTPS是运行在SSL/TLS之上的HTTP协议,而SSL/TLS协议优势运行在TCP协议之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,
HTTP安全性没有HTTPS高,但是HTTPS比HTTP耗费更多服务器资源。DES、AES等;RSA、DSA等。本文由 在线网速测试 整理编辑,转载请注明出处。