计算机网络原理笔记
计算机网络的分类
按作用范围分类
- 广域网(WAN):覆盖范围较大,通常跨越城市、国家甚至全球,传输速率相对较低,延迟较高,如互联网。
- 城域网(MAN):覆盖范围介于广域网和局域网之间,通常覆盖一个城市或地区,传输速率较高,如城市的有线电视网络。
- 局域网(LAN):覆盖范围较小,通常在一个建筑物或校园内,传输速率高,低延迟,可靠性高,如家庭网络、企业网络、校园网络。
按网络使用者分类
- 公用网络:由网络服务提供商提供,多个用户可以共享使用,如互联网。
- 专用网络:由特定组织或企业自行构建和管理,仅供内部用户使用,如企业内部网络。
数据通信
数据通信是指在不同计算机或设备之间传输数据的过程。它涉及到多个方面的知识,包括信道、通信方式、数据传输速率等。
信道的基本概念
信道:一般表示向一个方向传送的信息的媒体。所以咱们说平常的信息线路往往包含一条发送信息的信道和一条接受信息的信道。
- 单向通信(单工通信):只能发送或只能接收。例如:电视塔发送电视信号,但是电视无法向电视塔发送信号
- 双向交替通信(半双工通信):双方可以收发,但是不能同时发送或同时接收
- 双向同时通信(全双工通信):通信的双方可以同时发送和接收消息。例如:打电话
计算机通信大多数是半双工和全双工通信
数据传输速率
数据传输速率是指单位时间内传输的数据量,通常用比特率(bit/s)或字节率(B/s)来表示。常见的数据传输速率单位有:
- 比特每秒(bit/s):每秒传输的比特数,是最基本的传输速率单位。
- 千比特每秒(kb/s):每秒传输的千比特数,1 kb/s = 1000 bit/s。
- 兆比特每秒(Mb/s):每秒传输的兆比特数,1 Mb/s = 1000 kb/s = 1,000,000 bit/s。
- 吉比特每秒(Gb/s):每秒传输的吉比特数,1 Gb/s = 1000 Mb/s = 1,000,000,000 bit/s。
例如,我们常说的“我家装的100M的带宽”,这里的100M指的是100 Mb/s,即每秒可以传输100兆比特的数据。
OSI参考模型与TCP/IP四层模型
计算机或设备之间传输数据的功能可以简单被划分为 OSI参考模型 或 TCP/IP四层模型。
OSI参考模型
OSI(Open Systems Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。它将计算机网络通信的功能划分为七个层次,每一层都为上一层提供服务,并屏蔽了下一层的实现细节。由于其过于复杂和理想化,在实际应用中并没有得到广泛采用。
- 应用层:提供应用程序之间的程序协议,如HTTP、FTP、SMTP、TELNET、POP3、Finger、NNTP、IMAP4等。
- 表示层:提供数据的表示和转换,确保不同系统之间的数据格式一致。
- 会话层:管理应用程序之间的会话,确保数据的可靠传输。
- 传输层:提供端到端的数据传输服务,如TCP和UDP。
- 网络层:数据路由和寻址,如IP、ICMP、ARP、RARP等。
- 数据链路层:管理相邻节点之间的数据传输,如以太网、令牌环网、FDDI等。
- 物理层:连接不同的物理设备,传输比特流。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。
TCP/IP四层模型
TCP/IP四层模型起源于20世纪70年代美国国防部的研究项目,经过多年的发展和完善,成为了互联网的基础协议栈,被广泛应用于实际网络中。
- 应用层:提供应用程序之间的程序协议,如HTTP、FTP、SMTP、TELNET、POP3、Finger、NNTP、IMAP4等。
- 传输层:提供端到端的数据传输服务,如TCP和UDP。
- 网络层:数据路由和寻址,如IP、ICMP、ARP、RARP等。
- 网络接口层:管理相邻节点之间的数据传输,如以太网、令牌环网、FDDI等。
TCP/IP四层模型与OSI体系结构对比
各层间的数据传输
网络排错
从底层向上排除
- 物理层故障:网络连接状态、查看发送和接收数据包
- 数据链路层故障:MAC地址冲突、ADSL欠费、网速无法协商、计算机连接到错误的 VLAN
- 网络层故障:配置了错误的IP、子网掩码、网关,路由器没有配置可达目标的路由
- 应用层故障:(上四层都在这里说)应用程序配置错误(如如浏览器配置了错误的代理)
OSI网络参考模型和网络安全的例子
- 物理层安全: 一栋大厦是保险公司的,建造时布好网线,使用时10层租给了其他公司,其他公司通过原先布好的网线就可以访问保险公司网络。(别人应该无法私自连接到你的网络,租售10层时 应将网线断开服务器,或配置将网络断开)
- 数据链路层安全: 上网时 ADSL 上网账号密码 VLAN划分 交换机绑定固定MAC地址
- 网络层安全: 路由器上使用ACL控制数据包流量(指定IP才传输) 防火墙设置
- 应用层安全: 开发的应用程序没有漏洞(比如没有SQL注入漏洞等等)
计算机网络性能指标
- 1. 速率
连接在计算机网络上的主机在数字信道上传送数据位数的速率(data rate,bit rate)单位为b/s
, kb/s
, Mb/s
, Gb/s
, 这就是我们常说的“我家装的100M的带宽”。需要注意的是,有些网站测速显示的速率是按字节来表示的,因此需要将 100M 除以 8 才能得到网站显示的数据。此外,交换机的带宽为100M,这里的100M其实是指 100Mb/s
。
- 2. 带宽
数据通信中,数字信道所能传输的最高速率,单位为 b/s
, kb/s
, Mb/s
, Gb/s
注意,这也是一个速率,只不过是最大速率,和上面的理解几乎一样,多数情况受硬件限制
- 3. 吞吐量
单位时间内通过某个网络数据量(有可能是几条数据链路流量和)
- 4. 时延 也就是我们平时玩游戏说的延时, 时延包括(发送时延、传播时延、处理时延、排队时延): 发送时延 = 数据块长度(bit) / 信道带宽(bit/s)
加带宽是减少发送时延 传播速度由介质介质决定,介质固定,传播速度固定, 带宽可以无限增加吗?
不可以: 数据块长度固定,增加带宽意味着发送时间变短,同时数据块在信道中的长度也变短了(波形长度 = 发送时间 * 传播速度),之前说过传播速度由介质决定,一般固定,那么发送时间越短,波形越短,短到一定程度,接收方就无法识别高低电平了
铜线和光纤的对比
铜线的传播速率其实和光纤的速率接近,那为什么使用光纤呢?因为光纤支持更高的发送速率,光纤使用光信号,即使数据很短,也能解析出高低电平。而铜线使用电信号,波形太短,无法识别高低电平。
5. 时延带宽积 = 传播时延 * 带宽
6. 往返时间(RTT Round-Trip Time)
ping出的时间就是往返时间 > 2000ms请求超时
- 7. 利用率
物理层
物理层,作为计算机网络OSI模型中的最底层,承担着在各种物理媒介上透明传输数据比特流的重要任务。它不仅为设备间的数据通信提供传输媒体和互连设备,还确保数据能够在物理链路上进行可靠传输。物理层的核心功能是确保原始数据能够在不同物理媒介上进行传输,无论是局域网还是广域网,都涉及物理层的工作。
物理层的主要功能
物理层的主要功能包括为数据端设备提供传输数据的通路,确保数据能够在物理媒介上正确传输,并提供足够的带宽以减少信道上的拥塞。此外,物理层还负责物理连接的建立、维持和释放,以及在两个相邻系统之间唯一地标识数据电路。
物理层的组成部分
物理层的组成部分涵盖了多种传输媒介,如架空明线、平衡电缆、光纤和无线信道等。此外,物理层还包括各种互连设备,例如调制解调器、插头、插座以及局域网中的同轴电缆、T型接头、中继器等。
物理层的接口协议
物理层的接口协议涉及机械特性、电气特性、功能特性和规程特性。这些特性规定了传输介质和接口与传输信号相关的各种参数,如接口的形状和尺寸、电压范围、信号线的功能分配以及传输比特流的全过程。
物理层的通信硬件
物理层常见的通信硬件包括网卡、光纤、CAT-5线、RJ-45接头、集线器等。这些硬件设备支持数据的传输和接收,是实现物理层功能的基础。
物理层的编程方法
物理层的编程方法涉及DOS通信、PC通信和BIOS等级别的通信。这些方法允许通过特定的编程接口和协议,实现数据在物理层的传输。
物理层作为OSI模型的基础,其重要性不言而喻。它不仅提供了数据传输的物理基础,还通过一系列的标准和协议,确保了数据能够在不同环境和设备间进行有效的传输。无论是在网络的构建还是在数据传输的过程中,物理层都发挥着不可或缺的作用。
数据链路层
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。数据链路层在不可靠的物理介质上提供可靠的传输。
数据链路层和帧
数据链路层将物理层传来的比特流组织成帧,以便于数据的传输和处理。
数据链路层的信道类型
- 点对点信道: 这种信道使用一对一的点对点通信方式。
- 广播信道: 这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
链路与数据链路、帧
数据链路层最重要的知识点就是链路与数据链路、帧。
- 链路(Link): 链路是指从一个节点到相邻节点的一段物理线路,中间没有任何其他的交换节点。链路是通信网络中最基本的组成部分,它可以是有线的(如双绞线、光纤等),也可以是无线的(如无线电波、红外线等)。
作用:链路是物理层的概念,它只负责将数据从一个节点传输到相邻的节点,不涉及数据的格式、传输控制等问题。
- 数据链路(Data Link): 数据链路是指在物理链路的基础上,通过一些协议和控制机制,实现数据的可靠传输。数据链路层是OSI参考模型中的第二层,它位于物理层之上,网络层之下。
作用:数据链路层负责将物理层传来的比特流组织成帧,并进行差错控制、流量控制等操作,以确保数据的可靠传输。数据链路层还负责管理链路的建立、维护和释放等工作。
- 帧(Frame): 帧是数据链路层的基本单位,它将物理层传来的比特流组织成一个个有意义的数据单元,以便于数据的传输和处理。帧由以下几个部分组成:
- 帧头(Header):帧头包含了一些控制信息,如帧的类型、目的地址、源地址等。帧头的长度和格式取决于所使用的数据链路层协议。
- 数据(Data):数据部分是帧的主体,它包含了要传输的实际数据。数据的长度可以根据需要进行调整,但通常有一个最大长度限制。
- 帧尾(Trailer):帧尾包含了一些校验信息,如循环冗余校验(CRC)码,用于检测传输过程中是否出现错误。帧尾的长度和格式也取决于所使用的数据链路层协议。
以太网
以太网最早由美国施乐(Xerox)公司的Palo Alto研究中心(PARC)于1975年研制成功,当时是一种基带总线局域网,数据率为2.94Mbit/s。1980年9月,DEC公司、Intel公司和施乐公司联合提出了10Mbit/s以太网规约的第一个版本DIX V1,后于1982年改为第二版规约DIX Ethernet V2,成为世界上第一个局域网产品的规约。在此基础上,IEEE 802委员会的802.3工作组于1983年制定了第一个IEEE的以太网标准IEEE 802.3,数据率为10Mbit/s。这两个标准只有很小的差别,因此很多人也经常把802.3局域网简称为“以太网”。历经100M以太网在上世纪末的飞速发展后,目前千兆以太网甚至10G以太网正在国际组织和领导企业的推动下不断拓展应用范围。
以太网协议
以太网协议是一种广泛应用于局域网(LAN)中的数据链路层协议。它定义了数据在以太网上的传输格式和规则,使得不同的计算机和设备能够在以太网上进行通信。
以太网帧结构
- 类型:标识上层协议(2字节)
- 目的地址和源地址:MAC地址(每个6字节)
- 数据:封装的上层协议的分组(46~1500字节)
- CRC:循环冗余码(4字节)
- 以太网最短帧:以太网帧最短64字节;以太网帧除了数据部分18字节;数据最短46字节;
以太网的 MAC 层
为了使数据链路层能更好地适应多种局域网标准,802 委员会就将局域网的数据链路层拆成两个子层:
- 逻辑链路控制 LLC (Logical Link Control)子层
- 媒体接入控制 MAC (Medium Access Control)子层
由于 TCP/IP 体系经常使用的局域网是 DIX Ethernet V2 而不是 802.3 标准中的几种局域网,因此现在 802 委员会制定的逻辑链路控制子层 LLC(即 802.2 标准)的作用已经不大了,很多厂商生产的适配器上就仅装有 MAC 协议而没有 LLC 协议。
MAC 层的硬件地址(MAC 地址):
MAC地址也称为局域网地址(LAN Address)、物理地址或硬件地址,是网络设备制造商在生产时分配给网络接口的唯一标识符。它由48位二进制数组成,通常分为前24位和后24位两部分,也常以12个十六进制数表示,如00-1A-E2-12-34-56。其中,前三个字节(即前24位)是厂商识别码,用于标识设备制造商,这部分代码是厂商向IETF等机构申请得到的;而后三个字节(即后24位)则是设备的序列号,由厂商自行分派,确保每个网卡都有一个唯一的编号。
MAC地址在计算机网络中扮演着至关重要的角色,它确保了数据能够准确地被传送到目标设备,而不是被广播到整个网络。具体来说,当数据在网络中传输时,路由器或交换机等网络设备会根据数据帧的目的MAC地址来查找并转发数据。这样,只有目标设备才能接收到数据,从而实现了数据的准确传输。
MAC地址根据其特性和用途可以分为多种类型,包括:
- 物理MAC地址:第8位为0的MAC地址为物理MAC地址,用来唯一标识以太网上的一个终端,是全球唯一的硬件地址。
- 广播MAC地址:全1的MAC地址(FF-FF-FF-FF-FF-FF),用来表示LAN上的所有终端设备。当需要向所有设备发送数据时,可以使用这个地址。
- 组播MAC地址:除广播地址外,第8位为1的MAC地址为组播MAC地址,用来代表LAN上的一组终端。当需要向特定的一组设备发送数据时,可以使用这个地址。
网络层
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。数据交换技术是报文交换(基本上被分组所替代):采用储存转发方式,数据交换单位是报文。
网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。
网络层的功能
- 寻址和路由选择:网络层通过IP地址来标识网络中的主机和路由器,并根据路由表选择最佳的路径将数据报从源主机传输到目的主机。
- 连接的建立、保持和终止:网络层可以建立、保持和终止网络连接,以确保数据的可靠传输。
- 数据报的分片和重组:当数据报的长度超过网络层的最大传输单元(MTU)时,网络层需要将数据报分片,并在目的主机上进行重组。
- 拥塞控制:网络层可以通过拥塞控制机制来避免网络拥塞,以确保数据的可靠传输。
网络层的数据传输
网络层的数据传输过程可以简单概括为以下几个步骤:
- 数据封装:发送方将传输层传来的数据封装成IP数据报,包括添加IP头部信息,如源IP地址、目的IP地址、协议类型等。
- 路由选择:发送方根据路由表选择最佳的路径将IP数据报传输到目的主机。
- 数据传输:IP数据报在网络中传输,可能会经过多个路由器的转发。
- 数据解封装:目的主机接收到IP数据报后,首先检查IP头部信息,如目的IP地址是否与自己的IP地址匹配,如果匹配则进行数据解封装,将IP数据报中的数据提取出来。
- 数据处理:目的主机对解封装后的数据进行处理,如传输给传输层进行进一步处理。
ARP & RARP
ARP简介
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
ARP高速缓存的作用
为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
使用 ARP 的四种典型情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
应当注意的问题
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
逆地址解析协议 RARP
逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址。
IP协议详解
IP网际协议是 Internet 网络层最核心的协议。虚拟互联网络的产生:实际的计算机网络错综复杂;物理设备通过使用IP协议,屏蔽了物理网络之间的差异;当网络中主机使用IP协议连接时,无需关注网络细节,于是形成了虚拟网络。
IP协议使得复杂的实际网络变为一个虚拟互联的网络;并且解决了在虚拟网络中数据报传输路径的问题。
IP数据报格式
其中,版本指IP协议的版本,占4位,如IPv4和IPv6;首部位长度表示IP首部长度,占4位,最大数值位15;总长度表示IP数据报总长度,占16位,最大数值位65535;TTL表示IP数据报文在网络中的寿命,占8位;协议表明IP数据所携带的具体数据是什么协议的,如TCP、UDP。
IP协议的转发流程(IP路由)
IP地址的子网划分
IP地址分A、B、C、D、E五类,其中A、B、C这三类是比较常用的IP地址,D、E类为特殊地址。
A类地址
- A类地址第 1 字节为网络地址(最高位固定是 0),另外 3 个字节为主机地址。
- A类地址范围:1.0.0.0 - 126.255.255.255,其中 0 和 127 作为特殊地址。
- A类网络默认子网掩码为 255.0.0.0,也可写作 /8。
- A类网络最大主机数量是 256×256×256-2=166777214(减去1个主机位为0的网络地址和1个广播地址)。
注意
在计算机网络中,主机ID全部为 0 的地址为网络地址,而主机ID全部为 1 的地址为广播地址,这2个地址是不能分配给主机用的。
B类地址
- B类地址第1字节(最高位固定是10)和第2字节为网络地址,另外 2 个字节为主机地址。
- B类地址范围:128.0.0.0 - 191.255.255.255。
- B类网络默认子网掩码为 255.255.0.0,也可写作 /16。
- B类网络最大主机数量 256×256-2=65534。
C类地址
- C类地址第1字节(最高位固定是 110)、第2字节和第 3 个字节,另外 1 个字节为主机地址。
- C类地址范围:192.0.0.0 - 223.255.255.255。
- C类网络默认子网掩码为 255.255.255.0,也可写作 /24。
- C类网络最大主机数量 256-2=254。
D类地址
- D类地址不分网络地址和主机地址,它的第 1 个字节的最高位固定是 1110。
- D类地址用于组播(也称为多播)的地址,无子网掩码。(组播是一种网络通信方式,允许一个发送者同时向多个接收者发送数据)
- D类地址范围:224.0.0.0 - 239.255.255.255。
D类地址通常用于以下场景:
- 多媒体流传输:例如视频会议、在线直播等,多个用户可以同时接收相同的音视频流。
- 游戏服务器:游戏服务器可以使用组播地址向多个玩家发送游戏状态更新等信息。
- 分布式系统:在分布式系统中,组播可以用于节点之间的通信和协调。
- 网络监控:网络监控系统可以使用组播地址向多个监控设备发送监控数据。
需要注意的是,D类地址是保留地址,不能分配给主机使用。在使用D类地址时,需要确保网络设备和应用程序支持组播功能。
E类地址
- E类地址也不分网络地址和主机地址,它的第1个字节的最高位固定是 11110。
- E类地址范围:240.0.0.0 - 255.255.255.255。
- 其中 240.0.0.0-255.255.255.254 作为保留地址,主要用于Internet试验和开发,255.255.255.255 作为广播地址。
保留的特殊IP地址
以下这些特殊IP地址都是不能分配给主机用的地址:
- 主机ID全为0的地址:特指某个网段,比如:192.168.10.0 255.255.255.0,指192.168.10.0网段。
- 主机ID全为1的地址:特指该网段的全部主机,比如:192.168.10.255,如果你的计算机发送数据包使用主机ID全是1的IP地址,数据链层地址用广播地址FF-FF-FF-FF-FF-FF。
- 127.0.0.1:是本地环回地址,指本机地址,一般用来测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址。
- 169.254.0.0:169.254.0.0-169.254.255.255实际上是自动私有IP地址。
- 0.0.0.0:如果计算机的IP地址和网络中的其他计算机地址冲突,使用ipconfig命令看到的就是0.0.0.0,子网掩码也是0.0.0.0。
保留的特殊IP地址思维导图如下:
公网和私网IP地址
公网IP地址: 公有地址分配和管理由Inter NIC(Internet Network Information Center 因特网信息中心)负责。各级ISP使用的公网地址都需要向Inter NIC提出申请,有Inter NIC统一发放,这样就能确保地址块不冲突。
私网IP地址: 创建IP寻址方案的人也创建了私网IP地址。这些地址可以被用于私有网络,在Internet没有这些IP地址,Internet上的路由器也没有到私有网络的路由表。
私网IP地址分为以下三类:
- A类私网IP地址:
- 范围:10.0.0.0 - 10.255.255.255
- 子网掩码:255.0.0.0
- 保留了1个A类网络
- B类私网IP地址:
- 范围:172.16.0.0 - 172.31.0.0
- 子网掩码:255.255.0.0
- 保留了16个B类网络
- C类私网IP地址:
- 范围:192.168.0.0 - 192.168.255.255
- 子网掩码:255.255.255.0
- 保留了256个C类网络
私网地址访问Internet需要做 NAT 或 PAT 网络地址转换
NAT(Network Address Translation,网络地址转换) 是一种在IP网络中用于将私有IP地址转换为公有IP地址的技术。NAT的主要目的是解决IPv4地址短缺的问题,同时也提供了一定程度的网络安全。
PAT(Port Address Translation,端口地址转换),也称为NAPT(Network Address Port Translation,网络地址端口转换),是一种网络地址转换(NAT)的扩展技术。它允许在一个公有IP地址上同时支持多个私有IP地址的通信。
PAT的工作原理是通过在路由器或防火墙上维护一个端口映射表,将私有IP地址和端口号与公有IP地址和一个唯一的端口号进行映射。当私有网络中的主机需要访问Internet时,NAT设备会将源IP地址和源端口号替换为公有IP地址和一个唯一的端口号,同时维护一个映射表来记录这些转换关系。这样,多个私有主机可以共享同一个公有IP地址进行通信。
ICMP协议详解
网际控制报文协议(Internet Control Message Protocol),可以报告错误信息或者异常情况,ICMP报文封装在IP数据报当中。
ICMP协议的应用:
- Ping应用:网络故障的排查;
- Traceroute应用:可以探测IP数据报在网络中走过的路径。
传输层
传输层的两个协议: TCP 和 UDP
网络中的计算机通信无外乎有以下两种情况:1.要发送的内容多,需要将发送的内容分成多个数据包发送。 2.要发送的内容少,一个数据包就能发送全部内容。
而针对这两个情况,在传输层有两个协议,TCP(Transmission Control Protocol 即传输控制协议)和UDP(User Datagram Protocol即用户数据报协议)。
传输层协议和应用层协议之间的关系
应用层协议很多,传输层就两个协议,如何使用传输层两个协议标识应用层协议呢?
传输层协议加一个端口号来标识一个应用层协议,展示了传输层协议和应用层协议之间的关系。
一些常见的应用层协议和传输层协议,以及它们之间的关系:
- HTTP默认使用TCP的80端口标识。
- FTP默认使用TCP的21端口标识。
- SMTP默认使用TCP的 25端口标识。
- POP3默认使用TCP的110端口。
- HTTPS默认使用TCP的443端口。
- DNS使用UDP的53端口。
- 远程桌面协议(RDP)默认使用TCP的3389端口。
- Telnet使用TCP的23端口。
- Windows访问共享资源使用TCP的445端口。
- 微软SQL数据库默认使用TCP的1433端口。
- mySQL数据库默认使用TCP的3306端口。
服务和端口之间的关系
- Windows和Linux操作系统有些服务为本地计算机提供服务,有些服务为网络中的计算机提供服务。
- 为网络中计算机提供服务的服务,一旦启动就会使用TCP或UDP的某个端口侦听客户端的请求。
用户数据报协议 UDP
UDP 协议的特点
- 无连接性:UDP是一种无连接的协议,即在数据传输之前不需要建立连接。发送方可以直接将数据包发送给接收方,而不需要进行握手等连接建立过程。
- 不可靠性:UDP不提供可靠性保证,数据包在传输过程中可能会丢失、重复或乱序。接收方不会对丢失的数据包进行重传,也不会对乱序的数据包进行排序。
- 高效性:由于UDP没有连接建立和可靠性保证的开销,因此它的传输效率较高。UDP适用于对实时性要求较高的应用场景,如实时音视频传输、在线游戏等。
- 简单性:UDP的协议头相对简单,只包含源端口号、目的端口号、长度和校验和等字段,因此处理开销较小。
- 支持广播和多播:UDP支持广播和多播功能,可以将数据包发送给多个接收方。
- 无拥塞控制:UDP不具备拥塞控制机制,发送方可以以任意速率发送数据包,这可能导致网络拥塞。
UDP 的首部格式
- UDP的首部包括四个字段,源端口、目标端口、长度和校验和,每个字段的长度是两个字节。
- 伪首部包括:源地址、目的地址、UDP数据长度、协议类型(0x11),协议类型就一个字节,但需要补一个字节的0x0,构成12个字节。
传输控制协议 TCP
TCP 协议主要的特点
- 面向连接:TCP在数据传输之前需要建立连接,通过三次握手过程确保双方都准备好进行数据传输。在数据传输结束后,还需要通过四次挥手来关闭连接。
- 可靠性:TCP提供可靠的数据传输服务,通过确认、重传和拥塞控制等机制来保证数据的完整性和顺序性。发送方会等待接收方的确认,如果在一定时间内没有收到确认,就会重传数据。
- 基于字节流:TCP将应用层发送的数据看作是一串无结构的字节流,不保留应用层数据的边界。这意味着TCP会将应用层发送的数据分割成合适大小的数据包进行传输,并在接收端将这些数据包重新组装成完整的字节流。
- 全双工通信:TCP支持全双工通信,即双方可以同时进行数据的发送和接收。
- 流量控制:TCP通过滑动窗口机制来实现流量控制,确保发送方不会因为发送速度过快而导致接收方缓冲区溢出。发送方根据接收方的窗口大小来调整自己的发送速度。
- 拥塞控制:TCP通过拥塞窗口和慢启动等机制来实现拥塞控制,避免网络拥塞。当网络出现拥塞时,TCP会自动调整发送速度,减少数据的发送量。
- 面向字节流的服务:TCP提供面向字节流的服务,应用层可以将数据看作是一串连续的字节流,而不需要考虑数据的边界和格式。
TCP 报文的首部格式
TCP协议是能够实现数据分段传输、可靠传输、流量控制、网络拥塞避免等功能,因此TCP报文的首部要比UDP报文首部字段要多,并且首部长度不固定。
源端口和目的端口各占2个字节,分别写入源端口号和目的端口号。和前面图所示的UDP的分用相似,TCP的分用功能也是通过端口实现的。
序号占4字节。序号范围是[0,232-1],共232(即4 294 967 296)个序号。序号增加到232-1后,下一个序号就又回到0。TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号
确认号 占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。TCP协议能够实现可靠传输,接收方收到几个数据包后,就会给发送方一个确认数据包,告诉发送方下一个数据包该发第多少个字节了。若确认号是N,则表明:到序号N-1为止的所有数据都已正确收到。
数据偏移 占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。但请注意,“数据偏移”的单位为4字节,由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度,这也就意味着选项长度不能超过40字节。
保留 占6位,保留为今后使用,但目前应置为0。
紧急URG(URGent) 当URG=l时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送。
确认ACK(ACKnowlegment) 仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。‘
推送PSH(PuSH) 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。
复位RST(ReSeT) 当RST=l时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步SYN(SYNchronization) 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。
终止FIN(FINish意思是“完”、“终”) 用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据己发送完毕,并要求释放传输连接。
窗口 占2字节。窗口值是[0,216-1]之间的整数。TCP协议有流量控制功能,窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(单位是字节)。
检验和 占2字节。检验和字段检验的范围包括首部和数据这两部分。和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针 占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出了紧急数据的末尾在报文段中的位置。
选项 长度可变,最长可达40个字节。当没有使用选项时,TCP的首部长度是20字节。TCP最初只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size)。
可靠传输
基本原理:
- 不可靠传输信道在数据传输中可能发生的情况:比特差错、乱序、重传、丢失
- 基于不可靠信道实现可靠数据传输采取的措施:
- 差错检测:利用编码实现数据包传输过程中的比特差错检测
- 确认:接收方向发送方反馈接收状态
- 重传:发送方重新发送接收方没有正确接收的数据
- 序号:确保数据按序提交
- 计时器:解决数据丢失问题;
停止等待协议:是最简单的可靠传输协议,但是该协议对信道的利用率不高。
连续ARQ(Automatic Repeat reQuest:自动重传请求)协议:滑动窗口+累计确认,大幅提高了信道的利用率。
TCP协议的可靠传输
基于连续ARQ协议,在某些情况下,重传的效率并不高,会重复传输部分已经成功接收的字节。
TCP协议的流量控制
流量控制:让发送方发送速率不要太快,TCP协议使用滑动窗口实现流量控制。
TCP协议的拥塞控制
拥塞控制与流量控制的区别:流量控制考虑点对点的通信量的控制,而拥塞控制考虑整个网络,是全局性的考虑。拥塞控制的方法:慢启动算法+拥塞避免算法。
慢开始和拥塞避免:
- 【慢开始】拥塞窗口从1指数增长;
- 到达阈值时进入【拥塞避免】,变成+1增长;
- 【超时】,阈值变为当前cwnd的一半(不能<2);
- 再从【慢开始】,拥塞窗口从1指数增长。
快重传和快恢复:
- 发送方连续收到3个冗余ACK,执行【快重传】,不必等计时器超时;
- 执行【快恢复】,阈值变为当前cwnd的一半(不能<2),并从此新的ssthresh点进入【拥塞避免】。
TCP连接的三次握手
建立连接(三次握手):
第一次:客户向服务器发送连接请求段,建立连接请求控制段(SYN=1),表示传输的报文段的第一个数据字节的序列号是x,此序列号代表整个报文段的序号(seq=x);客户端进入 SYN_SEND (同步发送状态);
第二次:服务器发回确认报文段,同意建立新连接的确认段(SYN=1),确认序号字段有效(ACK=1),服务器告诉客户端报文段序号是y(seq=y),表示服务器已经收到客户端序号为x的报文段,准备接受客户端序列号为x+1的报文段(ack_seq=x+1);服务器由LISTEN进入SYN_RCVD (同步收到状态);
第三次: 客户对服务器的同一连接进行确认.确认序号字段有效(ACK=1),客户此次的报文段的序列号是x+1(seq=x+1),客户期望接受服务器序列号为y+1的报文段(ack_seq=y+1);当客户发送ack时,客户端进入ESTABLISHED 状态;当服务收到客户发送的ack后,也进入ESTABLISHED状态;第三次握手可携带数据;
TCP连接的四次挥手
第一次:客户向服务器发送释放连接报文段,发送端数据发送完毕,请求释放连接(FIN=1),传输的第一个数据字节的序号是x(seq=x);客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态);
第二次:服务器向客户发送确认段,确认字号段有效(ACK=1),服务器传输的数据序号是y(seq=y),服务器期望接收客户数据序号为x+1(ack_seq=x+1);服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待); 客户端收到ACK段后,由FIN_WAIT_1进入FIN_WAIT_2;
第三次: 服务器向客户发送释放连接报文段,请求释放连接(FIN=1),确认字号段有效(ACK=1),表示服务器期望接收客户数据序号为x+1(ack_seq=x+1);表示自己传输的第一个字节序号是y+1(seq=y+1);服务器状态由CLOSE_WAIT 进入 LAST_ACK (最后确认状态);
第四次:客户向服务器发送确认段,确认字号段有效(ACK=1),表示客户传输的数据序号是x+1(seq=x+1),表示客户期望接收服务器数据序号为y+1+1(ack_seq=y+1+1);客户端状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态;服务器在收到最后一次ACK后,由LAST_ACK进入CLOSED;
为什么需要等待2MSL?
- 最后一个报文没有确认;
- 确保发送方的ACK可以到达接收方;
- 2MSL时间内没有收到,则接收方会重发;
- 确保当前连接的所有报文都已经过期。
应用层
域名系统DNS
什么是域名
整个Internet网站和各种服务器数量众多,各个组织的服务器都需要给一个名称,这就很容易重名。如何确保Internet上的服务器名称在整个Internet唯一呢?这就需要Internet上有域名管理认证机构进行统一管理。如果你的公司在互联网上有一组服务器(邮件服务器、FTP服务器、Web服务器等),你需要为你的公司先申请一个域名,也就是向管理认证机构注册一个域名。
域名的注册遵循先申请先注册为原则,管理认证机构要确保每一个域名的注册都是独一无二、不可重复的。
域名的结构
一个域名下可以有多个主机,域名全球唯一,主机名+域名肯定也是全球唯一的,主机名+域名称为完全限定域名(FQDN)。
QDN 是Fully Qualified Domain Name 的缩写, 含义是完整的域名。例如,一台机器主机名(hostname)是 www, 域名后缀(domain)是 51cto.com, 那么该主机的 FQDN 应该是 www.51cto.com.。
域名的层次结构
企业或个人申请了域名后,可以在该域名下添加多个主机名,也可以根据需要创建子域名,子域名下面,亦可以有多个主机名
Internet中的域名服务器
当我们通过域名访问网站或点击网页中的超链接跳转到其他网站时,计算机需要将域名解析成IP地址才能访问这些网站。DNS服务器负责域名解析,因此你必须配置计算使用哪些DNS服务器进行域名解析。
DNS 服务器的层次
域名解析过程
动态主机配置协议DHCP
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是一种用于自动分配IP地址和其他网络配置参数的网络协议。DHCP允许网络管理员集中管理和分配IP地址,而不是手动为每个设备配置静态IP地址。
静态地址和动态地址应用场景
使用静态地址的情况:
- IP地址不经常更改的设备就使用静态地址。比如企业中服务器会单独在一个网段。
使用动态地址的情况:
- IP地址经常更改的设备就使用动态地址。比如个人电脑、手机等。
- 无线设备最好也使用动态地址。
- ADSL拨号上网通常也是使用自动获得IP地址。
DHCP 租约
DHCP租约是指DHCP服务器向DHCP客户端提供的IP地址租约。当DHCP客户端从DHCP服务器获取到IP地址后,DHCP服务器会将该IP地址租给该客户端一段时间,这段时间内该客户端可以使用该IP地址。当该客户端不再需要该IP地址时,该客户端可以向DHCP服务器释放该IP地址。
DHCP 租约生成过程
DHCP客户端会在以下所列举的几种情况下,从DHCP服务器获取一个新的IP地址:
- 该客户端计算机是第一次从DHCP服务器获取IP地址。
- 该客户端计算机原先所租用的IP地址已经被DHCP服务器收回,而且已经又租给其他计算机了,因此该客户端需要重新从DHCP服务器获取IP地址。
- 该客户端自己释放原先所租用的IP地址,并要求租用一个新的IP地址。
- 客户端计算机更换了网卡。
- 客户端计算机转移到另一个网段。
租约生成过程
- DHCPDISCOVER: DHCP客户端会先送出DHCPDISCOVER报文,广播到网络上,以便寻找一台能够提供IP地址的DHCP服务器。
- DHCPOFFER: DHCP服务器收到DHCPDISCOVER报文后,会先检查自己的IP地址池,看是否有可用的IP地址。如果有,就会用DHCPOFFER报文回覆DHCP客户端,告诉客户端有可用的IP地址。
- DHCPREQUEST: DHCP客户端挑选好第一个收到的DHCPOFFER信息后,它就利用广播的方式,响应一个DHCPREQUEST信息给DHCP服务器。
- DHCPACK: DHCP服务器收到DHCP客户端要求IP地址的DHCPREQUEST报文后,会用DHCPACK报文回覆DHCP客户端,告诉客户端自己已经分配给它的IP地址。
Telnet协议
- TELNET是一个简单的远程终端协议,它也是因特网的正式标准。用户使用telnet客户端就可以连接到远程运行Telnet服务的设备(可以是网络设备比如路由器、交换机,也可以是操作系统,比如Windows或Linux)进行远程管理
- TELNET能将用户的键盘指令传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,TELNET又称为终端仿真协议。
- TELNET并不复杂,以前应用得很多。现在由于操作系统(Windows和Linux)功能越来越强,用户已较少使用TELNET了。不过配置Linux服务器和网络设备还是需要TELNET来实现远程管理和配置
Telnet协议工作方式
- TELNET也使用客户端-服务端方式。在本地系统运行TELNET客户进程,而在远地主机则运行TELNET服务器进程。服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。
- TELNET能够适应许多计算机和操作系统的差异。例如,对于文本中一行的结束,有的系统使用ASCII码的回车(CR),有的系统使用换行(LF)。还有的系统使用两个字符回车-换行(CR-LF)。又如,在中断一个程序时,许多系统使用Control-C,但也有系统使用ESC按键。
- TELNET定义了数据和命令应怎样通过网络。这些定义就是所谓的网络虚拟终端NVT(Network Virtual Terminal),还有的系统使用两个字符,回车-换行(CR-LF)
RDP协议(远程桌面协议)
现在Windows操作系统很少使用telnet进行远程管理了,更多是使用远程桌面进行远程管理。Windows系统启用远程桌面,客户端使用远程桌面客户端(mstsc)进行连接。它们之间使用RDP协议进行通信,RDP协议默认使用TCP的3389端口。
HTTP协议(超级文本传输协议)
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,它是互联网上应用最为广泛的一种网络协议。HTTP协议定义了客户端和服务器之间通信的规则,使得浏览器能够从服务器获取网页、图片、视频等资源。
HTML 就是超文本标记语言。简单的说,HTTP协议就是用来在客户端和服务器之间传输HTML文件的协议。
统一资源定位符号-URL
- 统一资源定位符URL(Uniform Resoure Locator)是用来表示从因特网上得到的资源位置和访问这些资源的方法。URL给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。只要能够对资源定位,系统就可以对资源进行各种操作,如存取、更新替换和查找其属性。
- URL是与因特网相连的机器上的任何可访问对象的一个指针。由于访问不同对象所使用的协议不同,所以URL还指出读取某个对象时所使用的协议。URL的一般形式由以下四个部分组成:
常见的两种URL
- HTTP的URL的一般格式是:http://<主机>:<端口>/<路径>
- 如果HTTP使用的是默认端口号是80,通常可省略。若再省略文件的<路径>项,则URL就指到该网站的根目录下的主页(homepage)
- 更复杂一点的URL是指向网站第二级或第三级目录的网页。http://edu.51cto.com/member/id-2_1.html
- FTP的URL的一般格式是:ftp://<主机>:<端口>/<路径>
- FTP使用的默认端口号是21。如果FTP使用的是默认端口号是21,通常可省略。
- 比如北京邮电FTP服务器,ftp://ftp.bupt.edu.cn。FTP的URL中还可以包括登录FTP服务器的账户和密码,比如ftp://stargate:sg1@61.155.39.141:9921,其中登录名为stargate,密码为sg1,FTP服务器IP地址61.155.39.141,端口为9921。
绝对路径和相对路径
绝对路径
绝对路径是指文件或目录在文件系统中的完整路径,从根目录开始一直到目标文件或目录。绝对路径是唯一的,不依赖于当前工作目录。
相对路径
相对路径是指文件或目录相对于当前工作目录的路径。相对路径不包含根目录,而是从当前工作目录开始计算。
绝对路径和相对路径的使用场景
绝对路径:
- 当需要确保路径的唯一性,或者需要从任何位置访问文件时,使用绝对路径。
- 在配置文件、脚本或程序中,通常使用绝对路径来引用文件或目录。
相对路径:
- 当文件或目录与当前工作目录在同一目录层次结构中时,使用相对路径更方便。
- 在项目内部,使用相对路径可以提高代码的可移植性,因为它不依赖于特定的文件系统结构。
HTTP协议版本
HTTP(Hypertext Transfer Protocol)协议有多个版本,每个版本都在性能、功能和安全性方面有所改进。以下是常见的HTTP协议版本及其特点:
HTTP/1.0
- 发布时间:1996年。
- 特点:
- 每次请求都需要建立新的TCP连接,效率较低。
- 支持GET、POST、HEAD等基本请求方法。
- 没有持久连接,请求和响应完成后,连接会立即关闭。
HTTP/1.1
- 发布时间:1999年。
- 特点:
- 引入了持久连接(Keep-Alive),一次TCP连接可以发送多个请求和响应,提高了效率。
- 增加了PUT、DELETE、OPTIONS等请求方法,支持更多的操作。
- 支持管道化(Pipelining),客户端可以在一个连接中发送多个请求,而不需要等待每个请求的响应。
- 引入了缓存控制机制,允许服务器和客户端更好地管理缓存。
HTTP/2.0
- 发布时间:2015年。
- 特点:
- 采用二进制分帧层,将请求和响应数据分割成更小的帧,提高了传输效率。
- 多路复用,允许在一个连接上同时处理多个请求和响应,避免了队头阻塞问题。
- 头部压缩,减少了请求和响应头部的大小,节省了带宽。
- 服务器推送,服务器可以主动向客户端推送资源,提前缓存,提高性能。
HTTP/3.0
- 发布时间:2022年。
- 特点:
- 基于QUIC协议,使用UDP传输,减少了连接建立的延迟。
- 进一步改进了多路复用和头部压缩,提高了性能。
- 支持0-RTT(Round-Trip Time)连接建立,加快了首次请求的速度。
目前广泛使用的HTTP协议版本是HTTP/1.1 和 HTTP/2.0。
HTTP/1.1是在1999年发布的,它引入了持久连接(Keep-Alive)和管道化(Pipelining)等特性,大大提高了网络传输效率。HTTP/1.1是目前互联网上最常用的HTTP协议版本,几乎所有的Web服务器和浏览器都支持HTTP/1.1。
HTTP/2.0是在2015年发布的,它在HTTP/1.1的基础上进行了重大改进,采用了二进制分帧层、多路复用、头部压缩和服务器推送等技术,进一步提高了网络传输效率和性能。虽然HTTP/2.0相对于HTTP/1.1有很多优势,但由于其兼容性问题,目前尚未完全取代HTTP/1.1。
HTTP/1.1协议的持续连接有两种工作方式
HTTP请求报文和响应报文
HTTP有两种报文:
- 请求报文:客户端向服务器发送请求报文,请求报文由请求行、请求头部、空行和请求数据组成。
- 响应报文:服务器向客户端发送响应报文,响应报文由状态行、响应头部、空行和响应数据组成。
HTTP请求报文特点和方法
- 先介绍HTTP请求报文最主要的一些主要特点。请求报文的第一行“请求行"只有三个内容,即方法,请求资源的URL,以及HTTP的版本。
- HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URL指定的资源的不同操作方式:
- GET: 请求获取Request-URL所标识的资源。在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器请求网页
- POST: 在Request-URL所标识的资源后附加新的数据。要求被请求服务器接受附在请求后面的数据,常用于提交表单。比如向服务器提交信息、发帖、登录。
- HEAD: 请求获取由Request-URL所标识的资源的响应消息报头。
- PUT: 请求服务器存储一个资源,并用Request-URL作为其标识。
- DELETE: 请求服务器删除Request-URL所标识的资源。
- TRACE: 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT: 用于代理服务器
- OPTIONS: 请求查询服务器的性能,或者查询与资源相关的选项和需求
HTTP响应报文
状态码(Status-Code)都是三位数字的,分为5大类共33种,例如:
- 1xx:表示通知信息的,如请求收到了或正在进行处理。
- 2xx:表示成功,如接受或知道了。
- 3xx:表示重定向,如要完成请求还必须采取进一步的行动。
- 4xx:表示客户端错误,如请求中有错误的语法或不能完成。
- 5xx:表示服务器的差错,如服务器失效无法完成请求。
下面三种状态行在响应报文中是经常见到的:
- HTTP/1.1 200 Success(成功)。
- HTTP/1.1 202 Accepted(接受)。
- HTTP/1.1 400 Bad Request(错误的请求)。
- HTTP/1.1 404 Not Found(找不到)。
Cookie
- Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如lE、Netscape、Firefox、Opera等都支持Cookie。
- 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
- Cookie可以导出导入
Cookie的工作原理
- 服务器发送Cookie:当服务器收到HTTP请求时,它可以在响应头中包含一个或多个Set-Cookie字段,每个字段包含一个Cookie的名称、值和一些可选的属性,如过期时间、路径、域等。
- 客户端存储Cookie:浏览器接收到响应后,会解析Set-Cookie字段,并将Cookie存储在本地。Cookie通常存储在浏览器的Cookie存储区域,具体位置取决于浏览器的实现。
- 客户端发送Cookie:在后续的HTTP请求中,浏览器会自动将存储的Cookie包含在请求头的Cookie字段中,发送给服务器。
- 服务器读取Cookie:服务器接收到请求后,会解析Cookie字段,获取客户端发送的Cookie,并根据需要使用这些信息。
Cookie的用途
- 用户会话管理:用于跟踪用户的登录状态,实现用户在不同页面之间的身份验证和会话保持。
- 个性化设置:存储用户的偏好设置,如语言、主题等,以便在用户再次访问时提供个性化的体验。
- 购物车功能:存储用户购物车中的商品信息,使用户在不同页面或会话之间能够保持购物车的状态。
- 跟踪用户行为:记录用户的浏览历史、点击行为等,用于分析用户行为和提供个性化的推荐。
Cookie的安全性
- 敏感信息存储:由于Cookie存储在客户端,因此不应将敏感信息(如密码、信用卡号等)存储在Cookie中。如果必须存储敏感信息,应使用加密技术对其进行保护。
- 跨站脚本攻击(XSS):攻击者可以通过注入恶意脚本到网站中,窃取用户的Cookie信息。为了防止XSS攻击,应在服务器端对用户输入进行验证和过滤,并在客户端对Cookie进行安全设置,如设置HttpOnly属性,禁止JavaScript访问Cookie。
- 跨站请求伪造(CSRF):攻击者可以伪造用户的请求,利用用户的Cookie进行恶意操作。为了防止CSRF攻击,应在服务器端对请求进行验证,确保请求来自合法的来源,并在客户端使用随机生成的令牌(Token)来验证请求的真实性。
Cookie的限制
- 大小限制:浏览器对Cookie的大小有限制,通常每个Cookie的大小不能超过4KB,一个域名下的所有Cookie的总大小不能超过8KB。
- 数量限制:浏览器对每个域名下的Cookie数量也有限制,通常每个域名下的Cookie数量不能超过50个。
- 安全性限制:为了保护用户隐私和安全,浏览器对Cookie的访问和使用进行了一些限制,如HttpOnly属性禁止JavaScript访问Cookie,SameSite属性限制Cookie在跨站请求中的发送。
通过代理服务器访问网站
代理服务器英文全称是(ProxyServer),其功能就是代理网络用户去取得网络信息。我们可以配置计算机通过Web代理服务器访问Web站点,而不直接访问网站。
FTP协议 (文件传输协议)
- FTP 是File Transfer Protocol(文件传输协议)的英文简称。用于Internet上的控制文件的双向传输。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和“上传”(Upload)。“下载”文件就是从远程主机拷贝文件至自己的计算机上;“上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
- 简单地说,支持FTP协议的服务器就是FTP服务器。
FTP主动模式和被动模式
FTP协议和其他协议不一样的地方就是客户端访问FTP服务器需要建立两个TCP连接,一个是用来传输FTP命令,一个用来传输数据在FTP服务器上需要开放两个端口,一个命令端口(或称为控制端口)和一个数据端口。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。
主动模式
被动模式
电子邮件
电子邮件发送和接收过程
电子邮件信息格式
SMTP协议
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是用于发送电子邮件的标准协议。SMTP协议定义了邮件客户端如何与邮件服务器进行通信,以及如何将邮件从发送者的邮件服务器传输到接收者的邮件服务器。
SMTP协议的工作原理
- 连接建立:邮件客户端通过TCP协议与邮件服务器的SMTP端口(通常是25号端口)建立连接。
- 邮件发送:邮件客户端向邮件服务器发送一系列SMTP命令,包括发件人地址、收件人地址、邮件主题、邮件正文等信息。
- 邮件传输:邮件服务器接收到邮件后,根据收件人地址将邮件转发到相应的邮件服务器。如果收件人地址是本地用户,则将邮件存储在本地邮件存储区;如果收件人地址是其他邮件服务器上的用户,则将邮件转发到该邮件服务器。
- 连接关闭:邮件传输完成后,邮件客户端与邮件服务器的连接关闭。
SMTP协议的特点
- 简单性:SMTP协议设计简单,易于实现和使用。
- 可靠性:SMTP协议采用了一系列机制来确保邮件的可靠传输,如邮件队列、重试机制等。
- 扩展性:SMTP协议支持扩展命令和参数,允许在不改变协议基本结构的情况下增加新的功能。
SMTP协议的命令和响应
SMTP协议使用一系列命令和响应来进行通信。常见的SMTP命令包括:
- HELO:用于标识发送方的域名。
- MAIL FROM:指定发件人的邮箱地址。
- RCPT TO:指定收件人的邮箱地址。
- DATA:表示接下来的内容是邮件正文。
- QUIT:结束SMTP会话。
SMTP协议的响应通常以三位数字开头,后面跟着一些描述信息。常见的SMTP响应包括:
- 220:表示服务就绪。
- 250:表示请求的邮件操作完成。
- 354:表示开始邮件输入。
- 500:表示语法错误,命令无法识别。
SMTP协议的应用场景
SMTP协议广泛应用于电子邮件系统中,用于发送和接收电子邮件。几乎所有的邮件客户端和邮件服务器都支持SMTP协议。
POP3协议和IMAP协议
邮局协议POP是一个非常简单、功能有限的邮件读取协议。邮局协议POP最初公布于1984年[RFC918]。经过几次更新,现在使用的是1996年的版本POP3IRFC1939],它已成为因特网的正式标准。大多数的ISP都支持POP,POP3可简称为POP。
另一个读取邮件的协议是网际报文存取协议IMAP,它比POP3复杂得多。IMAP和POP都按客户服务器方式工作,但它们有很大的差别。现在较新的版本是2003年3月修订的版本4,即IMAP4[RFC3501],它目前还只是因特网的建议标准,
SMTP 协议和 POP3协议的区别
- 功能区别:SMTP协议主要用于发送邮件,而POP3协议主要用于接收邮件。
- 工作流程区别:SMTP协议是邮件客户端向邮件服务器发送邮件的过程,而POP3协议是邮件客户端从邮件服务器下载邮件的过程。
- 特点区别:SMTP协议注重邮件的可靠传输和扩展性,而POP3协议注重邮件的离线阅读和管理。
浏览器及其工作方式
浏览器是一种用于访问和显示网页内容的软件应用程序。它通过向Web服务器发送请求并接收响应来获取网页内容,然后将这些内容解析并显示在用户的屏幕上。以下是浏览器的基本工作方式:
用户输入URL:用户在浏览器的地址栏中输入一个URL(统一资源定位符),例如 https://www.example.com。
解析URL:浏览器首先解析URL,确定要访问的协议(如HTTP或HTTPS)、主机名(如www.example.com)和路径(如/)。
DNS查询:浏览器通过DNS(域名系统)查询将主机名转换为对应的IP地址。DNS服务器负责维护域名和IP地址之间的映射关系。
建立TCP连接:浏览器使用获取到的IP地址与Web服务器建立TCP(传输控制协议)连接。TCP连接提供了可靠的数据传输通道。
发送HTTP请求:浏览器通过TCP连接向Web服务器发送HTTP请求,请求获取指定URL的网页内容。请求中包含了请求方法(如GET、POST等)、请求头(包含了浏览器的信息、用户代理等)和请求体(如果有)。
服务器处理请求:Web服务器接收到请求后,根据请求的URL和其他信息,查找并处理相应的资源(如HTML文件、CSS文件、JavaScript文件、图片等)。
发送HTTP响应:服务器处理完请求后,将生成的HTTP响应发送回浏览器。响应中包含了响应状态码(如200表示成功、404表示未找到等)、响应头(包含了服务器的信息、内容类型等)和响应体(包含了请求的网页内容)。
浏览器解析响应:浏览器接收到响应后,首先解析响应头,获取响应的状态码和内容类型等信息。然后根据内容类型,解析响应体中的网页内容。
渲染页面:浏览器将解析后的网页内容渲染成用户可以看到的页面。这个过程涉及到HTML的解析和构建DOM树、CSS的解析和应用样式、JavaScript的执行等。
页面展示:浏览器将渲染好的页面展示给用户,用户可以与页面进行交互,如点击链接、填写表单等。
关闭连接:当页面加载完成或用户关闭页面时,浏览器会关闭与服务器的TCP连接。
这只是浏览器工作的一个基本流程,实际情况可能会更加复杂,例如涉及到缓存、重定向、SSL/TLS加密等。不同的浏览器在实现细节上也可能会有所不同,但总体的工作原理是相似的。