IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络相关知识总结 -> 正文阅读

[网络协议]计算机网络相关知识总结

本文主要参考:(5条消息) 太厉害了,终于有人能把TCP/IP 协议讲的明明白白了_vincent-CSDN博客

1.OSI七层结构、TCP/IP四层结构、五层协议结构 (这些要背一下)

OSI七层结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP四层结构:链路层、网络层、传输层、应用层

五层结构:物理层、数据链路层、网络层、运输层、应用层

注:这里是按照从下往上的循序

?2.关于传输层中TCP和UDP的理解

TCP是面向连接的、可靠的数据流传输协议。流就是指不间断的数据结构,当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP为提供可靠性传输,实行了“顺序控制”或“重发控制”机制。另外还具备了流量控制(通过滑动窗口)、拥塞控制等功能提高网络利用率。

TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。根据TCP的这些机制,在IP这种无连接的网路上也能实现高可靠性的通信(主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。

UDP提供的是面向无连接的、不可靠的数据流传输。UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。UDP在传输过程中可能会出现丢包。

TCP和UDP的区别(面试会问)

1.TCP提供的是面向连接的。可靠的数据流传输协议。而UDP提供的是面向无连接的、不可靠的数据流传输

2.TCP保证数据传输过程中的安全性,UDP在传输过程中可能会出现丢包。TCP保证数据的顺序,UDP不保证

3.TCP注重数据的安全性,UDP数据传输快,因为不需要建立连接等操作,但是其安全性一般。

4.TCP有拥塞控制和流量控制,UDP没有。

?TCP如何保证稳定性和准确性?(面试会问)

TCP通过以下几种措施来保证数据的可靠传输:

1.对应用数据进行分割:将应用数据分割成TCP认为最适合发送的数据块

2.对数据包进行编号:TCP给要发送的每一个数据包进行编号,接收方按照编号对数据包进行排序,把有序数据传送给应用层。

3.校验和:这是一个端到端的校验,目的是检测数据在传输过程中的任何变化。如果接收端的校验有差错,说明数据在传输过程中出问题了,接收端将丢弃不再接受该数据。

4.流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。

5.拥塞控制:当网络拥塞时,减少数据的发送。防止过多的数据注入到网络中,避免传输链路过载

6.ARQ协议:该协议也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组

7.超时重传:当TCP发出一个报文段后,它会启动一个定时器,等待接收端确认收到这个报文段。如果不能及时收到一个确认。将重发这个报文段。

滑动窗口和流量控制

TCP利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。

TCP如何实现拥塞控制??

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。

慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.
快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

3.TCP三次握手和四次挥手(面试会问)

TCP三次握手

TCP提供面向有连接的通信传输。面向有链接是指在数据通信开始之前先做好两端之间的准备工作。所谓的三次握手是指建立一个TCP连接时需要客户端和服务器总共发送三个包以确认连接的建立。

三次握手的流程图:

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

三次握手讲解:

  • 第一次握手:客户端将标志位SYN设置为1,并随机产生一个值seq=J,并将该数据包发送给服务器端,此时客户端进入SYN_SENT状态,等待服务器端确认。
  • 第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端此时将标志位SYN和ACK都设置为1,ack = J + 1,并随机产生一个值seq=K,并将数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。
  • 第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK设置为1,ack = K+1,并将该数据包发送给服务端,服务器端会检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

为什么要三次握手?两次不行吗?(面试会问)

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第一次握手:是为了服务端确认对方 (客户端) 发送数据正常,自己接收数据正常。
第二次握手:是为了客户端确认自己发送、接收数据正常,同时客户端也知道了对方 (服务端) 发送、接收数据都正常。
第三次握手:是为了让服务端确认自己发送、接收数据正常,同时服务端也知道了对方 (客户端) 发送、接收数据正常。
所以三次握手为了让客户端和服务端双方,互相都知道自己和对方发送、接收功能都正常,缺一不可。

第二次握手服务器端传回了ACK为什么还要传回SYN?

服务端传回发送的ACK是为了告诉客户端,我接收到的信息就是你发送的信号,这表明从客户端到服务端的通信是正常的。而回传SYN是为了建立从服务端到客户端的通信。

?TCP四次挥手

  • 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发
  • 由于TCP连接是全双工的,因此,每个方向必须要单独进行关闭,这一原则是指当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

四次挥手的流程图:

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

  • 中断连接端可以是客户端,也可以是服务器端
  • 第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说我客户端没有数据要发送给你了,但是如果你服务器端还有数据没有发送完成的情况下,则不必急着关闭连接,可以继续发送数据。
  • 第二次挥手:服务端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入了FIN_WAIT_2状态,继续等待服务器端的FIN报文。
  • 第三次挥手:当服务器端确定数据已经发送完成。则向客户端发送FIN=N报文,告诉客户端,我这边数据发送完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
  • 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

5.如果已经建立了连接,但是客户端突然出现了故障怎么办?

?TCP设有一个保活计时器,显然,如果客户端出现了故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一次发送10个探测报文仍然没有反应,服务器就认为客户端出现了故障,接着就关闭连接。

6.在浏览器输入URL地址,回车后经历了哪些过程?(面试会问)

所经历的过程:DNS域名解析、TCP连接、发送HTTP请求、服务器处理请求并返回HTTP报文、浏览器渲染、结束

1.DNS域名解析

当我们在浏览器中输入一个域名然后回车后,首先检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有对应的域名映射,如下所示:

# 前台本机域名映射
127.0.0.1:80 web.csp1999.com
    
# 后端接口本机域名映射
127.0.0.1:8080 api.csp1999.com   

如果有,则返回对应的IP地址。

如果没有,浏览器会发出一个DNS请求到本地DNS服务器找对应的IP地址,本地DNS服务器一般都是你的网络接入服务器商提供,中国电信、中国移动等

2.建立TCP连接:三次握手

解析出IP地址后,浏览器根据IP地址和默认端口443向网站的服务器发起请求,三次握手,建立TCP连接。

3.发送HTTP请求

建立好TCP连接后,浏览器(客户端)通过HTTP协议发送请求,请求从服务器端获取数据。

服务器处理客户端的HTTP请求后,就将请求的数据返回给浏览器。

4.关闭TCP连接:4次挥手

浏览器与服务器数据传送完毕后,四次握手,释放TCP连接。

5.浏览器回显

浏览器对数据进行解析并渲染显示。

什么是HTTP协议?

HTTP是超文本传输协议,用于客户端和服务器端之间的通信,即在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范 。

HTTP常见的字段?

1.Host字段?

客户端发送请求时,用来指定服务器的域名。

Host:www.A.com

有了host字段,就可以将请求发往同一台服务器上的不同网站。

2.Content-Length字段

服务器在返回数据时,会有Content-Length字段,表明本次相应的数据长度。

如上面则是告诉浏览器,本次服务器回应的数据长度是1000个字节,后面的字节就属于下一个回应了。

3.Connection字段?

Connection字段最常用于客户端要求服务器使用TCP持久连接,以便其他请求复用。

HTTP/1.1版本的默认连接都是持久连接,但是为了兼容老版本的HTTP,需要指定Connection首部字段的值为Keep-Alive。

一个可以复用的TCP连接就建立了,直到客户端或服务端主动关闭连接。但是,这不是标准字段。

4.Content-Type字段?

?Content-Type?字段用于服务器回应时,告诉客户端,本次数据是什么格式。

Content-Type: text/html; charset=utf-8

上面的类型表明,发送的是网页,而且编码是UTF-8。

客户端请求的时候,可以使用?Accept?字段声明自己可以接受哪些数据格式。

Accept: */*

上面代码中,客户端声明自己可以接受任何格式的数据。

5.Content-Encoding字段

Content-Encoding?字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式。

Content-Encoding: gzip

上面表示服务器返回的数据采用了?gzip?方式压缩,告知客户端需要用此方式解压。

客户端在请求时,用?Accept-Encoding?字段说明自己可以接受哪些压缩方法。

HTTP的GET请求和POST请求有什么区别?(面试会问)

  • URL中参数可见性:GET请求参数可见(通过拼接URL进行传递参数),POST参数不可见。
  • 安全性:GET不安全,POST安全。
  • 数据包个数:GET产生一个TCP数据包;POST产生两个TCP数据包
  • 传输数据的大小:GET一般传输数据大小不超过2k-4k,POST请求传输数据的大小根据php.ini配置文件设定,也可以无线大。

HTTP和HTTPS的区别?(面试会问)

  • 安全性区别:HTTP是超文本传输协议,信息是明文传输的,存在安全风险的问题。HTTPS可以保证信息传输安全,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。
  • 建立连接的流程区别:HTTP建立连接相对简单,TCP三次握手之后便可以进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需要进行SSL/TLS的握手过程,才可以进入加密报文传输。
  • 端口区别:HTTP的端口号是80,HTTPS的端口号的443。
  • 是否需要申请数字证书:HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信 的。而HTTP协议不需要。?

混合加密:

HTTPS 采用对称加密和非对称加密结合的「混合加密」方式,将服务器公钥放到数字证书中,来解决窃听风险。

在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
摘要算法:

HTTPS 采用摘要算法来确保数据的完整性,解决了数据被篡改的风险。
摘要算法能够为数据生成独一无二的「标识」,用于校验数据的完整性,从而解决了篡改的风险。

?HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,如图:

HTTP1.0、HTTP1.1、HTTP2.0的主要区别是什么?(面试会问)

  • HTTP1.0:默认使用短链接,浏览器每次请求都需要与服务器建立一次TCP连接,服务器处理完成后立即断开TCP连接,服务端不记录客户端的请求状态(无状态)。
  • HTTP1.1:默认使用长链接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
    // Keep-Alive不会永久保持连接,它有一个持续时间,可以在不同的服务器软件中设定这个时间。
    // 实现长连接需要客户端和服务端都支持长连接。
    Connection:keep-alive
    

    在使用长连接的情况下,当一个网页打开完成后,客户端和服务端之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

  • HTTP2.0:引入二进制数据帧和流的概念,支持多路复用、服务器推送,支持使用二进制格式传输数据,而HTTP1.0依然使用文本格式传输。

HTTPS是如何建立连接的?

HTTPS是在HTTP和TCP之间加了一层SSL/TLS协议,所以建立连接流程如下:

1.首先建立TCP连接:三次握手。

2.然后建立SSL/TLS加密

SSL/TLS协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产? ?会话秘钥
  • 双方采用? ?会话秘钥进行加密通信。?

前两步也就是SSL/TLS的建立过程,也就是握手阶段。

3.发送HTTP请求。

HTTP中哪些常见的状态码?(面试会问)

?状态码分类:

1xx:表示目前是协议的中间状态,还需要后续请求

2xx:表示请求成功

3xx:表示重定向状态,需要重新请求

4xx:表示请求报文错误

5xx:服务端错误

常用状态码

101? 切换请求协议,从HTTP切换到WebSocket

200? 请求成功,有响应体

301? 永久重定向:会缓存

302? 临时重定向:不会缓存

304? 协商缓存命中

403? 服务器禁止访问

404? 资源未找到

400? 请求错误

500? 服务器端错误

503? 服务器端繁忙

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:48:48  更:2021-08-21 15:49:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:56:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计