计算机网络基础


原文连接

1. 计算机网络体系结构

1.1 简介

计算机网络的各层 + 其协议的集合,定义该计算机网络的所能完成的功能。

1.2 结构

计算机网络体系结构分为3种:

  • OSI体系结构

    概念结构清楚,理念完整,但复杂&不实用

  • TCP/IP 体系结构

    包含一系列构成互联网基础的网络协议,是Internet的核心协议 & 被广泛的应用于局域网 和广域网

  • 五层体系结构

    融合了OSI 与 TCP/IP 的体系结构,目的是为了学习 & 讲解计算机的原理

img

底三层为通信子网,负责数据传输

高三层为资源子王,相当于计算机系统,完成数据处理

传输层承上启下

TCP/IP体系结构详解

img

2. TCP

2.1 定义

Transmission Control Protocol,即传输控制协议。

  1. 属于传输层协议通信协议
  2. 基于TCP 通信的协议有 HTTP 、SMTP、 FTP、 Telnet POP3

2.2 特点

  • 面向连接

    使用TCP传输数据前,必须先建立TCP连接,传输完成后再释放连接

  • 面向字节流

    数据以流的方式进行传输

  • 全双工通信

    建立TCP连接之后,通信双方都能发送数据

  • 可靠

    通过TCP连接传送的数据:不丢失、无差错、不重复&按序到达

基于以上特点

​ 缺点:效率慢(需要建立连接,发送确认包等)

​ 优点:数据传输可靠

2.3 应用场景

要求通信数据可靠,数据要准确无误地传递给对方

如:传输文件:HTTP、HTTPS、FTP等协议;传输邮件:POP、SMTP等协议

  • 万维网:HTTP协议
  • 文件传输:FTP协议
  • 电子邮件:SMTP协议
  • 远程终端接入:TELNET协议

2.4 报文段格式

  • TCP虽然免洗那个字节流,但是传送的数据单元 = 报文段
  • 报文段 = 首部 + 数据 2部分
  • TCP的全部功能体现在它首部中各字段的作用
  1. 首部前 20 个字符固定、后面有4n个字节是根据需要而增加的选项
  2. 故 TCP 首部最小长度 = 20字节

img

源端口和目的端口

各占2个字节

分别写入源端口 和 目的的端口号。

TCP的分用功能也是通过端口实现的。

序号(报文段序号)

各占4个字节

序号范围为[0,223 -1],共223(即4294967296)个序号,序号增加至223-1后,下一个序号就又回到0。也就是说,序号使用 mod223运算

TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都是按照顺序编号。

整个要传送的字节流的起始序号必须在连接建立时设置。

首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。

确认号

占4个字节

是期望收到对方下一个报文段的第一个数据字节的序号。

若 确认号 = N,则表明:到序号N-1为止的所有数据都已正确收到。

由于序号字段有32位长,可对4GB(即4千兆字节)的数据进行编号。在一般情况下,可保证党序号重复使用时,就需要的数据早已通过网络到达终点

数据偏移

占4位

它指出 TCP报文段的数据起始处 距离 TCP报文段的起始处 有多远。

这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是有必要的。

但是注意,“数据偏移”的单位是32位字(即以4字节长的字为计算单位)。由于4为二进制能够表示的最大十进制数是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度(即选项长度不能超过40字节)

保留

占6位

保留为今后使用,但目前应置为0

紧急URG(URGent)

当URG = 1时,表示紧急指针字段有效。它告诉系统次报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按照原来的排队顺序来传送。

比如:已经发送了很长的一个程序在远地的主机上运行,但是后来发现了一些问题,需要取消该程序的运行。因此用户从键盘发出中断命令(Control + C)。如果不使用紧急数据,那么饿着两个字符将存储在接收TCP的缓存末尾。只有在所有数据被处理完陈过之后,这两个字符才被交付接收方的应用进程。这就浪费了很多时间。

