什么是正向代理和反向代理?

正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。 这种代理其实在生活中是比较常见的,比如科学上网技术,其用到的就是正向代理技术。 有时候,用户想要访问某国外网站,该网站无法在国内直接访问,但是我们可以访问到一个代理服务器,这个代理服务器可以访问到这个国外网站。这样呢,用户对该国外网站的访问就需要通过代理服务器来转发请求,并且该代理服务器也会将请求的响应再返回给用户。这个上网的过程就是用到了正向代理。 所以,正向代理,其实是”代理服务器”代理了”客户端”,去和”目标服务器”进行交互。 通过正向代理服务器访问目标服务器,目标服务器是不知道真正的客户端是谁的,甚至不知道访问自己的是一个代理。 反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 对于常用的场景,就是我们在Web开发中用到的负载均衡服务器,客户端发送请求到负载均衡服务器上,负载均衡服务器再把请求转发给一台真正的服务器来执行,再把执行结果返回给客户端。 所以,反向代理,其实是”代理服务器”代理了”目标服务器”,去和”客户端”进行交互。 通过反向代理服务器访问目标服务器时,客户端是不知道真正的目标服务器是谁的,甚至不知道自己访问的是一个代理。 正向代理和反向代理的区别 虽然正向代理服务器和反向代理服务器所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端,但是二者之间还是有一定的差异的。 1、正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源。反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等。 2、正向代理,一般是客户端架设的,比如在自己的机器上安装一个代理软件。而反向代理一般是服务器架设的,比如在自己的机器集群中部署一个反向代理服务器。 3、正向代理中,服务器不知道真正的客户端到底是谁,以为访问自己的就是真实的客户端。而在反向代理中,客户端不知道真正的服务器是谁,以为自己访问的就是真实的服务器。 4、正向代理和反向代理的作用和目的不同。正向代理主要是用来解决访问限制问题。而反向代理则是提供负载均衡、安全防护等作用。二者均能提高访问速度。

March 22, 2026 · 1 min · santu

介绍一下OSI七层模型?

典型回答 OSI(Open System Interconnection,开放式系统互联)七层模型是计算机网络中一种通信协议的分类方式,分为以下七个层次: 物理层(Physical Layer):主要规定传输介质的传输方式,包括电信号、电压、光脉冲等。该层的主要协议是物理媒介相关协议,如RS232、V.35、以太网等。 数据链路层(Data Link Layer):在物理层上建立数据链路,对数据进行分帧、差错校验等处理,确保数据可靠地传输。该层的主要协议有点对点协议PPP(Point-to-Point Protocol)、高级数据链路控制协议HDLC(High-Level Data Link Control)、以太网协议等。 网络层(Network Layer):主要解决数据在网络中的传输问题,包括寻址、路由选择等。该层的主要协议有IP协议、网关协议(ARP)、路由协议(RIP、OSPF、BGP等)等。 传输层(Transport Layer):提供端到端的可靠传输服务,包括数据传输控制、流量控制等。该层的主要协议有TCP协议、UDP协议、SCTP协议等。 会话层(Session Layer):提供会话管理功能,负责建立、维护和结束会话。该层主要实现了不同计算机之间的会话控制,为高层协议提供一个传输数据的会话环境,该层的主要协议有NetBIOS等。 表示层(Presentation Layer):负责数据格式的转换,确保应用层数据的格式一致。该层主要实现了数据格式的转换和数据加密解密等功能,如JPEG、MPEG等。 应用层(Application Layer):提供应用程序之间的交互,包括文件传输、电子邮件、远程登录等。该层的主要协议有HTTP、FTP、SMTP、DNS、TELNET、SNMP等。 扩展知识 TCP/IP 五层模型和四层模型 TCP/IP五层模型是互联网标准体系结构,它将网络通信协议分为五个层次,分别是: 物理层(Physical Layer):定义物理设备标准,如网线、光纤、网卡等。 数据链路层(Data Link Layer):在物理层的基础上,定义了数据的格式、传输速率等,如以太网协议、Wi-Fi协议等。 网络层(Network Layer):处理数据包的传输,确定网络地址,以及路由选择等,如IP协议、ICMP协议等。 传输层(Transport Layer):建立端到端的连接,保证数据的完整性和可靠性,如TCP协议、UDP协议等。 应用层(Application Layer):处理特定的应用程序,如HTTP协议、FTP协议等。 还有四层模型,就是在五层的基础上,将数据链路层和物理层合并成了一个层次,叫做网络接口层

