1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

更新文章排版以及部分内容

This commit is contained in:
Snailclimb 2018-08-16 16:38:50 +08:00 committed by GitHub
parent a0918ccdc0
commit 41f2867df2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,26 +1,29 @@
<!-- MarkdownTOC --> <!-- MarkdownTOC -->
- [一 OSI与TCP/IP各层的结构与功能都有哪些协议](#一-osi与tcpip各层的结构与功能,都有哪些协议) - [一 OSI与TCP/IP各层的结构与功能,都有哪些协议](#一-osi与tcpip各层的结构与功能都有哪些协议)
- [五层协议的体系结构](#五层协议的体系结构) - [五层协议的体系结构](#五层协议的体系结构)
- [1 应用层application layer](#1-应用层) - [1 应用层](#1-应用层)
- [域名系统Domain Name System缩写DNSDomain Name被译为域名](#域名系统) - [域名系统](#域名系统)
- [HTTP协议](#http协议) - [HTTP协议](#http协议)
- [2 运输层transport layer](#2-运输层) - [2 运输层](#2-运输层)
- [运输层主要使用以下两种协议:](#运输层主要使用以下两种协议) - [运输层主要使用以下两种协议](#运输层主要使用以下两种协议)
- [UDP的主要特点](#udp的主要特点) - [UDP 的主要特点](#udp-的主要特点)
- [TCP的主要特点](#tcp的主要特点) - [TCP 的主要特点](#tcp-的主要特点)
- [3 网络层network layer](#3-网络层) - [3 网络层](#3-网络层)
- [4 数据链路层data link layer](#4-数据链路层) - [4 数据链路层](#4-数据链路层)
- [5 物理层physical layer](#5-物理层) - [5 物理层](#5-物理层)
- [二 TCP三次握手和四次挥手面试常客](#二-tcp三次握手和四次挥手(面试常客)) - [总结一下](#总结一下)
- [为什么要三次握手?](#为什么要三次握手) - [二 TCP 三次握手和四次挥手\(面试常客\)](#二-tcp-三次握手和四次挥手面试常客)
- [为什么要传回SYN发起一个新链接](#为什么要传回syn) - [为什么要三次握手](#为什么要三次握手)
- [传了SYN为啥还要传ACK确认序号有效](#传了syn,为啥还要传ack) - [为什么要传回 SYN](#为什么要传回-syn)
- [为什么要四次挥手?](#为什么要四次挥手) - [传了 SYN,为啥还要传 ACK](#传了-syn为啥还要传-ack)
- [三 TCP、UDP协议的区别](#三-tcp、udp协议的区别) - [为什么要四次挥手](#为什么要四次挥手)
- [四 TCP协议如何保证可靠传输](#四-tcp协议如何保证可靠传输) - [三 TCP、UDP 协议的区别](#三-tcp、udp-协议的区别)
- [超时重传](#超时重传) - [四 TCP 协议如何保证可靠传输](#四-tcp-协议如何保证可靠传输)
- [停止等待协议](#停止等待协议) - [停止等待协议](#停止等待协议)
- [自动重传请求 ARQ 协议](#自动重传请求-arq-协议)
- [连续ARQ协议](#连续arq协议)
- [滑动窗口](#滑动窗口) - [滑动窗口](#滑动窗口)
- [流量控制](#流量控制) - [流量控制](#流量控制)
- [拥塞控制](#拥塞控制) - [拥塞控制](#拥塞控制)
@ -59,7 +62,7 @@ OSI的七层体系结构概念清楚理论也很完整但是它比较复
> 域名系统(Domain Name System缩写 DNSDomain Name被译为域名)是因特网的一项核心服务它作为可以将域名和IP地址相互映射的一个分布式数据库能够使人更方便的访问互联网而不用去记住能够被机器直接读取的IP数串。百度百科例如一个公司的 Web 网站可看作是它在网上的门户而域名就相当于其门牌地址通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名类似的还有IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com、Cisco公司的域名是 www.cisco.com 等。 > 域名系统(Domain Name System缩写 DNSDomain Name被译为域名)是因特网的一项核心服务它作为可以将域名和IP地址相互映射的一个分布式数据库能够使人更方便的访问互联网而不用去记住能够被机器直接读取的IP数串。百度百科例如一个公司的 Web 网站可看作是它在网上的门户而域名就相当于其门牌地址通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名类似的还有IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com、Cisco公司的域名是 www.cisco.com 等。
#### HTTP协议 #### HTTP协议
> 超文本传输协议HTTPHyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。百度百科 > 超文本传输协议HTTPHyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW(万维网) 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。(百度百科)
### 2 运输层 ### 2 运输层
@ -74,7 +77,7 @@ OSI的七层体系结构概念清楚理论也很完整但是它比较复
1. UDP 是无连接的; 1. UDP 是无连接的;
2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数); 2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
3. UDP 是面向报文的; 3. UDP 是面向报文的;
4. UDP没有拥塞控制因此网络出现拥塞不会使源主机的发送速率降低对实时应用很有用IP电话,实时视频会议等); 4. UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);
5. UDP 支持一对一、一对多、多对一和多对多的交互通信; 5. UDP 支持一对一、一对多、多对一和多对多的交互通信;
6. UDP 的首部开销小只有8个字节比TCP的20个字节的首部要短。 6. UDP 的首部开销小只有8个字节比TCP的20个字节的首部要短。
@ -83,7 +86,7 @@ OSI的七层体系结构概念清楚理论也很完整但是它比较复
2. 每一条 TCP 连接只能有两个端点每一条TCP连接只能是点对点的一对一 2. 每一条 TCP 连接只能有两个端点每一条TCP连接只能是点对点的一对一
3. TCP 提供可靠交付的服务。通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达 3. TCP 提供可靠交付的服务。通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达
4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据; 4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
5. 面向字节流。TCP中的“流”stream指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是虽然应用程序和TCP的交互是一次一个数据块大小不等但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。 5. 面向字节流。TCP 中的“流”Stream指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
### 3 网络层 ### 3 网络层
@ -110,6 +113,8 @@ OSI的七层体系结构概念清楚理论也很完整但是它比较复
在互联网使用的各种协中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的TCP/IP并不一定单指TCP和IP这两个具体的协议而往往表示互联网所使用的整个TCP/IP协议族。 在互联网使用的各种协中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的TCP/IP并不一定单指TCP和IP这两个具体的协议而往往表示互联网所使用的整个TCP/IP协议族。
### 总结一下
上面我们对计算机网络的五层体系结构有了初步的了解下面附送一张七层体系结构图总结一下。图片来源https://blog.csdn.net/yaopeng_2005/article/details/7064869 上面我们对计算机网络的五层体系结构有了初步的了解下面附送一张七层体系结构图总结一下。图片来源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) ![七层体系结构图](https://user-gold-cdn.xitu.io/2018/7/29/164e529309f0fa33?w=1120&h=1587&f=gif&s=225325)
@ -141,7 +146,7 @@ OSI的七层体系结构概念清楚理论也很完整但是它比较复
所以三次握手就能确认双发收发功能都正常,缺一不可。 所以三次握手就能确认双发收发功能都正常,缺一不可。
### 为什么要传回syn ### 为什么要传回 SYN
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。 接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。
### 传了 SYN,为啥还要传 ACK ### 传了 SYN,为啥还要传 ACK
@ -168,7 +173,7 @@ OSI的七层体系结构概念清楚理论也很完整但是它比较复
## 三 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) ![TCP、UDP协议的区别](https://user-gold-cdn.xitu.io/2018/4/19/162db5e97e9a9e01?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)
UDP在传送数据之前不需要先建立连接远地主机在收到UDP报文后不需要给出任何确认。虽然UDP不提供可靠交付但在某些情况下UDP确是一种最有效的工作方式一般用于即时通信比如 QQ语音 QQ视频 、直播等等 UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音 QQ 视频 、直播等等
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的面向连接的运输服务TCP的可靠体现在TCP在传递数据之前会有三次握手来建立连接而且在数据传递时有确认、窗口、重传、拥塞控制机制在数据传完后还会断开连接用来节约系统资源这一难以避免增加了许多开销如确认流量控制计时器以及连接管理等。这不仅使协议数据单元的首部增大很多还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。 TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的面向连接的运输服务TCP的可靠体现在TCP在传递数据之前会有三次握手来建立连接而且在数据传递时有确认、窗口、重传、拥塞控制机制在数据传完后还会断开连接用来节约系统资源这一难以避免增加了许多开销如确认流量控制计时器以及连接管理等。这不仅使协议数据单元的首部增大很多还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
@ -179,28 +184,55 @@ TCP提供面向连接的服务。在传送数据之前必须先建立连接
3. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 3. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
4. **校验和:** TCP 将保持它首部和数据的检验和。这是一个端到端的检验和目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错TCP 将丢弃这个报文段和不确认收到此报文段。 4. **校验和:** TCP 将保持它首部和数据的检验和。这是一个端到端的检验和目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错TCP 将丢弃这个报文段和不确认收到此报文段。
5. TCP 的接收端会丢弃重复的数据。 5. TCP 的接收端会丢弃重复的数据。
6. **流量控制:** TCP连接的每一方都有固定大小的缓冲空间TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据能提示发送方降低发送的速率防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。 TCP利用滑动窗口实现流量控制 6. **流量控制:** TCP 连接的每一方都有固定大小的缓冲空间TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据能提示发送方降低发送的速率防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 TCP 利用滑动窗口实现流量控制)
7. **拥塞控制:** 当网络拥塞时,减少数据的发送。 7. **拥塞控制:** 当网络拥塞时,减少数据的发送。
8. **停止等待ARQ协议stop and wait** 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 8. **停止等待协议** 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
### 超时重传
### 停止等待协议
- 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;
- 在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认;
**1) 无差错情况:**
发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。
**2) 出现差错情况(超时重传):**
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认就重传前面发送过的分组认为刚才发送过的分组丢失了。因此每发送完一个分组需要设置一个超时计时器其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。另外在停止等待协议中若收到重复分组就丢弃该分组但同时还要发送确认。连续ARQ协议可提高信道利用率。发送维持一个发送窗口凡位于发送窗口内的分组可连续发送出去而不需要等待对方确认。接收方一般采用累积确认对按序到达的最后一个分组发送确认表明到这个分组位置的所有分组都已经正确收到了。 停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认就重传前面发送过的分组认为刚才发送过的分组丢失了。因此每发送完一个分组需要设置一个超时计时器其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。另外在停止等待协议中若收到重复分组就丢弃该分组但同时还要发送确认。连续ARQ协议可提高信道利用率。发送维持一个发送窗口凡位于发送窗口内的分组可连续发送出去而不需要等待对方确认。接收方一般采用累积确认对按序到达的最后一个分组发送确认表明到这个分组位置的所有分组都已经正确收到了。
### 停止等待协议 **3) 确认丢失和确认迟到**
- 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停下来等待对方确认。这样可使信道上一直有数据不间断的在传送。这种传输方式可以明显提高信道利用率。 - 确认丢失:确认消息在传输过程丢失
- 确认迟到 :确认消息在传输过程中迟到
### 自动重传请求 ARQ 协议
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认就重传前面发送过的分组认为刚才发送过的分组丢失了。因此每发送完一个分组需要设置一个超时计时器其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。
**优点:** 简单
**缺点:** 信道利用率低
### 连续ARQ协议
连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
**优点:** 信道利用率高,容易实现,即使确认丢失,也不必重传。
**缺点:** 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息中间第三条丢失3号这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落而只好把后三个全部重传一次。这也叫 Go-Back-N回退 N表示需要退回来重传已经发送过的 N 个消息。
### 滑动窗口 ### 滑动窗口
TCP利用滑动窗口实现流量控制的机制。 - TCP 利用滑动窗口实现流量控制的机制。
- 滑动窗口Sliding window是一种流量控制技术。早期的网络通信中通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况同时发送数据导致中间节点阻塞掉包谁也发不了数据所以就有了滑动窗口机制来解决此问题。
发送窗口里面的序号表示允许发送的序号。发送窗口后沿的后面部分表示已发送且已收到确认,而发送窗口前沿的前面部分表示不晕与发送。发送窗口后沿的变化情况有两种可能,即不动(没有收到新的确认)和前移(收到了新的确认)。发送窗口的前沿通常是不断向前移动的。一般来说,我们总是希望数据传输更快一些。但如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。 - TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小
### 流量控制 ### 流量控制
流量控制是为了控制发送方发送速率,保证接收方来得及接收。 - TCP 利用滑动窗口实现流量控制。
- 流量控制是为了控制发送方发送速率,保证接收方来得及接收。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0则发送方不能发送数据。 - 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0则发送方不能发送数据。
### 拥塞控制 ### 拥塞控制
@ -219,7 +251,7 @@ TCP的拥塞控制采用了四种算法即 **慢开始** 、 **拥塞避免**
### 五 在浏览器中输入url地址 ->> 显示主页的过程(面试常客) ## 五 在浏览器中输入url地址 ->> 显示主页的过程(面试常客)
百度好像最喜欢问这个问题。 百度好像最喜欢问这个问题。
> 打开一个网页,整个过程会使用哪些协议 > 打开一个网页,整个过程会使用哪些协议
@ -229,19 +261,19 @@ TCP的拥塞控制采用了四种算法即 **慢开始** 、 **拥塞避免**
### 六 状态码 ## 六 状态码
![状态码](https://user-gold-cdn.xitu.io/2018/5/8/1633e19dba27ed00?w=673&h=218&f=png&s=72968) ![状态码](https://user-gold-cdn.xitu.io/2018/5/8/1633e19dba27ed00?w=673&h=218&f=png&s=72968)
### 七 各种协议与HTTP协议之间的关系 ## 七 各种协议与HTTP协议之间的关系
一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。 一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。
图片来源《图解HTTP》 图片来源《图解HTTP》
![各种协议与HTTP协议之间的关系](https://user-gold-cdn.xitu.io/2018/5/8/1633ead316d07713?w=841&h=1193&f=png&s=609513) ![各种协议与HTTP协议之间的关系](https://user-gold-cdn.xitu.io/2018/5/8/1633ead316d07713?w=841&h=1193&f=png&s=609513)
### 八 HTTP长连接、短连接 ## 八 HTTP长连接、短连接
在HTTP/1.0中默认使用短连接。也就是说客户端和服务器每进行一次HTTP操作就建立一次连接任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源如JavaScript文件、图像文件、CSS文件等每遇到这样一个Web资源浏览器就会重新建立一个HTTP会话。 在HTTP/1.0中默认使用短连接。也就是说客户端和服务器每进行一次HTTP操作就建立一次连接任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源如JavaScript文件、图像文件、CSS文件等每遇到这样一个Web资源浏览器就会重新建立一个HTTP会话。