计算机网络

计算机网络



前言

这篇文章主要作为个人笔记,是对《深入浅出计算机网络》和结合以往工作经验整理的一些笔记。以供学习参考和交流。


一、概述

1.1 网络

网络(Network)是由若干节点(Node)和链接这些节点的链路(Link)组成的。节点可以是计算机、网络互联设备以及其它具有网络功能的设备。而互联网(internet)是由若干网络和连接这些网络的路由器组成的。因特网(Internet)是指当今世界上最大的互联网。

1.2 网络体系结构

为了使不同体系结构的计算机网络都能互连起来,国际标准化组织(International Organization for Standardization,ISO)制定了一个标准框架,开放系统互连参考模型(Open Systems Interconnection Reference Model,OSI/RM)。后来又发展出现在实际使用的TCP/IP参考模型。如下是两个模型的对比和简要说明。

OSI体系TCP/IP体系说明
应用层应用层解决特定网络应用的交互问题。常用协议有HTTP、SMTP等。
表示层
会话层
运输层运输层解决讲数据包交付给哪一个应用进程的问题。使用到TCP、UDP协议。
网络层网际层解决数据包从一个网络传输到另一个网络的问题(编址、路由转发分组)。使用到IP协议。
数据链路层网络接口层其实是解决同一个网络里(多台设备)的连接问题(总线竞争)。
物理层其实是解决两台设备物理连接的问题。

关于体系结构的分层,在实际传输过程中的发送、接收、转发过程也是按分层来进行拆解或封装的。可以参考下图自行理解。
2.jpg

1.3 电路交换、分组交换、报文交换

电路交换可以理解为家庭电话,需要电话两头建立连接后通话,通话期间其它座机是无法打进来的,即会“占线”。很明显我们的互联网不使用这种通信方式,效率很低。
互联网采用的是分组交换。也就是将待发送的整块数据构造成若干个分组发送出去,传输途中的各交换节点对分组进行存储转发,目的主机收到这些分组后将它们组合还原成原始数据块。分组传输过程中逐段占用通信链路,这样就避免了整个通信连接的线路占用,可以极大的提高通信线路利用率;但会带来额外的传输开销和由存储转发带来的时延,也有可能会出现失序和丢失的问题。
报文交换是分组交换的前身。在报文交换中,报文被整个地发送,而不是拆分成若干分组。报文交换比分组交换带来的转发时延要长很多,需要交换节点具有的缓存空间也大很多。关于三者的对比可以参考下面图片。
3.jpg

1.4 性能指标

1.4.1 速率、带宽、吞吐量

速率:速率是指数据的传送速度。单位通常是bit/s、kb/s、Mb/s等。这里注意大小写B是不同的(Byte/bit)。
带宽:在电子信息中,带宽是指信号频率范围。而在计算机网络中,带宽用来表示通信线路所能传送数据的能力,即在单位时间内从网络中某一点到另一点所能通过的最高数据率。单位也是bit/s、kb/s、Mb/s等。线路的“频率带宽”越宽,其所传输数据的“最高数据率”也越高。不过网络中是存在木桶效应的,即:
数据传输速率=min(主机接口速率,线路带宽,交换机或路由器的接口速率)
吞吐量:吞吐量是指在单位时间内通过某个网络或接口的实际数据量。网络吞吐量一般是上传速率和下行(下载)速率之和。比如,某带宽100Mb/s的网络,播放视频下载速率20Mb/s,网页下载速率600kb/s,向服务器上传文件速率10Mb/s,则吞吐量为20Mb/s+600kb/s+5Mb/s=25.6Mb/s。

1.4.2 时延、时延带宽积

时延是指数据从网络的一端到另一端所耗费的时间,也称为延迟或迟延。网络中的时延由发送时延、传播时延、排队时延和处理时延四部分组成。发送时延指主机或路由器发送分组所耗费的时间;传播时延是指(电磁波)在网络链路上传播一定距离所耗费的时间;排队时延是指分组进入路由器队列中排队等待处理所耗费的时间;处理时延是指路由器对分组进行一系列处理工作所耗费的时间。可参考下图理解。
14.jpg
时延带宽积是传播时延和带宽的乘积,用来表示传播链路可以容纳的比特数量。公式如下:
时延带宽积=传播时延(s) * 带宽(b/s) (单位b)

1.4.3 往返时间RTT

