计算机网络八股

计算机网络八股总结

网络的概述

一、OSI的七层模型

1.OSI的七层模型及其功能

  1. 物理层:该层负责传输介质上的原始比特流。它定义了电气、机械和功能接口规范,如传输介质、连接器和传输速率等。物理层的主要功能是将数据从一个节点传输到另一个节点,通过传输介质进行比特级别的传输。
  2. 数据链路层:该层提供可靠的数据传输,将原始的比特流划分为数据帧它处理物理层传输错误的纠正和恢复,并通过物理地址(MAC地址)识别设备。数据链路层还负责帧同步、流量控制和错误检测等功能。
  3. 网络层:该层负责为数据包选择和设置路由,以便将数据包从源主机传输到目标主机。它定义了一系列协议和算法来处理路由选择、拥塞控制和分组交换。网络层的主要功能是实现端到端的数据传输和寻址。
  4. 传输层:该层提供端到端的可靠数据传输。它通过分段和重新组装数据,处理数据丢失、重复、乱序等问题。传输层的代表性协议是传输控制协议(TCP)和用户数据报协议(UDP)。传输层数据被称作tcp报文段或udp用户数据报传输层的主要功能是确保数据的完整性和可靠性。
  5. 会话层:该层负责建立、管理和终止会话(或连接)中的通信。它提供会话的控制和同步,包括对数据传输进行管理和检查点控制。会话层的主要功能是建立和维护应用程序之间的会话,如session认证、断点续传。
  6. 表示层:该层处理数据的表示方式,包括数据的加密、压缩和格式转换。它负责确保不同设备上的应用程序能够相互理解和交换数据。表示层的主要功能是处理数据的语义和格式转换,如图像、视频编码解,数据加密。
  7. 应用层:该层提供直接面向用户的应用程序访问网络的接口。它包含了各种网络应用协议,如HTTP(超文本传输协议)、FTP(文件传输协议)和SMTP(简单邮件传输协议)等。应用层的主要功能是为用户提供各种网络服务和应用。
    在这里插入图片描述

2. 为何需要把 TCP/IP 协议栈分成 5 层(或7层)?

ARPANET 的研制经验表明,对于复杂的计算机网络协议,其结构应该是层次式的。
以下是将TCP/IP协议栈分成5层或7层的主要原因:

  1. 模块化设计:分层结构使得网络协议的实现可以分解为多个模块,每个模块负责特定的功能。这样,开发和维护网络协议变得更加可管理和可控。

  2. 功能划分:每个层次代表一个特定的功能范畴,如物理传输、数据链路、网络、传输和应用层。这样的划分使得不同层次的协议负责不同的任务,实现了功能的分工和聚焦。

  3. 接口标准化:每个层次之间通过明确定义的接口进行通信,使得不同厂商和实现者可以按照接口规范开发协议栈的不同层次。这促进了互操作性和跨平台的实现。

  4. 可扩展性:通过在每个层次添加或修改协议,可以很容易地扩展和增强协议栈的功能,而不影响其他层次的协议。

  5. 故障隔离:分层结构使得网络协议中的故障或错误局限在特定的层次内,不会影响到整个协议栈的运行。这有助于故障的定位和修复。

  6. 标准化和互操作性:分层结构为不同组织和厂商提供了一个共同的参考框架,以便设计、实现和集成网络协议。标准化的协议栈促进了不同设备和系统之间的互操作性。

  7. 教学和学习:分层结构使得网络协议的学习和教学更加有序和系统化。学习者可以逐层理解和掌握协议的工作原理和功能。

二、 TCP/IP五层模型

1.TCP/IP五层模型及其功能

  1. 物理层:与OSI模型中的物理层类似,负责传输介质上的原始比特流。它定义了电气、机械和功能接口规范,如传输介质、连接器和传输速率等。物理层的主要功能是将数据从一个节点传输到另一个节点,通过传输介质进行比特级别的传输
  2. 数据链路层:与OSI模型中的数据链路层类似,提供可靠的数据传输,将原始的比特流划分为数据帧。它处理物理层传输错误的纠正和恢复,并通过物理地址(MAC地址)识别设备。数据链路层的主要功能是帧同步、流量控制、错误检测和处理等
  3. 网络层:相当于OSI模型中的网络层,负责将数据包从源主机传输到目标主机,通过路由选择和转发实现跨网络的数据传输。网络层的主要功能是实现端到端的数据传输、寻址和路由
  4. 传输层:在TCP/IP模型中,传输层是一个重要的层级,它提供端到端的可靠数据传输。主要有两个协议:传输控制协议(TCP)和用户数据报协议(UDP)。TCP提供可靠的、面向连接的数据传输,确保数据的完整性和可靠性。UDP则提供无连接的数据传输,适用于实时性要求较高的应用。传输层的主要功能是分段、流量控制、错误检测和恢复
  5. 应用层:与OSI模型中的会话层、表示层和应用层相对应,提供直接面向用户的应用程序访问网络的接口。应用层包含了各种网络应用协议,如HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。应用层的主要功能是为用户提供各种网络服务和应用。
    TCP/

2.TCP/IP模型各层协议

TCP/IP协议定义了一系列的标准协议,每一层的功能都是通过下面的协议实现的
在这里插入图片描述

三、ISP

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,并与其签订服务协议以获得互联网接入和相关服务。