March 22, 2026 · 1 min · santu

介绍下TCP是如何实现拥塞控制的?

典型回答 拥塞(sè)控制是网络传输中的一种机制,旨在防止网络资源过载和性能下降。它通过控制发送方的数据传输速率,来避免网络中的节点(如路由器、交换机等)过载,确保网络高效、可靠地传输数据。 网络拥塞发生在网络中有过多的数据包在同一时间涌入,超过了网络节点(例如路由器)的处理能力。拥塞会导致数据包丢失、传输延迟增加,甚至网络完全瘫痪。拥塞控制的目的是在不造成严重丢包和拥塞的情况下,调整发送方的发送速率,使数据流量适应当前网络状况。 TCP通过四种主要机制来实现网络拥塞控制,分别是慢启动、拥塞避免、快重传和快恢复。 慢启动和拥塞避免 慢启动:在TCP刚连接好,开始发送TCP报文段时。或网络发生拥塞后,TCP会从比较小的发送速率开始。慢启动机制逐步增加拥塞窗口(Congestion Window,简称cwnd),即发送方每次可以发送的最大数据量,以避免瞬时向网络注入过多数据。 初始时,cwnd通常设为1个MSS(最大报文段大小)。 每收到一个ACK,cwnd增加1个MSS。 通过指数级增长,慢启动会迅速增加发送速率,直到达到阈值(ssthresh)或发生丢包。 拥塞避免:当cwnd达到慢启动阈值(ssthresh)后,TCP进入拥塞避免阶段。此时,数据发送速率的增长变为线性,以更小的步伐增加,避免引发拥塞。 每个往返时间(RTT)中,cwnd只增加1个MSS,而不是每个ACK都增加。 快重传和快恢复 快重传和快恢复算法是对慢开始和拥塞避免算法的改进。TCP不依赖超时来检测数据包是否丢失,而是通过冗余ACK(即多个重复的ACK)来判断数据包是否丢失。当发送方收到三个连续的相同ACK时,它会立即重传该丢失的数据包,而不必等待超时。这就是快重传 重复ACK? 为啥可以用重复ACK来识别出数据包丢失呢? 举个例子你就明白了。 假设发送方发送了包1, 2, 3, 4, 5。 包2丢失了,而包3, 4, 5成功到达接收方。 接收方只能确认收到包1,因此它会对每一个后续数据包(3, 4, 5)都发送对包1的ACK(即重复ACK)。 (下图是我从网上找到的一张图,描述了上述过程) 所以,当发送方收到三个相同的ACK时,它就可以合理地推断出包**2****已经丢失,而不需要等待超时。**通过这种方式,TCP能更快速地检测和恢复丢包,减少数据重传的延迟。 在快重传机制下,TCP检测到丢包时,不进入慢启动阶段,而是直接进入快恢复机制。 快恢复的过程是,将ssthresh设置为cwnd的一半,同时将cwnd设为ssthresh加上三个MSS(对应三次重复ACK)。 之后,TCP继续以线性增长的方式调整发送窗口,直到恢复正常的传输速率。

March 22, 2026 · 1 min · santu

如何做网络抓包?