往返时间是指从发送端发送分组开始,到发送端接收到接收端发来的相应确认分组为止,总共耗费时间。

1.4.4 利用率

链路利用率:指某条链路有百分之几的时间被利用(有数据通过)。当某链路的利用率增大时,该链路的时延就会迅速增大(主要链路中排队时延增大)。
网络利用率:指网络中所有链路的链路利用率的加权平均。

1.4.5 丢包率

在一定时间范围内,传输过程中丢失的分组数量与总分组数量的比例。

二、物理层

物理层要实现的功能是在各种传输媒体上传输比特0和1,进而给其上面的数据链路层提供透明传输比特流的服务。

2.1 接口特性

为了实现物理层的功能,物理层定义了与传输媒体的接口有关的一些特性。按相同接口标准生产的不同厂家的网络设备接口可以互相连接和通信。接口特性包括机械特性、电气特性、功能特性、过程特性。

2.2 传输方式

2.2.1 串并行、同步异步

串行只有一条数据传输路线;并行有多条。
同步传输是指在比特Bit传输时,字节bite之间没有间隔,也没有起始位或终止位。要求收发双方有严格的时间同步。异步传输以字节bite传输为单位,字节之间有不固定的时间间隔。为此一般要给每个字节添加起始和结束位。这里的异步其实是指字节间的异步。

2.2.2 单工、双工、半双工(通信)

单工:通信双方只能单方向通信。
双工:通信双方可以同时两个方向通信,即同时发送和接收。
半双工:通信双方可以两个方向通信,但只能交替进行不能同时。

2.2.3 协议

硬件交互其实是有许多协议的,这里不展开。只讲网络模型里物理层的协议。在数据链路层封装好数据后传输给物理层,物理层还会在数据载荷前8个字节的前导码。其中,前导码的前7个字节为前同步码,作用是使接收方的时钟同步,之后的1个字节为帧开始符。

三、数据链路层

数据链路层是解决一段链路上或一个网络中进行传输的问题。链路是指从一个节点到相邻节点的一段物理线路,而中间没有任何其它交换节点。链路加上一些必要协议来控制数据的传输,就能实现数据链路。计算机中的网络适配器(网卡)就包含了物理层和数据链路层这两层的功能。

3.1 数据链路层的三个问题

3.1.1 数据封装

给网络层交付下来的分组添加一个首部和一个尾部,就构成了一个帧(framing)。平时说的一帧数据主要指数据链路层的一条数据。

3.1.2 透明传输

上面数据封装讲到帧首部和尾部。假设帧的尾部标识符是“ESC”(0x1B),而恰好数据载荷里由有数据是0x1B,那要怎么处理呢?显然我们最好还是在数据链路层处理而不是等到交付给网络层才处理,对于网络层来说,数据链路层就好像不存在一样,是透明的,这才符合我们分层的目的。我们实现透明传输的方法常用的是:字节填充和比特填充。字节填充比如在特定符号前面填充一个转义字符,等到接收方拿到数据时在删除。比特填充也是类似的,比如特定位串01111110,发送方扫描载荷时发现连续5个1便在其后添一个0;接收方在向上交付时,也会扫面发现5个1删除其后的一个0。

3.1.3 差错校验

实际的通信链路不是理想的,在传输过程中有可能会失真,0变1或1变0,这种传输差错称为比特差错。某段时间的出错占比称为误码率。所以我们通常会在帧尾部存放检错的字段(Frame Check Sequence,FCS)。

3.1.3.1 奇偶校验

奇校验:整个数据(包括校验位在内)中“1”的个数为奇数。
偶校验:整个数据(包括校验位在内)中“1”的个数为偶数。
这种方法比较简单,但是存在“有奇数个位发生误码可以检测出来,但是偶数个位发生误码不能检测出来”的漏检问题。于是就有了漏检率极低的循环冗余校验(Cyclic Redundancy Check, CRC)。

3.1.3.2 循环冗余校验(CRC)

网上有很多资料,可以参考:https://info.support.huawei.com/info-finder/encyclopedia/zh/CRC.html

3.1.4 可靠传输

若数据链路层向其上层提供的是不可靠传输服务,则接收方的数据链路层丢弃有误码的帧即可,其它什么也不用做。若数据链路层向其上层提供的是可靠传输服务,这就需要数据链路层通过某种机制实现收发的稳定可靠。一般,有线物理传输数据链路层多是使用不可靠传输;无线传输由于容易被干扰,多使用可靠传输。