当URG= 1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就吧紧急数据插到报文段数据的最前面,而在紧急数据后面的数据仍为普通数据。这时哟与首部中的紧急指针(Urgent Pointer)字段配合使用。

确认ACK(ACKnowledgment)

仅当ACK = 1时确认号字段才有效。当ACK = 0,确认号无效。TCP规定,在连接建立之后所有传送的报文段都必须把ACK置为1

推送PSH(PuSH)

当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能够立即收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。

这时,发送方TCP 把PSH置为1,并立即创建一个报文段发送出去。

​ 接收方TCP收到PSH为1 的报文段,就尽快地(即“推送”向前)交付给接收应用程序,而不在等到整个缓存都填满了之后再向上交付

复位RST(ReSeT)

当RST = 1时,表明TCP连接中出现了严重的差错(如 由于主机崩溃活着其他原因),必须释放连接,然后再重新建立运输连接。

RST置为1还用来拒绝一个非法的报文段 或者 拒绝一个打开连接。

RST 也可称为重建位 或 重置位。

同步SYN(SYNchronization)

在连接建立时用来同步序号。

当SYN = 1而 ACK = 0 时,表示这是一个连接请求报文段,对方若同意建立连接,则应在响应的报文段中使用SYN = 1和 ACK = 1

因此,SYN置为1,就表示这是一个连接请求或连接接收报文。

终止FIN(FINis)

用来释放一个连接,当FIN = 1时,表明次报文段的发送方数据发送完毕,并要求释放运输连接。

窗口

占 2 个字节

窗口值 为[0 , 216 -1] 之间的整数。

窗口指的是发送报文段的一方的接收窗口(而不是自己的发送窗口)。

窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)

之所以要有这个限制,时因为接收方的数据缓存空间是有限的。

总之,窗口值作为接收方让发送发设置其发送窗口的依据。

窗口字段明确的指出了现在允许对方发送的数据量。窗口值经常在动态变化着。

检验和

占 2 个字节

检验和 字段检验的范围包括首部 和 数据这两部分。

和 UDP用户数据报一样,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。

TCP 和 UDP 的伪首部格式是相同的。只需把伪首部第四个字段中的17改为6(TCP的协议号为6),把第五个字段的UDP长度改为TCP长度即可。

接收方收到次报文段后,仍要加上这个伪首部来极端校验和,若使用IPv6,则相应的伪首部也要改变。

image-20210612223951465

紧急指针

占 2 个字节

紧急指针在URG = 1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。

因此,紧急指针指出了紧急数据的末尾在报文段中的位置。

当紧急数据都处理完时,TCP就告诉应用程序恢复到正常的操作。

值得注意的是,即时窗口为0时,也可发送紧急数据。

选项

长度可变,最长可达40字节。当没有使用“选项“时,TCP首部长度是20个字节。最后的填充字段仅仅为了使真个TCP首部长度是4字节的整数倍。

2.5 建立连接(三次握手)

img

img

成功进行TCP的三次握手后,就建立起一跳TCP连接,即可传送应用层数据

  1. 三次握手期间,任何一次未收到对面的回复,都会重发
  2. 因TCP提供的是全双工通信,故通信双发的应用进程在任何时候都能进行数据的发送

为什么TCP建立需要三次握手

防止服务器端因接收了 早已失效的连接请求报文,从而抑制等到客户端请求,最终导致形成死锁,浪费资源

img

SYN洪泛攻击:

  • 从上可看出:服务端的TCP资源分配时刻 = 完成第二次握手时;而客户端的TCP资源分配时刻 = 完成第三次握手时
  • 这就使得服务器易于受到SYN洪泛攻击,即同时多个客户端发起连接请求,从而需进行多个请求的TCP连接资源分配

2.6 释放连接过程(四次挥手)

img

img

TCP释放连接为什么需要四次挥手

为了保证双方都能通知对方 需释放 & 断开连接

