计网

OSI和TCP/IP网络分层模型

OSI七层模型

image-20221205153408890

每一层都专注于自己的事情,并且每一层都需要下一层 提供的功能,OSI的七层体系结构概念清楚,理论完整,但是比较复杂而且不实用,而且有些功能在多个层中重复出现

数据链路层的三个基本问题:封装成帧,透明传输,差错检测

OSI七层模型很明显是失败了,但是还是留下了不少遗产(经典话术)

TCP/IP四层模型

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

image-20221205154052697

应用层

**位于传输层之上,主要提供两个终端设备上的应用程序之间的信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输。**应用层交互的数据称为报文

应用层协议定义了网络通信规则,对于不同的网络应用需要不同的应用协议,比如:HTTP,DHCP,FTP,DNS,SMTP,IMAP等

应用层常见协议

HTTP:超文本传输协议,主要是为了Web浏览器与Web服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们的网页就是通过HTTP请求进行加载的

SMTP:简单邮件传输(发送)协议,基于TCP协议,用来发送电子邮件,

注意⚠️: 接收邮件的是POP3协议,不是SMTP协议

POP3/IMAP:邮件接收的协议,这两个协议都是负责邮件接收的协议,IMAP协议相比于POP3协议要更新一些,几乎所有现代的电子邮件都支持IMAP。大部分的网络邮件提供商都支持POP3和IMAP

FTP:文件传输协议,基于TCP实现可靠的传输,使用FTP传输文件的好处就是可以屏蔽操作系统和文件存储方式

Telnet:远程登录协议,建立在可靠的传输协议TCP上

SSH:安全的网络传输协议,是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH可以有效防止远程管理过程中的信息泄露问题。SSH建立在可靠的传输协议上。

Telnet和SSH之间的主要区别在于SSH协议会对传输的数据进行加密保证数据安全性

传输层

**传输层的主要任务就是负责向两台终端设备之间的通信提供通用的数据传输服务。**应用进程利用该服务传输应用层的报文

主要使用以下两种协议

  • 传输控制协议TCP : 提供面向连接的,可靠的数据传输服务
  • 用户数据协议UDP:提供无连接的,尽最大努力的数据传输服务(不保证可靠性)

网络层

**网络层负责为交换网上的不同主机提供通信服务。**在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送,因为网络层使用IP协议,因此分组也叫IP数据报。

网络层还有一个任务就是选择合适的路由,使源主机运输层所传下来的分组,能通过网络层中的路由器找到目的主机

互联网是由大量的异构网络通过路由器相互连接起来的。互联网使用的网络层协议是无连接的网际协议和许多路由选择协议,因此网络层也叫网际层IP层

网络层常见协议

IP协议: 中文名网际协议,IP协议是TCP/IP协议中最重要的协议之一,也是网络层最重要的协议,IP协议的作用包括寻址规约,定义数据包的格式等,目前有两种IP协议:IPV4和IPV6

ARP协议:全称地址解析协议,解决了网络层地址和链路层地址之间的转换问题,也就是IP地址转MAC地址的一些问题

NAT协议:网络地址转换协议,应用于内部网络到外部网络的地址转换过程中。

网络接口层

我们可以把网络接口层看作是数据链路层和物理层的合体

  1. 数据链路层:作用是将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制)
  2. 物理层的作用是实现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质和物理设备的差异

image-20221205170103001

为什么要分层

  1. 各层之间相互独立:各层之间不需要关心其他层是如何实现的,只需要直到自己如何调用下层提供好的功能就可以了
  2. 提高了整体灵活性:每一层都可以使用最适合的技术来实现,只需要保证接口的规则没有变就行了,对应上了高内聚,低耦合
  3. 大问题化小:大化小使得复杂的计算机网络系统变得易于设计,实现和标准化,类似于将复杂的系统功能分解为更小的易于解决的问题

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,计算机整个体系从上到下都是按照严格的层次结构设计的

TCP和UDP

TCP和UDP的区别

TCP UDP
是否面向连接
是否可靠传输
是否有状态
传输效率 较慢 较快
传输形式 字节流 数据报文段
首部开销 20~60 bytes 8 bytes
是否提供广播或多播服务
什么时候选择TCP,什么时候选UDP
  • UDP一般用于即是通信,语音,视频,直播等,这些场景对于数据的准确性要求不是特别高的场景

  • TCP用于对准确性要求特别高的场景,比如文件传输,发送和接收邮件,远程登录等

  • HTTP协议是基于TCP协议的,所以HTTP建立之前需要经历三次握手

使用TCP和UDP的协议

TCP

HTTP,HTTPS,FTP,SMTP,POP3/IMAP,Telent(远程登录协议),SSH

UDP

DHCP(动态主机配置协议),DNS

TCP三次握手和四次挥手(非常重要!!!)

三次握手