3.2 以太网、MAC

3.2.1 MAC地址

对于连接有多个站点的广播信道,要实现两个站点的通信,则每个站点需要有一个数据链路层地址作为唯一标识。于是有了用于媒体接入控制(Medium Access Control)的MAC地址。MAC地址一般被固化在网卡的EEPROM中,所以也被称为硬件地址或物理地址。需要注意的是:MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。MAC地址的格式分为两部分,前三个字节是组织的唯一标识符OUI,由厂商向IEEE的注册管理机构申请,后三个字节由厂商自行随意分配,只要保证生产出的网络设备没有重复地址即可。其写法一般为:00-0C-CF-93-8C-92(Windows)或者00:0C:CF:93:8C:92(苹果)。

3.2.2 以太网的MAC帧格式

以太网MAC帧格式如下图。由目的地址、源地址、类型、数据载荷以及FCS五部分组成。类型2字节用来表示上层使用哪个协议封装。比如当其值是0x0800时表明网络层是IP协议封装的。FCS字段长度4字节,内容是使用CRC生成的检验序列。
4.jpg

3.2.3 无线局域网的MAC帧格式

无线局域网的MAC帧格式如下图所示。由于需要保证可靠性同时避免碰撞等,帧首部相对以太网会比较多字段。
5.jpg

3.3 虚拟局域网

虚拟局域网(Virtual Local Area Network,VLAN)是一种讲局域网内的站点划分成与物理位置无关的逻辑组的技术。属于同一VLAN的站点之间可以直接进行通信,而不属于同一VLAN的站点之间不能直接进行通信。

四、网络层

4.1 无连接的数据报服务

物理层和数据链路层解决了网络设备通信的问题。到了网络层开始解决数据包网络传输的问题。或者可以理解为网络层是解决异构网络连接的问题,而数据链路层是解决网络接口通信的问题。相比于面向连接的虚电路服务,网络层采用无连接的数据报服务。什么意思呢?就是网络层通信的连接不是固定虚拟路线的,而是每个分组可走不同路径,因此也不需要建立和释放连接。其核心思想是“可靠通信应当由用户主机来保证”。这样做的好处是可以降低网络造价,相对灵活和简单;缺点是所传分组可能存在误码、丢失、重复和失序的问题。

4.2 分组转发和路由选择

前面已经提到过网络层是解决数据包从一个网络传输到另一个网络的问题。那么涉及到的第一个问题就是分组转发,指该分组从自己适当的接口转发给下一跳路由器或主机。因此每个路由器都需要维护一个转发表。
而两个主机之间的路由转发可能会经过很多次,传送路径并不是唯一的,所以可能存在多条传送路径,网络层需要决定选择哪一条传送路径,这就是路由选择。现在的路由选择基本都是分布式路由选择:在每个路由器上运行路由选择协议,各路由器相互交换路由信息并各自计算。

4.3. IP地址

4.3.1 IPv4地址的由来和表示

IPv4地址是给IP网上的每一个主机或路由器的每一个接口分配的一个在全世界范围内唯一的32bit的标识符。由因特网名字和数字分配机构(ICANN)进行分配。
其表示方法是每8bit分为一组,写出对应十进制数,每个十进制数之间用“.”来分隔开。比如:
某IPv4地址 00001010 11110000 00001111 10101010
十进制数 10 240 15 170
表示方法 10.240.15.170

4.3.2 IPv4地址分类

32bit的IPv4地址分为两部分。网络号:用来标志主机或路由器的接口所连接到的网络。主机号:用来标志主机或路由器的接口。所以,同一个网络中,不同主机或路由器的接口的IPv4地址的网络号必须是相同的,表示它们属于同一个网络,而主机号必须各不相同,以便区分接口。通常会分为一下五大类。

分类编制定义最小可指派网络号最大可指派网络号可指派网络数量每个网络中最大可分配地址数量备注
A类地址网络号占8bit,主机号占24bit,网络号最前面1bit固定为011262^7-2=1262^24-2=16777214127开头的地址被用于本地回环测试,不能指派。其最小测试地址为127.0.0.1。
B类地址网络号占16bit,主机号占16bit,网络号最前面2bit固定为10128.0191.2552^(16-2)=163842^16-2=65534主机号全0是网络地址,不可分配给网络中的主机接口。主机号全1是广播地址。
C类地址网络号占24bit,主机号占8bit,网络号最前面3bit固定为110192.0.0223.255.2552^(24-3)=20971522^8-2=254
D类地址多播地址,其最前面4bit固定为1110
E类地址保留地址,其最前面4bit固定为1111