即释放连接后,都无法接受/发送消息给对方

img

为什么客户端关闭连接前要等待2MSL时间?

  1. 即TIME-WAIT状态的作用是什么
  2. MSL = 最长报文寿命(Maximum Segment Lifetime)
  • 原因1:为了保证客户端发送最后一个连接释放确认报文能到达服务器,从而使服务器能正常释放连接

    img

  • 原因2:防止 早已失效的连接请求报文 出现在本连接中

    客户端发送了最后一个连接释放请求确认报文后,再经2MSL时间,则可使本连接持续时间内产生的所有报文段从网络中消失。

    即在下一个新的连接中 就不会出现 早已试下的连接请求报文

2.7 无差错传输

2.7.1 含义

  • 无差错: 即 传输信道不出差错
  • 发送 & 接受效率匹配:即 无论发送方以多快的速度发送数据,接收方总来的及处理接收到的数据

2.7.2 基础:滑动窗口协议

先理解两个基本概念:发送窗口,接收窗口

img

工作原理:

对于发送端:

  1. 每收到一个确认帧,发送窗口就向前滑动一个帧的距离

  2. 当发送窗口内无可发送的帧时(即 窗口内的帧全部时已发送但未收到取人的帧)。发送方就会停止房东,直到收到接收方发送的确认帧使窗口移动,窗口内有可以发送的帧,之后开始继续发送

    img

对于接收端:

当收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,则一律丢弃。

img

滑动窗口协议的重要特性

  • 只有接收窗口向前滑动、接收方发送了确认帧,发送窗口才有可能(只有发送方收到确认帧才是一定)向前滑动

  • 停止-等待协议、退回N帧协议 & 选择重传协议 只是在发送窗口大小 和 接受窗口大小上有所差别:

    1. 停止等待协议:发送窗口大小 = 1,接收窗口大小= 1;即 单帧滑动窗口 等于 停止-等待协议
    2. 后退N帧协议:发送窗口大小 > 1,接收窗口大小 = 1;
    3. 选择重传协议:发送窗口大小 > 1,接收窗口大小 >1
  • 当接受窗口大小为1时,可保证帧有序接收

  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中时固定的(注意要与TCP的滑动窗口协议区别)

2.7.3 实现无差错传输的解决方案

采用可靠的传输协议,使得:

  1. 出现差错的时候,让发送方重传插座数据:即 出错重传
  2. 当接收方来不及接受收到的数据,可以通知发送方降低发送数据的效率:即 速度匹配

  • 针对上述2个问题,分别采用的解决方案是:自动重传协议 和 流量控制 & 拥塞控制协议

解决方案1:自动重传请求协议ARQ(针对 出错重传)

  • 即 Auto Repeat reQuest

img

  • 类型

img

下面,具体介绍 上述3中协议:

类型1:停等协议ARQ(Stop-And-Wait)

  • 原理:(单帧滑动窗口)停止-等待协议 + 超时重传

即:发送窗口大小 = 1、接收窗口大小 = 1

  1. 发送方每发一帧,要等到接收方的应答信号后才能发送下一帧
  2. 接收方每接受一帧,都要反馈一个应答信号,表示可接收下一帧
  3. 若接收方不反馈应答信号,则发送发必须一直等待

类型2:后退N帧协议

也称:连续ARQ协议

  • 原理:多帧滑动窗口 + 累计确认 + 后退N帧 + 超时重传

即:发送窗口 > 1,接收窗口大小 = 1

  • 具体描述

a. 发送方:采用多帧滑动窗口的原理,可连续发送多个数据帧,二不需要等待对方确认

b. 接收方:采用 累计确认 & 后退N帧的原理,只允许按顺序接收帧。

具体原理如下

img

类型3: 选择重传ARQ(Selective Repeat)

  • 原理:多帧滑动窗口 + 累计确认 + 后退N帧 + 超时重传

    即:发动窗口大小 > 1、接收窗口大小 > 1