典型回答 抓包是指通过一些常用工具截获网络通信中的数据包,主要目的是排查通信过程中产生的问题,如: 通过charles、chrome浏览器抓取http的数据包,分析请求和响应。 通过tcpdump、wireshark抓取tcp、udp的数据包,分析协议、分析网络请求超时问题。 扩展知识 charles和chrome浏览器抓包都比较简单。这里只介绍tcpdump和wireshark的使用。 tcpdump是命令行形式的。wireshark有一个不错的图形界面可以用来分析tcpdump抓包生成的文件,也可以直接进行抓包。 一般情况下,我们的Linux服务器不会安装图形界面,所以抓包需要使用tcpdump命令生成文件,然后传到开发机上通过wireshark打开进行分析。 大多数Linux发行版都会安装tcpdump,如果没装过可以使用如下命令进行安装: 1 2 3 yum install tcpdump -y #rhel、centos上安装 apt-get install tcpdump -y # ubuntu、debian上安装 pacman -S tcpdump -y # arch、manjaro上安装 在使用tcpdump之前,先简单了解其工作原理: Linux内核收包流程 简单解释下发包流程: 网络数据包到达网卡,网卡把RingBuffer中的数据包通过DMA映射到内核的RingBuffer上,然后发出硬中断 硬中断处理函数把RingBuffer数据包挂载到当前CPU核关联的poll_list双向链表中,随后发起软中断 kosoftirqd内核线程处理软中断,执行网络子系统启动时注册的处理函数net_rx_action nex_rx_action函数调用网卡注册的poll函数把poll_list中的数据包摘下来,同时利用网卡GRO特性将小包合并成大包。这里就是图中的驱动部分 驱动处理完成后要把数据包送入协议栈,在这之前还要做一些处理,图中标记的网络设备层就是干这事的,tcpdump就是在这里拦截数据包(之所以叫网络设备层,因为内核函数是以netif_receive开头的)。 协议栈会对数据包拆包,即根据tcp、udp、ip等协议规则进行处理。同时这里会执行NF_HOOK函数,就是iptables过滤链。 协议栈处理完成后,数据包放入接收队列,并唤醒用户进程 这里的一个重点:tcpdump在收包场景中位于iptables之前,所以能抓到被iptables INPUT链拦截的数据包。 Linue内核发包流程 简单解释下收包流程: 发包是收包的逆序过程(当然内核的代码肯定是不同的,这里只是说流程是逆序的) 收发包流程差异点在于网络设备层和协议栈之间多了个邻居子系统,其作用是发起ARP寻找目标MAC地址 发包是一个主动行为,所以不需要软中断,直接调用网卡驱动,驱动向网卡发包即可 这里的一个重点:tcpdump在发包场景中位于iptables之后,所以不能抓到iptables OUTPUT链拦截的数据包。 数据包在内核里转换为struct sk_buff结构体,所以tcpdump处理的就是这个结构体。 有了以上基础知识,再来看看tcpdump怎么使用。tcpdump有很强大的过滤规则,如:过滤给定目标ip和端口的数据包、过滤特定协议的包等。这里给出常用的使用方法: 1 2 3 4 5 tcpdump -i eth0 -nn -w 1.cap //-i eth0是指抓eth0网卡的包;-nn表示不解析域名和端口 这样方便查看结果;-w 1.cap是将抓到的包写到当前目录1.cap这个文件中 tcpdump -i eth0 -nn -w 1.cap tcp and host 10.182.1.1 and port 80 or port 443 //-w 1.cap后面跟着的tcp代表只抓tcp包;and和or组合多个条件;host 10.182.1.1代表只抓取这个ip的数据包(包括来自或发给这个ip的包);port 80和port 443代表只抓取这俩个端口的包(包括来自或发给这俩个端口的包) tcpdump -i eth0 -nn -w 1.cap tcp and dst 10.182.1.1 and dst port 80 or dst port 443 // dst 10.182.1.1代表只抓取这个ip的包,dst port代表只抓取目标端口为443的包 tcpdump过滤规则可以写的很复杂,不过如果不是产生很多的包,建议使用简单规则抓下来后传回开发机,通过wireshark进行分析。 ...

March 22, 2026 · 1 min · santu

对称加密和非对称加密有什么区别?