四、信道复用技术

  1. 频分复用(Frequency Division Multiplexing,FDM):将可用频谱划分为不同的子频带,每个用户被分配一个独立的频带来传输数据。每个用户的数据在频域上互不干扰。
  2. 时分复用(Time Division Multiplexing,TDM):将时间划分为离散的时隙,不同用户在不同的时隙上进行数据传输。在每个时隙内,只有一个用户进行传输,其他用户等待。
  3. 统计时分复用(Statistical Time Division Multiplexing,STDM):类似于TDM,但用户之间的时隙不固定,根据需要动态分配时隙。这种方法可以根据用户的实际数据传输需求进行灵活的资源分配。
  4. 波分复用(Wavelength Division Multiplexing,WDM):在光纤通信系统中使用的一种信道复用技术。通过将不同波长的光信号同时传输在同一光纤上,实现多路信号的复用。
  5. 码分复用(Code Division Multiplexing,CDM):利用不同的扩频码将多个用户的信号进行编码,然后在相同的频带上同时传输。接收端使用相应的扩频码进行解码,将特定用户的信号提取出来。

五、CSMA/CD 协议

CSMA/CD 表示载波监听多点接入 / 碰撞检测

  • 多点接入:说明这是总线型网络,许多主机以多点的方式连接到总线上。
  • 载波监听:每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。
  • 碰撞检测 :在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。

六、PPP协议

互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议。

PPP 的帧格式:

  • F 字段为帧的定界符
  • A 和 C 字段暂时没有意义
  • FCS 字段是使用 CRC 的检验序列
  • 信息部分的长度不超过 1500
    在这里插入图片描述

七、MAC地址

MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。
一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。

八、局域网

局域网是一种典型的广播信道,主要特点是网络为一个单位所拥有,且地理范围和站点数目均有限。

主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。

可以按照网络拓扑结构对局域网进行分类:
在这里插入图片描述

九、以太网

以太网是一种星型拓扑结构局域网。

以太网帧格式:

  1. 类型 :标记上层使用的协议;
  2. 数据 :长度在 46-1500 之间,如果太小则需要填充;
  3. FCS :帧检验序列,使用的是 CRC 检验方法;

十、交换机

交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 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 收到,而其它站点收不到。
在这里插入图片描述

物理层

一、通信方式

根据信息在传输线上的传送方向,分为以下三种通信方式:

  • 单工通信:单向传输
  • 半双工通信:双向交替传输
  • 全双工通信:双向同时传输

二、带通调制

模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。

在这里插入图片描述

链路层

一、基本问题

1.封装成帧

将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。
在这里插入图片描述

2.透明传输

透明表示一个实际存在的事物看起来好像不存在一样。
帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。
在这里插入图片描述

3.差错检测

目前数据链路层广泛使用了 循环冗余检验(CRC) 来检查比特差错。

二、信道分类

1.广播信道

一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。

所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。

主要有两种控制方法进行协调,一个是使用信道复用技术,一是使用 CSMA/CD协议

2.点对点信道

一对一通信。

因为不会发生碰撞,因此也比较简单,使用 PPP 协议 进行控制。

三、信道复用技术

网络层

一、概述

与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网际控制报文协议ICMP(Internet Control Message Protocol)
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

二、IP数据报格式

在这里插入图片描述

  • 版本 : 有 4(IPv4)和 6(IPv6)两个值;
  • 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20
    字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
  • 区分服务 : 用来获得更好的服务,一般情况下不使用。
  • 总长度 : 包括首部长度和数据部分长度。
  • 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
  • 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
  • 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
  • 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
  • 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
    在这里插入图片描述

三、IP地址编址方式

1. 分类

由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。

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类地址

    • 网络号共8位,第1位固定为0,剩余7位可选,故可指派的网络号有27-2个(减2是因为减去了二进制位全0网络号和127换回测试地址网络号)
    • 主机号24位,可分配主机数为224-2=16777214个(主机号全0和全1的不分配,故减2);
    • 第一个可分配的网络号为1,最后一个为126(127不分配);
    • 综上,A类地址共 (27-2) * (224 - 2)≈231,总地址空间为232个,故A类地址占总地址空间的50%
  • B类地址

    • 网络号共16位,第1,2位固定为10,剩余14位可选,故可指派的网络号有214-1个(减1是因为减去了128.0这个保留地址)
    • 主机号16位,可分配主机数为216-2=65534个(主机号全0和全1的不分配,故减2);
    • 第一个可分配的网络号为128.1,最后一个为191.255;
    • 综上,B类地址共(214-1)*(216-2)≈230个,总地址空间为2^32个,故B类地址占总地址空间的25%
  • C类地址

    • 网络号共24位,第1,2,3位固定为110,剩余21位可选,故可指派的网络号有221-1个(减1是因为减去了192.0.0这个保留地址)
    • 主机号8位,可分配主机数为28-2=254个(主机号全0和全1的不分配,故减2);
    • 第一个可分配的网络号为192.0.1,最后一个为223.255.255;
    • 综上,C类地址共(221-1)*(28-2)≈229,总地址空间为232个,故C类地址占总地址空间的12.5%
  • D类地址

    • D类地址不分网络地址和主机地址,该类IP地址的前面4位为“1110”,所以网络号取值于224~239之间;后面28位为组播地址ID。这是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicasting)中。多点广播地址用来一次寻址一组计算机,它表示共享同一协议的一组计算机。
  • E类地址

    • 是保留地址,为将来使用保留。该类IP地址的最前面为“1111”,所以网络号取值于240~255之间。

2.子网划分

通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。

IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}

要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。