与 类型2 类似,只是 接收窗口的大小 有所区别

  • 特点

优点:因连续发送数据帧 而 提高了信道的利用率

缺点:重传时 又必须把原来已经传动正确的数据帧进行重传(仅因为这些数据帧前面有一个数据帧出了错),将导致传送效率低

由此可见,若信道传输质量很差,导致误码率较大时,后退N帧协议不一定优于停止等待协议

解决方案2:流量控制 & 拥塞控制(针对 速度匹配)

措施1: 流量控制

imgimg

img

措施2:拥塞控制

  • 定义:防止过多的数据注入到网络中,使得网络中的路由器 & 链路不至于过载

    拥塞:对网络中的资源需求 > 该资源所能提供的部分

  • 与 “流量控制的区别”:

img

具体解决方案:

共分为2个解决方案:慢开始&拥塞避免、快重传&快恢复

解决方案1: 慢开始 & 拥塞避免

a. 拥塞窗口

发送方维持一个状态变量:拥塞窗口(cwnd,congestion window)

img

b. 慢开始算法

  • 原理

    当逐句开始发送数据时,由小到大逐渐增大 拥塞窗口数值(即 发送窗口数值),从而 由小到大逐渐增大发送报文段

  • 目的

    开始传输时,试探网络的拥塞情况

  • 具体措施

    img

  • 示意图

    img

  • 特别注意

    慢开始的“慢”指:一开始发送报文段时拥塞窗口(cwnd)设置得较小(为1),使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况)

    并不是指拥塞窗口(cwnd)的增长速率慢

c. 拥塞避免 算法

  • 原理

    使得拥塞窗口(cwnd)按限行规律 缓慢增长:每经过一个往返时间RTT,发送方的拥塞窗口(cwnd)加1

  1. 拥塞避免 并不可避免拥塞,只是将拥塞窗口按现行规律缓慢增长,使得网络比较不容易出现拥塞
  2. 想比满开始短发的加倍,拥塞窗口增长速率缓慢很多
  • 示意图

    img

解决方案描述 (慢开始 & 拥塞避免)

  • 为了防止拥塞窗口(cwnd)增长过大 而引起网络拥塞,采用慢开始 & 拥塞避免 2中算法,具体规则如下

img

  • 实例:

img

解决方案2: 快重传 & 快恢复

快重传 & 快恢复的解决方案 是对慢开始 & 拥塞避免算法的改进

a. 快重传算法

  • 原理

    1. 接收方:每收到一个失序的报文段后 就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时才进行捎带确认
    2. 发送方:只要一连接收到3个重复确认就立即重传对方尚未收到的报文段,而不必 继续等待设置的重传计时器到期
  • 作用:

    由于发送方 今早重传了未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%

  • 示意图

    img

    b. 快恢复

    当发送方连续收到3个重复去人后,就:

    1. 执行 乘法减小算法:把慢开始门限(ssthresh)设置为 出现拥塞时发送窗口值的一般 = 拥塞窗口的一半
    2. 将拥塞窗口(cmnd)的值设置为慢开始门限ssthresh减半后的数值 = 拥塞窗口的一半
    3. 执行加法算法 :执行拥塞避免算法,使拥塞窗口缓慢线性增大

    注:

    1. 由于跳过了拥塞窗口(cwnd)从1起始的慢开始过程,所以称为:快恢复
    2. 此处网络不会发生网络拥塞,因若拥塞,则不会收到多个重复确认报文

解决方案描述(快重传 & 快恢复)

  • 原理

    为了优化慢开始 & 拥塞避免的解决方案,在上述方案中加入快重传 & 快恢复 2种算法,具体规则如下

    img

  • 示意图

    img

2.8 与UDP协议的区别

img

3. UDP

3.1 定义