image-20221211162931677

  • 一次握手:客户端发送带有SYN (SEQ=x)标志的数据包 ->服务端,然后客户端进入SYN_SEND状态,等待服务器的确认
  • 二次握手:服务器发送带有SYN+ACK(SEQ=y,ACK=x+1)标志的数据包->客户端,然后服务端进入SYN_RECV状态
  • 三次握手:客户端发送带有ACK(ACK = y+1)标志的数据包->服务端,然后客户端和服务端都进入ESTABLISHED状态,完成TCP的三次握手
为什么需要三次握手?

三次握手的目的是建立可靠的通信信道,目的就是双方确认自己与对方的数据发送和接收都是正常的。

  • 第一次握手:Client什么都不能确认;Server确认了对方发送正常,自己接收正常
  • 第二次握手:Client确认了自己发送,接收正常,对方发送接受收正常;Server确认了对方发送正常,自己接收正常
  • 第三次握手:Client确认了自己发送,接收正常,对方发送接受收正常;Server确认了自己发送,接收正常,对方发送,接收正常

因此只有三次握手才能确认双方的收发功能都正常,缺一不可

为什么第二次还需要回传SYN

到第二次的时候回传SYN是为了建立并确认服务端到客户端的通信是否正常

四次挥手

image-20221211164930656

  • 第一次挥手:客户端发送一个FIN(SEQ=x)标志的数据包,它发送一个ACK(SEQ=X+1)标志的数据包->客户端,用来关闭客户端到服务端的数据传送。然后客户端进入FIN-WAIT-1状态
  • 第二次挥手:服务器收到这个FIN(SEQ=x)标志的数据包,它发送一个ACK(SEQ=X+1)标志的数据包->客户端。然后,此时服务端进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态
  • 第三次挥手:服务端关闭和客户端的连接并发送一个FIN(SEQ=y)标志的数据包->客户端请求关闭,然后,服务端进入LAST-ACK状态
  • 第四次握手:客户端发送ACK(SEQ=y+1)标志的数据包->服务端并且进入TIME-WAIT状态,服务端在收到ACK(SEQ=y+1)标志的数据包后进入ClOSE状态。此时,如果客户端等待2MSL(2个报文最大生存时间)后依然没有收到回复,就证明服务端已经正常关闭,随后,客户端关闭。
为什么要四次挥手

TCP是全双工通信,可以双向传输数据。任何一方发出连接释放通知后,会进入半关闭状态,当另一方确认后,才会完全关闭,因此需要四次

为什么不把中间服务端的ACK和FIN合并变成三次挥手

因为服务器收到客户端断开请求时,可能还有一些数据

没有发完,先回复ACK表示收到了断开连接的请求,等到数据发完之后再发FIN,断开服务器到客户端的数据传送

为什么需要等待2*MSL时间后才进入CLOSED状态

因为客户端发送给服务器的ACK有可能丢失,如果服务端因为某些原因没有收到ACK的话,就会不断重发FIN。因此需要客户端再次等待2MSL,防止服务端没有收到ACK而不断的重发FIN

TCP传输可靠性保障

TCP如何保证传输的可靠性

  • 基于数据块传输:应用数据被分割成TCP认为最适合发送的数据块
  • 对失序数据包重新排序以及去重:TCP给每一个包一个序列号,有了序列号就能根据序列号进行排序,并且去掉重复序列号的数据
  • 校验和:TCP将保持它首部和数据的校验和,目的是检测数据在传输过程中的任何变化。如果收到的检验和有差错,TCP将丢弃这个报文段
  • 超时重传:当发送方发送数据后,会启动一个计时器。接收端成功收到后会返回一个相应的确认信息,如果在合理的往返时延内未收到确认信息,那么对应的数据包就会被假设为已丢失并进行重传
  • 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP接收端只允许发送端发送缓冲区能接收的数据,当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
  • 拥塞控制:当网络拥塞时,减少数据的发送

TCP如何让实现流量控制

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

TCP发送窗口可以划分为四个部分

  1. 已经发送并且确认的TCP段
  2. 已经发送但是没有确认的TCP段
  3. 未发送但是接收方准备接收的TCP段
  4. 未发送并且接收方也未准备接受收的TCP段

发送窗口如下图所示

image-20221212160652697

TCP接收窗口可以划分为三个部分

  1. 已经接收并且已经确认的TCP段
  2. 等待接受且允许发送方发送TCP段
  3. 不可接收且不允许发送方发送TCP段

接收窗口如下图所示

image-20221212161038279

接收窗口的大小是根据接收端处理数据的速度动态调整的

拥塞控制的实现

image-20221212190619792

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

  • 慢开始:先试探一波,即由小到大逐渐增大拥塞窗口的数值,cwnd初始值为1,每经过一个传播轮次,cwnd加倍
  • 拥塞避免:拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,每经过一个往返时间RTT就增大1
  • 快重传与快恢复(FRR):能快速恢复丢失的数据包,有了FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认,如果接收到三个重复确认,它会假定数据段缺失了,并立即重传这些缺失的数据段。减少重传时的暂停。

ARQ协议

