潍坊网站建设制作网站建设套模版

当前位置: 首页 > news >正文

潍坊网站建设制作,网站建设套模版,东莞制作手机网站,海报设计平台本文主要取材于 《网络是怎样连接的》 第六章。 目录 6.1 服务器概览 6.2 服务器的接收操作 6.3 Web服务器程序解释请求消息并作出响应 6.4 浏览器接收响应消息并显示内容 简述#xff1a;本文主要内容是解释 网络包到达服务器之后#xff0c;如何给客户端响应的。 服务…本文主要取材于  《网络是怎样连接的》 第六章。 目录 6.1 服务器概览 6.2 服务器的接收操作 6.3 Web服务器程序解释请求消息并作出响应 6.4 浏览器接收响应消息并显示内容 简述本文主要内容是解释 网络包到达服务器之后如何给客户端响应的。 服务器与客户端的不同点 在于服务器是在启动之后创建套接字等待连接。当客户端发起连接时等待模块会接受连接然后启动与客户端的通信模块。服务器需要同时为多个客户端服务对于每个客户端都要创建一个通信模块。 数据包到达服务器之后需要经过FCS校验、MAC校验、IP校验然后交给TCP/UDP模块处理。 之后服务器会根据请求内容生成响应消息再返回给客户端。客户端根据响应的数据类型展示数据内容。 6.1 服务器概览 服务器在启动之后就要准备各项工作等待客户端的访问。在连接过程中客户端发起连接操作而服务器则是等待连接操作因此在Socket库的用法上还是有一些区别的即应用程序调用的Socket库的程序组件不同。 根据用途服务器可以分为多种类型其硬件和操作系统和客户端有所不同。但是与网络相关的部分如网卡、协议栈、Socket库等功能和客户端一样。即无论硬件和OS如何变化TCP和IP的功能都是一样的。 服务器需要同时和多个客户端通信但一个程序来处理多个客户端的请求是很难的因为服务器必须把握每一个客户端的操作状态。因此一般的做法是每有一个客户端连接进来就启动一个新的服务器程序确保服务器程序和客户端是一对一的状态。 我们将程序分成两个模块即等待连接模块图6.1(a)和负责与客户端通信的模块图6.1(b)。 当服务器程序启动并读取配置文件完成初始化操作后就会运行等待连接模块(a)。这个模块会创建套接字然后进入等待连接的暂停状态。 当客户端连发起连接时这个模块会恢复运行并接受连接然后启动客户端通信模块(b)并移交完成连接的套接字。接下来客户端通信模块(b)就会使用已连接的套接字与客户端进行通信。 服务器的Socket调用流程。 (1)创建套接字创建套接字阶段 (2-1)将套接字设置为等待连接状态等待连接阶段 (2-2)接受连接接受连接阶段 (3)收发数据收发阶段 (4)断开管道并删除套接字断开阶段 6.2 服务器的接收操作 数字还原 到达服务器的网络包其本质是电信号或者光信号接收操作的第一步是网卡接收到信号然后将其还原成数字信息。 FCS校验接下来需要根据包末尾的帧校验序列(FCS)来校验错误即根据校验公式[插图]计算刚刚接收到的数字信息然后与包末尾的FCS值进行比较。 MAC校验当FCS一致即确认数据没有错误时接下来需要检查MAC头部中的接收方MAC地址看看这个包是不是发给自己的如果不是则丢弃。还原后的数字信息被保存在网卡内部的缓冲区中。网卡驱动会根据MAC头部判断协议类型并将包交给相应的协议栈。 IP校验当网络包转交到协议栈时IP模块会首先开始工作检查IP头部。IP模块首先会检查IP头部的格式是否符合规范然后检查接收方IP地址看包是不是发给自己的。确认包是发给自己的之后接下来需要检查包有没有被分片。检查IP头部的内容就可以知道是否分片如果是分片的包则将包暂时存放在内存中等所有分片全部到达之后将分片组装起来还原成原始包如果没有分片则直接保留接收时的样子不需要进行重组。接下来需要检查IP头部的协议号字段并将包转交给相应的TCP模块或者UDP模块。 如果收到的是发起连接的包则TCP模块会(1)确认TCP头部的控制位SYN;(2)检查接收方端口号(3)为相应的等待连接套接字复制一个新的副本(4)记录发送方IP地址和端口号等信息。 在收发阶段收到数据包时TCP模块会(1)根据收到的包的发送方IP地址、发送方端口号、接收方IP地址、接收方端口号找到相对应的套接字(2)将数据块拼合起来并保存在接收缓冲区中(3)向客户端返回ACK。 6.3 Web服务器程序解释请求消息并作出响应 服务器程序会根据收到的请求消息中的内容进行相应的处理并生成响应消息再通过write返回给客户端。请求消息包括一个称为“方法”的命令以及表示数据源的URI文件路径名服务器程序会根据这些内容向客户端返回数据但对于不同的方法和URI服务器内部的工作过程会有所不同。 如请求方法为GET,URI为一个HTML文件名。这种情况只要从文件中读出HTML文档然后将其作为响应消息返回就可以。为了不暴露磁盘全部内容Web服务器公开的目录其实并不是磁盘上的实际目录而是如图6.9这样的虚拟目录而URI中写的就是在这个虚拟目录结构下的路径名。因此当读取文件时需要先查询虚拟目录与实际目录的对应关系并将URI转换成实际的文件名后才能读取文件并返回数据。 URI指定的文件内容不仅限于HTML文档也有可能是一个程序。在这个情况下服务器不会直接返回文件内容而是会运行这个程序然后将程序输出的数据返回给客户端。 Web服务器还可以检查事先设置的一些规则并根据规则允许或禁止访问。Web服务器的访问控制规则主要有以下3种。(1)客户端IP地址(2)客户端域名(3)用户名和密码 Web服务器完成对消息的处理之后调用Socket库的write将响应消息交给协议栈。这时需要告诉协议栈这个响应消息应该发给谁但我们并不需要直接告知客户端的IP地址等信息而是只需要给出表示通信使用的套接字的描述符就可以了。套接字中保存了所有的通信状态其中也包括通信对象的信息。 6.4 浏览器接收响应消息并显示内容 Web服务器发送的响应消息会被分成多个包发送给客户端然后客户端需要接收数据。首先网卡将信号还原成数字信息协议栈将拆分的网络包组装起来并取出响应消息然后将消息转交给浏览器。这个过程和服务器的接收操作相同。 要显示内容需要先判断数据类型如文字、图像、声音、视频等多种类型每种数据的显示方法都不同。数据类型 原则上可以根据响应消息开头的Content-Type头部字段的值来进行判断。判断类型之后只要根据数据类型调用用于显示内容的程序将数据显示出来就可以了。