User Datagram Protocol,即 用户数据报协议

  1. 属于 传输层通信协议
  2. 基于UDP的应用层协议有 TFTPSNMPDNS

3.2 特点

无连接的、不可靠的、面向报文、无拥塞控制,具体介绍如下

示意图

3.3 优缺点

  • 优点:速度快
  • 缺点:消息易丢失(特别是 网络较差时)

3.4 应用场景(对应 应用层协议)

要求通信速度高

如: 域名转换:DNS协议 文件传输:FTP协议 网络管理:SNMP协议 远程文件服务器:NFS协议

3.5 报文段格式

  • UDP的报文段共有2个字段:数据字段 & 首部字段
  • 下面主要介绍首部(8字节、4个字段)

image-20210613121534849

示意图

4. HTTP

4.1 简介

img

4.2 工作方式

  • HTTP协议采用 请求 / 响应 的工作方式
  • 具体工作流程如下:

img

4.3 HTTP报文详解

  • HTTP在 应用层 交互数据的方式 = 报文
  • HTTP的报文分为:请求报文 & 响应报文

分别用于 发送请求 & 响应请求时

4.3.1 请求报文

1. 报文结构

  • HTTP的请求报文由 请求行、请求头 & 请求体 组成,如下图

img

请求行(request line)

  • 作用

    声明 请求方法、主机域名、资源路径 & 协议版本

  • 结构

    请求行的组成 = 请求方法 + 请求路径 + 协议版本

img

  • 组成介绍

    img

  • GET & POST方法的区别

img

请求头

  • 作用:声明客户端、服务端/报文的部分信息

  • 使用方式:采用“header(字段名):value(值)”的方式

  • 常用请求头:

    1. 请求和响应报文的通用Header

      img

    2. 常见请求Header

    img

请求体

  • 作用:存放 需要发送给服务器的数据信息(可选部分,如GET请求就无请求数据)

  • 使用方式:共三种

    img

4.3.2 响应报文

报文结构

  • HTTP的响应报文包括:状态行、响应头 & 响应体

img

响应头 、响应体 与 请求报文的请求头 、请求体类似

这两种报文最大的不同在于 状态行 和 请求行

组成1:状态行

  • 作用

    声明 协议版本,状态码,状态码描述

  • 组成

    状态行有协议版本、状态码 & 状态信息组成

其中空格不能省

img

  • 具体介绍

    img

组成2:响应头

  • 作用:声明客户端、服务器/报文的部分信息

  • 使用方式:采用“header(字段名):value(值)”的方式

  • 常用请求头

    1. 请求和响应报文的通用Header

    img

    1. 常见响应Header

    img

组成3:响应体

  • 作用:存放需要返回给客户端的数据信息
  • 使用方式:和请求体是一只的,同样分为:任意类型数据交换格式,键值对形势 和分部分形势

img

4.4 额外知识

  • HTTP1.1 和 HTTP1.0 的区别
  • HTTP 和 HTTPS的区别
  • HTTP处理长连接的方式

4.4.1 HTTP1.1 和 HTTP1.0 的区别

HTTP1.1 与 HTTP1.0 多了以下优点:

  • 引入了持久连接,即 在同一个TCP的连接中可传送多个HTTP请求 & 响应
  • 多个请求 & 响应 可同时进行,可重叠
  • 引入更多的请求头 & 响应头

如 与身份认证、状态管理 & Cache缓存等机制相关的、HTTP1.0host字段

4.4.2 HTTP 和 HTTPS的区别

img

4.4.2 HTTP处理长连接的方式

img

5. Socket

5.1 简介

  • 套接字,是应用层 与 TCP/Ip协议族通信的中间软件抽象层,表现为一个封装了TCP/IP协议族的 编程接口(API)

    img

  1. Socket 不是一种协议,而是一个编程调用接口(API),属于传输层(主要解决数据如何在网络中传输)
  2. 只需调用Socket去阻止数据,以符合指定的协议,即可通信
  • 成对出现

    Socket = {(IP地址1:PORT端口号),(IP地址2:PORT端口号)}
    
  • 一个Socket实例 唯一 代表一个主机上的一个应用程序的通信链路

