1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

更新计算机网络知识总结

This commit is contained in:
Snailclimb 2018-07-29 17:59:33 +08:00
parent 6f40aebc60
commit 3f29af47f4

View File

@ -1,23 +1,83 @@
非常推荐大家看一下 **《图解HTTP》** 这本书,这本书页数不多,但是内容很是充实,不管是用来系统的掌握网络方面的一些知识还是说纯粹为了应付面试都有很大帮助。下面的一些文章只是参考。大二学习这门课程的时候,我们使用的教材是 **《计算机网络第七版》**(谢希仁编著),不推荐大家看这本教材,书非常厚而且知识偏理论,不确定大家能不能心平气和的读完。
- [OSI与TCP/IP各层的结构与功能都有哪些协议](https://blog.csdn.net/qq_34337272/article/details/69055976)
通过这篇文章可简单的了解一下OSI与TCP/IP各层的结构与功能这样对后面学习其他计算机网络知识更有帮助。
- [干货:计算机网络知识总结](https://blog.csdn.net/qq_34337272/article/details/79778645)
涵盖计算机网络需要系统掌握的几乎所有的知识点,推荐没有系统学过计算机网络知识的可以看一下。
- [面试带你飞:这是一份全面的 计算机网络基础 总结攻略前言](https://juejin.im/post/5ad7e6c35188252ebd06acfa)
大量图解,总结的很不错。
## 一 OSI与TCP/IP各层的结构与功能都有哪些协议
- [小哥哥,小姐姐,我有一份tcp、http面试指南你要吗](https://juejin.im/post/5ad4094e6fb9a028d7011069)
掘金社区的一篇文章,可以当做参考文章看一下,我觉得写的内容很鸡肋。
- [计算机网络之面试常考](http://www.cnblogs.com/zyf-zhaoyafei/p/4716297.html)
OSI的七层体系结构概念清楚理论也很完整但是它比较复杂而且不实用。在这里顺带提一下之前一直被一些大公司甚至一些国家政府支持的OSI失败的原因
1. OSI的专家缺乏实际经验他们在完成OSI标准时缺乏商业驱动力
2. OSI的协议实现起来过分复杂而且运行效率很低
3. OSI制定标准的周期太长因而使得按OSI标准生产的设备无法及时进入市场20世纪90年代初期虽然整套的OSI国际标准都已经制定出来但基于TCP/IP的互联网已经抢先在全球相当大的范围成功运行了
4. OSI的层次划分不太合理有些功能在多个层次中重复出现
## 附加(一些重要的知识点)
### 五层协议的体系结构
### **TCP三次握手和四次挥手面试常客**
学习计算机网络时我们一般采用折中的办法也就是中和OSI和TCP/IP的有点采用一种只有五层协议的体系结构这样既简洁又能将概念阐述清楚。
![五层协议的体系结构](https://user-gold-cdn.xitu.io/2018/7/29/164e5307471e8eba?w=633&h=344&f=png&s=164623)
结合互联网的情况,自上而下地,非常简要的介绍一下各层的作用。
### 1 应用层application layer
**应用层的任务是通过应用进程间的交互来完成特定网络应用。**应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如**域名系统DNS**,支持万维网应用的**HTTP协议**,支持电子邮件的**SMTP协议**等等。我们把应用层交互的数据单元称为报文。
#### 域名系统Domain Name System缩写DNSDomain Name被译为域名
> 域名系统是因特网的一项核心服务它作为可以将域名和IP地址相互映射的一个分布式数据库能够使人更方便的访问互联网而不用去记住能够被机器直接读取的IP数串。百度百科例如一个公司的Web网站可看作是它在网上的门户而域名就相当于其门牌地址通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名类似的还有IBM公司的域名是www.ibm.com、Oracle公司的域名是www.oracle.com、Cisco公司的域名是www.cisco.com等。
#### HTTP协议
> 超文本传输协议HTTPHyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。百度百科
### 2 运输层transport layer
**运输层的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务**。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
#### 运输层主要使用以下两种协议:
1. **传输控制协议TCP**Transmisson Control Protocol--提供**面向连接**的,**可靠的**数据传输服务。
2. **用户数据协议UDP**User Datagram Protocol--提供**无连接**的,尽最大努力的数据传输服务(**不保证数据传输的可靠性**)。
#### UDP的主要特点
1. UDP是无连接的
2. UDP使用尽最大努力交付即不保证可靠交付因此主机不需要维持复杂的链接状态这里面有许多参数
3. UDP是面向报文的
4. UDP没有拥塞控制因此网络出现拥塞不会使源主机的发送速率降低对实时应用很有用如IP电话实时视频会议等
5. UDP支持一对一、一对多、多对一和多对多的交互通信
6. UDP的首部开销小只有8个字节比TCP的20个字节的首部要短。
#### TCP的主要特点
1. TCP是面向连接的。就好像打电话一样通话前需要先拨号建立连接通话结束后要挂机释放连接
2. 每一条TCP连接只能有两个端点每一条TCP连接只能是点对点的一对一
3. TCP提供可靠交付的服务。通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达
4. TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存用来临时存放双方通信的数据
5. 面向字节流。TCP中的“流”stream指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是虽然应用程序和TCP的交互是一次一个数据块大小不等但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
### 3 网络层network layer
**网络层负责为分组交换网上的不同主机提供通信服务。**在发送数据时网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中由于网络层使用**IP协议**,因此分组也叫**IP数据报**,简称**数据报**。
这里要注意:**不要把运输层的“用户数据报UDP”和网络层的“IP数据报”弄混**。另外,无论是哪一层的数据单元,都可笼统地用“分组”来表示。
网络层的另一个任务就是选择合适的路由,使源主机运输层所传下来的分株,能通过网络层中的路由器找到目的主机。
这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称.
互联网是由大量的异构heterogeneous网络通过路由器router相互连接起来的。互联网使用的网络层协议是无连接的网际协议Intert Prococol和许多路由选择协议因此互联网的网络层也叫做**网际层**或**IP层**。
### 4 数据链路层data link layer
**数据链路层通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。** 在两个相邻节点之间传送数据时,**数据链路层将网络层交下来的IP数据报组装程帧**,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。
控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。
### 5 物理层physical layer
在物理层上所传送的数据单位是比特。
**物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。**使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
在互联网使用的各种协中最重要和最著名的就是TCP/IP两个协议。现在人们经常提到的TCP/IP并不一定单指TCP和IP这两个具体的协议而往往表示互联网所使用的整个TCP/IP协议族。
上面我们对计算机网络的五层体系结构有了初步的了解下面附送一张七层体系结构图总结一下。图片来源https://blog.csdn.net/yaopeng_2005/article/details/7064869
![七层体系结构图](https://user-gold-cdn.xitu.io/2018/7/29/164e529309f0fa33?w=1120&h=1587&f=gif&s=225325)
## 二 TCP三次握手和四次挥手面试常客
为了准确无误地把数据送达目标处TCP协议采用了三次握手策略。
@ -50,10 +110,14 @@
- 客户端-发回ACK报文确认并将确认序号设置为收到序号加1
### TCP、UDP协议的区别
### TCP、UDP协议的区别
![TCP、UDP协议的区别](https://user-gold-cdn.xitu.io/2018/4/19/162db5e97e9a9e01?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)
### 在浏览器中输入url地址 ->> 显示主页的过程(面试常客)
UDP在传送数据之前不需要先建立连接远地主机在收到UDP报文后不需要给出任何确认。虽然UDP不提供可靠交付但在某些情况下UDP确是一种最有效的工作方式一般用于即时通信比如 QQ语音 QQ视频 、直播等等
TCP提供面向连接的服务。在传送数据之前必须先建立连接数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的面向连接的运输服务TCP的可靠体现在TCP在传递数据之前会有三次握手来建立连接而且在数据传递时有确认、窗口、重传、拥塞控制机制在数据传完后还会断开连接用来节约系统资源这一难以避免增加了许多开销如确认流量控制计时器以及连接管理等。这不仅使协议数据单元的首部增大很多还要占用许多处理机资源。TCP一般用于文件传输、发送和接收邮件、远程登录等场景。
### 四 在浏览器中输入url地址 ->> 显示主页的过程(面试常客)
百度好像最喜欢问这个问题。
> 打开一个网页,整个过程会使用哪些协议
@ -63,15 +127,55 @@
### 状态码
### 状态码
![状态码](https://user-gold-cdn.xitu.io/2018/5/8/1633e19dba27ed00?w=673&h=218&f=png&s=72968)
### 各种协议与HTTP协议之间的关系
### 各种协议与HTTP协议之间的关系
一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。
图片来源《图解HTTP》
![各种协议与HTTP协议之间的关系](https://user-gold-cdn.xitu.io/2018/5/8/1633ead316d07713?w=841&h=1193&f=png&s=609513)
### 七 HTTP长连接、短连接
在HTTP/1.0中默认使用短连接。也就是说客户端和服务器每进行一次HTTP操作就建立一次连接任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源如JavaScript文件、图像文件、CSS文件等每遇到这样一个Web资源浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起默认使用长连接用以保持连接特性。使用长连接的HTTP协议会在响应头加入这行代码
```
Connection:keep-alive
```
在使用长连接的情况下当一个网页打开完成后客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭客户端再次访问这个服务器时会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接它有一个保持时间可以在不同的服务器软件如Apache中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
**HTTP协议的长连接和短连接实质上是TCP协议的长连接和短连接。**
—— [《HTTP长连接、短连接究竟是什么](https://www.cnblogs.com/gotodsp/p/6366163.html)
## 写在最后
### 推荐一个自己的开源的后端文档
Java-Guide Java面试通关手册Java学习指南Java Interview Customs Manual (Java Study Guide)。
👉Github地址[https://github.com/Snailclimb/Java-Guide](https://github.com/Snailclimb/Java-Guide)
👊文档定位一个专门为Java后端工程师准备的开源文档相信不论你是Java新手还是已经成为一名Java工程师都能从这份文档中收获到一些东西。
关于计算机网络基础知识大家可以查看(第一篇基础知识,第二篇偏总结,都很不错):
- [《计算机网络知识总结》](https://github.com/Snailclimb/Java-Guide/blob/master/计算机网络与数据通信/干货:计算机网络知识总结.md)。
- [面试带你飞:这是一份全面的 计算机网络基础 总结攻略](https://juejin.im/post/5ad7e6c35188252ebd06acfa)
### 计算机网络常见问题回顾
计算机网络最常见的问题我觉得应该是这5个了
- ①TCP三次握手和四次挥手、
- ②在浏览器中输入url地址->>显示主页的过程
- ③HTTP和HTTPS的区别
- ④TCP、UDP协议的区别
- ⑤常见的状态码。
### 建议
非常推荐大家看一下 《图解HTTP》 这本书,这本书页数不多,但是内容很是充实,不管是用来系统的掌握网络方面的一些知识还是说纯粹为了应付面试都有很大帮助。下面的一些文章只是参考。大二学习这门课程的时候,我们使用的教材是 《计算机网络第七版》(谢希仁编著),不推荐大家看这本教材,书非常厚而且知识偏理论,不确定大家能不能心平气和的读完。