自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一,如果发送方在发送之后一段时间之内没有收到确认信息(ACK),它会重新发送,直到收到确认信息或者重试超过一定的次数。

ARQ包括停止等待ARQ协议和连续ARQ协议

停止等待ARQ协议

每发完一个分组就停止发送,等待对方确认(ACK),若过了一段时间,还是没有收到ACK确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组

连续ARQ协议

发送方维护一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了

HTTP

从输入URL到页面展示到底发生了什么

(打开一个网页,整个过程会使用那些协议)从输入URL到页面加载发生了什么?参考

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束

DNS解析

DNS解析就是寻找哪台机器上有你需要资源的过程, 查询的方式是递归查询

首先在本地域名服务器中查询IP地址,如果没有找到,本地域名服务器会向根域名服务器发送一个请求,如果根域名也不存在,那么本地域名会向com顶级域名发送请求,依次类推

TCP连接

见上面的TCP连接

HTTP请求

发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议发送到服务器指定端口(HTTPS 443 ; HTTP 80)。HTTP请求报文由三部分组成:请求行,请求报文请求正文

服务器处理请求并返回HTTP报文

后端从固定得到端口接收到TCP报文开始,这一部分对应变成语言里面的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。HTTP的响应报文也是由三部分组成:状态码,响应报头响应报文

浏览器解析渲染页面

浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

HTTP状态码

类别 原因短语
1XX 信息性状态码 接收的请求正在处理
2XX 成功状态码 请求正常处理完毕
3XX 重定向状态码 需要进行附加操作以完成请求
4XX 客户端错误状态码 服务器无法处理请求
5XX 服务器错误状态码 服务器处理请求错误

1xx(信息状态码)

大概率不会碰到,略

2xx (成功状态码)

  • 200 OK:请求被成功处理,服务端返回了数据
  • 201 Created:请求被成功处理并且在服务器端创建了一个新的资源
  • 202 Accepted:服务端已经接收到了请求,但是还没处理
  • 204 Not Content:服务端已经成功处理了请求,但是没有返回任何内容

204见得比较少,这里说一下,204状态码描述就是我们向服务端发送HTTP请求之后,只关注处理结果是否成功的场景,也就是我们需要的就是一个结果: true/false

3xx (重定向状态码)

  • 301 Moved Permanently:资源被永久重定向了。
  • 302 Found:资源被临时重定向了

4xx (客户端错误状态码)

  • 400 Bad Request:发送的HTTP请求存在问题
  • 401 Unauthorized:未认证却请求需要认证之后才能访问的资源
  • 403 Forbidden:直接拒绝HTTP请求,不处理,一般用来针对非法请求
  • 404 Not Found:你请求的资源未在服务器找到
  • 409 Conflict:表示请求的资源与服务器当前的状态存在冲突,请求无法被处理

5xx (服务端错误状态码)

  • 500 Internal Server Error:服务端出问题了,服务端处理请求的时候突然抛出异常,但是异常未在服务端被正确处理
  • 502 Bad Gateway:我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应

HTTP 和 HTTPS有什么区别

  • 端口号:HTTP默认是80,HTTPS默认是443
  • 前缀不同,显而易见一个是HTTP一个是HTTPS
  • 安全性和资源消耗:HTTP所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,HTTPS所有传输的内容都经过加密,HTTPS拥有更高的安全性,但是会消耗更多的服务器资源

HTTP是不保存状态的协议,如何保存用户状态

HTTP协议自身不对请求和响应之间的通信状态进行保存。方案就是Session,服务端给特定的用户创建特定的Session,之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个session,过了时间限制,就会销毁这个session)

在服务端保存Session的方法很多,最常用的就是内存和数据库保存,我们一般通过在Cookie中附带一个Session ID来进行跟踪Session。

Cookie被禁用怎么办?

最常用的就是利用URL重写把Session ID直接附加在URL路径的后面

URI和URL的区别

  • URI(Uniform Resource Identifier):是统一资源标志符,可以唯一标识一个资源
  • URL(Uniform Resource Locator):统一资源定位符,可以提供该资源的路径。是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源

ARP

MAC地址

MAC(Media Access Control Address)即媒体访问控制地址,互联网一切网络设备都由MAC地址唯一标识

MAC地址的长度为6字节,地址空间大小有280万亿之多,MAC地址由IEEE统一管理与分配,它具有可携带性,永久性,而IP地址则没有这些性质

MAC地址有一个特殊的地址:FF-FF-FF-FF-FF-FF (全1地址),该地址表示广播地址

ARP协议解决了什么问题

ARP全程地址解析协议(Address Resolution Protocol),它解决的是网络层地址和链路层之间的转换问题,因为IP数据包在传输的过程中需要知道下一跳该去往哪里,但IP地址只是逻辑地址,MAC地址才是物理地址,解决了IP地址转MAC地址的一些问题


计网
http://example.com/2022/12/05/计网/
作者
Mercury
发布于
2022年12月5日
许可协议