典型回答 对称加密,指的是需要对加密和解密使用相同密钥的加密算法。 最简单的对称加密算法就是通过ASCII码的变化进行密码保存,比如把abcde转换成bcdef,其加密算法就是把ASCII码增加1 。 这种加密算法,有一个特点,就是可以根据加密后得到的密文,再根据密钥还原出明文。 非对称加密,指的是加密和解密使用不同密钥的加密算法,也称为公私钥加密。 扩展知识 明文密码 明文密码就是直接可以看懂的,比如123456,admin等等,而不是经过加密显示出****的内容,这种叫做暗码。比如abc代表123,如果告诉你abc而不告诉你解码规则,你就不能翻译出真正的密码123。 很多网站都有注册登录功能,对于用户在注册的时候,填写的用户名和密码,如果不经过任何处理直接保存到数据库中,这种情况下,保存的就是用户的明文密码。 这样直接把用户的明文密码保存下来,对于程序开发来说是很方便的。用户在登录的时候直接到数据库中进行账号密码匹配就可以了。但是,同时也埋下了很大的隐患,一旦数据库信息泄露,那么黑客就可以拿到所有用户的用户名和密码。 举个例子,比如用户的明文密码是helloworld,加密后的密文是xxeerrqq。 用户注册: 1 helloworld -> 加密 -> xxeerrqq -> 保存xxeerrqq到数据库中 用户登录 1 helloworld -> 加密 -> xxeerrqq -> 使用xxeerrqq到数据库中匹配密码 密码加密技术经过很多年的发展,已经有了很多成熟的方案,这里就简单介绍几个。 对称加密 对称加密,指的是需要对加密和解密使用相同密钥的加密算法。 最简单的对称加密算法就是通过ASCII码的变化进行密码保存,比如把abcde转换成bcdef,其加密算法就是把ASCII码增加1 。 这种加密算法,有一个特点,就是可以根据加密后得到的密文,再根据密钥还原出明文。 但是,这种算法已经很少有网站在用了,虽然现在有很多方法可以把密钥单独保存,但是,既然黑客可以破解网站拿到用户的密文,就有可能也能获取到密钥。 在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。 单向Hash算法 单向散列算法,又称hash函数,就是把任意长的输入消息串变化成固定长的输出串的一种函数。一般用于产生消息摘要,密钥加密等。 单向Hash算法是一种无法通过计算还原出原始密码,而且实现比较简单的算法。 很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式。 常见散列函数(Hash函数)有: MD5(Message Digest Algorithm 5)、 SHA(Secure Hash Algorithm)、 MAC(Message Authentication Code)、 CRC(Cyclic Redundancy Check) 严格意义上来说,单项哈希算法并不算加密算法,因为像MD5这种算法,他只能加密,没办法解密。 彩虹表 彩虹表(rainbow table)是一个用于加密散列函数逆运算的预先计算好的表,常用于破解加密过的密码散列。 查找表常常用于包含有限字符固定长度纯文本密码的加密。这是以空间换时间的典型实践,在每一次尝试都计算的暴力破解中使用更少的计算能力和更多的储存空间,但却比简单的每个输入一条散列的翻查表使用更少的储存空间和更多的计算性能。 通常情况下,当字段经过散列处理(如MD5),会生成一段散列值,而散列后的值一般是无法通过特定算法得到原始字段的。但是某些情况,比如一个大型的彩虹表,通过在表中搜索该MD5值,很有可能在极短的时间内找到该散列值对应的真实字段内容。 加盐Hash算法 盐(Salt),在密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。 加盐后的散列值,可以极大的降低由于用户数据被盗而带来的密码泄漏风险,即使通过彩虹表寻找到了散列后的数值所对应的原始内容,但是由于经过了加盐,插入的字符串扰乱了真正的密码,使得获得真实密码的概率大大降低。 对于加了“固定盐”的Hash算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解。 ...

March 22, 2026 · 1 min · santu

简单介绍一下DNS?

