计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

0 概论

通信方式

  • 客户-服务器(C/S)
  • 对等(P2P)

网络性能指标

  • 速率:又称比特率。指的是单位时间传送的比特数,其单位是bit/s。一个bit就是一个二进制数字中的一个1或0。
  • 带宽:在计算机网络中,带宽用来表示通信线路的数据传输能力,因此网络带宽指的是在单位时间内从网络中的某一点到另一点所能通过的最高速率。
  • 时延 :时延指的是数据从网络的一端传送到另一端所需的时间。
    • 发送时延:主机或者路由器发送数据帧说需要的时间。发送时延 = 数据帧长度(b) / 发送速率(b/s)
    • 传播时延:电磁波在信道中传播一定距离需要话费的时间。传播时延 = 信道长度(m) / 电磁波在信道上的传播速率(m/s)
    • 处理时延:主机或者路由器在接受到分组时候要话费一定的时间进行处理。
    • 排队时延:分组在进入路由器后要先在输入队列中等待处理。
  • 时延带宽积:表示一个链路可以容纳的最多比特。时延带宽积 = 传播时延 * 带宽

数据交换方式

  • 电路交换:整个报文的比特流连续的从源点直达终点,好像在一个管道中传送。
  • 报文交换:整个报文先传输到相邻的结点,全部存储下来后查找转发表,转发到下一个结点。
  • 分组交换:单个分组(报文的一部分)传送到相邻结点,传送到相邻结点,存储下来后查找转发表,转发到下一个结点。

计算机网络体系结构

  • OSI(7层):物理层、数据链路层、网络层、传输层、表示层、会话层、应用层。
  • TCP/IP(4层):网际接口层、网络层、传输层、应用层。
  • 五层体系结构
    • 物理层:实现原始的比特流传输,传输单位:比特流
    • 数据链路层:局域网内两台主机之间的数据传输,传输单位:数据帧
    • 网络层:互联网内两台主机之间的分组数据传输,传输单位:数据包/报文分组
    • 传输层:互联网内两台主机之间的数据传输,传输单位:数据报(UDP)/数据段(TCP)
    • 应用层:互联网内两个应用之间的数据传输,传输单位:消息/报文

1 物理层

信道

  • 通信方式
    • 单工通信:单向传输
    • 半双工通信:双向交替传输
    • 全双工通信:双向同时传输
  • 信道分类:广播信道、点对点信道
  • 信道复用技术:频分复用 FDM、时分复用 TDM、波分复用 WDM、码分复用 CDM

信噪比:信号的平均功率和噪声的平均功率之比,记做 S/N,并以分贝作为度量单位,即 信噪比(dB) = 10log10(S / N) (dB)

香农工式:信道的极限传输速率 C = Wlog2(1 + S / N) (bit/s)

来自信源的信号常称为基带信号,为了能传输基带信号中的低频分量或直流分量必须对基带信号进行调制(modulation)。调制可分为两大类:

  • 基带调制:又称编码,把数字信号转换为另一种形式的数字信号
  • 带通调制:把数字信号转换为模拟信号

常用编码方式:不归零制、归零制、曼彻斯特、差分曼彻斯特

  • 曼彻斯特编码和差分曼彻斯特编码具有自同步能力

物理层的接口的特性

  • 机械特性:指明接口所用接线器的形状和尺寸,引线数目和排列,固定和锁定装置等;
  • 电气特性:指明在接口电缆的各条线上出现的电压的范围;
  • 功能特性:指明某条线上出现的某一电平的电压表示何种意义;
  • 规程特性:指明对于不同功能的各种可能事件的出现顺序。

物理层设备

  • 中继器:又称转发器,主要功能是将信号整形并放大再转发出去。
  • 集线器:实质上是一个多端口的中继器。
  • 传输媒介:屏蔽双绞线 STP、无屏蔽双绞线 UTP、同轴电缆、光缆、光钎、短波通信、微波