注意,外部网络看不到子网的存在。

3.无分类

无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。

IP 地址 ::= {< 网络前缀号 >, < 主机号 >}

CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。

CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。

一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网

在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

四、地址解析协议 ARP

ARP(Address Resolution Protocol)是一种用于将IP地址解析为物理MAC地址的协议。它在网络层数据链路层之间起到桥梁的作用,帮助主机在局域网中定位目标主机的物理地址。
ARP的工作原理简化为以下步骤:

  1. 发送主机检查ARP缓存,查找目标主机的MAC地址。
  2. 如果缓存中不存在目标主机的对应关系,则发送ARP请求广播消息。
  3. 目标主机接收到ARP请求后,发送ARP响应消息给请求主机。
  4. 请求主机收到ARP响应后,将目标主机的MAC地址存储在ARP缓存中。
  5. 请求主机使用目标主机的MAC地址进行数据包封装和发送。

ARP协议主要用于局域网中,通过将IP地址解析为MAC地址,实现局域网内主机之间的通信。它是实现网络通信的重要基础协议之一。

五、反向地址转换协议RARP

反向地址转换协议,网络层协议,RARP与ARP工作方式相反。 RARP使只知道自己硬件地址的主机能够知道其IP地址。RARP发出要反向解释的物理地址并希望返回其IP地址,应答包括能够提供所需信息的RARP服务器发出的IP地址。
原理:

  1. 网络上的每台设备都会有一个独一无二的硬件地址,通常是由设备厂商分配的MAC地址。主机从网卡上读取MAC地址,然后在网络上发送一个RARP请求的广播数据包,请求RARP服务器回复该主机的IP地址。
  2. RARP服务器收到了RARP请求数据包,为其分配IP地址,并将RARP回应发送给主机。
  3. PC1收到RARP回应后,就使用得到的IP地址进行通讯。

六、网际控制报文协议 ICMP

ICMP(Internet Control Message Protocol)是一种网络协议,用于在IP网络中传递控制和错误消息。它是在网络层(第三层)上工作的协议,被用于进行网络故障排除、错误报告和网络管理。
在这里插入图片描述
ICMP 报文分为差错报告报文和询问报文。
在这里插入图片描述

  1. Ping
    Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
    Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
  2. Traceroute
    Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
    Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。

(待续)

传输层

一、UPD和TCP的特点

1.UDP的特点

用户数据报协议 UDP(User Datagram Protocol)是无连接的尽最大可能交付没有拥塞控制面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。首部开销小,只有8个字节,比TCP的20个字节的首部要短。

2.TCP的特点

传输控制协议 TCP(Transmission Control Protocol)是面向连接的提供可靠交付有流量控制拥塞控制提供全双工通信面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)

二、UPD首部格式

首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的
在这里插入图片描述

三、TCP首部格式

在这里插入图片描述

  • 源端口(16bit) :表示源主机发送数据的端口号。
  • 目标端口(16bit) :表示目标主机接收数据的端口号。
  • 序号(32bit) :用于按顺序对数据进行排序和重组。
  • 确认号(32bit) :期望收到的下一个报文段的序号。
  • 数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
  • 保留(6bit):保留供将来使用,暂时未被使用。
  • 标志位(6bit):用于控制和管理TCP连接的不同状态和操作,包括:
    • URG(紧急):标志紧急指针是否有效。
    • ACK(确认):标志确认号是否有效(确认报文段)。用于解决丢包问题。当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
    • PSH(推送):提示接收端立即从缓冲读走数据。
    • RST(重置):表示要求对方重新建立连接(复位报文段)。
    • SYN(同步):表示请求建立一个连接(连接报文段)。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
    • FIN(结束):表示关闭连接(断开报文段)。用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
  • 窗口(16bit) :表示发送方能接收的数据量,用于流量控制。
  • 校验和(16bit):接收端用CRC检验首部和数据的传输中是否发生错误。
  • 紧急指针(16bit):指示紧急数据的末尾位置。
  • 选项:变长字段,用于在TCP首部中包含一些可选的控制信息。
  • 填充:可变长度字段,用于填充以满足4字节对齐要求

四、TCP 的三次握手

在这里插入图片描述