典型回答 DNS,是Domain Name System的缩写,翻译成域名系统。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS最主要的作用就是将域名翻译成ip地址。 IP地址是IP Address的缩写,指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址)。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 互联网上的每一台计算机,都会分配到一个IP地址。IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信。 IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式。如:208.80.152.2 域名,这个是很多人都熟悉的概念,我们大多数情况下,在浏览器上访问某个网站的时候,都是通过域名访问的。 域名是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。 域名可以说是一个IP地址的代称,目的是为了便于记忆后者。 例如,wikipedia.org是一个域名,和IP地址208.80.152.2相对应。人们可以直接访问wikipedia.org来代替IP地址,然后域名系统(DNS)就会将它转化成便于机器识别的IP地址。 这样,人们只需要记忆wikipedia.org这一串带有特殊含义的字符,而不需要记忆没有含义的数字。 DNS解析 在现实生活中,我们可能经常需要通过电话找人,每一台接入网络的电话都有一个自己独一无二的号码。 有的时候,我们想要打某个公司的客服电话,如想要给工商银行的客服打电话,想查询账户余额。但是我们不知道具体号码,我们可以拨打114,告诉他们自己想要拨打工商银行的电话。然后114的客服会帮你查询到工商银行的电话,并帮你自动转接到工商银行的客服电话。 这个过程就和域名、IP地址以及DNS之间的关系比较像了。 每一台接入网络的电话 -> 每一台接入网络的计算机 工商银行-> 域名 电话号码 -> ip地址 114咨询台 -> DNS 有了DNS,我们不需要记住每一个网站的多个IP地址,我们只需要知道这个网站的域名就可以了。就像我们不关心工商银行的客服电话,我们只需要知道我们要找工商银行就可以了。 而且,对于一个网站来说,一个域名会对应其无数个IP地址。会通过负载均衡等方式进行调配。就像工商银行的客服中心也有很多分机的道理是一样的。 当我们在浏览器中键入一个域名时,浏览器会向本地DNS解析器发送一个查询请求(在这之前会先查一下浏览器缓存以及本地的host绑定),询问该域名对应的IP地址。如果本地DNS解析器不知道该域名的IP地址,它将向根DNS服务器发送请求。 根DNS服务器是DNS层次结构的最顶层,它不直接提供域名和IP地址的映射,而是指向顶级域名服务器。 然后,本地DNS解析器将向顶级域名服务器发送请求,顶级域名服务器是负责特定顶级域(如.com、.org、.net等)的服务器。顶级域名服务器会告诉本地DNS解析器该域名对应的权威域名服务器。 接着,本地DNS解析器将向权威域名服务器发送请求,该服务器是管理该域名的DNS记录的服务器。权威域名服务器会返回该域名对应的IP地址给本地DNS解析器。 最后,本地DNS解析器将把IP地址返回给Web浏览器,我么就可成功访问了 扩展知识 DNS污染 网域服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。 其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。 DNS污染指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。为了减免网络上的交通,一般的域名都会把外间的域名服务器数据暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。 简单点说,DNS污染是指把自己伪装成DNS服务器,在检查到用户访问某些网站后,使域名解析到错误的IP地址。 DNS劫持 DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。 简单点说,DNS劫持指的是通过非法手段,获取DNS服务器的权限,然后把DNS配置进行修改,使域名解析到错误的IP地址。 DNS污染和DNS劫持的区别 DNS劫持是劫持了DNS服务器,进而修改其解析结果。 DNS污染是国内的某些服务器对DNS查询进行入侵检测,发现与黑名单上匹配的请求,该服务器就伪装成DNS服务器,给查询者返回虚假结果。它利用了UDP协议是无连接不可靠性。 一个是劫持了DNS服务器,一个是伪装成DNS服务器。造成的结果都是返回错误的IP地址。

March 22, 2026 · 1 min · santu

ARP 与 RARP 的区别是什么?

