当在浏览器地址栏输入URL并按下回车键时,一场浩瀚的网络奇遇就此拉开序幕。本文将结合自己的所学,参考《网络是怎样连接的》一书,简单介绍从输入URL到最终呈现网页的过程中涉及到的众多软硬件的原理和工作方法。目录0,URL地址1,应用层(浏览器,HTTP协议)(1)web浏览器浏览器解析URL寻找DNS缓存和主机的前期工作:(2)调用操作系统Socket库进行DNS查询Socket库DNSDNS查询(3)发送HTTP请求的过程浏览器生成HTTP请求协议栈三握四摆二、传输层(TCP、UDP)(四)程序到程序连接端口在数据包中添加TCP头顺便说一句:UDP协议3、网络层(IP)(5)建立主机到主机的连接IP地址和子网掩码在数据包中添加IP头在数据包中添加MAC头4、链路层(网卡、以太网)(六)传输网卡onEthernet:数字信号转电/光信号Internet、Internet、以太网和万维网子网之间的传输或传输到路由五、物理层(路由器、调制解调器、网关等)(7)光信号/电信号通过各种设备传输(8)服务器响应请求参考资料零、URLURLURL通常是一个URL,即“统一资源定位符”,这是万维网的创造者TimBerners的发明-李一。其目的是规范地识别Internet上资源的地址,就像现实生活中的地址一样。统一资源定位器URL的标准格式如下:协议类型:[//服务器地址[:端口号]][/资源级别UNIX文件路径]文??件名[?query][#fragmentID]例如:https://github.com/JuniorTour...协议类型://、端口号、文件名在某些情况下可以省略。例如:由于网页内容大部分是HTML文件,默认使用HTTP协议传输,浏览器通常允许省略协议类型://。又因为80端口也是很多服务器主机默认提供HTTP服务的端口,所以端口号一般可以省略。又因为很多服务器会将一些文件(例如:index.html)设置为某个路径的默认文件,所以文件名有时可以省略。为了便于人的记忆,服务器地址通常是语义域名,而不是IP地址或MAC地址,更准确地标识计算机在网络世界中的位置。了解了URL之后,就是主角登场的时候了。一、应用层(浏览器、HTTP协议)(一)Web浏览器前期工作1、浏览器解析URL千里之行,始于足下。首先,浏览器会解析出输入的URL中包含的协议、服务器地址、路径、端口号等信息,并根据这些信息决定谁请求什么资源。但是,由于URL中的服务器地址通常是一串具有一定语义的英文字符:域名,这个地址不够精确,可能代表多个服务器,并且不能指明服务器的具体位置。浏览器或计算机无法依靠这个地址在浩瀚的互联网世界中准确找到目标服务器。因此,需要进一步通过DNS查询获取IP地址来定位目标服务器的位置。2、查找DNS缓存和主机:在进行DNS查询获取IP地址之前,浏览器会先检查所查询域名的IP地址是否存在于内部DNS缓存中。chrome浏览器可以通过访问chrome://net-internals/#dns查看浏览器的DNS缓存,如果通过浏览器的DNS缓存没有找到IP,则会进一步使用操作系统查询本地的hosts文件,看是否有一个可用的DNS缓存记录Windows系统通常位于C:WindowsSystem32driversetc目录中。如果没有找到目标域名的地址,就需要向DNS服务器请求查询。(2)调用操作系统的Socket库进行DNS查询浏览器无法直接找到DNS服务器进行查询,需要借助操作系统中的Socket库。1、Socket库Socket库是操作系统提供的一组调用操作系统网络功能的程序组件。它在计算机网络中起着非常重要的作用,后面我们会介绍它的相关内容。2.DNSDNS是DomainNameSystem的缩写。本系统的主要功能是根据域名获取IP地址。DNS服务器是域名系统的一个具体组成部分,有很多很多,分布在现实世界的不同位置和网络世界的不同层次,用来响应域名的查询请求。不同地区和不同层次。DNS服务器的地址需要记录在本机中。在Windows系统中,可以在控制面板\网络和Internet\网络连接中右键进入任意连接的属性,双击Internet协议版本4(TCP/IPV4)进行查看。在该面板中,可以看到用于设置以下四项的输入框:本机IP地址、子网掩码、网关IP地址、DNSIP地址。计算机中的这些项目通常设置为自动获取,使用动态IP分配。这样,当计算机连接到网络时,它会使用DHCP协议向负责管理局域网所有IP地址的DHCP服务器动态申请一个IP地址。3、DNS查询的过程当调用Socket库发送DNS查询请求时,会向本机记录的DNS服务器IP地址发送请求,收到DNS查询请求的DNS服务器会先查询对应的自己缓存的路由表中的目标域名服务器的IP地址。如果在缓存中没有找到,DNS服务器会根据域名的层级逐层查询。例如查询域名https://github.com/JuniorTour对应的IP时,DNS服务器会逐层到根域名(.root)服务器、顶级域名(.com)服务器,和二级域名(.github)服务器。查询请求,从上到下,直到找到域名对应的IP地址。顺带一提,子域名(.github)下还有一个三级域名,用户可以自行分配。域名github.com其实省略了三级域名www的写法。(3)发送HTTP请求知道URL对应的IP地址后,就可以向该地址发送HTTP请求,请求所需的网络资源。1.浏览器产生一个HTTP请求。浏览器使用属于应用层的HTTP协议来浏览网页。如果要获取网页,需要向HTTP服务器发送HTTP请求,在响应数据中获取网页数据。一般来说,HTTP请求如下所示:GET/JuniorTourHTTP/1.1Host:github.comUser-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding:gzip,deflateAccept-Language:zh-CN,zh;q=0.9,en;q=0.8Cookie:authorstyle=no主要由以下几部分组成:请求行请求头<空行>空格请求数据浏览器掌握了HTTP服务器的IP地址、文件名、cookie、用户代理(User-Agent)等发送请求所需的信息后,将根据这些信息生成相应的HTTP请求,传递给协议栈,由协议栈具体执行发送请求。2、协议栈协议栈是操作系统中的网络控制软件,主要由TCP模块、UDP模块和IP模块组成,分别负责发送和接收不同协议的数据。3、三握四挥在HTTP请求转入协议栈发送之前,协议栈或客户端主机首先需要连接到服务器。这个建立连接的过程就是著名的三次握手,它遵循TCP协议。大致过程如下:第一次握手:建立连接请求,客户端发送请求报文,将TCP头的SYN字段标记为1,表示建立连接。第二次握手:当连接建立时,服务端收到客户端的连接建立请求报文后会发送响应报文,同时也会将TCP头的SYN域和ACK域标记为1。第三次握手:建立连接。客户端收到服务器的确认连接响应后,会再次向服务器发送ACK字段为1的TCP报文。Established”状态,随时准备发送和接收消息。一个形象的比喻是这样的:客户端告诉服务器:我们要开始连接了~服务器听到后回复客户端说:我知道了!客户端和服务端在确认对方收到消息后都会知道:OK,连接建立~~发送和接收数据后,需要断开连接,也就是挥手四次。以Web为例,服务器向浏览器返回响应消息后,服务器发起断开连接。大体流程如下:第一波:服务端发送断开连接请求,服务端完成数据响应后,会通过服务端的协议栈向客户端发送一个FIN字段为1的TCP报文。第二次挥手:客户端确认断开请求。客户端协议栈收到服务器的断开连接请求报文后,会向服务器返回一个ACK字段为1的响应报文,表示收到断开连接请求。.这时,客户端的应用程序会读取这个响应的数据,当客户端的应用程序获取到数据后,会再次对服务器进行断开连接的操作。第三次挥手:客户端发送断开连接请求,客户端向服务器发送FIN字段为1的TCP报文。第四次挥手:服务器确认断开连接。服务端收到客户端的断开连接请求后,会返回ACK字段为1的响应报文,表示收到断开连接请求。我们用一个更形象的比喻来形容一次:服务端发送数据后,对客户端说:数据发送!客户了解后回复:好的,我知道了。client检查并存储数据后,对server说:确实都发送完了,我们断开连接吧!服务器听到了说:好的,我知道了,我们断开连接吧。从上面的过程也可以看出,TCP协议是一个非常重视可靠性的协议。连接的建立和断开都经过反复反复确认,有效保证了网络数据传输的可靠性。2、传输层(TCP、UDP)(4)程序向服务器发送HTTP请求,获取程序连接的响应,还有一个问题没有解决。也就是服务器主机收到HTTP请求后,如何判断请求发送给服务器主机上的哪个程序。一台服务器主机上可能运行着多个服务器或程序,那么如何判断请求发送到哪里呢?服务器呢?同样的,当response发回客户端个人电脑时,如何判断response发送给哪个应用,chrome还是微信?这需要另一个指标来识别计算机上运行的不同程序。这个指标就是端口。1、端口端口(port)其实就是每个程序使用网卡的编号。不同的程序占用不同的端口,每个数据包被指定发送到主机的特定端口,不同的程序可以根据端口号接收到自己需要的数据。两台主机建立连接后,建立端口到端口的通信,根据端口号确定数据发送到计算机中的哪个程序。这是传输层的主要功能。2.在数据包中添加TCP头为了将HTTP请求发送到服务器主机的指定程序,需要在协议栈中委托TCP模块封装HTTP请求数据包,并添加一个TCP带有端口信息的标头。这里的端口号也是来自一开始在浏览器中输入的URL。通常,URL中的端口号可以省略。此时,预先约定的HTTP默认端口号:80或HTTPS默认端口号:443,作为目的端口号。如果指定了端口号,例如:https://github.com:443/JuniorTour,就会根据指定的端口号附加到HTTP请求中,生成一个TCP数据包。3.顺便提一句:UDP协议大多数应用程序使用TCP协议来发送和接收数据,但有些程序也使用更简单高效的UDP协议。例如,UDP协议用于查询DNS服务器的IP地址。UDP协议与TCP协议的关键区别在于,UDP协议为了追求高效率,在发送和接收数据前后不进行确认,即上述的三处理和四处理。高效的。但相应的,发送和接收数据的可靠性都会有一定的折扣,在传输过程中丢失部分数据包的可能性会更大,即所谓的丢包。正是由于UDP协议具有效率较高和可靠性差的两个特点,在短数据收发和多媒体数据收发方面有着独特的应用。3.网络层(IP)(5)建立主机到主机的连接前面的工作完成后,两台主机之间就会建立连接。为了实现这一点,我们需要使用一个标志来明确识别两台主机,也就是之前多次提到的IP地址。1、IP地址和子网掩码IP地址规范主要有IPv4和IPv6两个版本,分别规定了不同长度的IP地址。以IPv4为例,IP地址由32位二进制数字组成,例如:11000000.10100010.00000001.00000001,一般用十进制表示,例如:192.168.1.1。IP地址的作用除了在网络世界中识别一台计算机的地址外,还有判断两台计算机是否属于同一个子网的作用。这一功能的实现需要子网掩码的辅助。子网掩码也是一个32位的二进制数,例如:11111111.11111111.11111111.00000000,用十进制表示:255.255.255.0,表示网络部分全为1,主机部分全为0。子网掩码的用法就是分别对两个IP地址进行AND运算。如果结果相同,则可以确定这两个IP属于同一个子网。这两项的设置和查看方法在上面的DNS部分已经介绍过了。2、在数据包中添加IP头为了在两台主机之间建立连接,需要在数据包中添加带有IP地址的IP头,进一步向外传输。3、在数据包中加入MAC头IP模块还会做一件很重要的事情,就是通过ARP(AddressResolutionProtocol,地址解析协议),以广播的形式向同一以太网内的所有设备询问:“谁的IP地址是XXX.XXX?请告诉我你的MAC地址”,然后同一子网中的其他设备(通常是路由器)将回复该IP地址对应的MAC地址。另外ARP也有缓存,查询结果也会缓存。IP模块获取到MAC地址后,会在数据包中添加一个带有MAC地址信息的MAC头,传送给网卡进行传输。4、链路层(网卡、以太网)(六)以太网上传输1、网卡:数字信号转电/光信号IP模块工作完成后,生成的网络包仍然不能直接发送给对方,因为此时一个网络包只是内存中的一串数字信号。要在网线上传输,这些数字需要转换成电信号或光信号。这项工作是由网卡及其驱动程序完成的。网卡是计算机上常见的硬件之一。它的主要功能是信号和数据的编码和解码,以及数据包的发送和接收。网卡内部有各种复杂的结构。作为一个硬件,网卡和运行它的软件——网卡驱动之间也存在各种交互,但这里为了简化流程,我们只了解最关键的小部分细节。世界上唯一的MAC地址保存在网卡的ROM(只读存储器)中,是在网卡生产时写入的。以太网上数据包的发送地址和接收地址都是MAC地址。网卡会将前面IP模块产生的数据包按照一定的规则转换成现实世界网线中可以传输的信号,通过网线发送出去。至此,客户端的工作已经完成,数据包进入以太网进行进一步传输。2.因特网、因特网、以太网和万维网在本章的开头,我想介绍四个容易混淆的概念:因特网、因特网、以太网和万维网。Internet、Internet:都是指互联网,Internet是意译,Internet是音译。两者在今天泛指世界各地的海量网络相互连接而成的庞大网络。早先大写开头的Internet是指IP协议建立的网络,小写开头的internet泛指其他各种网络,小写的意思也包括大写。今天,在各种网络中,IP协议建立的网络已经占据了主导地位,成为现代人类生活的一部分。小写开头的Internet一般意思是没有意义的,所以今天这两个词指的是同一个东西,就是全球范围内的海量网络互联形成的巨大网络。万维网:万维网,简称Web,是一种建立在互联网上的服务。它由英国科学家蒂姆·伯纳斯-李于1989年发明。该服务的核心由统一资源标识符(URI)、超文本传输??协议(HTTP)、超文本标记语言(HTML)组成,并借助于浏览器和其他为用户提供各种信息和资源的工具。以太网:以太网是一种局域网通信技术,涵盖的内容很多,它的技术标准就是著名的IEEE802.3标准,从某种意义上说IEEE802.3就是以太网,它规定了网络连接的规范和分组方式等等。我们需要了解的重点是以太网。以太网的具体数据传输方式是:广播,即向整个网络上的每一个设备发送一个信号,就像在房间里大喊大叫一样。如果一个人喊,同一个房间里的每个人都能听到。但是为了明确指出这句话是给谁的,还需要加上网卡中存储的MAC地址来标识网络中的每一个节点,就像喊的时候带上一个人的名字一样。3.子网间传输或路由传输在以太网中以广播的形式将数据传输到一个MAC地址的方法有很大的缺点。互联网是由许多子网组成的巨大网络。当两台设备不在同一个子网中,仍然使用广播的时候,不仅会造成效率上的巨大浪费,而且无法准确传输到目的地。针对这个缺点,以太网中传输的数据会根据IP地址和子网掩码来判断是否属于同一个子网。如果它和目标主机不在同一个子网,它会像某个路由器一样发送数据,它会代理转发到其他子网。相反,当它们属于同一个子网时,数据仍然是通过广播传输的。5.物理层(路由器、调制解调器、网关等)处理转发。这部分已经进入网络硬件领域。为了保持文章的篇幅,就不过多描述了。(8)千山万水,千里迢迢,服务器响应了请求,最初的请求终于到达了目标服务器主机。服务器主机拿到数据包后,会经过网卡、网卡驱动、服务器协议栈的层层解析,最后将请求交给服务器处理。服务端处理后会生成相应的HTTP响应,然后将数据包返回给客户端。这个过程几乎就是上述的逆向操作。客户端浏览器拿到服务器返回的HTTP响应后,解析出内容,渲染,呈现在我们眼前。回过头来看,这几章对应互联网的五层模型:1.应用层:浏览器、HTTP协议等2.传输层:TCP协议、UDP协议等3.网络层:IP协议等.4.链路层:网卡、以太网等5、物理层:路由器、调制解调器、网关等【TCP协议中的三次握手和四次挥手简析】(https://segmentfault.com/a/11...关于我详解line-height属性-HTML中一行文字是怎么排列的?什么是Contentarea,inlinebox,linebox?es6-mario:原生ES6写的网页游戏语法和HTML5新特性更多技术分享欢迎来到我的GitHub:https://github.com/JuniorTour...有什么想法,建议,欢迎在评论区留言或者来GitHub与我交流:https://github.com/JuniorTour/,我会尽快回复