2 数据链路层

  • 封装成帧:将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。
  • 透明传输:不管传输的是什么内容,都应该可以在链路上传输。
  • 差错检测:目前数据链路层广泛使用了循环冗余检验(CRC)来检查比特差错。

2.1 点对点信道

点对点协议 PPP

  • 面向字节
  • 包括链路控制协议 LCP、网络控制协议 NCP
  • 使用零比特填充保证透明传输

2.2 广播信道

数据链路层的两个子层

  • 逻辑链路控制 LCC:用户的数据链路服务通过LLC子层为网络层提供统一的接口。
  • 介质访问控制 MAC:解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题。

CSMA/CD 协议

  • 载波监听多点接入 / 碰撞检测
    • 多点接入:说明这是总线型网络,许多主机以多点的方式连接到总线上。
    • 载波监听:每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。
    • 碰撞检测:在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。
    • 总结:先听后发,边发边听,冲突停发,随机重发。
  • 争用期:最先发送数据帧的站,在发送后至多经过 2t(两倍的往返时延),就知道是否发送碰撞,2t 称为争用期,如果争用期还没有发送碰撞,本次发送就不会发生碰撞
  • 最短有效帧长:因为冲突是发生在前 64 个字节之内,由于已检测到错误就停止发送,所以发送出去的肯定小于 64 字节,所以凡是小于64字节的帧都是无效帧
  • 应用:以太网
    • 无连接、不可靠交付、半双工通信、曼彻斯特编码
    • 标准:IEEE 802.3
    • 拓扑:逻辑上总线型、物理上星形
    • MAC 地址(硬件地址):48位——24位组织唯一标识符,24位扩展唯一标识符

CSMA/CA 协议

  • 载波监听多点接入 / 碰撞避免
    • 避免冲突的方法主要有两个:
      • 一是监听到信道空闲时,并不是立即发送,而是等待一段时间再发送数据。
      • 二是先发送一个很小的信道侦测帧 RTS,如果收到最近的接入点返回的 CTS,就认为信道是空闲的,然后再发送数据。
  • 与 CSMA/CA 的区别
    • 载波监测:CD 通过电缆电压变化监测,CA 通过能量变化监测
    • CA 信道利用率低于 CD 信道利用率
  • 应用:无线局域网
    • 标准:IEEE 802.11

局域网:是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。

  • 以太网是目前最广泛使用的局域网技术。
  • 虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。

2.3 数据链路层设备

  • 交换机:具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。
  • 网桥:用来连接不同网段。

3 网络层

两种服务:虚电路服务、数据报服务。

3.1 网际协议

IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。与 IP 协议配套使用的三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol):实现由 IP 地址得到 MAC 地址。
    • 逆地址解析协议 RARP
  • 网际控制报文协议 ICMP(Internet Control Message Protocol):为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中。重要应用:ping、traceroute。
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

IP 地址

IP 数据报

  • 报头区:20个字节固定长度,后面的可选字段
  • 数据区

子网掩码是在 IPv4 地址资源紧缺的背景下为了解决 IP 地址分配而产生的虚拟 IP 技术。

  • 工作过程:将 32 位的子网掩码与 IP 地址进行二进制按位运算得到的便是网络地址;将子网掩码二进制按位取反,然后 IP 地址进行按位运算,得到的就是主机地址。
  • 划分方式:根据子网数、根据主机数。

网络地址转换 NAT:专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。

IPv6

  • 地址空间为128位
  • 灵活的首部格式
  • 数据报40字节首部
  • 允许协议继续扩充

3.2 路由选择

自治系统(Autonomous System,AS):一个有权自主地决定在本系统中应采用何种路由协议的小型单位。