5.2 建立Socket 连接的过程

img

5.3 原理

Socket 的使用类型主要有两种:

  • 流套接字(streamsocket):基于TCP协议,采用 流的方式 提供可靠的字节服务
  • 数据报套接字(datagramsocket):基于UDP协议,采用数据报文 提供数据打包发送的服务

具体原理图:

img

5.4 Socket与Http对比

  • Scoket属于传输层,因为TCP/IP协议属于传输层,解决的事数据如何在网络中传输的问题

  • Http协议属于应用层,解决的是如何包装数据

  • Http:采用 请求-响应 方式

    1. 即建立网络连接后,当 客户端 向 服务器 发送请求后,服务器才能向客户端返回数据
    2. 是客户端有需要才进行通信
  • Socket:采用 服务器主动发送数据的方式

    1. 即建立网络连接后,服务器 可注定发送消息给客户端,二不需要由客户端向服务器发送请求
    2. 是服务器端有需要才进行通信

6. 其他知识

6.1 在浏览器中输入URL地址-》》显示主页的过程

示意图

6.2 IP地址(IPv4 地址)

  • 定义 连接Internet 中的每一台主机(或 路由器)的全球唯一的标识符
  • 组成IP地址 = 32位 = 网络号 + 主机号;即IP地址::=

其中:

  1. 网络号:标志主机(或路由器)所连接到的网络。一个网络号在整个因特网范围内必须唯一
  2. 主机号:标志该主机(或路由器)。一个主机号在它前面的网络号所指明的网络范围必须是唯一的

不同类型的IP地址,其主机号 & 网络号所占字节数不同:

故:一个IP地址在整个网络范围内是唯一的

  • 分类。传统IP地址是分类的地址,分为A,B,C,D,E五类
  • 区别在于 网络号 & 主机号的字节数不同

示意图

  • 特别注意:在各类IP地址中,有一些IP地址用于特殊用途,不能用于做主机IP地址

示意图

6.3 ICMP协议

  • 定义 Internet Control Message Protocol,即网际控制报文协议
  1. 属于IP层协议
  2. 注:ICMP报文不是高层协议,而是作为IP层数据报的数据,加上数据报首部,组成IP数据报发出去
  • 作用:更有效的转发IP数据包 & 提高交付成功的机会

同时允许主机/路由器报告差错 & 异常情况

  • 分类 ICMP差错报告报文 & ICMP 询问报文
  • 主要应用 PING(分组网间探测)、Traceroute(跟踪1个分组从源点到终点的路径,原理 = 从源主机向目的主机发送一连串的IP数据报)

6.4 Ping的过程

  • 定义 Packet InterNet Groper ,即分组网间探测

是ICMP 报文的一个重要应用:使用了ICMP 回送请求 & 回送回答报文

是应用层 直接使用网络层ICMP的一个例子,无经过传输层的TCP,UDP

  • 作用 测试两个主机的连通性
  • 原理
  1. 向目的主机发送多个ICMP回送请求报文
  2. 根据目的的主机返回ICMP回送回答报文中的时间戳,从而计算出往返时间
  3. 根据现实的结果:发送到目的主机的IP地址、发送& 收到&接收的分组数、往返时间的最小、最大&平均值
  • 过程 假设有两台主机:(目的主机)PC1:IP = 192.168.1.1 (源主机)PC2:IP = 192.168.1.2

示意图

6.5 路由器 与交换机的区别

示意图

  • 简介

示意图

  • 区别和对比

示意图

  • 简介

示意图

  • 基于Cookie的身份验证 & 验证流程

示意图

示意图

  • 基于Token的身份验证 & 验证流程

示意图

示意图


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM