目录
一、TCP/IP
协议族
分层管理
二、UDP与TCP
UDP
TCP
三次握手
四次挥手
三、域名与ip
ip地址
域名
域名解析
域名记录
四、CDN
前置技术
工作原理
五、通信数据转发
代理
网关
隧道
六、防火墙
引言
1969 年,第一个真正意义上的互联网在美国出现,它就是著名的 ARPANET(阿帕网,国防部高级计划局网络)。
起初 ARPANET 仅用于军事领域;随着各大高校的接入,开始用于科研领域;1983 年,美国高级研究计划署和美国国防部通信局研制成功了用于异构网络的 TCP/IP 协议,美国加利福尼亚伯克莱分校把该协议作为其 BSD UNIX(是加州大学伯克利分校软件组作的操作系统)的一部分,使得该协议得以在社会上流行起来,从而诞生了真正的 Internet(互联网)。美国国家科学基金会 NSF(National Science Foundation)建立的 NSFnet 使用的就是 TCP/IP。
到 1990 年,ARPANET 已退出了历史舞台;NSFnet 成为 Internet 的重要骨干网之一。
一、TCP/IP
协议族
TCP/IP 是互联网相关的各类协议族的总称,称为 TCP/IP 协议族,也有说法认为,TCP/IP 是指 TCP 和 IP 这两种协议。我们通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。
其中两个比较重要的 协议 就是 TCP 协议 与 IP 协议:
- TCP 协议:位于运输层,提供可靠的字节流服务。
- IP 协议:
- IP(Internet Protocol,网际协议)位于网络层
- 作用是把各种数据包传送给对方;而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 ip 地址 和 MAC 地址(Media Access Control Address)
- ip 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。ip 地址可以和 MAC 地址进行配对。ip 地址可变换,但 MAC 地址基本上不会更改。通过 ARP 协议 可以根据 ip 地址反查出对方的 MAC 地址(RARP 协议则是通过 MAC 地址反查出 ip 地址)
分层管理
接下来说说大家都比较熟悉的网络的分层结构
- ISO 制定的 OSI/RM 协议 (七层协议)
- TCP/IP 的 四层协议
这里我们主要讲一下 TCP/IP 的四层协议
- 应用层:决定了向用户提供应用服务时通信的活动;提供各类通用的服务,我们熟悉的 HTTP 协议、FTP、DNS都是在这一层。
- 运输层:为 应用层 提供网络中两台计算机间的数据传输;这一层中存在两个重要的协议:TCP、UDP。
- 网络层:用来处理网络上流动的数据包,同时规定应该通过什么样的 传输路线 抵达目标计算机,并把数据包传送给对方,主要协议是 IP 协议。
- 网络接口层:也叫 链路层,主要处理网络的硬件部分,控制操作系统、设备驱动、NIC、光纤等都属于这一层的范围。
(数据包:网络传输中最小的数据单位)
这里我们以常用的 http 请求为例来看一下分层协议是如何工作的
- 客户端发出
- 首先,客户端在 应用层 发出一个 http 请求
- 接着,运输层(TCP)把收到的 http 请求报文分割成多份,并给每份加上 TCP 首部(标记 及 端口号等),转发给 网络层
- 网络层(IP 协议)加上 IP 首部(目的地 MAC 地址),转发给网络接口层
- 网络接口层加上以太网首部,通过硬件设备发出
- 服务端接收 在网络接口层接收到数据,按序往上层发送,一直到应用层,每经过一层时会把对应的首部剥去。
二、UDP 与 TCP
UDP 与 TCP 协议都在运输层,负责数据的传输。
UDP
UDP(User Data Protocol,用户数据报协议)基于 数据报 传输数据。
来看一下 UDP 报文的结构
UDP 报文头(首部)中主要有四个字段
- 源端口:16 位,发送方所使用的 UDP 端口,非必填,默认是 0
- 目的端口:16 位,接收方所使用的端口。
- 长度:16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度;由于 UDP 报文头长度是 8 个字节,所以这个字段值最小为 8。
- 校验值:16 位,用来校验数据在传输过程中是否被损坏
UDP 仅对报文添加首部后直接转发给 网络层(IP 协议),因此处理速度快,但是不关心数据能否成功被接收,所以也容易造成丢包。常见的应用场景有:ping 命令、直播、聊天室、物联网等。
TCP
TCP 协议可以一个字节一个字节地接收数据,接收到的数据组成长度不等的段,并给每一段添加上 TCP 首部,再转发至网络层。
老规矩,先来看一下 TCP 报文头(首部)结构,比较复杂,借了张图
- 源端口:16 位,发送方应用程序的端口号
- 目的端口:16 位,接收方应用程序的端口号
- 序列号字段(Sequence Number):32 位,它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当 SYN 标记不为 1 时,这是当前数据分段第一个字母的序列号;如果 SYN 的值是 1 时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步
- 确认号字段(Acknowledgment Number,ACK Number):32 位,它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加 1。
- 首部长度:4 位,也称为“数据偏移字段”,用来确定 TCP 数据段首部的长度,告诉接收端的应用程序,数据从何处开始
- 保留字段(Reserved):4 位,以备未来扩展 TCP 之用,目前需全部为 0
- 标志位字段(每个字段各占 1 位):
- CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
- ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
- URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
- ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
- PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
- RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
- SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
- FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
- 窗口大小(Window Size):16 位。它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。
- 校验位(TCP Checksum):16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum 是根据伪头 + TCP 头 + TCP 数据三部分进行计算的。
- 紧急指针(Urgent Pointer):16 位,仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。
- 可选项(Option):长度不定,但长度必须是 32bits 的整数倍。
三次握手
谈到 TCP,条件反射地都会想到 三次握手。
上图
- 第一次握手
- 客户端发起
- syn = 1 告知服务端同步序号,SEQ 等于初始序列值
- 进入 SYN_SENT 状态,等待服务器确认
- 第二次握手
- 服务端发起
- 服务端接收到客户端消息后,首先向客户端回复一个确认信息(ACK=x+1)
- 之后再向客户端发送一个 SYN 包(SEQ=y)建立连接
- 进入 SYN_RECV 状态
- 第三次握手
- 客户端发起
- 客户端向服务端发出确认包(ACK=y+1,SEQ=x+1)
- 确认包发送完毕后客户端和服务端进入 ESTABLISHED 状态,开始传输数据
客户端与服务端之间的通信是一个数据传输过程;通信的消息将以数据包形式进行传输;为了保证顺序性,每个包都有一个 ID。当数据包丢失时,TCP 协议会利用数据重发功能重新发送数据包。
四次挥手
当客户端与服务端数据传输结束,不再进行通信时,会以 四次挥手 的方式结束连接。
- 第一次挥手
- 客户端发起
- 客户端随机生成一个序列号 SEQ=x,设置 FIN=1 告知服务端要断开连接了
- 第二次挥手
- 服务端发起
- 服务端发送 ACK 报文,表示已经收到断开请求
- 随机生成一个序列号 SEQ=y。由于回复的是客户端发来的请求,所以在客户端请求序列号 x 的基础上加 1,得到 ACK=x+1
- 第三次挥手
- 服务端发起
- 用于确认所有传输到客户端的数据已经传输完毕
- 再次随机生成一个序列号 SEQ=z。由于还是对客户端发来的 TCP 断开请求序列号 SEQ=x 进行回复,因此 ACK 依然为 x+1
- 第四次挥手
- 客户端发起
- 表示收到断开 TCP 连接数据包
- 向服务器发送 ACK 报文,生成一个序列号 SEQ=x+1。由于回复的是服务器,所以 ACK 字段的值在服务器发来断开 TCP 连接请求序列号 SEQ=z 的基础上加 1,得到 ACK=z+1
小结
- TCP 是面向连接的,UDP 是面向无连接的
- UDP 结构较简单
- TCP 是面向字节流的,UDP 是基于数据报的
- TCP 保证数据正确性,UDP 可能丢包
- TCP 保证数据顺序,UDP 不保证
三、域名与 ip
ip 地址
在单个局域网网段中,计算机与计算机直接通信,可以使用 网络接口层 提供的 MAC 地址进行通信。
但是,如果在路由式网络中,计算机与计算机之间存在路由,还使用 MAC 地址传输数据处理起来就比较麻烦,因为 MAC 地址无法表示国家、省、市、区、街道、路、号这类层次,也无法在地址空间上引入逻辑结构。
因此,要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 ip 地址。
ip 地址由 网络 ID、主机 ID 两部分构成
- 网络 ID:标识主机所在的网络位置
- 主机 ID:标识网络中主机的位置
一般以 ip 地址 32 位二进制的形式划分为 5 类:
- A 类:前 8 位表示网络 ID,后 24 位表示主机 ID;一般给政府使用;范围: 0.0.0.0 ~ 127.255.255.255
- B 类:前 16 位表示网络 ID,后 16 位表示主机 ID;分配给中等规模企业使用;范围:128.0.0.0 ~ 191.255.255.255
- C 类:前 24 位表示网络 ID,后 8 位表示主机 ID;分配给个人使用;范围:192.0.0.0 ~ 223.255.255.255
- D 类:不区分网络 ID 和主机 ID;用于多播;范围:224.0.0.0 ~ 239.255.255.255
- E 类:不区分网络 ID 和主机 ID;用于实验;范围:240.0.0.0 ~ 255.255.255.254
数据在网络中进行传输是通过识别 IP 地址中的网络 ID,从而将数据发送到正确的网络中;如果存在 子网(将 主机 ID 进一步划分为 子网 ID 和 主机 ID) 寻找网络内的子网,然后再根据主机 ID 将数据发送到目标主机上。
域名
计算机既可以被赋予 ip 地址,也可以被赋予主机名和域名。用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 ip 地址 访问。因为与 ip 地址 的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯
域名由多个部分组成,每个部分通过 “.” 连接,例如:www.melonfield.club。域名的结尾有时候还有一点,这是保留给根节点的,但是我们在书写时通常省略,在查询时软件会自动补上。
域名通常分为 根域、顶级域(一级域)、子域名(二级域、三级域等)
- 根域:域名结尾的 “.”,通常由软件自行补上,目前共有 13 个根域服务器(不是 13 台,而是 13 个 IP 地址)
- 顶级域:域名中最高的一级,每个域名都以顶级域结尾,如上面例子中的 club,每个域都会有域名服务器,也叫权威域名服务器
- 子域名:顶级域左侧就是二级域名,二级域名左侧就是三级域名,从右侧到左侧,隔一个点依次下降一层
域名解析
有了域名,要怎么把 域名 跟 ip 地址 联系上呢?
这时候就需要进行 域名解析,解析工作一般由 域名服务器(也称:DNS 服务器) 完成。
域名解析也称为 域名指向、服务器设置、域名配置 或 反向 IP 登记等,分为:
- 正向解析:即将域名解析成 ip 地址;
- 反向解析:将 ip 地址转换为 域名。
下面以 melonfield.club 为例,现在我需要访问这个站点,我的小电脑需要找到这个域名对应的 ip 地址
- 我的小电脑上会先自查
- 先查 hosts 文件中是否有这个域名的 ip 地址
- 如果没有找到,则查找 本地 DNS 解析器 缓存
- 本机没有找到的话,下一步会连接到 本地域名服务器(我的小电脑的 TCP/ip 参数中设置的首选 DNS 服务器)查询
- 权威性解析:需要查询的域名,包含在本地配置区域资源中
- 非权威性解析:要查询的域名,不由 本地域名服务器 解析,但是存在该域名的缓存
- 本地域名服务器也查不到的话,有两种选择
- 通过 转发器 向上一级 域名服务器 查询
- 向 13 个根域名服务器查询
- 若没有转发,本地域名服务器会向最近的一个 根域名服务器 查询
- 根域名服务器 返回一个管理该域名顶级域名(.club)的服务器 ip
- 本地域名服务器向 club 域的服务器查询
- .club 域的服务器也无法解析,返回 .club 域的下一级 域名服务器(melonfield.club) 的地址
- 本地域名服务器向 melonfield.club 域服务器 查询
- 至此,找到了 melonfield.club 域名的 ip 地址
我的小电脑 与 本地 DNS 服务器 之间的查询属于 递归查询,而 DNS 服务器 之间的交互查询就是 迭代查询。
再引用一张图来理解一下,这应该是最详细的图了
域名记录
了解了 域名解析 大致是怎么工作的,但是你刚注册的域名要如何指向你自己的主机呢?
这一步就需要我们主动告诉 DNS 数据库 你这个域名是指向哪个 ip 地址 的。
DNS 数据库中包含 资源记录(Resource Records),每条资源记录由一组字段组成:
- 名称 - 指示记录的名称或所有者的标签。此字段可以是根域名(用 @ 表示)或子域名(例如 www)。
- 类型 - 记录的类型。例如,A(地址)记录。
- TTL -(存留时间)存储在缓存(本地存储空间)中的记录副本必须更新(从原始存储空间提取)或舍弃的频率。存留时间越短,表示提取记录越频繁(结果是访问较慢,但数据较新)。存留时间越长,表示提取记录越不频繁(结果是访问较快,但数据较旧)。默认值为 1 小时。
- 数据:记录的数据,会因记录的类型而有所不同。例如,A 记录的数据是主机的 IP 地址。这是在 DNS 搜索过程中返回的数据
常见的记录类型有以下几种:
- A:指向主机的 ip 地址;数据值:ip 地址(IPv4 地址)
- CNAME:将域名指向另一个域名,实现与被指向域名相同的访问效果;数据值:一般是主机服务商提供的一个域名
- MX:指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器;数据值:电邮交互记录
- TXT:文本记录,通常验证记录是会使用到;数据值:任意文本
- NS:指定该域名由哪个域名服务器来解析;数据值:域名服务器
- AAAA:与 A 记录类似,不过 AAAA 指向的是 IPv6 的地址;数据值:ip 地址(IPv6 地址)
- SPF:作为 SPF 协议的一部分,优先作为先前在 TXT 存储 SPF 数据的临时做法;数据值:SPF 记录
- SRV:SRV 记录了哪台计算机提供了哪个服务;数据格式:服务的名字.协议的类型(例如:_example-server._tcp)
- CAA:控制单域名 SSL 证书的发行,也可以控制通配符证书;数据格式:CAA 认证机构限制标志 证书属性标签 证书颁发机构、策略违规报告邮件地址等
- 显性 URL 转发:访问域名时,自动跳转至目标地址;访问 www.melonfield.club 后跳转到 www.google.com,地址栏显示 www.google.com;数据值:http(s)协议地址
- 隐性 URL 转发:与 显性 URL 转发 类似,不同之处在于跳转到 www.google.com 之后,地址栏仍显示的是 www.melonfield.club;数据值:http(s)协议地址
四、CDN
CDN 全称是 内容分发网络(Content Delivery Network)。建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。目的是通过在现有的 Internet 中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
前置技术
CDN 的实现需要依赖很多技术,主要包括 负载均衡技术、动态内容分发与复制技术、缓存技术。
- 负载均衡(Load Balance)
意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。为解决单点故障,可以采取冗余的方式,将相同的应用部署到多台机器上。为解决访问统一入口问题,可以在集群前面增加负载均衡设备,实现流量分发。
在技术上又可细分为:DNS 负载均衡,HTTP 负载均衡,IP 负载均衡,链路层负载均衡等。 - 动态内容分发与复制技术 简单的说就是将网站大部分静态页面、图像、流媒体数据分发复制到各地的节点上
- 缓存技术 作用就是提高用户的访问速度;包括 本地缓存 以及 ISP 缓存
工作原理
CDN 通常会使用 CNAME 记录,由 CDN 服务提供商提供。
上图
来源:阿里巴巴淘系技术常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!