典型回答 ARP(Address Resolution Protocol)和RARP(Reverse Address Resolution Protocol)都是网络通信协议,用于将IP地址和MAC地址进行转换。它们之间的区别如下: 功能不同 ARP协议用于将IP地址转换为MAC地址,也就是在通信时需要知道目标机器的MAC地址时,ARP协议可以用来查询目标机器的MAC地址。 RARP协议则是将MAC地址转换为IP地址,也就是在启动时,需要知道自己的IP地址时,可以向网络中发送RARP请求,获取自己的IP地址。 工作方式不同 ARP协议是一种广播协议,当一台主机需要知道另一台主机的MAC地址时,会在本地局域网上广播一个ARP请求包,所有主机都能收到这个请求包,但只有目标主机会响应这个请求,将自己的MAC地址发送回来。 而RARP协议则是向预定义的RARP服务器发出请求,请求服务器返回自己的IP地址。 用途不同 由于现代的操作系统和网络设备都可以自动分配IP地址,RARP协议已经很少使用了。而ARP协议则在现代网络通信中仍然起着重要的作用。

March 22, 2026 · 1 min · santu

路由器与交换机的区别是什么?

在OSI七层模型中,交换机主要工作在数据链路层(第二层),路由器工作在网络层(第三层)。 交换机转发所依据的对象是物理地址,也就是MAC地址,而路由器转发所依据的对象时网络地址,也就是IP地址。 交换机主要用于组建局域网,而路由主要功能是将由交换机组好的局域网相互连接起来,或者接入互联网。

March 22, 2026 · 1 min · santu

TCP是如何保证可靠传输的?

典型回答 都说TCP是提供可靠传输的,那么这个可靠怎么理解呢? 我觉得描述一个网络协议可靠,至少要满足以下几点: 1、数据完整性,我传给你的是123,你收到的也得是123,不能是13 2、数据顺序,我是按照123给你的,你不能按照213收到。 3、不能重复,我传给你的是123,你不能给我接收成1223 4、不被篡改,我传给你的是123,你不能接收成12`3 所以,要保证以上几点,TCP主要做了以下几个事情: 应用数据被分割成 TCP 认为最适合发送的数据块。TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。 三次握手&四次挥手:TCP通过三次握手建立连接和四次挥手关闭连接,确保通信的可靠性和数据的可靠传输。 ✅什么是TCP三次握手、四次挥手? 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制) 拥塞控制: TCP使用拥塞控制算法来确保网络中不会因为过多的数据而导致拥塞。当网络拥塞时,发送端会减少发送速率,以避免进一步加重网络拥塞。常用的拥塞控制算法包括慢启动、拥塞避免和快速重传等。 ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

March 22, 2026 · 1 min · santu

浏览器输入www.taobao.com回车之后发生了什么

典型回答 URL解析,对URL自动编码,然后检查长度,之后根据url查看浏览器是否缓存了该页面 DNS查询,依次通过浏览器缓存,OS hosts缓存,路由器缓存,ISP缓存和根域名服务器去查询对应的ip 浏览器将请求封装为HTTP报文,在client和server建立连接之前,会进行TCP三次握手 之后将报文从外到里封装为 以太网首部+ip首部+tcp首部+http首部经过网关和路由器发送给server 对于淘宝来说,请求会先到nginx服务器上,然后nginx采用默认的轮询算法进行负载均衡,携带原来browser的ip把报文发送给Servlet容器 Servlet容器接收到请求之后会解析请求行,请求体,请求头,然后交给MVC处理 DispatcherServlet接收到请求后,通过请求路径返回相应的拦截器和Controller; 在Controller中会进行业务逻辑的执行,可能会调用下层的Service以及持久层进行数据的CRUD。 对Controller进行处理并返回ModelAndView;然后在通过ViewResolve对ModelAndView进行处理,返回View视图;最后一步是进行渲染View,产生response 浏览器接收response,HTTP响应报文的头部包含了状态码(Status-Code),并进行缓存和解码 浏览器渲染页面

March 22, 2026 · 1 min · santu

留言给博主