IPv4分类编制一开始是为了区分网络的,但是后续有许多中小网络需要加入因特网可能就会存在剩余网络号不够使用的情况。于是提出了子网的概念。即把主机号的前n位作为子网号。这样就可以区分多个子网。

4.3.3 子网掩码

与IPv4地址类似,子网掩码也是由32bit构成,用以表明分类IPv4地址的主机号部分被借用了几个bit作为子网号。比如有IPv4地址218.75.230.0和子网掩码255.255.255.128,如下:
​ 网络号 子网号 主机号
IPv4地址 1111 1000 0100 1011 1 110 0110
子网掩码 1111 1111 1111 1111 1 000 0000
逻辑与运算 1111 1000 0100 1011 1 000 0000
通过前缀218开头我们可以发现这是一个C类(192-223)地址,前24bit是网络号。通过逻辑与运算我们可以知道子网号占用1bit,所以可以分配最多2个子网,每个子网可分配地址数量为2^(8-1)-2个。
而默认子网掩码是指在未划分子网的情况下使用的子网掩码。比如A类地址的默认子网掩码是255.0.0.0。、

4.4 IP协议

IP协议的首部由20字节的固定部分和最大40字节的可变部分组成。如下图。
6.jpg
首部长度是以4byte为单位的,比如0101(5),则表示首部长度为20字节。总长度是以1byte为单位,表示首部和数据载荷的长度总和。
如果某个IPv4数据报的总长度超过MTU(以太网规定1500字节),需要讲原数据报分片封装。属于同一个IPv4数据报的各分片数据报应该具有相同的标识,并赋值给标识字段。标志字段有3bit,最高位保留为0,低位表示是否后面还有分片,中间位标识是否允许分片。片偏移是用来指出数据载荷偏移原IPv4数据报的位置有多远,单位是8byte。
生存时间字段单位是秒,最大255秒。后来改成“跳数”,路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若不为0就转发,否则就丢弃。这是为了解决路由环路的问题:路由R1的下一跳是R2,而R2的下一跳是R1,如果不对其生存周期作限制会导致其一直在网络中循环,浪费资源。
协议字段是表示数据载荷(运输层数据)使用的协议。比如6代表使用TCP协议。此字段其实是为了IP复用和IP分用。
首部校验和字段用于检测传输过程中首部是否出差错。不检验IP协议数据报是为了减少计算的工作量。

五、运输层

前面介绍的物理层、数据链路层、网络层,它们共同解决了主机通过异构网络互联起来的问题,实现主机到主机的通讯。然而计算机网络中实际进行通信的真正主体是位于通信两端的进程。运输层的主要任务是为运行在不同主机上的应用进程提供直接的逻辑通信服务。

5.1 运输层端口号

运输层直接为应用进程间的逻辑通信提供服务,主要使用端口号来区分不同的应用进程。端口号分为熟知端口号(全球通用端口号)、登记端口号(49152~65535)。熟知端口号有诸如:HTTP–80、HTTPS–443、FTP–20/21、DNS–53。端口号只具有本地意义,即只是为了标识本计算机网络协议栈应用层中的各应用进程。不同计算机的相同端口是没有关系的。

5.2 运输层协议

还记得上一大章提到的吗?以太网网络层采用不可靠传输,这就需要上层考虑是否处理可靠性的问题。因此,运输层提供了两种不同的运输层协议:面向连接的传输控制协议(TCP)、无连接的用户数据报协议(UDP)。前者在传送数据前需要先建立连接(逻辑连接),然后才能进行可靠数据传输,传输结束后需要释放连接。为此需要增加许多措施:TCP连接管理、确认机制、超时重传、流量控制以及拥塞控制等。后者是一种不可靠传输服务,但某些实时性要求高的情况下却是最高效的。很显然,TCP只指出单播,即一对一通信。而UDP支持单播、多播和广播。

5.3 TCP协议

5.3.1 TCP协议简单介绍