1.第一种回答

  1. 第一次握手(SYN)
    • 客户端(Client)向服务器(Server)发送一个SYN(同步)报文段。
    • 报文段中的SYN标志位被设置为1,表示客户端请求建立连接。
    • 客户端选择一个初始的序列号Seq(Sequence Number)并放入报文段中。
    • 首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。
  2. 第二次握手(SYN-ACK)
    • 服务器收到客户端的SYN报文段后,确认客户端的请求。
    • 服务器向客户端发送一个带有SYN和ACK(确认)标志位的报文段。
    • 报文段中的ACK标志位被设置为1,表示服务器已经收到了客户端的请求。
    • 服务器选择一个初始的序列号并放入报文段中。在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。
  3. 第三次握手(ACK)
    • 客户端收到服务器的SYN-ACK报文段后,向服务器发送一个带有ACK标志位的报文段。
    • 报文段中的ACK标志位被设置为1,表示客户端确认收到了服务器的确认。
    • 客户端将确认号设置为服务器的初始序列号加1。
    • 确认报文段ACK=1,确认号ack=y+1,序号seq=x+1(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。

在socket编程中,客户端执行connect()时,将触发三次握手。

2.第二种回答

  • 初始状态:客户端处于 closed(关闭)状态,服务器处于 listen(监听) 状态。
  • 第一次握手:客户端发送请求报文将 SYN = 1同步序列号和初始化序列号seq = x发送给服务端,发送完之后客户端处于SYN_Send状态。(验证了客户端的发送能力和服务端的接收能力)
  • 第二次握手:服务端受到 SYN 请求报文之后,如果同意连接,会以自己的同步序列号SYN(服务端) = 1、初始化序列号 seq = y和确认序列号(期望下次收到的数据包)ack = x+ 1 以及确认号ACK = 1报文作为应答,服务器为SYN_Receive状态。
  • 第三次握手: 客户端接收到服务端的 SYN + ACK之后,知道可以下次可以发送了下一序列的数据包了,然后发送同步序列号 ack = y + 1和数据包的序列号 seq = x + 1以及确认号ACK = 1确认包作为应答,客户端转为established状态。

3. 为什么需要三次握手,两次不行吗?

  1. 三次握手的原因
  • 第一次握手:客户端发送网络包,服务端收到了。 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的
  • 第二次握手:服务端发包,客户端收到了。 这样客户端就能得出结论:服务端的接收、发送能力,客户端的发送能力是正常的
  • 第三次握手:客户端发包,服务端收到了。 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常
  • 因此,需要三次握手才能确认双方的接收与发送能力是否正常。
  1. 两次不行的原因
    三次握手的设计主要是为了确保双方的通信端点都能够正常工作并同步起始序列号。具体原因如下:
    (1) 防止已失效的连接请求触发连接建立:如果只进行两次握手,客户端发送连接请求后,因为网络延迟或其他原因导致数据包滞留,在一段时间后到达服务器。此时服务器会认为是一个新的连接请求,而不是之前已经失效的连接请求。
    (2)确保双方的初始序列号正确:在TCP连接建立时,双方需要协商初始的序列号用于数据传输。第三次握手中客户端发送的确认报文段携带了客户端的确认号,通过这个确认号,双方能够确保彼此的初始序列号设置正确。
    (3)防止资源浪费:如果只进行两次握手,服务器会在收到连接请求后直接建立连接并分配资源,但是客户端可能并不希望建立连接或者由于某些原因没有接收到服务器的确认。这样会导致服务器资源的浪费。

通过三次握手,双方可以互相确认对方的能力和意愿,确保双方都准备好进行数据传输。这样可以有效地避免无效的连接请求、保证初始序列号的正确性,并减少资源浪费的可能性。因此,三次握手是为了建立可靠的连接而设计的。

五、TCP 的四次挥手

在这里插入图片描述
TCP的四次挥手是在终止TCP连接时使用的一种协议,它确保双方完成数据传输并正常关闭连接。下面是TCP四次挥手的过程:

  1. 第一次挥手(FIN):
    • 发送方(通常是客户端)向接收方(通常是服务器)发送一个FIN=1,seq=u(结束)报文段。
    • 发送方希望关闭连接,不再发送数据。
  2. 第二次挥手(ACK):
    • 接收方收到FIN=1报文段后,发送一个ACK=1,seq=v, ack=u+1(确认)报文段作为响应。
    • 接收方确认收到发送方的关闭请求。
  3. 第三次挥手(FIN):
    • 接收方(通常是服务器)向发送方(通常是客户端)发送一个FIN=1, ACK=1, seq=w, ack=u+1 报文段。
    • 接收方也希望关闭连接,不再发送数据。
  4. 第四次挥手(ACK):
    • 发送方收到FIN报文段后,发送一个ACK=1, seq=u+1, ack=w+1报文段作为响应。
    • 发送方确认收到接收方的关闭请求。

完成这个四次挥手过程后,TCP连接彻底关闭,双方不再进行数据传输。通过这个过程,双方能够确保数据传输的完整性,并协商关闭连接,释放相关的资源。需要注意的是,关闭连接的一方可能会先发送FIN报文段,但在关闭过程中,双方的角色(发送方和接收方)是可以交换的。

1.四次挥手的原因

四次挥手过程中的每个报文段都需要对方发送一个确认,以确保双方都知道对方的关闭意图,并完成相应的处理。这样可以确保连接的可靠关闭,避免数据丢失或错误的关闭连接。
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

  1. 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
  2. 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

2. 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结束后才能再被使用。

3.四次挥手释放连接时,等待2MSL的意义?

为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
两个理由:

  1. 保证客户端发送的最后一个ACK报文段能够到达服务端。 这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,服务端超时重传FIN+ACK报文段,而客户端能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务端都进入到CLOSED状态,若客户端在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到服务端重传的FIN+ACK报文段,所以不会再发送一次确认报文段,则服务端无法正常进入到CLOSED状态。
  2. 防止“已失效的连接请求报文段”出现在本连接中。 客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

4. 为什么TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态?

  1. 第一回答:
    理论上,四个报文都发送完毕,就可以直接进入CLOSE状态了,但是可能网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
  2. 第二种回答:
    客户端给服务端发送的ACK = 1丢失,服务端等待 1MSL没收到,然后重新发送消息需要1MSL。如果再次接收到服务端的消息,则重启2MSL计时器,发送确认请求。客户端只需等待2MSL,如果没有再次收到服务端的消息,就说明服务端已经接收到自己确认消息;此时双方都关闭的连接,TCP 四次分手完毕。

六、TCP 可靠传输

TCP(Transmission Control Protocol)是一种可靠传输协议,它提供了以下机制来确保数据的可靠传输:

  1. 序列号和确认机制:TCP将数据流划分为一系列的数据段,并为每个数据段分配一个序列号。接收方通过确认机制告知发送方已成功接收到的数据段,并确认期望接收的下一个序列号。如果发送方在一定时间内未收到确认,将重新发送该数据段。
  2. 确认超时与重传:TCP利用超时和重传机制来处理丢失的数据段。如果发送方在超时时间内未收到确认,它会假设该数据段丢失,并重新发送数据段。接收方收到重复的数据段时,会丢弃重复的数据。
  3. 滑动窗口机制:TCP通过滑动窗口机制进行流量控制和拥塞控制。接收方使用滑动窗口来告诉发送方它可以接收的数据量。发送方根据接收方的窗口大小来控制发送数据的速率,以避免过载接收方。
  4. 确保顺序交付:TCP保证数据按照发送的顺序交付给接收方。接收方会根据序列号对接收到的数据段进行排序和重组,以保证数据的顺序性。
  5. 校验和:TCP使用校验和来检测数据在传输过程中的错误。接收方会计算校验和并与发送方发送的校验和进行比较,以确保数据的完整性。

通过以上机制,TCP能够提供可靠的数据传输服务,保证数据的完整性、有序性和可靠性。这使得TCP适用于对数据可靠性要求较高的应用,如文件传输、网页浏览、电子邮件等。

七、TCP滑动窗口

TCP的滑动窗口是一种流量控制和拥塞控制的机制,用于调节发送方发送数据的速率,以适应接收方的处理能力和网络的拥塞情况。

滑动窗口的基本原理是通过发送方和接收方之间的协商,确定可以发送和接收的数据量。发送方维护了一个发送窗口,接收方维护了一个接收窗口。发送窗口表示发送方可以连续发送的数据段的范围,接收窗口表示接收方可以接收的数据段的范围。

具体工作流程如下:

  1. 发送窗口:
    • 发送方根据接收方的窗口大小和可用缓冲区空间,确定发送窗口的大小。
    • 发送方只能发送发送窗口内的数据段,超出窗口范围的数据段需要等待。
  2. 接收窗口:
    • 接收方通过通告窗口大小,告知发送方自己的可接收窗口大小。
    • 接收方的窗口大小根据可用缓冲区空间和处理能力来决定。
  3. 滑动过程:
    • 发送方发送窗口内的数据段,并等待接收方的确认。
    • 当发送方收到接收方的确认后,滑动发送窗口,扩大发送窗口的范围。
    • 如果发送方连续收到接收方的多个确认,表示接收方的窗口大小有所增加,发送方可以适当加大发送窗口。

通过滑动窗口机制,TCP实现了流量控制和拥塞控制:

  • 流量控制:接收方可以通过调整窗口大小告知发送方自己的处理能力,以控制发送方的发送速率,避免数据的积压和溢出。
  • 拥塞控制:滑动窗口的调整也受到拥塞控制算法的影响,发送方会根据网络的拥塞情况调整窗口大小,以避免网络拥塞加剧。

滑动窗口机制在TCP中起到了重要的作用,可以有效地控制数据的传输速率和适应网络的状况,从而保证数据的可靠传输和网络的稳定性。

八、TCP流量控制

流量控制是为了控制发送方发送速率,保证接收方来得及接收。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

九、TCP 拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。

1. TCP 主要通过四个算法来进行拥塞控制:

  1. 慢启动(Slow Start)
    所谓慢启动,也就是TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。
    (1)连接建好的开始先初始化拥塞窗口cwnd大小为1,表明可以传一个MSS大小的数据。
    (2)每当收到一个ACK,cwnd大小加一,呈线性上升。
    (3)每当过了一个往返延迟时间RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指数让升。
    (4)还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”。

  2. 拥塞避免(Congestion Avoidance)
    当拥塞窗口大小cwnd大于等于慢启动阈值ssthresh后,就进入拥塞避免算法。算法如下:
    (1)收到一个ACK,则cwnd = cwnd + 1 / cwnd
    (2)每当过了一个往返延迟时间RTT,cwnd大小加一。
    过了慢启动阈值后,拥塞避免算法可以避免窗口增长过快导致窗口拥塞,而是缓慢的增加调整到网络的最佳值。

  3. 快速重传(Fast Retransmit)
    (1)如果发送方连续收到三个重复的确认(ACK),即接收方已经收到了同一个数据段多次。
    (2)这表明该数据段之后的数据段可能已经丢失,发送方会立即进行快速重传。
    (3)发送方重传丢失的数据段而无需等待超时,从而加快恢复速度。
    在这里插入图片描述

  4. 快速恢复(Fast Recovery)
    TCP Tahoe是早期的算法,所以没有快速恢复算法,而Reno算法有。在进入快速恢复之前,cwnd和ssthresh已经被更改为原有cwnd的一半。快速恢复算法的逻辑如下:
    (1)在执行快速重传后,发送方会执行快速恢复算法。
    (2)发送方将拥塞窗口减半,同时将拥塞窗口的增长方式从慢启动切换为拥塞避免。
    (3)然后,发送方将拥塞窗口的大小增加一个拥塞窗口增量,并进入拥塞避免状态。

十、 Socket

Socket(套接字)是在计算机网络中用于实现网络通信的一种编程接口或抽象。它提供了一种机制,使不同计算机之间可以通过网络进行数据的传输和通信。

Socket 提供了一组函数或方法,使开发者能够创建、连接、发送和接收数据等操作。它通过网络协议(如TCP、UDP)实现了数据的可靠传输或无连接传输。

Socket 编程通常涉及两个端点,一个是服务器端,另一个是客户端。服务器端监听指定的端口,等待客户端的连接请求;而客户端通过指定服务器的IP地址和端口号发起连接请求,与服务器建立连接后进行数据传输。

下面是 Socket 编程的基本步骤:

  1. 创建 Socket:在编程语言中使用相应的函数或方法创建一个 Socket 对象。通常需要指定协议类型(如TCP、UDP)以及地址族(如IPv4、IPv6)等参数。

  2. 绑定 Socket(服务器端):如果是服务器端,需要将 Socket 绑定到指定的IP地址和端口号。这样服务器就可以监听该端口,等待客户端的连接请求。

  3. 连接 Socket(客户端):如果是客户端,需要使用 Socket 连接到服务器端的指定IP地址和端口号。通过指定服务器的地址和端口号,客户端可以发起连接请求。

  4. 数据传输:一旦连接建立,服务器端和客户端可以通过 Socket 对象进行数据传输。服务器端可以接收来自客户端的请求,并发送响应;客户端可以发送请求,并接收服务器端的响应。

  5. 关闭 Socket:当通信完成或不再需要连接时,可以关闭 Socket,释放资源。

Socket 编程可用于构建各种网络应用,如Web服务器、聊天应用、文件传输等。它是实现网络通信的基础,并在各种编程语言和平台上得到支持和应用。

应用层

一、DNS 域名系统

在这里插入图片描述

1. 域名系统

DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。

域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:

  • 如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。
  • 区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。

2. DNS的工作原理

  1. (1)当用户输入域名时,浏览器先检查自己的缓存中是否包含这个域名映射的ip地址,有解析结束。
    (2)若没命中,则检查操作系统缓存(如Windows的hosts)中有没有解析过的结果,有解析结束。
    (3)若无命中,则请求本地域名服务器解析(LDNS)。
    (4)若LDNS没有命中就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个 主域名服务器地址。
    (5)此时LDNS再发送请求给上一步返回的gTLD( 通用顶级域), 接受请求的gTLD查找并返回这个域名对应的Name Server的地址
    (6)Name Server根据映射关系表找到目标ip,返回给LDNS
  2. LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

二、文件传送协议

FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:

  • 控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。
  • 数据连接:用来传送一个文件数据。

根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:

  • 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。
    在这里插入图片描述

  • 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
    在这里插入图片描述
    主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。

三、动态主机配置协议

DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。
DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。
DHCP 工作过程如下:

  1. DHCP发现:当设备加入一个网络时,它会发送DHCP发现广播消息到网络上的所有设备,寻找DHCP服务器。
  2. DHCP提供:DHCP服务器接收到DHCP发现消息后,会回复DHCP提供消息,其中包含了可用的IP地址和其他网络配置参数。
  3. DHCP请求:设备接收到DHCP提供消息后,选择一个IP地址,并发送DHCP请求消息给DHCP服务器,请求分配该IP地址。
  4. DHCP确认:DHCP服务器接收到DHCP请求消息后,会发送DHCP确认消息,确认分配给设备的IP地址和其他配置参数。
    在这里插入图片描述
    DHCP协议的优势包括:
  • 自动化配置:DHCP允许自动分配IP地址和其他网络配置参数,无需手动配置每个设备的网络信息,简化了网络管理。
  • 动态分配:DHCP可以动态分配IP地址,当设备离开网络时,分配的IP地址可以被回收并重新分配给其他设备。
  • 集中管理:DHCP服务器允许集中管理IP地址池和其他网络配置参数,可以通过集中的控制台进行配置和管理。

通过DHCP协议,网络管理员可以更高效地管理大型网络,减少IP地址冲突的可能性,并简化设备的网络配置过程。DHCP协议广泛应用于家庭网络、企业网络和互联网服务提供商等场景。

四、远程登录协议

远程登录协议(Remote Login Protocol)是一种用于远程访问和控制计算机系统的协议。它允许用户通过网络连接到远程计算机,并在远程计算机上执行命令和操作,就像直接在本地计算机上一样。

以下是几种常见的远程登录协议:

  1. Telnet:Telnet是一种最早的远程登录协议,它使用明文传输命令和数据,不提供加密和安全性保护。Telnet协议允许用户在本地计算机上输入命令,并将其发送到远程计算机上执行。然而,由于安全性问题,Telnet在现代网络中已不太常用。

  2. Secure Shell(SSH):SSH是一种更安全的远程登录协议,提供对远程计算机的安全访问。SSH协议通过加密数据传输,防止数据在传输过程中被窃听或篡改。它还提供了身份验证机制,包括密码和公钥认证,确保只有授权用户可以访问远程系统。

  3. Remote Desktop Protocol(RDP):RDP是由微软开发的远程登录协议,用于远程访问Windows操作系统。RDP允许用户通过网络连接到远程Windows计算机,并以图形化界面的形式控制远程计算机。用户可以在远程计算机上执行应用程序、访问文件和资源等。

  4. Virtual Network Computing(VNC):VNC是一种开放源代码的远程登录协议,它允许用户通过网络远程访问和控制计算机系统。VNC协议通过在远程计算机和本地计算机之间传输图像信息,将远程计算机的屏幕显示在本地计算机上,用户可以通过鼠标和键盘操作远程计算机。

这些远程登录协议在不同的场景和操作系统中得到广泛应用。选择适当的协议取决于安全性要求、操作系统兼容性以及所需的远程访问功能。

五、电子邮件协议

电子邮件协议(Electronic Mail Protocol)是用于发送、接收和处理电子邮件的网络协议。它定义了电子邮件客户端和邮件服务器之间的通信规则和数据格式,确保电子邮件在互联网上能够正确传递和解析。

以下是几种常见的电子邮件协议:

1. Simple Mail Transfer Protocol(SMTP)

SMTP是用于发送电子邮件的标准协议。它定义了邮件客户端与邮件服务器之间的通信方式,负责将邮件从发件人的客户端发送到收件人的邮件服务器。SMTP协议使用端口号25来传输邮件

在这里插入图片描述

  1. Post Office Protocol(POP):POP是一种用于接收电子邮件的协议。最常用的版本是POP3(POP Version 3),它允许邮件客户端从邮件服务器上下载电子邮件到本地设备。POP3协议使用端口号110来接收邮件。

  2. Internet Message Access Protocol(IMAP):IMAP是另一种用于接收电子邮件的协议。IMAP与POP3类似,但提供更多的功能和灵活性。IMAP允许用户在邮件服务器上管理邮件,可以选择下载邮件的部分内容,同时保留邮件在服务器上的副本。IMAP协议使用端口号143来接收邮件。

  3. Simple Mail Transfer Protocol Secure(SMTPS):SMTPS是SMTP协议的安全版本,使用加密的TLS(Transport Layer Security)或SSL(Secure Sockets Layer)协议来保护邮件的传输。SMTPS通过加密邮件传输,确保邮件内容在传输过程中的安全性。

这些电子邮件协议在互联网中得到广泛应用,不同的协议提供了不同的功能和安全性。大多数邮件客户端和邮件服务器都支持这些协议,使用户能够发送、接收和管理电子邮件。

六、常用端口

在这里插入图片描述

七、Web页面请求过程

  1. DHCP配置主机信息:在Web页面请求过程之前,如果主机使用DHCP协议获取网络配置信息(包括IP地址),它会发送DHCP请求来获取这些信息。这个过程可以包括DHCP发现、DHCP提供、DHCP请求和DHCP确认等步骤,我在之前关于动态主机配置协议(DHCP)的回答中有详细解释。

  2. 域名解析:当用户在浏览器中输入一个URL(统一资源定位符)时,首先进行域名解析。浏览器向本地域名解析器(如DNS服务器)发送请求,获取目标服务器的IP地址。

  3. 建立连接:浏览器使用HTTP(或HTTPS)协议向目标服务器发送一个TCP连接请求。通过三次握手,建立浏览器与服务器之间的网络连接。

  4. 发送请求:一旦连接建立,浏览器向服务器发送HTTP请求。请求包括请求行(如请求方法、URL路径等)、请求头(如浏览器类型、Cookie等)和请求体(对于某些请求,如POST请求,可能包含数据)。

  5. 服务器处理请求:服务器接收到请求后,根据请求的路径和其他信息,处理请求。这可能涉及读取文件、执行动态脚本、查询数据库等操作。

  6. 服务器发送响应:服务器根据请求处理结果生成HTTP响应。响应包括响应状态码(表示请求成功、失败或其他状态)、响应头(如内容类型、缓存策略等)和响应体(包含请求的实际内容,如HTML页面、图片等)。

  7. 接收响应:浏览器接收到服务器的响应,根据响应的内容类型进行相应的处理。如果是HTML页面,浏览器会解析HTML,加载并显示页面上的资源(如CSS、JavaScript等)。

  8. 关闭连接:一旦所有资源都被加载和显示,浏览器与服务器之间的连接可以被关闭,释放网络资源。

HTTP

一、基本概念

1. HTTPS和HTTP的区别

(1)HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
(2)https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

2.SSL/TLS

SSL代表安全套接字层。它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。 身份验证 , 加密Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性的应用层协议加密和解密需要两个不同的密钥,故被称为非对称加密;加密和解密都使用同一个密钥的

对称加密:优点在于加密、解密效率通常比较高 ,HTTPS 是基于非对称加密的, 公钥是公开的

2.请求和响应报文

客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端。
请求报文结构:

  • 第一行是包含了请求方法、URL、协议版本;
  • 接下来的多行都是请求首部 Header,每个首部都有一个首部名称,以及对应的值。
  • 一个空行用来分隔首部和内容主体 Body
  • 最后是请求的内容主体

响应报文结构:

  • 第一行包含协议版本、状态码以及描述,最常见的是 200 OK 表示请求成功了
  • 接下来多行也是首部内容
  • 一个空行分隔首部和内容主体
  • 最后是响应的内容主体

二、HTTP方法

在这里插入图片描述

  1. GET从服务器获取指定资源。 GET方法用于获取资源的信息,并在响应中返回请求的资源。它是HTTP的默认方法,常用于获取网页、图片、文本文件等。
  2. POST向服务器提交数据,创建新资源或执行某种操作。POST方法用于向服务器发送数据,并在服务器上进行处理。通常用于提交表单数据、发布文章、上传文件等。
  3. HEAD:和 GET 方法类似,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等
  4. PUT向服务器上传资源或替换已有资源。PUT方法用于将请求的资源发送到服务器,并替换服务器上已存在的资源。可用于上传文件、更新资源等。
  5. DELETE删除服务器上的指定资源。DELETE方法用于从服务器上删除指定的资源。通过该方法可以删除文件、记录等。
  6. PATCH对资源进行部分更新。PATCH方法用于对服务器上的资源进行部分更新,只更新指定字段或属性,而不是整个资源。
  7. OPTIONS获取服务器支持的通信选项。OPTIONS方法用于获取服务器支持的HTTP方法和其他通信选项。客户端可以向服务器发送OPTIONS请求,以了解服务器支持的方法和功能。
  8. TRACE回显服务器收到的请求,用于测试和诊断。TRACE方法用于在客户端和服务器之间进行回显测试,服务器将返回接收到的请求信息,用于追踪和调试。

1.GET 和 POST 的区别

  1. get是获取数据,post是修改数据
  2. get把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(request body 相对安全)
  3. get提交的数据最大是2k( 限制实际上取决于浏览器), post理论上没有限制。
  4. GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  5. GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
  6. 本质区别:GET是幂等的,而POST不是幂等的

三、HTTP 状态码

在这里插入图片描述

四、HTTP首部

有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。

1.通用首部字段

在这里插入图片描述

2. 请求首部字段

在这里插入图片描述

3.响应首部字段

在这里插入图片描述

4.实体首部字段

在这里插入图片描述

五、具体应用

1.Cookie

Cookie(HTTP Cookie)是一种在客户端(浏览器)和服务器之间传递的小型文本文件。它用于在Web应用中存储和传递有关用户的信息。
当用户访问一个网站时,服务器可以通过HTTP响应头中的Set-Cookie字段将一个或多个Cookie发送给用户的浏览器。浏览器会将这些Cookie保存在本地,以备将来的请求使用。
每个Cookie都包含了一个名称(name)和一个对应的值(value),以及一些其他的属性,例如过期时间、路径、域名等。服务器可以根据需要设置这些属性。
当用户再次访问同一个网站时,浏览器会在HTTP请求头中包含该网站的Cookie信息,将其发送给服务器。服务器可以根据这些Cookie信息来识别用户,以及存储和获取与用户相关的数据。

Cookie在Web应用中有多种用途,例如:

  1. 身份验证和会话管理:通过在Cookie中存储用户的身份信息或会话标识,服务器可以识别用户并维护用户的登录状态。

  2. 记住用户偏好:通过存储用户的偏好设置或选择,网站可以在用户下次访问时自动应用这些偏好。

  3. 跟踪和分析用户行为:通过将唯一标识符存储在Cookie中,网站可以跟踪用户在网站上的活动,并进行分析和统计。

  4. 广告定向:广告商可以使用Cookie来跟踪用户的兴趣和行为,从而提供更加个性化和有针对性的广告。

需要注意的是,Cookie是存储在用户的浏览器中的,因此它们是与用户相关的。Cookie也有一些安全和隐私方面的考虑,例如敏感信息的存储和保护,以及用户对Cookie的控制和选择。
在现代的Web开发中,还出现了一些相关的技术和标准,如同源策略(Same Origin Policy)、跨站点脚本攻击(XSS)防护、HTTP-only Cookie、安全Cookie等,用于增强Cookie的安全性和隐私性。

2. Session

除了可以将用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全。

Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。

使用 Session 维护用户登录状态的过程如下:

  • 用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中;
  • 服务器验证该用户名和密码,如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 Session ID;
  • 服务器返回的响应报文的 Set-Cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 Cookie 值存入浏览器中;
  • 客户端之后对同一个服务器进行请求时会包含该 Cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之前的业务操作。

应该注意 Session ID 的安全性问题,不能让它被恶意攻击者轻易获取,那么就不能产生一个容易被猜到的 Session ID 值。此外,还需要经常重新生成 Session ID。在对安全性要求极高的场景下,例如转账等操作,除了使用 Session 管理用户状态之外,还需要对用户进行重新验证,比如重新输入密码,或者使用短信验证码等方式。

参考

  1. https://interviewguide.cn/
  2. https://chat.openai.com/
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机网络八股计算机网络是现代信息技术的核心基础之一,它涉及了计算机通信和数据传输技术等多个方面。下面将从网络体系结构、网络协议、网络安全和网络性能等方面对计算机网络进行阐述。 首先,计算机网络的体系结构包括了物理层、数据链路层、网络层、传输层和应用层。物理层负责传输比特流,数据链路层提供可靠的点对点数据传输,网络层负责数据包的路由与转发,传输层提供端到端的可靠或不可靠的数据传输服务,而应用层则为用户提供网络应用服务。 其次,网络协议是计算机网络中的重要组成部分。常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议等。TCP/IP协议是互联网的核心协议,它包括了IP地址分配、路由选择和数据传输等功能。HTTP协议用于在Web浏览器与Web服务器之间传输超文本数据,FTP协议用于文件传输。 此外,网络安全是计算机网络中不可忽视的问题。常见的网络安全措施包括防火墙、入侵检测系统和加密技术等。防火墙可以过滤网络流量,保护内部网络免受外部攻击;入侵检测系统可以检测和阻止恶意行为;加密技术可以保护数据的机密性和完整性。 最后,网络性能是衡量计算机网络好坏的重要指标之一。网络性能包括带宽、时延、吞吐量和丢包率等。带宽是指网络传输数据的能力,时延是数据从发送到接收所需的时间,吞吐量是单位时间内传输的数据量,丢包率是指在传输过程中丢失的数据包比例。 综上所述,计算机网络是一门涉及广泛的学科,它的体系结构、协议、安全和性能等方面都需要深入研究和理解。通过不断提高网络技术和加强网络安全措施,我们可以更好地应对计算机网络发展带来的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值