PrePKI-数字签名与数字证书PKI-借助Nginx实现Https服务端单向认证、服务端客户端双向认证发展历史HTTP(超文本传输协议)的发展历史:HTTP的起源可以追溯到1990年代早期,由蒂姆·伯纳斯-李(TimBerners-Lee)在CERN(欧洲核子研究组织)开发出来,最初被用于在客户端和服务器之间传输HTML文档。HTTP/0.9是最早的版本,只支持简单的GET请求,并且没有头部信息。随着互联网的发展,HTTP逐渐演进为HTTP/1.0和HTTP/1.1,引入了更多的请求方法、状态码、头部字段等功能,提高了性能和可靠性。近年来,HTTP/2和HTTP/3相继发布,引入了新的特性如
Pre计网-DNS域名解析系统引言在我们日常使用互联网时,经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而,我们可能并没有意识到在背后默默运行着一项重要的技术,即域名系统(DNS)。本篇博客将深入探讨DNS的重要性、工作原理以及未来的发展趋势。1.DNS是什么DNS(DomainNameSystem,域名系统)是互联网中的一种分布式数据库系统,负责将易于记忆的域名转换为对应的IP地址。换句话说,它就像是互联网的地址簿,让我们能够通过简单的域名访问到全球范围内的网络资源。2.域名结构域名以层次结构组织,从右向左依次是顶级域名(TLD)、二级域名、三级域名,依次类推。比如,.co
Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?计网-TCP三次握手原理全曝光:深度解析与实战演示计网-TCP四次挥手原理全曝光:深度解析与实战演示为什么需要设计重传机制TCP实现可靠传输的方式之一,是通过序列号与确认应答。在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息在复杂的网络环境中,数据包丢失是不可避免的。所以TCP针对数据包丢失的情况,会用重传机制解决。这些重传机制的引入旨在提高TCP协议在不同网络条件下的稳定性和性能。超时重传是基本的机制,但可能导致不必要的等待。快速重传通过更早地检测到冗余确认,加速了丢失数据的恢复。SA
Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?计网-TCP三次握手原理全曝光:深度解析与实战演示导图过程分析客户端打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后客户端进入FIN_WAIT_1状态。服务端收到该报文后,就向客户端发送ACK应答报文,接着服务端进入CLOSE_WAIT状态。客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态。等待服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态。客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态服务端收到了A
Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?导图过程分析第一次握手:客户端将请求报文标志位SYN置为1,请求报文的SequenceNumber字段(简称seq)中填入一个随机值J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。第二次握手:服务器端收到数据包后由请求报文标志位SYN=1知道客户端请求建立连接,服务器端将应答报文标志位SYN和ACK都置为1,应答报文的AcknowledgmentNumber字段(简称ack)中填入ack=J+1,应答报文的seq中填入一个随机值K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RC
Pre高性能网络编程-关于单台服务器并发TCP连接数理论值的讨论问题一台主机上只能保持最多65535个TCP连接,正确吗?先说结论:这个说法不对,我们分服务器和客户端分开讨论,以下的讨论都基于服务器和客户端都只有1个IP地址。分析操作系统是通过源IP地址、目标IP地址、协议号(协议类型)、源端口号以及目标端口号这五个元素唯一性的识别一个网络上的通信。我们已经知道网络通信五元组是由过源IP地址、目标IP地址、协议号(协议类型)、源端口号以及目标端口号构成。现在考察的是TCP连接,自然五元组中的协议号已经定下来了,于是网络通信五元组就变化为TCP四元组。那就是说TCP连接四元组是由源IP地址、源端
概述Mac地址(MediaAccessControlAddress)和IP地址(InternetProtocolAddress)是计算机网络中两个不同的标识符,用于在网络中唯一标识设备。Mac地址(物理地址):Mac地址是网络设备(如计算机、路由器、交换机)在数据链路层(OSI模型中的第二层)中的唯一标识符。长度为48位,通常以十六进制表示,由厂商分配给每个网络设备。用于在局域网中定位设备,是数据帧在局域网中传输时使用的地址。IP地址(网络地址):IP地址是在网络层(OSI模型中的第三层)上标识设备的地址。IPv4地址是32位二进制数,通常以点分十进制表示(例如,192.168.1.1)。IP
模型大致来说,可以这么理解(只是帮助我们理解,实际上肯定会有点出入),对于我们的PC机来说,物理层可以看成网卡,数据链路层可以看成网卡驱动程序,网络层和传输层由操作负责处理,应用层则是常用的一些网络应用程序和我们自己所编写的网络应用程序。我们一些常见的网络应用基本上都是基于TCP和UDP的,这两个协议又会使用网络层的IP协议。但是我们完全可以绕过传输层的TCP和UDP,直接使用IP,比如Linux内核中的LVS就可以直接基于IP层进行负载平衡调度;甚至还可以直接访问链路层,比如tcpdump程序就是直接和链路层进行通信的LVS的工作机制初探LVS(LinuxVirtualServer)是一个开
知识点TCP头格式TCP头部包含多个字段,其中一些是必需的,而另一些是可选的。常见的字段包括源端口号、目标端口号、序列号、确认号、窗口大小、校验和等。每个字段都有特定的长度和作用,这些字段一起构成了TCP数据包的头部信息。TCP有限状态机(FSM)TCP连接在其生命周期内经历不同的状态,这些状态构成了TCP有限状态机。常见的状态包括CLOSED(连接未打开)LISTEN(等待连接请求)SYN_SENT(发起连接请求)SYN_RECEIVED(收到连接请求)ESTABLISHED(连接已建立)FIN_WAIT_1FIN_WAIT_2LAST-ACKTIME-WAITCLOSINGCLOSE-WA
概述每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层---------------第四层的数据叫SegmentIP在第三层——Network层---------------在第三层上的数据叫PacketARP在第二层——DataLink层,在第二层上的数据叫Frame我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理。网络中传输的数据包由两部分组
OSI七层模型OSI(开放系统互联模型,OpenSystemsInterconnectionModel)是一个用于理解和描述计算机网络体系结构的标准化框架,由国际标准化组织(ISO)于1984年制定。该模型将计算机网络通信划分为七个不同的层次,每个层次都执行特定的功能,并且每个层次都依赖于其下一层的服务。这种分层的方法使不同厂商和技术之间的互操作性更容易实现。以下是OSI模型的七个层次,从物理层到应用层:物理层(PhysicalLayer):物理层是网络通信的最底层,主要关注物理媒介和传输数据的硬件特性。它定义了数据传输的物理介质,如电缆、光纤、无线电波等。主要任务包括数据的编码、传输速率、电
Pre超文本传输协议(HyperTextTransferProtocol,HTTP)是目前使用最广泛的应用层协议。在网站、App、开放接口中都可以看到它。HTTP协议设计非常简单,但是涵盖的内容很多。1990年蒂姆·伯纳斯·李开发了第一个浏览器,书写了第一个Web服务器程序和第一张网页。网页用的语言后来被称作超文本标记语言(HTML),而在服务器和客户端之间传输网页的时候,伯纳斯·李没有直接使用传输层协议,而是在TCP的基础上构造了一个应用层协议,这个就是超文本传输协议HTTP。万维网(WorldWideWeb,WWW)是伯纳斯·李对这一系列发明,包括Web服务、HTTP协议、HTML语言等一
Pre我们使用的电商、直播、社交工具、视频网站中都含有大量的图片、视频、文档等,这些资源需要分发给用户。对于一些体量较大的应用来说,如果把大量资源集中到单一节点进行分发,恐怕很难有某个机房可以支撑得住这么大的流量。例如一个日活在100W的小型互联网产品,如果每次请求需要1M的数据,那就刚好是近1TB数据。对于这样的数据规模而言,完全由单一节点进行分发是不现实的。因此现在互联网应用在分发内容的时候,并不是从自己架设的服务器上直分发内容,而是走一个叫作内容分发网络(ContentDiliveryNetwork)的互联网底层建设。我们就以“CDN回源是如何工作的”为引,一起探索CDN的原理和场景。C
Pre在浏览器中输入一个URL,或者用curl请求一个网址……域名系统(DomainNameSystem)就开始工作了。作为互联网的一个重要成员,域名系统是将互联网资源和地址关联起来的一个分布式数据库。统一资源定位符(URL)域名系统本质是定位资源。互联网中有各种各样的资源,比如视频、图片、文件、网页……为了准确地定位资源,人们发明了统一资源定位符(URL,UniformResourceLocator),这样我们就可以通过字符串定位一个互联网的资源。下图是一个URL的示例:Scheme部分代表协议,不只有https,还有ftp、ssh等。不同协议代表着不同类型的应用在提供资源。Host部分代表
Pre随着微服务架构的盛行,远程调用成了开发微服务必不可少的能力,RPC框架作为微服务体系的底层支撑,也成了日常开发的必备工具。当下,RPC框架已经不仅是进行远程调用的基础工具,还需要提供路由、服务发现、负载均衡、容错等能力。那么今天,我们就以“怎样实现RPC框架”为引,从设计者角度看看如何设计一个RPC框架。基础能力设计RPC(RemoteProcedureCall)远程过程调用,顾名思义最基本的能力当然是远程调用一个过程。放到今天的面向对象的语言中,其实就是调用一个远程的方法。在远程我们必须先定义这个方法,然后才可以通过RPC框架调用该方法,远程调用不仅可以传参数、获取到返回值,还可以捕捉
Pre我们在处理网络问题时,经常是处理I/O问题——输入和输出。看上去很复杂,但说白了就是如何把网卡收到的数据给到指定的程序,然后程序如何将数据拷贝到网卡。在处理I/O的时候,要结合具体的场景来思考程序怎么写。从程序的API设计上,我们经常会看到3类设计:BIO、NIO和AIO。从本质上说,讨论BIO、NIO、AIO的区别,其实就是在讨论I/O的模型,我们可以从下面3个方面来思考。编程模型:合理设计API,让程序写得更舒服。数据的传输和转化成本:比如减少数据拷贝次数,合理压缩数据等。高效的数据结构:利用好缓冲区、红黑树等I/O的编程模型我们先从编程模型上讨论下BIO、NIO和AIO的区别。BI
Pre流和缓冲区都是用来描述数据的。计算机中,数据往往会被抽象成流,然后传输。比如读取一个文件,数据会被抽象成文件流;播放一个视频,视频被抽象成视频流。处理节点为了防止过载,又会使用缓冲区削峰(减少瞬间压力)。在传输层协议当中,应用往往先把数据放入缓冲区,然后再将缓冲区提供给发送数据的程序。发送数据的程序,从缓冲区读取出数据,然后进行发送。流流代表数据,具体来说是随着时间产生的数据,类比自然界的河流。你不知道一个流什么时候会完结,直到你将流中的数据都读完。读取文件的时候,文件被抽象成流。流的内部构造,决定了你每次能从文件中读取多少数据。从流中读取数据的操作,本质上是一种迭代器。流的内部构造决定
Pre我们平常做网络编程的时候都会碰到Socket对象,或者在配置代理的时候,碰到配置Socket地址。还经常会碰到I/O模型、异步编程、内存映射等概念。再往更深层次学习,还会碰到epoll/select等编程模型。有没有一种一团糟的感觉——其实学习好这些知识有一条主线,就是抓住操作系统对Socket文件的设计。Socket是什么?首先,Socket是一种编程的模型。下图中,从编程的角度来看,客户端将数据发送给在客户端侧的Socket对象,然后客户端侧的Socket对象将数据发送给服务端侧的Socket对象。Socket对象负责提供通信能力,并处理底层的TCP连接/UDP连接。对服务端而言,每
PreWireshark是世界上应用最广泛的网络协议分析器,它让我们在微观层面上看到整个网络正在发生的事情。Wireshark本身是一个开源项目,所以也得到了很多志愿者的支持。同时,Wireshark具有丰富的功能集,包括:深入检查数百个协议,并不断添加更多协议;实时捕获和离线分析;支持Windows、Linux、macOS、Solaris、FreeBSD、NetBSD,以及许多其他平台;提供GUI浏览,也可以通过TTY;支持VOIP;支持Gzip;支持IPSec。……Wireshark的主页:https://www.wireshark.org/download.html下载Wireshark
Pre广域网是由很多的局域网组成的,比如公司网络、家庭网络、校园网络等。之前我们一直在讨论广域网的设计,今天我们到微观层面,看看局域网是如何工作的。IPv4的地址不够,因此需要设计子网。当一个公司申请得到一个公网IP后,会在自己的公司内部设计一个局域网。这个局域网所有设备的IP地址,通常会以192.168开头。这个时候,假设小明,上班时间玩王者荣耀。当他用UDP协议向王者荣耀的服务器发送信息时,消息的源IP地址是一个内网IP地址,而王者荣耀的服务,是一个外网IP地址。先提一个问题,数据到王者荣耀服务器可以通过寻址和路由找到目的地,但是数据从王者荣耀服务器回来的时候,王者荣耀服务器如何知道192
Pre计网-IPv4协议:路由和寻址的区别是什么?IPv4用32位整数描述地址,最多只能支持43亿设备,显然是不够用的,这也被称作IP地址耗尽问题。为了解决这个问题,有一种可行的方法是拆分子网。拆分子网,会带来很多问题,比如说内外网数据交互,需要网络地址转换协议(NAT协议),增加传输成本。再比如说,多级网络会增加数据的路由和传输链路,降低网络的速度。理想的状态当然是所有设备在一个网络中,互相可以通过地址访问。为了解决这个问题,1998年互联网工程工作小组推出了全新款的IP协议——IPv6协议。但是目前IPv6的普及程度还不够高.既然不能做到完全普及,也就引出了关联的一道面试题目:什么是Tun
Pre如果说传输层协议,除了TCP/UDP,我们还可以有其他选择,比如Google开发的QUIC协议,帮助在传输层支持HTTP3.0传输。但是在网络层,IP协议几乎一统天下。IP协议目前主要有两个版本IPv4和IPv6。这一讲我们先介绍IPv4协议。IPv4使用范围很大,平时工作中很容易遇到,比如开发场景、网络优化场景、解决线上问题场景等。相信你经常会碰到一些和IP协议相关的名词,比如一道常见的面试题目:路由和寻址的区别是什么?因此,学习IPv4还是非常有意义的。接下来,就带着对上面的问题,开启今天的学习。什么是IP协议?IP协议(InternetProtocol)是一个处于垄断地位的网络层协
Question一台内存在8G左右的服务器,可以同时维护多少个连接?分析:连接是内存中的状态对象,从理论上分析,连接本身不太占用内存。不同语言连接对象大小不等,但是通常很小。下面提供一段Java程序publicclassServer{publicstaticvoidmain(String[]argv)throwsIOException{varserverSocket=newServerSocket();varaddr=newInetSocketAddress(3001);serverSocket.bind(addr);varlist=newLinkedList<>();while(
Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?中提到了TCP和UDP是今天应用最广泛的传输层协议,拥有最核心的垄断地位。TCP最核心的价值是提供了可靠性,而UDP最核心的价值是灵活,你几乎可以用它来做任何事情。例如:HTTP协议1.1和2.0都基于TCP,而到了HTTP3.0就开始用UDP了。UDP在数据传输、网络控制、音视频、Web技术中,都有很重要的地位.设计系统时候,UDP经常拿来和TCP比较.那我们来粗略的看下TCP协议和UDP协议的优势和劣势吧UDP协议UDP(UserDatagramProtocol),目标是在传输层提供直接发送报文(Datagram)的能力。D
PreInternet-TCP的封包格式:TCP为什么要粘包和拆包?中提到了TCP利用发送字节数和接收字节数,这个二元组的唯一性保证顺序。那接着来看下保证顺序的具体算法以及TCP是如何实现的吧。——TCP的滑动窗口算法。TCP作为一个传输层协议,最核心的能力是传输。传输需要保证可靠性,还需要控制流速,这两个核心能力均由滑动窗口提供。而滑动窗口中解决的问题,我们在今后的工作中可以长期使用的,比如设计一个分布式的RPC框架、实现一个消息队列或者分布式的文件系统等。请求/响应模型TCP中每个发送的请求都需要响应。如果一个请求没有收到响应,发送方就会认为这次发送出现了故障,会触发重发。大体的模型,和下
Pre今天我们将从稳定性角度深挖TCP协议的运作机制。如今,大半个互联网都建立在TCP协议之上,我们使用的HTTP协议、消息队列、存储、缓存,都需要用到TCP协议——这是因为TCP协议提供了可靠性。简单来说,可靠性就是让数据无损送达。但若是考虑到成本,就会变得非常复杂——因为还需要尽可能地提升吞吐量、降低延迟、减少丢包率。TCP协议具有很强的实用性,而可靠性又是TCP最核心的能力。具体来说,从一个终端有序地发出多个数据包,经过一个复杂的网络环境,到达目的地的时候会变得无序,而可靠性要求数据恢复到原始的顺序。这里先提出两个问题:TCP协议是如何恢复数据的顺序的?拆包和粘包的作用是什么?那么带着这
PreTCP和UDP是今天应用最广泛的传输层协议,拥有最核心的垄断地位。今天互联网的整个传输层,几乎都是基于这两个协议打造的。无论是应用开发、框架设计选型、做底层和优化,还是定位线上问题,只要碰到网络,就逃不开TCP协议相关的知识。TCP协议为什么握手是3次,挥手却是4次?下面请你带着这个问题,开启今天的学习。TCP协议TCP(TransportControlProtocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工,是一个连接导向的协议。这里面牵涉很多概念,比如主机到主机、连接、会话、双工/单工及可靠性等,接下来逐一解释。主机到主机(Host-To-Host)
Pre不知道你有没有遇到过,因为TCP队头阻塞,没有预备方案,导致分布式集群中部分服务发生延迟,导致系统雪崩DDoSDNS劫持跨机房通信问题…网络是一种工作技能,比如很多候选人在回答“TCP为什么要3次握手”这样简单的问题时,就像背经文一样,没有自己的理解;当面对“HTTPS协议的TTFB传输时间”这类需要将TCP的原理和HTTPS结合起来思考的问题,就更加束手无策。此外,工作当中也经常要用到计算机网络的知识,而且一旦用错就容易造成灾难性的后果,给公司直接带来经济损失。但实际情况是,很多程序员对网络相关的知识一知半解,不足以应对日常的工作需求。遇到网络故障(如DNS故障)时,由于没有系统性地学
§6.1网络应用模型一、应用层概述1.应用层的目的: 应用层对应用程序的通信提供服务。2.应用层协议的定义: ①应用进程交换的报文类型,请求还是响应? ②各种报文类型的语法,如报文中的各个字段及其详细描述。 ③字段的语义,即包含在字段中的信息的含义。 ④进程何时、如何发送报文,以及对报文进行响应的规则。3.应用层的功能: ①文件传输。访问和管理。 ②电子邮件。 ③虚拟终端。 ④查询服务和远程作业登录。4.应用层重要协议: FTP、SMTP和POP3、HTTP、DNS。二、网络应用模型1.客户/服务器(C/S)模型: 服务器:提供计算服务的设备。服务器的特点是:①永久提供服
§5.1传输层概述一、传输层1.概念: 首先只有主机曾有传输层和上面的应用层,其他的网络设备,例如中继器路由器什么的,他最多只能到数据链路层。 通过第一章的知识,我们可知,传输层为应用层提供通信服务。同时使用网络层提供的服务。2.功能: ①传输层提供进程和进程之间的逻辑通信。 ②复用和分用。(发复收分) ③对收到的报文进行差错检测。(首部校验和只是校验头部,并不对数据部分进行校验,数据监测交付给了高层。正是因为网络层检验了数据部分,所以网络层只需要检测头部。)二、传输层的两个协议1.分类: 面向连接的传输控制协议TCP和无连接的用户数据包协议UDP。2.TCP协议: 传送数据之前