如下图是TCP报文段的首部格式。与IPv4类似,都由20个固定字节和最大40个扩展字节构成。
7.jpg
其中,序号字段和确认号字段都占32bit,取值范围0~2^32-1。序号字段用来指出数据载荷的第一个字节的序号。确认号字段用来指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。也就是说,若确认号为n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。
数据偏移字段占4bit,单位为4bit。用来指出报文段的首部长度,最小为5,最大为15。
ACK确认字段。只有ACK字段为1时,确认号字段才有效。在TCP连接建立后所有传送的报文段都必须把ACK置1。
SYN同步标志位字段用于TCP双方建立连接。SYN=1时的报文段要么是一个连接请求(SYN=1,ACK=0),要么是一个连接响应报文(SYN=1,ACK=1)。
FIN终止标志位用于释放TCP连接。FIN=1表示数据发送完毕,要求释放连接。
RST复位标志位用于连接复位。RST=1时必须释放连接,然后重现创建连接。
窗口字段取值范围0~2^16-1,以字节为单位,用来指出发送报文段的一方的接收窗口的大小,即缓存的可用空间大小。经常用接收方的接收能力大小来控制发送方的数据发送量,即流量控制。

5.3.2 TCP连接管理(三次握手)

TCP为了保证可靠性,是需要进行连接,确保两端可以正常通信。连接的过程由于需要来回三次,所以我们一般喜欢称此过程为“三次握手”。如下图所示。
8.jpg
1、首先服务器需要被动打开,由CLOSED关闭状态进入LISTEN监听状态。
2、连接由客户端发起,发送一个连接请求报文,即报文首部中SYN=1,并进入同步已发送状态SYN-SENT。(TCP规定SYN被置1的报文段不能携带数据,但要消耗掉一个序号)
3、服务端收到连接请求报文,如果同意连接,则发送TCP连接请求确认报文段,并进入同步已接收状态SYN-RCVD。该报文段的SYN=1,ACK=1,同时ack为连接请求报文的seq+1。(TCP连接请求确认报文也不能携带数据,但也要消耗一个序号)
4、客户端收到TCP请求确认报文段后,向服务端发送一个普通的TCP确认报文段,并进入连接已建立状态ESTABLISHED。该报文首部ACK=1。(此报文段可以携带数据,也可以不携带数据,携带数据需要消耗一个序号)
5、服务端收到普通的确认报文后,也进入连接已建立状态ESTABLISHED。此时,TCP双方的连接已经建立。
经典问题来了:为什么TCP连接需要三次握手,两次不行吗?
这是因为TCP连接需要双方都确认好可以接收到数据。如果只有两次握手,客户端可以确认发送和接收服务端数据正常,但服务端只能确认接收客户端数据正常而无法确认发送客户端数据正常。因为网络延迟等导致客户端上一个连接请求在下一个正常连接结束后才到达,此时如果客户段不发送第三次握手且认为没有数据需要发送而服务端直接进入连接已建立状态,则会给服务端带来过多的资源浪费。

5.3.3 TCP连接管理(四次挥手)

关闭连接的过程由于需要来回四次,所以我们一般喜欢称此过程为“四次挥手”。如下图所示。依然是以客户端主动发起关闭为例。
9.jpg
1、双方通信结束后,假设客户端发起关闭,会发送TCP连接释放报文段,并进入终止等待1状态FIN-WAIT-1。该报文段首部FIN=1,ACK=1。即时不携带数据,也需要消耗一个序号。
2、服务端收到后会发送一个普通的TCP确认报文段(ACK=1),并进入关闭等待状态CLOSE-WAIT。需要消耗一个确认号。此时TCP连接属于半关闭状态,即客户端没有数据要发送了。
3、客户端收到确认报文段后就进入终止等待2状态FIN-WAIT-2。等待服务器发出TCP连接释放报文段。
4、如果服务端也没有数据要发送了,会发送TCP连接释放报文段,并进入最后确认状态LAST-ACK。该报文段首部FIN=1,ACK=1。
5、同样,客户端收到TCP连接释放报文段会回一个普通的TCP确认报文段(ACK=1),并进入时间等待状态TIME-WAIT。需要消耗一个序号。
6、服务端收到TCP确认报文段后进入关闭状态CLOSE,撤销相应资源。而客户端还要经过2MSL(最长报文段寿命,一般2min)才能进入关闭状态CLOSE。
其实,关闭连接过程看下来就是双方互相发送关闭请求报文段和确认报文段,所以是四次挥手。那么问题又来了:为什么客户端最后一次发送确认报文段后不直接关闭而是等待2MSL呢?这是为了考虑到万一最后一次发送确认报文段丢失不能到达服务端时,而客户端若处于关闭状态则无法在应答服务端重复发送的请求关闭报文段。经过2MSL时长,就认为可以使本次连接内所产生的所有报文段从网络中消失,使下一个连接不会出现旧连接中的报文段。

