青岛建设局官方网站,青岛百度推广seo价格,网络设计与制作专业,常用网站建设技术有哪些文章目录 1. TCP/IP网络模型有哪几层并做简要介绍#xff1f;2. 键入网址到网页显示#xff0c;期间发生了什么#xff1f;3. 介绍一下域名解析的工作流程#xff1f;4. MAC发送方和接收方如何确认#xff1f;5. 路由器和交换机的区别#xff1f;6. Linux系统是如何收发网… 文章目录 1. TCP/IP网络模型有哪几层并做简要介绍2. 键入网址到网页显示期间发生了什么3. 介绍一下域名解析的工作流程4. MAC发送方和接收方如何确认5. 路由器和交换机的区别6. Linux系统是如何收发网络包的7. HTTP是什么8. HTTP常见的状态码有哪些9. HTTP 常见字段有哪些10. GET和POST有什么区别11. HTTP 缓存有哪些实现方式12. 什么是强制缓存13. 什么是协商缓存14. 使用ETag字段实现的协商缓存的过程是怎样的15. HTTP/1.1的优点有哪些16. HTTP/1.1的缺点有哪些17. HTTP/1.1的性能如何18. HTTP与HTTPS有哪些区别 1. TCP/IP网络模型有哪几层并做简要介绍
TCP/IP网络模型总共分为四层从上到下分别为应用层、传输层、网络层以及网络接口层。 应用层只需要专注于为用户提供应用功能比如HTTP、FTP、DNS、SMTP等 传输层为应用层提供网络支持。在传输层有两个传输协议分别是TCP和UDP。传输层的报文中会携带端口号因此接收方可以识别出该报文是发给哪个应用。 网络层网络层主要负责网络包的分片、路由以及转发功能将数据从一个设备传输到另一个设备。网络层最常使用的是IP协议如果IP报文大小超过MTU就会对其分片。 网络接口层在IP头部的前面加上MAC头部并封装成数据帧发送到网络中主要为网络层提供链路级别传输的服务负责在以太网、WIFI这样的底层网络上发送原始数据包工作在网卡这个层次使用MAC地址来标识网络上的设备。 2. 键入网址到网页显示期间发生了什么
首先浏览器对URL进行解析生成发送给Web服务器的HTTP请求信息。接着需要委托操作系统将请求消息发送给Web服务器。在发送之前还需要查询服务器域名对应的IP地址查询IP地址需要访问DNS服务器。DNS服务器分为根DNS服务器、顶级域DNS服务器、权威DNS服务器。接着HTTP请求报文交给TCP传输层进行传输在TCP传输数据之前先要进行三次握手建立连接三次握手的目的是保证双方都有发送和接收的能力。 TCP头部有源端口和目标端口告知发给哪个应用。序列号解决包乱序的问题。确认号用于确认对方收到的数据解决丢包的问题。由于TCP是面向连接的双方要维护连接的状态有一些状态位比如SYN是发起一个连接ACK是回复RST是重新连接FIN是结束连接等。头部中还有窗口大小用于流量控制表示自己的处理能力。还有校验和、首部长度、紧急指针等。TCP 模块在执行连接、收发、断开等各阶段操作时都需要委托网络层的 IP 模块将数据封装成网络包发送给通信对象。在IP头部里面有源IP地址和目标IP地址以及协议号、TTL、片偏移、首部校验和、首部长度以及总长度等。假设客户端有多个网卡时就会有多个IP地址这时就需要根据路由表规则来判断源IP地址。生成了IP头部之后接下来网络包还需要在IP头部的前面加上MAC头部。在MAC包头里需要发送方MAC地址和接收方目标MAC地址以及协议类型IP协议/ARP协议用于两点的传输。网卡驱动获取到网络包之后会将其复制到网卡内的缓存区中接着会在其开头加上报头和起始帧分界符在末尾加上用于检测错误的帧校验序列最后网卡会将包转为电信号通过网线发送出去。数据通过交换机和路由器的转发最终到达服务器服务器首先会校验数据包的MAC头部、IP头部从IP头中协议项知道上层为TCP协议然后查看TCP头部的序列号是不是自己想要的如果是就放入缓存中然后返回一个ACK如果不是就丢弃。通过TCP头部的端口号把数据发给监听该端口的HTTP进程。服务器的HTTP进程把响应数据封装在HTTP响应报文里然后作为发送端把数据发给客户端。客户端成功收到响应数据后向服务器发起TCP四次挥手至此双方的连接就断开了。 3. 介绍一下域名解析的工作流程
域名解析的工作流程如下
客户端首先会发出一个DNS请求向本地DNS服务器询问www.server.com的IP是啥。本地域名服务器收到客户端请求后如果缓存里的表格能找到www.server.com则直接返回IP地址。如果没有则本地DNS服务器就会去问它的根域名服务器。根域名服务器收到本地DNS的请求后会把对应的顶级域服务器的地址发送给本地DNS服务器。本地DNS收到顶级域服务器地址后接着向顶级域服务器询问www.server.com的IP。顶级域名服务器会把权威域名服务器的地址响应给本地域名服务器。本地DNS服务器访问权威域名服务器询问服务器域名对应的IP地址。权威DNS服务器查询后将对应的IP地址返回给本地DNS。本地DNS收到服务器的IP地址后在本地缓存然后再把IP地址返回给客户端客户端和目标简历连接。 4. MAC发送方和接收方如何确认
发送方的MAC地址是在网卡生产时写入到ROM里的只要将这个值读取出来写入到MAC头部就可以了。 在确认接收方的MAC地址时首先需要在路由表中查询到接收方的IP地址。然后通过ARP协议找到路由器的MAC地址。 ARP协议会在以太网中以广播的形式发送IP地址询问接收方对应的MAC地址接收方收到后会和自己的IP地址进行比对接着把自己的MAC地址返回给发送方由此也得到了接收方的MAC地址。操作系统会把本次查询结果放在ARP缓存中缓存时间就几分钟。通过arp -a命令来查看ARP缓存的内容。 5. 路由器和交换机的区别
因为路由器是基于 IP 设计的俗称三层网络设备路由器的各个端口都具有 MAC 地址和 IP 地址而交换机是基于以太网设计的俗称二层网络设备交换机的端口不具有 MAC 地址。 6. Linux系统是如何收发网络包的
Linux接收网络包的流程 当网卡接收到一个网络包后会通过DMA技术将网络包写入到指定的内存地址也就是写入到Ring Buffer环形缓冲区接着网卡向CPU发起硬件中断当CPU收到硬件中断请求后根据中断表调用已经注册的硬件中断处理函数。硬件中断处理函数首先暂时屏蔽中断表示已经知道内存中有数据了告诉网卡下次再收到数据包直接写内存就可以了这样可以提高效率避免CPU不停的被中断。接着发起软中断然后恢复刚才屏蔽的中断。当ksoftirqd内核线程收到软中断后就会来轮询处理数据从Ring Buffer中获取一个数据帧用sk_buff表示从而可以作为一个网络包交给网络协议进行逐层处理。 Linux 发送网络包的流程 首先应用程序会调用 Socket 发送数据包的接口由于这个是系统调用所以会从用户态陷入到内核态中的 Socket 层内核会申请一个内核态的 sk_buff 内存将用户待发送的数据拷贝到 sk_buff 内存并将其加入到发送缓冲区。接下来网络协议栈从 Socket 发送缓冲区中取出 sk_buff并按照 TCP/IP 协议栈从上到下逐层处理。如果使用的是 TCP 传输协议发送数据那么先拷贝一个新的 sk_buff 副本 接着对 sk_buff 填充 TCP 头。然后交给网络层在网络层里会做这些工作选取路由确认下一跳的 IP、填充 IP 头、netfilter 过滤、对超过 MTU 大小的数据包进行分片。处理完这些工作后会交给网络接口层处理。网络接口层会通过 ARP 协议获得下一跳的 MAC 地址然后对 sk_buff 填充帧头和帧尾接着将 sk_buff 放到网卡的发送队列中。这一些工作准备好后会触发「软中断」告诉网卡驱动程序这里有新的网络包需要发送驱动程序会从发送队列中读取 sk_buff将这个 sk_buff 挂到 RingBuffer 中接着将 sk_buff 数据映射到网卡可访问的内存 DMA 区域最后触发真实的发送。当数据发送完成以后其实工作并没有结束因为内存还没有清理。当发送完成的时候网卡设备会触发一个硬中断来释放内存主要是释放 sk_buff 内存和清理 RingBuffer 内存。最后当收到这个 TCP 报文的 ACK 应答时传输层就会释放原始的 sk_buff 。 7. HTTP是什么
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。 8. HTTP常见的状态码有哪些
1xx 类状态码属于提示信息是协议处理中的一种中间状态。2xx 类状态码表示服务器成功处理了客户端的请求。 200 OK是最常见的成功状态码表示一切正常。204 No Content也是常见的成功状态码其中响应头没有body数据。206 Partial Content表示响应返回的body数据并不是资源的全部而是其中的一部分也是服务器处理成功的状态。 3xx 类状态码表示客户端请求的资源发生了变动需要客户端用新的 URL 重新发送请求获取资源也就是重定向。 301 Moved Permanently表示永久重定向需改用新的 URL 再次访问。302 Found表示临时重定向说明请求的资源还在但暂时需要用另一个 URL 来访问。 301 和 302 都会在响应头里使用字段 Location指明后续要跳转的 URL浏览器会自动重定向新的 URL。304 Not Modified表示资源未修改缓存重定向也就是告诉客户端可以继续使用缓存资源用于缓存控制。 4xx 类状态码表示客户端发送的报文有误服务器无法处理也就是错误码的含义。 400 Bad Request表示客户端请求的报文有错误但只是个笼统的错误。403 Forbidden表示服务器禁止访问资源并不是客户端的请求出错。404 Not Found表示请求的资源在服务器上不存在或未找到所以无法提供给客户端。 5xx 类状态码表示客户端请求报文正确但是服务器处理时内部发生了错误属于服务器端的错误码。 500 Internal Server Error是个笼统通用的错误码服务器发生了错误。501 Not Implemented表示客户端请求的功能还不支持。502 Bad Gateway通常是服务器作为网关或代理时返回的错误码表示服务器自身工作正常访问后端服务器发生了错误。503 Service Unavailable表示服务器当前很忙暂时无法响应客户端。 9. HTTP 常见字段有哪些
Host字段客户端发送请求时用来指定服务器的域名。Connection字段常用于客户端要求服务器使用HTTP 长连接机制需要指定Connection首部字段的值为Keep-Alive。Content-Length字段服务器在返回数据时会有Content-Length字段表明本次回应的数据长度。Content-Type字段用于服务器回应时告诉客户端本次传输的数据格式。Accept字段客户端请求的时候可以使用Accept字段声明自己可以接受的数据格式。Content-Encoding字段Content-Encoding字段说明数据的压缩方法表示服务器返回的数据使用的压缩格式。Accept-Encoding字段客户端在请求时用Accept-Encoding字段说明自己可以接受的压缩方法。 10. GET和POST有什么区别
GET的语义是从服务器获取指定的资源POST 的语义是根据报文body对指定的资源做出处理具体的处理方式视资源类型而不同。GET请求的参数位置一般是写在URL中URL规定只能支持ASCII码所以GET请求的参数只允许 ASCII 字符 POST 请求携带数据的位置一般是写在报文 body 中body 中的数据可以是任意格式的数据。GET请求时浏览器会对 URL 的长度有限制而POST请求时浏览器不会对body大小做限制。GET方法是安全、幂等、可被缓存的POST 不安全不幂等大部分实现不可缓存。 11. HTTP 缓存有哪些实现方式
HTTP 缓存有两种实现方式分别是强制缓存和协商缓存。 12. 什么是强制缓存
强缓存指的是只要浏览器判断缓存没有过期则直接使用浏览器的本地缓存决定是否使用缓存的主动权在于浏览器这边。 强缓存是利用两个 HTTP 响应头部Response Header字段Cache-Control和Expires实现的它们都用来表示资源在客户端缓存的有效期。Cache-Control 的优先级高于 Expires所以建议使用Cache-Control来实现强缓存。 强缓存的具体实现流程
当浏览器第一次请求访问服务器资源时服务器会在返回这个资源的同时在响应头部加上 Cache-ControlCache-Control 中设置了过期时间大小浏览器再次请求访问服务器中的该资源时会先通过请求资源的时间与 Cache-Control 中设置的过期时间大小来计算出该资源是否过期如果没有则使用该缓存否则重新请求服务器服务器再次收到请求后会再次更新响应头部的Cache-Control。 13. 什么是协商缓存
协商缓存就是与服务端协商之后通过协商结果来判断是否使用本地缓存。 协商缓存可以基于两种头部来实现。第一种是基于请求头部中的 If-Modified-Since 字段与响应头部中的 Last-Modified 字段实现第二种是基于请求头部中的 If-None-Match 字段与响应头部中的 ETag 字段。 协商缓存这两个字段都需要配合强制缓存中Cache-Control字段来使用只有在未能命中强制缓存的时候才能发起带有协商缓存字段的请求。 14. 使用ETag字段实现的协商缓存的过程是怎样的
当使用 ETag 字段实现的协商缓存的过程
当浏览器第一次请求访问服务器资源时服务器会在返回这个资源的同时在响应头部加上 ETag 唯一标识这个唯一标识的值是根据当前请求的资源生成的当浏览器再次请求访问服务器中的该资源时首先会先检查强制缓存是否过期 如果没有过期则直接使用本地缓存如果缓存过期了会在响应头部加上 If-None-Match 字段该字段的值就是 ETag 唯一标识 服务器再次收到请求后会根据请求中的 If-None-Match 值与当前请求的资源生成的唯一标识进行比较 如果值相等则返回 304 Not Modified不会返回资源如果不相等则返回 200 状态码和返回资源并在响应头部加上新的 ETag 唯一标识 如果浏览器收到 304 的请求响应状态码则会从本地缓存中加载资源否则更新资源。 15. HTTP/1.1的优点有哪些
HTTP1.1最突出的优点是简单、灵活和易于扩展、应用广泛和跨平台。
简单HTTP基本的报文格式是header body头部信息也是key-value简单文本格式易于理解。灵活和易于扩展协议中的字段允许自定义和扩充同时由于HTTP工作在应用层则它的下层可以随意变化比如HTTPS就是在HTTP与TCP层之间增加了TLS安全传输层HTTP1.1和HTTP2.0传输协议使用TCP协议而HTTP3.0传输协议改用了UDP协议。应用广泛和跨平台台式机和手机的很多APP都采用了HTTP1.1。 16. HTTP/1.1的缺点有哪些
HTTP协议有优缺点一体的双刃剑分别为无状态、明文传输同时还有一大缺点不安全。
无状态 好处服务器不需要额外的资源来记录状态信息能减轻服务器的负担。坏处由于服务器没有记录HTTP的状态信息在完成有关联性的操作是会非常麻烦。 对于无状态的问题比较简单的解决方法是使用Cookie技术在客户端第一次请求后服务器返回的响应报文中携带一个装有客户信息的Cookie后续客户端再次请求服务器时在请求报文中带上Cookie服务器检查Cookie即可。 明文传输 好处明文意味着在传输过程中的信息方便阅读可以直接通过抓包查看报文信息便于我们的调试工作。坏处HTTP的所有信息明文传输很容易被窃取。 不安全 通信使用明文因此内容可能会被窃听不验证通信方的身份因此有可能遭遇伪装无法证明报文的完整性 因此报文有可能被篡改。 17. HTTP/1.1的性能如何
HTTP协议是基于TCP/IP并且使用了请求-应答的通信模式所以性能的关键也在这两点上。
长连接 HTTP/1.1 提出了长连接的通信方式好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销减轻了服务器端的负载。 持久连接的特点是只要任意一端没有明确提出断开连接则保持 TCP 连接状态。管道网络传输 管道网络传输可在同一个 TCP 连接里面客户端可以发起多个请求只要第一个请求发出去了不必等其回来就可以发第二个请求出去可以减少整体的响应时间。但是服务器必须按照接收请求的顺序发送对这些管道化请求的响应。所以HTTP/1.1 管道解决了请求的队头阻塞但是没有解决响应的队头阻塞。队头阻塞 当顺序发送的请求序列中的一个请求因为某种原因被阻塞时在后面排队的所有请求也一同被阻塞了会导致客户端一直无法得到响应数据这也就是队头阻塞。 18. HTTP与HTTPS有哪些区别
HTTP是超文本传输协议信息是明文传输存在安全风险的问题HTTPS则解决HTTP不安全的缺陷在TCP和HTTP网络层之间加入了SSL/TLS安全协议使得报文能够加密传输。HTTP连接建立相对简单TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后还需进行SSL/TLS的四次握手过程才可进入加密报文传输。两者的默认端口不一样HTTP默认端口号是80HTTPS默认端口号是443。HTTPS协议需要向CA证书权威机构申请数字证书来保证服务器的身份是可信的。