路由选择协议

  • 内部网关协议 IGP
    • 路由信息协议 RIP
      • 基于距离向量的路由选择协议
      • 允许一条路径最多包含15个路由器,即16为最大值即不可达
      • 特点
        • 仅和相邻路由器交换信息
        • 交换全部信息
        • 按照固定的时间间隔交换
      • 路由表
        • 所有路由表最终都会知道到达自治系统中任何一个网络的最短距离和下一跳路由器的地址
        • 距离向量算法
      • 坏消息传播的慢,好消息传播的快
    • 开放式最短路径优先 OSPF
      • 为了克服 RIP 的缺点而开发出来的
      • 最短路径算法
      • 特点
        • 向本自治系统中的所有路由器发送消息
        • 发送的信息就是与本路由器相邻的所有路由器的链路状态,但只是部分信息
        • 只有当链路状态发生变化时,路由器才使用洪泛法向所有路由器发送此消息
  • 外部网关协议 BGP
    • 和其他的 BGP 系统交换网络可达信息,包括列出的自治系统(AS)的信息

3.3 网络层设备

路由器

  • 功能:路由选择和分组转发。
  • 分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
  • 转发流程:
    1. 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
    2. 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
    3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
    4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
    5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
    6. 报告转发分组出错。

4 传输层

比较UDPTCP
名称User Datagram Protocol
用户数据报协议
Transmission Control Protocol
传输控制协议
报文首部8个字节
4个字段
20个字节
10个字段
有无连接无连接面向连接
是否可靠尽最大可能交付可靠交付
传输单位面向报文面向字节流
数据顺序不保证保证
数据正确性不保证保证
传输控制拥塞控制
流量控制
通信方式一对一
一对多
多对一
多对多
一对一
速度

4.1 UDP

4.2 TCP

套接字 = IP 地址 + 端口号

三次握手

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

四次挥手

四次挥手的原因

确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。

等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

可靠传输原理

  1. 停止等待协议自动重传请求:每法送一个分组就停止发送,等待对方的确定,收到确认后再发送下一个分组。如果丢失则重传,不断重传总是收不到确认,就说明通信线路太差,不能进行通信。
  2. 连续 ARQ 协议滑动窗口协议:发送方维持发送窗口,发送窗口中的分组都可以连续发送出去,不需要等待对方的确认,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
  3. 拥塞控制:防止过多的数据注入网络,使网络中的路由器或链路过载
    • 拥塞判断:重传定时器超时、收到三个相同的 ACK
    • 四种拥塞控制算法
      • 慢开始:从小到大逐渐增大拥塞窗口值 cwnd (指数增长),与慢开始门限 ssthresh 对比
      • 拥塞避免:cwnd 达到 ssthresh 时,线性增长(加法增大)
      • 快重传:要求接收方在收到一个失序的报文段后就立即发出重复确认
      • 快恢复:收到三个相同的 ACK 后,ssthresh = cwnd / 2; cwnd = ssthresh,开始执行拥塞避免,线性增大
        • 超时重传则将拥塞窗口大小设为 1,重新进入慢启动

TCP 粘包和拆包

  • 表现形式
    • 接收端正常收到两个数据包,即没有发生拆包和粘包的现象。
    • 接收端只收到一个数据包,由于 TCP 是不会出现丢包的,所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。
    • 接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。
  • 出现原因
    • 要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包。
    • 待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。
    • 要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。
    • 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
  • 方法
    • 使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容。
    • 设置定长消息,服务端每次读取既定长度的内容作为一条完整消息。
    • 设置消息边界,服务端从网络流中按消息编辑分离出消息内容。

5 应用层

协议名称应用层协议端口号传输层协议备注
域名解析系统DNS53UDP/TCP长度超过 512 字节时使用 TCP
动态主机配置协议DHCP67/68UDP 
简单网络管理协议SNMP161/162UDP 
文件传送协议FTP20/21TCP控制连接 21,数据连接 20
简单文件传送协议TFTP69UDP 
远程终端协议TELNET23TCP 
安全外壳协议SSH22TCP 
超文本传输协议HTTP80TCP 
超文本传输安全协议HTTPS443TCP 
简单邮件传送协议SMTP25TCP 
邮件读取协议POP3110TCP 
网际报文存取协议IMAP143TCP 

5.1 HTTP

