ARPANET 的研制经验表明,对于复杂的计算机网络协议,其结构应该是层次式的。
以下是将TCP/IP协议栈分成5层或7层的主要原因:
模块化设计:分层结构使得网络协议的实现可以分解为多个模块,每个模块负责特定的功能。这样,开发和维护网络协议变得更加可管理和可控。
功能划分:每个层次代表一个特定的功能范畴,如物理传输、数据链路、网络、传输和应用层。这样的划分使得不同层次的协议负责不同的任务,实现了功能的分工和聚焦。
接口标准化:每个层次之间通过明确定义的接口进行通信,使得不同厂商和实现者可以按照接口规范开发协议栈的不同层次。这促进了互操作性和跨平台的实现。
可扩展性:通过在每个层次添加或修改协议,可以很容易地扩展和增强协议栈的功能,而不影响其他层次的协议。
故障隔离:分层结构使得网络协议中的故障或错误局限在特定的层次内,不会影响到整个协议栈的运行。这有助于故障的定位和修复。
标准化和互操作性:分层结构为不同组织和厂商提供了一个共同的参考框架,以便设计、实现和集成网络协议。标准化的协议栈促进了不同设备和系统之间的互操作性。
教学和学习:分层结构使得网络协议的学习和教学更加有序和系统化。学习者可以逐层理解和掌握协议的工作原理和功能。
TCP/IP协议定义了一系列的标准协议,每一层的功能都是通过下面的协议实现的
ISP(Internet Service Provider,互联网服务提供商)是指提供互联网接入服务的公司或组织。ISP允许个人用户、家庭、企业和其他组织通过各种技术手段连接到互联网,从而获得互联网服务。
目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。
ISP提供的服务可以包括以下几个方面:
(1)宽带接入:ISP通过提供宽带接入服务,使用户能够以高速连接到互联网。这包括使用数字用户线路(DSL)、电缆、光纤、无线技术(如Wi-Fi)等方式,为用户提供快速的上网速度。
(2)IP地址分配:ISP负责为用户分配唯一的IP地址,这使得用户可以在互联网上进行通信和访问。IP地址可以是动态分配的,即每次连接时分配一个新的IP地址,也可以是静态分配的,即分配一个固定的IP地址给用户。
(3)电子邮件和网站托管:一些ISP提供电子邮件服务和网站托管服务,使用户能够拥有自己的电子邮件地址和网站。用户可以通过这些服务发送和接收电子邮件,以及在互联网上发布和维护自己的网站。
(4)虚拟专用网络(VPN):一些ISP还提供VPN服务,允许用户通过加密和隧道技术在公共网络上建立私密和安全的连接。这对于用户在互联网上进行安全通信和访问受限资源非常有用。
(5)技术支持:ISP通常提供技术支持,帮助用户解决与互联网连接和服务相关的问题。这包括故障排除、网络设置、路由器配置等方面的支持。
不同的ISP可能提供不同类型和水平的服务。用户可以根据自己的需求选择合适的ISP,并与其签订服务协议以获得互联网接入和相关服务。
CSMA/CD 表示载波监听多点接入 / 碰撞检测
互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。
PPP 的帧格式:
MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。
一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。
局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。
主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。
以太网是一种星型拓扑结构局域网。
以太网帧格式:
交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。
正是由于这种自学习能力,因此交换机是一种即插即用设备,不需要网络管理员手动配置交换表内容。
下图中,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射。
虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。
使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。IEEE 定义了一种扩展的以太网帧格式 802.1Q,它在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。
例如下图中 (A1, A2, A3, A4) 属于一个虚拟局域网,A1 发送的广播会被 A2、A3、A4 收到,而其它站点收不到。
根据信息在传输线上的传送方向,分为以下三种通信方式:
模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。
将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。
透明表示一个实际存在的事物看起来好像不存在一样。
帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。
目前数据链路层广泛使用了 循环冗余检验(CRC) 来检查比特差错。
一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。
所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。
主要有两种控制方法进行协调,一个是使用信道复用技术,一是使用 CSMA/CD协议 。
一对一通信。
因为不会发生碰撞,因此也比较简单,使用 PPP 协议 进行控制。
与 IP 协议配套使用的还有三个协议:
由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
在对上表做出解析前,首先要明确以下几点:
(1)当主机号 全为1时,表示该网络广播地址;当主机号 全为0时,表示该网络本身。这两个地址都是不分配的。
(2)当网络号为127时,表示环回测试地址,也不分配。也就是说,网络号为127的,根本不是一个网络地址。
(3)网络号二进制位全0表示本网络,故A类地址中的0(00000000)网络号不分配,A类地址会从网络号1(00000001)开始分配。而B,C类地址因为开头的二进制位已经固定含1,不可能出现二进制位全0的情况,所以不需要考虑上述问题。但作为保留地址,B类地址中的128.0和192.0.0网络号也不分配
(4)A、B、C类地址中可指派的全部为单播地址,D类地址为多播(广播)地址,E类地址作为保留地址使用。
A类地址
B类地址
C类地址
D类地址
E类地址
通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意,外部网络看不到子网的存在。
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
ARP(Address Resolution Protocol)是一种用于将IP地址解析为物理MAC地址的协议。它在网络层和数据链路层之间起到桥梁的作用,帮助主机在局域网中定位目标主机的物理地址。
ARP的工作原理简化为以下步骤:
ARP协议主要用于局域网中,通过将IP地址解析为MAC地址,实现局域网内主机之间的通信。它是实现网络通信的重要基础协议之一。
反向地址转换协议,网络层协议,RARP与ARP工作方式相反。 RARP使只知道自己硬件地址的主机能够知道其IP地址。RARP发出要反向解释的物理地址并希望返回其IP地址,应答包括能够提供所需信息的RARP服务器发出的IP地址。
原理:
ICMP(Internet Control Message Protocol)是一种网络协议,用于在IP网络中传递控制和错误消息。它是在网络层(第三层)上工作的协议,被用于进行网络故障排除、错误报告和网络管理。
ICMP 报文分为差错报告报文和询问报文。
(待续)
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。首部开销小,只有8个字节,比TCP的20个字节的首部要短。
传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的
在socket编程中,客户端执行connect()时,将触发三次握手。
通过三次握手,双方可以互相确认对方的能力和意愿,确保双方都准备好进行数据传输。这样可以有效地避免无效的连接请求、保证初始序列号的正确性,并减少资源浪费的可能性。因此,三次握手是为了建立可靠的连接而设计的。
TCP的四次挥手是在终止TCP连接时使用的一种协议,它确保双方完成数据传输并正常关闭连接。下面是TCP四次挥手的过程:
完成这个四次挥手过程后,TCP连接彻底关闭,双方不再进行数据传输。通过这个过程,双方能够确保数据传输的完整性,并协商关闭连接,释放相关的资源。需要注意的是,关闭连接的一方可能会先发送FIN报文段,但在关闭过程中,双方的角色(发送方和接收方)是可以交换的。
四次挥手过程中的每个报文段都需要对方发送一个确认,以确保双方都知道对方的关闭意图,并完成相应的处理。这样可以确保连接的可靠关闭,避免数据丢失或错误的关闭连接。
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime),它是任何报文段被丢弃前在网络内的最长时间。这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL字段。
对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。
这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束后才能再被使用。
为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
两个理由:
TCP(Transmission Control Protocol)是一种可靠传输协议,它提供了以下机制来确保数据的可靠传输:
通过以上机制,TCP能够提供可靠的数据传输服务,保证数据的完整性、有序性和可靠性。这使得TCP适用于对数据可靠性要求较高的应用,如文件传输、网页浏览、电子邮件等。
TCP的滑动窗口是一种流量控制和拥塞控制的机制,用于调节发送方发送数据的速率,以适应接收方的处理能力和网络的拥塞情况。
滑动窗口的基本原理是通过发送方和接收方之间的协商,确定可以发送和接收的数据量。发送方维护了一个发送窗口,接收方维护了一个接收窗口。发送窗口表示发送方可以连续发送的数据段的范围,接收窗口表示接收方可以接收的数据段的范围。
具体工作流程如下:
通过滑动窗口机制,TCP实现了流量控制和拥塞控制:
滑动窗口机制在TCP中起到了重要的作用,可以有效地控制数据的传输速率和适应网络的状况,从而保证数据的可靠传输和网络的稳定性。
流量控制是为了控制发送方发送速率,保证接收方来得及接收。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
慢启动(Slow Start)
所谓慢启动,也就是TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。
(1)连接建好的开始先初始化拥塞窗口cwnd大小为1,表明可以传一个MSS大小的数据。
(2)每当收到一个ACK,cwnd大小加一,呈线性上升。
(3)每当过了一个往返延迟时间RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指数让升。
(4)还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”。
拥塞避免(Congestion Avoidance)
当拥塞窗口大小cwnd大于等于慢启动阈值ssthresh后,就进入拥塞避免算法。算法如下:
(1)收到一个ACK,则cwnd = cwnd + 1 / cwnd
(2)每当过了一个往返延迟时间RTT,cwnd大小加一。
过了慢启动阈值后,拥塞避免算法可以避免窗口增长过快导致窗口拥塞,而是缓慢的增加调整到网络的最佳值。
快速重传(Fast Retransmit)
(1)如果发送方连续收到三个重复的确认(ACK),即接收方已经收到了同一个数据段多次。
(2)这表明该数据段之后的数据段可能已经丢失,发送方会立即进行快速重传。
(3)发送方重传丢失的数据段而无需等待超时,从而加快恢复速度。
快速恢复(Fast Recovery)
TCP Tahoe是早期的算法,所以没有快速恢复算法,而Reno算法有。在进入快速恢复之前,cwnd和ssthresh已经被更改为原有cwnd的一半。快速恢复算法的逻辑如下:
(1)在执行快速重传后,发送方会执行快速恢复算法。
(2)发送方将拥塞窗口减半,同时将拥塞窗口的增长方式从慢启动切换为拥塞避免。
(3)然后,发送方将拥塞窗口的大小增加一个拥塞窗口增量,并进入拥塞避免状态。
Socket(套接字)是在计算机网络中用于实现网络通信的一种编程接口或抽象。它提供了一种机制,使不同计算机之间可以通过网络进行数据的传输和通信。
Socket 提供了一组函数或方法,使开发者能够创建、连接、发送和接收数据等操作。它通过网络协议(如TCP、UDP)实现了数据的可靠传输或无连接传输。
Socket 编程通常涉及两个端点,一个是服务器端,另一个是客户端。服务器端监听指定的端口,等待客户端的连接请求;而客户端通过指定服务器的IP地址和端口号发起连接请求,与服务器建立连接后进行数据传输。
下面是 Socket 编程的基本步骤:
创建 Socket:在编程语言中使用相应的函数或方法创建一个 Socket 对象。通常需要指定协议类型(如TCP、UDP)以及地址族(如IPv4、IPv6)等参数。
绑定 Socket(服务器端):如果是服务器端,需要将 Socket 绑定到指定的IP地址和端口号。这样服务器就可以监听该端口,等待客户端的连接请求。
连接 Socket(客户端):如果是客户端,需要使用 Socket 连接到服务器端的指定IP地址和端口号。通过指定服务器的地址和端口号,客户端可以发起连接请求。
数据传输:一旦连接建立,服务器端和客户端可以通过 Socket 对象进行数据传输。服务器端可以接收来自客户端的请求,并发送响应;客户端可以发送请求,并接收服务器端的响应。
关闭 Socket:当通信完成或不再需要连接时,可以关闭 Socket,释放资源。
Socket 编程可用于构建各种网络应用,如Web服务器、聊天应用、文件传输等。它是实现网络通信的基础,并在各种编程语言和平台上得到支持和应用。
DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:
FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:
主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。
被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。
DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。
DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。
DHCP 工作过程如下:
通过DHCP协议,网络管理员可以更高效地管理大型网络,减少IP地址冲突的可能性,并简化设备的网络配置过程。DHCP协议广泛应用于家庭网络、企业网络和互联网服务提供商等场景。
远程登录协议(Remote Login Protocol)是一种用于远程访问和控制计算机系统的协议。它允许用户通过网络连接到远程计算机,并在远程计算机上执行命令和操作,就像直接在本地计算机上一样。
以下是几种常见的远程登录协议:
Telnet:Telnet是一种最早的远程登录协议,它使用明文传输命令和数据,不提供加密和安全性保护。Telnet协议允许用户在本地计算机上输入命令,并将其发送到远程计算机上执行。然而,由于安全性问题,Telnet在现代网络中已不太常用。
Secure Shell(SSH):SSH是一种更安全的远程登录协议,提供对远程计算机的安全访问。SSH协议通过加密数据传输,防止数据在传输过程中被窃听或篡改。它还提供了身份验证机制,包括密码和公钥认证,确保只有授权用户可以访问远程系统。
Remote Desktop Protocol(RDP):RDP是由微软开发的远程登录协议,用于远程访问Windows操作系统。RDP允许用户通过网络连接到远程Windows计算机,并以图形化界面的形式控制远程计算机。用户可以在远程计算机上执行应用程序、访问文件和资源等。
Virtual Network Computing(VNC):VNC是一种开放源代码的远程登录协议,它允许用户通过网络远程访问和控制计算机系统。VNC协议通过在远程计算机和本地计算机之间传输图像信息,将远程计算机的屏幕显示在本地计算机上,用户可以通过鼠标和键盘操作远程计算机。
这些远程登录协议在不同的场景和操作系统中得到广泛应用。选择适当的协议取决于安全性要求、操作系统兼容性以及所需的远程访问功能。
电子邮件协议(Electronic Mail Protocol)是用于发送、接收和处理电子邮件的网络协议。它定义了电子邮件客户端和邮件服务器之间的通信规则和数据格式,确保电子邮件在互联网上能够正确传递和解析。
以下是几种常见的电子邮件协议:
SMTP是用于发送电子邮件的标准协议。它定义了邮件客户端与邮件服务器之间的通信方式,负责将邮件从发件人的客户端发送到收件人的邮件服务器。SMTP协议使用端口号25来传输邮件。
Post Office Protocol(POP):POP是一种用于接收电子邮件的协议。最常用的版本是POP3(POP Version 3),它允许邮件客户端从邮件服务器上下载电子邮件到本地设备。POP3协议使用端口号110来接收邮件。
Internet Message Access Protocol(IMAP):IMAP是另一种用于接收电子邮件的协议。IMAP与POP3类似,但提供更多的功能和灵活性。IMAP允许用户在邮件服务器上管理邮件,可以选择下载邮件的部分内容,同时保留邮件在服务器上的副本。IMAP协议使用端口号143来接收邮件。
Simple Mail Transfer Protocol Secure(SMTPS):SMTPS是SMTP协议的安全版本,使用加密的TLS(Transport Layer Security)或SSL(Secure Sockets Layer)协议来保护邮件的传输。SMTPS通过加密邮件传输,确保邮件内容在传输过程中的安全性。
这些电子邮件协议在互联网中得到广泛应用,不同的协议提供了不同的功能和安全性。大多数邮件客户端和邮件服务器都支持这些协议,使用户能够发送、接收和管理电子邮件。
DHCP配置主机信息:在Web页面请求过程之前,如果主机使用DHCP协议获取网络配置信息(包括IP地址),它会发送DHCP请求来获取这些信息。这个过程可以包括DHCP发现、DHCP提供、DHCP请求和DHCP确认等步骤,我在之前关于动态主机配置协议(DHCP)的回答中有详细解释。
域名解析:当用户在浏览器中输入一个URL(统一资源定位符)时,首先进行域名解析。浏览器向本地域名解析器(如DNS服务器)发送请求,获取目标服务器的IP地址。
建立连接:浏览器使用HTTP(或HTTPS)协议向目标服务器发送一个TCP连接请求。通过三次握手,建立浏览器与服务器之间的网络连接。
发送请求:一旦连接建立,浏览器向服务器发送HTTP请求。请求包括请求行(如请求方法、URL路径等)、请求头(如浏览器类型、Cookie等)和请求体(对于某些请求,如POST请求,可能包含数据)。
服务器处理请求:服务器接收到请求后,根据请求的路径和其他信息,处理请求。这可能涉及读取文件、执行动态脚本、查询数据库等操作。
服务器发送响应:服务器根据请求处理结果生成HTTP响应。响应包括响应状态码(表示请求成功、失败或其他状态)、响应头(如内容类型、缓存策略等)和响应体(包含请求的实际内容,如HTML页面、图片等)。
接收响应:浏览器接收到服务器的响应,根据响应的内容类型进行相应的处理。如果是HTML页面,浏览器会解析HTML,加载并显示页面上的资源(如CSS、JavaScript等)。
关闭连接:一旦所有资源都被加载和显示,浏览器与服务器之间的连接可以被关闭,释放网络资源。
(1)HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
(2)https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
SSL代表安全套接字层。它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。 身份验证 , 加密Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性的应用层协议加密和解密需要两个不同的密钥,故被称为非对称加密;加密和解密都使用同一个密钥的
对称加密:优点在于加密、解密效率通常比较高 ,HTTPS 是基于非对称加密的, 公钥是公开的
客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端。
请求报文结构:
响应报文结构:
有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。
Cookie(HTTP Cookie)是一种在客户端(浏览器)和服务器之间传递的小型文本文件。它用于在Web应用中存储和传递有关用户的信息。
当用户访问一个网站时,服务器可以通过HTTP响应头中的Set-Cookie字段将一个或多个Cookie发送给用户的浏览器。浏览器会将这些Cookie保存在本地,以备将来的请求使用。
每个Cookie都包含了一个名称(name)和一个对应的值(value),以及一些其他的属性,例如过期时间、路径、域名等。服务器可以根据需要设置这些属性。
当用户再次访问同一个网站时,浏览器会在HTTP请求头中包含该网站的Cookie信息,将其发送给服务器。服务器可以根据这些Cookie信息来识别用户,以及存储和获取与用户相关的数据。
Cookie在Web应用中有多种用途,例如:
身份验证和会话管理:通过在Cookie中存储用户的身份信息或会话标识,服务器可以识别用户并维护用户的登录状态。
记住用户偏好:通过存储用户的偏好设置或选择,网站可以在用户下次访问时自动应用这些偏好。
跟踪和分析用户行为:通过将唯一标识符存储在Cookie中,网站可以跟踪用户在网站上的活动,并进行分析和统计。
广告定向:广告商可以使用Cookie来跟踪用户的兴趣和行为,从而提供更加个性化和有针对性的广告。
需要注意的是,Cookie是存储在用户的浏览器中的,因此它们是与用户相关的。Cookie也有一些安全和隐私方面的考虑,例如敏感信息的存储和保护,以及用户对Cookie的控制和选择。
在现代的Web开发中,还出现了一些相关的技术和标准,如同源策略(Same Origin Policy)、跨站点脚本攻击(XSS)防护、HTTP-only Cookie、安全Cookie等,用于增强Cookie的安全性和隐私性。
除了可以将用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全。
Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。
使用 Session 维护用户登录状态的过程如下:
应该注意 Session ID 的安全性问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等操作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。