五、应用层

网络应用层作为OSI体系的顶层,是对网络应用开发人员最友好的一层。因为网络应用程序只运行在端系统中,运输层已经为网络应用提供了端到端的进程间逻辑通信服务。

5.1 C/S和P2P

网络应用程序在各种端系统上的组织方式和它们之间的关系目前流行的主要有两种:客户/服务器方式(Client/Server,C/S)和对等方式(Peer-to-Peer,P2P)。
C/S方式下,客户是服务的请求方,服务器是服务的提供方。通常服务器具有固定的运输层端口号和IP地址。
P2P的应用服务是分散型的,具有可扩展性,系统不会因为规模的增大而降低,具有成本上的优势。

5.2 域名

通常,我们在浏览器上访问页面是使用域名。在Windows系统下“ping 域名”可以看到IP地址,在浏览器将域名替换成IP地址和端口也可以正确访问。使用域名是为了便于人们记忆。
因特网采用层次树状结构的域名结构。域名的结构由若干个分量组成,各分量之间用“.”隔开,分别代表不同级别的域名。比如国家级域名cn。如下:
···.三级域名.二级域名.一级域名
域名和IP地址的对应关系必须保存在域名服务器中,也称DNS服务器。域名系统DNS使用分布在各地的域名服务器来实现域名IP地址的转换。域名服务器可以划分为四种不同类型:根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。因特网有两种域名查询方式:递归查询(按域名级别一级一级查询下去返回给调用方)和迭代查询(根域名、顶级域名、权限域名等分开查找返回)。DNS报文使用运输层的UDP进行封装,熟知端口号53。
在域名服务器中广泛使用了高速缓存,会将最近频繁查询的域名缓存起来,并设置合理的超时时间,避免过多查询操作带来网络压力。不但在本地域名服务器中需要高速缓存,同理在用户主机也很需要,有限本地查询DNS。

5.3 万维网

万维网并非某种特殊的计算机网络,它是一个大规模、联机式的信息储藏所,是运行在因特网上的一个分布式应用。万维网利用网页之间的超链接,将不同网站的网页链接成一张逻辑上的信息网。常用协议是HTTP超文本传输协议。

5.3.1 统一资源定位符

为了方便地访问在世界范围的文档,万维网使用统一资源(Uniform Resource Locator,URL)来指明因特网上的任何种类资源位置。其格式如下:
<协议>://<主机>:<端口>/<路径>

5.3.2 Web缓存

万维网也是可以使用高速缓存来提高效率的,又称为Web缓存(Web Cache)。可位于主机上或中间系统上,位于中间系统上的Web缓存又称为代理服务器(Proxy Server)。
Web缓存把最近的一些请求和响应暂存在本地磁盘中,当相同请求过来时,就返回暂存响应,不再按URL去因特网访问资源。通常原始服务器会为每个响应对象设定一个“修改时间(Last-Modified)”和“有效日期(Expires)”。

5.4 超文本传输协议HTTP

5.4.1 HTTP报文格式

HTTP是面向文本的,其报文中每一个字段都是一些ASCII码,并且长度是不确定的。如下图所示。作为一名程序开发者,对HTTP报文格式一定不陌生。
请求报文格式和举例:
10.jpg
11.jpg
响应报文格式:
12.jpg
状态行中的状态码分五大类33种。

状态码(五大类33种)描述
1XX表示通知信息,如请求收到了或正在处理。
2XX表示成功,如接受或知道了。
3XX表示重定向,即要完成请求还必须采取进一步的行动。
4XX表示客户的差错,如请求中有错误的语法或不能完成。
5XX表示服务器的差错,如服务器失效无法完成请求。
5.4.2 Cookie

浏览器通常会使用Cookie在万维网服务器上记录用户信息。HTTP被设计成一种无状态的协议,但后续的发展出现诸如登录等用户识别复杂场景,Cookie是一种对无状态HTTP进行状态化的技术。其工作原理如下图。
13.jpg

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值