5.1.1 HTTP报文
  • 请求报文
    • 请求行:请求方法 URL 协议版本
    • 请求头:Accept - 接受什么类型的响应、CookieReferer - 从哪个 URL 过来的请求、Cache-Control
    • 请求体
  • 响应报文
    • 响应行:协议版本 状态码 状态描述
    • 响应头:Cache-ControlLocation - 重定向地址、Set-Cookie
    • 响应体

HTTP 请求方法

  • GET 获取资源
  • HEAD 与 GET 相同,但只返回 HTTP 报头,不返回文档主体。
  • POST 传输实体主体
  • PUT 上传文件
  • PATCH 对资源进行部分修改
  • DELETE 删除文件
  • OPTIONS 查询支持的方法
  • CONNECT 要求在与代理服务器通信时建立隧道
  • TRACE 追踪路径
对比GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
历史参数保留在浏览器历史中参数不会保存在浏览器历史中
限制长度、数据类型受限无限制
安全性较差,发送的数据是 URL 的一部分较好,参数不会被保存在浏览器历史或 web 服务器日志中
可见性数据在 URL 中对所有人都是可见的数据不会显示在 URL 中

HTTP 状态码

  • 1xx:指示信息——表示请求已接收,继续处理
  • 2xx:成功——表示请求已被成功接收、理解、接受
    • 200(“OK”) 一切正常
  • 3xx:重定向——要完成请求必须进行更进一步的操作
    • 301(“Moved Permanently”) 客户端触发的动作引起了资源 URI 的变化时发送此响应代码
  • 4xx:客户端错误——请求有语法错误或请求无法实现
    • 400(“Bad Request”) 客户端方面的问题
    • 410(“Gone”) 服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了
    • 404(“Not Found”) 服务器端不知道客户端要请求哪个资源
    • 409(“Conflict”) 客户端试图执行一个“会导致一个或多个资源处于不一致状态”的操作
  • 5xx:服务端错误——服务器未能实现合法的请求
    • 500(“Internal Server Error”) 服务期方面的问题

输入 URL 的全过程

  1. 浏览器通过 DNS 查找域名的 IP 地址
  2. 浏览器向 web 服务器发送一个 HTTP 请求
  3. 服务器的永久重定向响应
  4. 浏览器跟踪重定向地址
  5. 服务器处理请求
  6. 服务器返回一个 HTTP 响应
  7. 浏览器显示 HTML
5.1.2 缓存机制

session cookie 机制:由于 HTTP 的无状态性

  • session 在服务器端,cookie 在客户端(浏览器)
  • session 可以放在 文件、数据库、或内存中,默认被存在在服务器的一个文件里(不是内存)
  • session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  • 用户验证这种场合一般会用 session
5.1.3 长连接和短连接
  • HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。
  • 短连接:每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。
  • 长连接:每次 HTTP 操作结束后,TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。会在响应头加入代码:Connection:keep-alive

5.2 HTTPS

在 HTTP 的基础下加入 SSL 层。搜索排名中更有优势。

  • SSL:Secure Socket Layer,安全套接层。
  • TLS:Transport Layer Security,传输层安全。是更为安全的升级版 SSL。
  • TLS/SSL 是一种加密通道的规范

加密算法

  • 非对称加密算法,获得对称加密算法的密钥,保证密钥的安全性
  • 对称加密算法,实际的网页内容的加密,利用了其速度快的优势
  • hash 算法,防止篡改的发生,是一种校验机制
  • 数字证书,防止篡改非对称加密算法的公钥,标志了服务器的身份

HTTPS 连接过程

  1. HTTPS 请求
  2. 服务端生成公钥和私钥
  3. 服务端发送证书和公钥
  4. 客户端验证证书
  5. 客户端生成密钥,通过证书中的公钥进行非对称加密,发送到服务端
  6. 服务端使用私钥解密,获取到客户端密钥,使用该密钥加密数据
  7. 数据传输
  8. 客户端使用密钥解密
⤧  Next post 【OS】操作系统 ⤧  Previous post 【软件工程】《人月神话》书摘