计算机网络
参考王道考研 (opens new window),菜鸟教程 (opens new window)
# 分层结构
# 七层 OSI 参考模型 (法定标准)
国际化标准组织(ISO)于1984年提出开发系统互连(OSI)参考模型。
7 应用层 :能够产生网络流量,能够和用户交互的应用程序
6 表示层 :数据加密解密 数据压缩恢复 格式转换
5 会话层 :服务和客户建立的会话 查木马 校验点实现同步
4 传输层 :可靠/不可靠 传输 、 差错/流量 控制
3 网络层 :IP地址编址 选择最佳路径
2 数据链路层 :输入如何封装 添加物理地址MAC
1 物理层 :电压 接口标准
765 是资源子网(数据处理)
321 是通信子网(数据通信)
# 四层 TCP/IP参考模型(事实标准)
OSI与TCP/IP相同点
- 都分层
- 基于独立的协议栈的概念
- 可以实现异构网络互联
OSI与TCP/IP不同点
OSI定义三点:服务、协议、接口
OSI先出现,参考模型先于协议发明、不偏向特定协议
TCP/IP设计之初就考虑到异构网互联问题,将IP作为重要层次
ISO/OSI参考模型 TCP/IP模型 网络层 无连接+面向连接 无连接 传输层 面向连接 无连接+面向连接 面向连接:分为三个阶段。建立连接-数据传输-释放连接
无连接:没有这么多阶段,直接进行数据传输
# 五层参考模型÷
# 性能指标
# 速率
速率即 数据率 或称 数据传输率 或 比特率
连接在计算机网络上的主机在数字信道上传送数据位数的速率
单位 b/s,kb/s,Mb/s,Gb/s,Tb/s
# 带宽
(1) “带宽”原本指某个信号具有的频带宽度,即最高频率与最低频率之差,单位是赫兹(Hz)。
(2)计算机网络中,带宽用来表示网络的通信线路传送数据的能力,通常是指单位时间内从网络中 的某一点到另一点所能通过的**“最高数据率”**。单位是“比特每秒”,b/s, kb/s, Mb/s, Gb/s。网络设备所支持的最高速度
# 吞吐量
表示在单位时间内通过某个网络(或信道、接口) 的数据量。
单位b/s, kb/s, Mb/s, Gb/s等。
# 时延
指数据(报文/分组/比特流)从网络(或链路)的一端传送到另一端所需的时间。也叫延迟或迟延。单位是s。
时延包括
- 发送时延
- 传播时延
- 排队时延
- 处理时延
# 时延带宽积
# 往返时延
从发送方发送数据开始,到发送方收到接收方返回的确认
# 利用率
# ARP协议
**地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址映射的一个TCP/IP协议。**解决下一跳走哪的问题
ARP协议使用过程:
- 检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为的FF-FF-FF-FF-FF-FF 的帧封装并
广播ARP请求分组
,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组
,源主机收到后将此映射写入ARP缓存(10min-20min 更新一次)。
ARP协议四种典型情况
- 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址;
- 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址;
- 路由器发给本网络的主机A:用ARP找到主机A的硬件地址;
- 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。
ARP欺骗
- 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗
# 路由选择协议
# 内部网关协议IGP
RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,选择最佳距离记录,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。
OSPF协议 :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。
# 外部网关协议EGP
BGP协议:BGP正常CIDR
,因此BGP的路由表也就包括目的的网络前缀、下一跳路由器,以及到达该目的的网络所要经过的各个自治系统序列。
在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样对节省网络带宽和减少路由器的处理开销都有好处。
# IP协议
IP主要包含三方面内容:IP编址方案、分组封装格式及分组转发规则。
- IP分组的转发规则
路由器仅根据网络地址进行转发。当IP数据包经由路由器转发时,如果目标网络与本地路由器直接相连,则直接将数据包交付给目标主机,这称为直接交付;否则,路由器通过路由表查找路由信息,并将数据包转交给指明的下一跳路由器,这称为间接交付。路由器在间接交付中,若路由表中有到达目标网络的路由,则把数据包传送给路由表指明的下一跳路由器;如果没有路由,但路由表中有一个默认路由,则把数据报传送给指明的默认路由器;如果两者都没有,则丢弃数据包并报告错误。
- IP分片
一个IP包从源主机传输到目标主机可能需要经过多个不同的物理网络。由于各种网络的数据帧都有一个最大传输单元(MTU (opens new window))的限制,如以太网帧的MTU是1500;因此,当路由器在转发IP包时,如果数据包的大小超过了出口链路的最大传输单元时,则会将该IP分组分解成很多足够小的片段,以便能够在目标链路上进行传输。这些IP分片重新封装一个IP包独立传输,并在到达目标主机时才会被重组起来。
- IP分组结构
一个IP分组由首部和数据两部分组成。首部的前20字节是所有IP分组必须具有的,也称固定首部。在首部固定部分的后面是一些可选字段,其长度是可变的。
生存时间(TTL):IP分组的保质期,经过一个路由器-1,变成0则丢弃。
协议:数据部分的协议。
............
# ICMP协议
Internet Control Message Protocol,因特网控制报文协议 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 所以就需要一种协议来完成这样的功能----ICMP协议。
# TCP协议
TCP协议特点
- TCP是面向连接(虚连接)的传输层协议。
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
- TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重。
- TCP提供全双工通信。
- 发送缓存 准备发送的数据&已发送但尚未收到确认的数据
- 接受缓存 按序到达但尚未被接受应用程序读取的数据&不按序到达的数据
- TCP面向字节流
- TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。
- TCP报文段首部格式
# TCP三次握手/四次挥手
为什么要三次握手?
在只有两次"握手"的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据...问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,"三次握手"很有必要!
为什么要四次挥手?
试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
# UDP协议
UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
主要特点:
UDP是无连接的,减少开销和发送数据之前的时延。
UDP使用最大努力交付,即不保证可靠交付
UDP是面向报文的,适合一次性传输少量数据的网络应用
UDP无拥塞控制,适合很多实时应用
UDP首部开销小,8B,TCP是20B.
使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。
TCP 与 UDP **的区别:**TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。
# DNS协议
DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。
# HTTP协议
HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP 遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。
传输流程
1:地址解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm 从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm13/04/2018
在这一步,需要域名系统 DNS 解析域名 localhost.com,得主机的 IP 地址。
2:封装 HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个 HTTP 请求数据包
3:封装成 TCP包并建立连接
封装成 TCP 包,建立 TCP 连接(TCP 的三次握手)
4:客户机发送请求命
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和可内容。
5:服务器响应
服务器接到请求后,给予相应的响应信息,**其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。 **
6:服务器关闭TCP 连接
服务器关闭 TCP 连接:一般情况下,一旦 Web 服务器向浏览器发送了请求数据,它就要关闭 TCP 连接,然后如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive
,TCP 连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
# HTTPS协议
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL。其所用的端口号是 443。 过程大致如下:
建立连接获取证书
1) SSL 客户端通过 TCP 和服务器建立连接之后(443 端口),并且在一般的 tcp 连接协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL 的服务器端会回应一个数据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证书里面包含了服务器信息:域名。申请证书的公司,公共秘钥)。
证书验证
2) Client 在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共秘钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。
数据加密和传输
3) 如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。然后发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。
sequenceDiagram
Title: HTTPS
participant client as 客户端(浏览器)
participant server as 服务端
client ->> + server: 1:请求Https连接
server --> - client: (返回证书(公钥))
client ->> client: 2:产生随机(对称)秘钥
client ->> client: 3:使用公钥对对称秘钥加密
client ->> + server: 4:发送加密后的对称秘钥
server -->> - client:
client ->> + server: 5:通过对称密钥加密的密文通信
server -->> - client:
2
3
4
5
6
7
8
9
10
11
12
13