《网络是怎么连接的》笔记

1.Web浏览器

网址(URL)

1.1生成HTTP请求消息

URL开头的文字表示浏览器应该使用的访问方法 例如:“http:”–访问Web服务器时应该使用HTTP协议;“ftp:”–访问FTP服务器时则应该使用FTP协议。
浏览器首先需要解析URL,生成发送给Web服务器的请求消息。
image.png
HTTP协议 :定义了客户端和服务器之间交互的消息内容与步骤。客户端向服务器发送请求(为什么(URI)和"进行怎样的操作")
** URI:
存放网页数据的文件名或者是一个
CGI**程序的文件名
HTTP消息的格式
image.png
请求示例:

<form method="GET" action="/cgi/sample.cgi">
  <input type="text" name="Field1" size="20">
  <input type="submit" value="SEND" name="SendButton">
  <input type="reset" value="RESET" name="ResetButton">
</form>

PS:在使用GET方法的情况下,仅凭方法和URI,Web服务器就能够判断需要进行怎样的操作,因此消息体中不需要填写任何数据;使用POST方法时,需要将表单中填写的信息写在消息体中。
响应消息:格式与基本思路和请求消息是相同的,差别在于在响应消息中,第一行的内容为状态码和响应短语,用来表示请求执行结果成功还是出错。
**HTTP状态码:**第一位数字表示状态类型,二三位表示具体的情况
**![image.png](https://img-blog.csdnimg.cn/img_convert/9c1223dbe7cab5337ac18ef7c71bfbd4.png#align=left&display=inline&height=206&margin=[object Object]&name=image.png&originHeight=274&originWidth=766&size=27427&status=done&style=none&width=575)**

PS:1条请求消息中只能写1个URI,只能获取1个文件,如果需要获取多个文件,需要对每个文件单独发送1条请求。

1.2 向DNS服务器查询Web服务器的IP地址

浏览器虽然能解析网址并生成HTTP消息,但是将消息发送到网络中需要操作系统来完成。(TCP/IP网络是由小的子网通过路由器连接起来组成的。)。
发送者发出的消息经过子网中的集线器,转发到距离发送者最近的路由器上,路由器根据消息目的地判断下个路由器位置,不断转发。
IP地址:32比特的数字,8比特为一组,分别用十进制表示然后用圆点隔开。
image.png
子网掩码:表示网络号与主机号之间的边界,子网掩码为1的部分表示网络号,子网掩码为0的部分表示主机号
**IP地址的主机号:**全0(表示整个子网)全1(表示向子网上所有设备发送包,即"广播")
PS:Socket 库是用于调用网络功能的程序组件集合(根据域名查询IP地址时,浏览器会使用Socket库中的解析器)

1.3 全世界DNS服务器的大接力

**DNS服务器:**基本工作就是接受来自客户端的查询消息,然后根据消息内容返回响应(会从域名与IP地址的对照表中查找相应的记录,并返回IP地址)
客户端的查询信息:

  1. 域名:服务器、邮件服务器的名称
  2. class:class用来识别网络的信息 如今永远是代表互联网的IN
  3. 记录类型:表示域名对于何种类型的记录(A 表示对应的IP地址 MX 表示域名对应的是邮件服务器)
    image.png
    DNS服务器的基本工作
    www.lab.glasscom.com DNS服务器中所有信息都是按照域名以分层次的结构来保存的;域名以点来分割,越靠右的位置表示层级越高;一个域的信息是作为一个整体存放在DNS服务器中的,不能将一个域拆开来存放在多台DNS服务器中。

1.4 委托协议栈发送消息

  知道IP地址以后,就可以委托操作系统内部的**协议栈**向目标IP地址发送消息(向操作系统内部的协议栈发出委托时,需要按照**指定的顺序**来调用Socket库中的程序组件)。

收发数据操作过程:

  1. 创建套接字(创建套接字阶段):Socket库中的socket程序组件
  2. 将管道连接到服务器端的套接字上(连接阶段):Socket库中connect的程序组件–需指定描述符、服务器IP和端口号3个参数
  3. 收发数据(通信阶段)Socket库中的write程序组件
  4. 断开管道并删除套接字(断开阶段)close程序组件

PS:1.管道在连接时是由客户端发起的,但在断开时可以由客户端或服务器任意一方发起;2.应用程序是通过"描述符"这一类似号码牌的东西来识别套接字的;3.IP地址和端口号:客户端和服务器之间用来识别对方套接字的机制。
PS:实际负责收发消息的是协议栈、网卡驱动和网卡

2.探索协议栈和网卡

2.1创建套接字

TCP/IP软件采用分层结构,上层会向下层逐层委派工作,从上到下依次为应用程序(包含socket库和解析器)、操作系统(TCP/UDP,IP)、驱动程序(网卡驱动程序)、网卡
PS:浏览器、邮件等一般应用程序收发数据时用TCP;DNS查询等收发较短的控制数据时用UDP
在互联网上传送数据时,数据会被切分为一个一个的网络包,将网络包发送给通信对象的操作就是由IP来负责的。(IP中还包括ICMP、ARP协议;前者用于告知网络包传送过程中产生的错误以及各种控制消息,后者用于根据IP地址查询相应的以太网MAC网址)
套接字中记录了用于控制通信操作的各种控制信息,协议栈根据套接字中记录的控制信息来工作。
浏览器调用socket的过程如下:

  1. 创建套接字,为套接字分配内存空间,写入初始状态。
  2. 将表示套接字的描述符告知应用程序。
  3. 应用程序收到描述符后进行通信,每次首发数据委托时需要提供该描述符。

2.2链接服务器

创建套接字之后,应用程序就会调用connect,随后协议栈会将本地的套接字与服务器的套接字进行连接。
控制信息:1)客服端和服务器联络时交换的控制信息,存在于整个通信过程中,会被添加在客户端与服务器传递的网络包的开头,因此被称为头部;2)控制协议栈操作的信息,保存在套接字中。
PS:连接操作的第一步是在TCP模块处创建表示控制信息的头部;通过TCP头部中的发送方和接收方端口号可以找到连接的套接字。

2.3收发数据

数据收发操作是从应用程序调用write将要发送的数据交给协议栈开始的,协议栈收到数据后执行发送操作(协议栈并不是一收到数据就马上发送出去,而是将数据存放在内部的发送缓冲区

  1. 每个网络包能容纳的数据长度(MTU:一个网络包的最大长度,以太网中一般为1500字节)
  2. 时间,根据协议栈内部计时器的限时进行发送。

对较大的数据进行拆分,使用ACK号确认网络包已收到。
TCP模块在拆分数据时,会先算好每一块数据相当于从头开始的第几个字节,在发送数据时,将算好的字节数写在TCP头部中,即"序号"。SYN控制位设为1并设置序号字段的值,告知对方该序号是什么。在返回ACK号时,除了设置ACK号的值外还需要将控制位中的ACK比特设为1,表示ACK号字段有效。
数据双向传输时的情况
image.png
** 序号和ACK号的交互**
image.png
TCP在得到对方确定之前,发送过的包都会保存在发送缓冲区中,如果对方没有返回某些包对应的ACK号,那么就重新发送这些包。
通过"序号"和"ACK号"可以确认接收方是否收到了网络包。
**协议栈接收数据的具体操作过程:**首先协议栈会检查收到的数据块和TCP头部的内容,判断是否有数据丢失,如果没有问题则返回ACK号;然后协议栈将数据块暂存在接收缓冲区中,并将数据块顺序连接起来还原出原始的数据;最后将数据交给应用程序。

2.4从服务器断开连接并删除套接字

数据发送完毕的一方会发起断开过程。服务器一方的应用程序会调用Socket库中的close程序,服务器的协议栈会生成包含断开信息的TCP头部,就是将控制位中的FIN比特设为1。客户端收到以后会向服务器返回一个ACK号。而后,客户端告知服务器数据已全部接收,生成一个FIN比特为1的TCP包,服务器返回ACK号,整个通信过程结束。

2.5 IP与以太网的包收发操作

网络包:是由头部和数据两部分构成的(TCP/IP包含两个头部,MAC头部、IP头部) 终端节点:发送方和接收方 中间/转发节点:转发设备(路由器和集线器)
1)路由器根据目标地址判断下一个路由器的位置
2)集线器在子网中将网络包传输到下一个路由
集线器是按照以太网规则传输包的设备,而路由器是按照IP规则传输包的设备,因此我们也可以做如下理解:
1)IP协议根据目标地址判断下一个IP转发设备的位置
2)子网中的以太网协议将包传输到下一个转发设备
image.png
网络包的结构
IP和负责传输的网络(以太网)分开的原因:可以更好地根据需要使用各种通信技术。像互联网这样庞大复杂的网络,在架构上需要保证灵活性
IP部分工作:
添加两个头部MAC头部(以太网用的头部,包含MAC地址)和IP头部(包含IP地址);无论要收发的包是控制包还是数据包,IP对各种类型的包的收发操作都是相同的。
IP头部的"接收方IP地址"填写通信对象的IP地址;发送方IP地址需要判断发送所使用的网卡,并填写该网卡的IP地址。根据路由表Gateway栏的内容判断应该把包发给谁。
image.png
MAC头部的开头是接收方和发送方的MAC地址;接收方MAC头部较难获取。可以通过ARP广播机制对所有设备提问,对应IP的以太网设备会响应其MAC地址。在发送查询前先使用ARP缓存进行查询。
以太网是一种为多台计算机能够彼此自由和廉价地相互通信而设计地通信技术,以太网3个性质:将包发送到MAC头部地接收方MAC地址代表地目的地,用发送方MAC地址识别发送方,用以太类型识别包的内容。
网卡将包转换成电信号并发送到网线中去。网卡驱动从IP模块中获取包之后,将其复制到网卡内的缓冲区中,然后向MAC模块发送发送包的命令,MAC开始工作。(网卡地ROM中保存着全世界唯一的MAC地址,网卡中保存的MAC地址会由网卡驱动程序读取并分配给MAC模块)
image.png
报头:确定包的读取时机。FCS:检查包传输过程中因噪声导致的波形紊乱、数据错误。通过公式对包中从头到尾所有内容进行计算得出。
网卡的MAC模块生成通用信号,然后由PHY(MAU)模块转换成可在网线中传输的格式,并通过网线发送出去。
到达信号末尾时,需要检查FCS,如果FCS检查未通过则作为错误包丢弃该数据包。FCS检查无误,则看MAC头部是否数据包是发给自己的。

3.从网线到网络设备

3.1信号在网线和集线器中传输

网络包进入互联网的流程:客户端——>集线器——>交换机——>路由器——>互联网。
双绞线对噪声的抑制:1. 通过两根信号线的缠绕抵消外源性噪声;2.通过改变节距抑制内源性噪声。
集线器将信号发送给所有连接在它上面的线路。

3.2交换机的包转发操作

交换机的设计是将网络包原样转发到目的地。交换机的每个端口相当于计算机上的一块网卡。但网卡本身有MAC地址,交换机端口不具备MAC地址,只是如实转发。然后,交换机根据MAC地址表查找MAC地址,将信号发送到相应的端口;交换机可同时执行多个转发操作。
MAC地址表的维护:1.收到包时,将发送方MAC地址以及其输入端口的号码写入MAC地址表中 2.删除地址表中某条记录的操作
全双工模式是交换机特有的工作模式,它可以同时进行
发送和接收
操作,集线器不具备这样的特性。

3.3 路由器的包转发操作

路由器包括转发模块(负责判断包的转发目的地)和端口模块两部分(负责包的收发操作);路由器的各个端口都具有MAC地址和IP地址;当转发包时,首先路由器端口会接收发给自己的以太网包,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
路由器根据“IP地址”判断转发目标;路由器会忽略主机号,只匹配网络号;其子网掩码列只表示在匹配网络包地址时需要对比的比特数量;MAC对地址表的维护是包转发过程中的步骤,路由器的维护则由人手动维护或根据路由协议机制,由路由器自行维护路由表的记录;路由器的端口都具有MAC地址,只接受与自身地址匹配的包,遇到不匹配的包则直接丢弃;
路由器接受包的过程

  1. 接收网络包,包括FCS错误校验,检查MAC地址是否发给自己
  2. 丢弃MAC头部。通过路由器转发的网络包,其接收方MAC地址为路由器端口的MAC地址
  3. 按最长匹配原则进行筛选和匹配,如果只剩一条候选记录,则按此记录内容进行转发
  4. 若匹配失败,则路由器丢弃该包,通过ICMP告知发送方
  5. 找不到匹配路由时选择默认路由,子网掩码为0.00.0.0

路由器根据分片功能拆分大网络包。相比于TCP拆分数据,TCP拆好后的数据正好装进一个包里,而分片是对一个完整的包再进行拆分的过程。分片前还需要查看IP头部中的标志字段,确认是否可以分片。
路由器判断下一个转发目标的方法如下:

  • 如果路由表的网关列内容为IP地址,则该地址就是下一个转发目标;
  • 如果路由表的网关列内容为空,则IP头部中的接收方IP地址就是下一个转发目标。

IP 协议本身没有传输包的功能,因此包的实际传输要委托以太网来进行。路由器是基于IP 设计的,而交换机是基于以太网设计的,因此IP 与以太网的关系也就是路由器与交换机的关系;IP(路由器)负责将包送达通信对象这一整体过程,将包传输到下个路由器则有以太网(交换机)负责。

3.4 路由器的附加功能

私有地址:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0 ~192.168.255.255
**地址转换:**事先将地址和端口的关联信息添加到地址转换设备的对应表中,就可以从互联网访问内网中的设备了。
**包过滤:**在对包进行转发时,根据MAC头部、IP 头部、TCP 头部的内容,按照事先设置好的规则决定是转发这个包,还是丢弃这个包

4.通过接入网进入互联网内部

互联网接入路由器是按照接入网规则来发送包的,接入网是指连接互联网与家庭、公司网络的通信线缆;一般的家用接入网方式包括ADSL、FTTH、CATV、电话线、ISDN等,公司则还可能使用专线;

4.1ADSL

互联网与家庭、公司网络之间最主要的不同点:距离不同、路由维护的方式不同。
用户端路由器发出的网络包通过ADSLModem和电话线到达电话局,然后到达ADSL的网络运营商(即ISP,互联网服务提供商)。网络包会加上MAC头部、PPPoE头部、PPP头部总共3种头部,然后按照以太网规则转换成电信号后被发送出去(PPPoE方式下)。
ADSLModem会把包拆分成很多小格子,每个小格子称为一个信元。然后将信元转换成信号,使用调制(正弦波对信号合成来表示0和1,ASDL采用的是振幅调制ASK和相位调制PSK相结合的正交振幅调制QAM方式)技术,同时通过使用多个波来提高速率。

4.2 光纤接入网(FTTH)

用光纤来代替ADSL将用户端接入路由器和运营商的BAS连接起来的接入方式就是FTTH。

4.3 接入网中使用的PPP和隧道

PPP拨号上网的工作方式:1.用户向运营商的接入点拨打电话,接通后输入用户名和密码进行登录。2.用户名和密码通过RADIUS协议从RAS发送到认证服务器,服务器进行校验。3.校验争取,服务器返回IP地址等配置信息并下发用户。4.用户根据信息进行配置,准备发送TCP/IP包。
image.png
ADSL和FTTH本不需要验证用户身份,因为用户和BAS通过电缆或光纤固定,但用户名和密码可以切换运营商。传输PPP消息借用了HDLC协议作为容器进行传输,但ADSL和FTTH不能使用HDLC,因此用以太网包代替HDLC。以太网和PPP设计不同,因此重新设计了PPPoE(是将PPP消息装入以太网进行传输的方式)。

接入网发展到ADSL和FTTH后,接入网连接的路由器进化发展为BAS。功能如下列:
1)用户认证与配置下发。使用接入网需要用户名和密码,BAS为登录操作的窗口,使用PPPoE/PPPoA来实现本功能。(PPPoE由传统电话拨号上网上使用的PPP协议发展而来,PPP协议见上文)
2)使用隧道方式来传输网络包。隧道类似于套接字之间建立的TCP连接,网络包通过隧道,可以将接入网一直延伸到运营商路由器。
BAS可以使用隧道方式来传输网络包:TCP连接、封装
接入网的整体工作流程:

  1. 接入路由器配置运营商分配的用户名和密码。

  2. 接入路由器根据PPPoE的发现机制寻找BAS,获得BAS的MAC地址。

  3. 用户认证和下发配置

       1用户名和密码如何发送给BAS?
                     加密的CHAP方式(推荐)
                     不加密的PAP方式(明文传输)
       2校验密码之后BAS如何下发TCP/IP配置信息?
                  下发的信息包括分配给上网设备的IP地址、DNS服务器的IP地址以及默认网关的IP地址
    

    4.客户端开始发送用来访问互联网的网络包,包按照PPPoE规则转发。
    一对一连接的端口可以不分配IP地址,这种方式成为无编号。

4.4 网络运营商的内部

ADSL、FTTH等接入网是与用户签约的运营商设备相连的,这些设备称为POP(网络包通过接入网之后,到达运营商POP的路由器)POP中包括各种类型的路由器,路由器的基本工作方式是相同的,但根据其角色分成了不同的类型。
POP类型概览

  1. 专线:无需用户认证、配置下发等功能,一般路由器直接接入。
  2. 拨号接入:电话/ISDN接入,称为RAS。
  3. PPPoE方式下的ADSL和FTTH,使用BAS,运营商路由器与BAS相连。

NOC是运营商的核心设备,从POP传来的网络包都会集中到这里,并从这里被转发到离目的地更近的POP,或者是转发到其他运营商,可以看做是规模扩大以后的POP

4.5跨越运营商的网络包

运营商之间的路由信息交换:只要让相连的路由器告知路由信息就可以了。只要获得了对方的路由信息,就可以知道对方路由器连接的所有网络,将这些信息写入自己的路由表中,也就可以向那些网络发送包了。获得对方路由后就将自身路由也告知对方,该过程由路由器自动完成,机制为_BGP_。
**转接:**将互联网所有路由都告知; ** 对等:**仅将各自网络相关的路由信息告知对方
互联网的路由交换机制

  1. 指定路由交换的对象
  2. 判断路由的多个因素,如是否最短,优先级等

5.服务器端的局域网中有什么玄机

5.1Web服务器的部署地点

公司或数据中心
**防火墙:**只允许发往指定服务器的指定应用程序的网络包通过,屏蔽其他不允许通过的包。
数据中心是与运营商核心部分NOC直接连接的,或者是与运营商之间的枢纽IX直接连接的;

5.2防火墙的结构和原理

包过滤
可以通过端口号限定应用程序或通过判断TCP控制位进行过滤。在建立连接时SYN为1,ACK为0,反向判断是从Web发送到互联网的请求而非Web响应互联网的请求。image.png

若包中含有特定数据,防火墙就无法发现,会引起服务器宕机。因为防火墙不检查包的内容。从外部无法访问公司内网
包过滤方式的防火墙可根据接收方IP地址、发送方IP地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包过滤。

5.3 通过将请求平均分配给多台服务器来平衡负载

分布式架构:1)采用多台Web服务器 轮询:当访问服务器时,客户端需要先向DNSS服务器查询服务器的IP地址,如果DNS服务器中填写多个名称相同的记录,则每次查询时DNS都会按顺序返回不同的IP地址。问题:若操作需要跨多个页面,服务器发生了变化这个操作就无法继续;
2)采用负载均衡分配访问:使用负载均衡器的IP地址代替Web服务器的实际地址注册到DNS服务器上(增加一个中间处理者,让负载均衡器来判断)。若页面之间有关联,则在头部字段中加上用来判断相关性的信息(cookie)。

5.4使用缓存服务器分担负载

将整个系统按功能分成不同的服务器,缓存服务器就是一种按功能来分担负载的方法(是一台通过代理机制对数据进行缓存的服务器,代理介于Web服务器和客户端之间,具有对Web服务器访问进行中转的功能)
缓存服务器工作过程:

  • 在DNS服务器中注册
  • 客户端向缓存服务器发送HTTP请求,缓存服务器接收请求
  • 检查数据是否已在缓存中,在HTTP头部添加Via字段,表示该消息经过缓存服务器的转发,然后将消息发送给Web服务器。若缓存服务器对应了多个Web服务器,则可以根据请求消息的URI中的目录名进行判断。(1.若请求数据无变化,返回If-Modified-Since头部字段表明无变化(304),缓存服务器将缓存数据返回客户端;2.若数据有变化则从服务器上返回最新版本数据)

**正向代理:**接收客户端的请求,转发到互联网中,利用其缓存则可以直接获得其中访问过的数据,提升访问速度。代理在转发过程中可以查看请求内容,因此也可以实现防火墙。没有代理时,浏览器提取域名后的文件名或目录名,有代理时则直接请求完整网址交由代理处理。
**反向代理:**通过将请求消息中的URI中的目录名与Web服务器进行关联,使得代理能够转发一般的不包含完整网址的请求消息。如缓存服务器。
**透明代理:**缓存服务器可以查看请求消息的包头部来判断转发目标。

5.5内容分发服务

**内容分发服务:**负责部署缓存服务器并租借给Web服务器运营者的厂商称为CDSP,
如何找到最近的缓存服务器?
一是在DNS返回Web服务器的IP地址时,对返回内容进行加工,使其返回距离客户端最近的服务器的IP地址。具体方法:1.从缓存服务器部署地点的路由器收集路由信息。2.查询从本机到客户端DNS的路由信息,估算距离。
二是利用HTTP中的Location字段,重定向分配到最近的缓存服务器。重定向服务器和刚才一种方法中的DNS服务器一样,收集了来自各个路由器的路由信息,并根据这些信息找到最近的缓存服务器,然后将缓存服务器的地址放到Location字段中返回响应。这种方法增加了HTTP消息的交互此时,开销大,但精度高。
三是可以通过网络包往返时间估算缓存服务器的距离脚本。

6.请求到达Web服务器,响应返回浏览器

6.1服务器概览

服务器程序和客户端程序在结构上是不同的:服务器程序可以同时和多台客户端计算机进行通信,应用程序调用的Socket库的程序组件不同。
服务器操作系统具有多任务、多线程功能,
等待着的套接字:等待的套接字如果等到了客户端的包,就会返回相应包并开始接受连接操作。接下来,协议栈会给等待连接的套接字复制一个副本,然后将连接对象等控制信息写入新的套接字中。复制完副本后,以等待连接的状态继续存在,再次调用accept时,再次执行接受连接操作。
创建新套接字时的端口号:新创建的套接字副本必须和原来的等待连接的套接字具有相同的端口号。但端口号是用来识别套接字的,如果一个端口号对应多个套接字就无法通过端口号定位到套接字了。因此,在确定某个套接字时,不仅使用服务器端套接字对应的端口号,还同时使用客户端的端口号加IP地址进行判断。即客户端和服务器的端口号和IP地址4种信息。
**使用描述符的原因:**套接字刚刚创建好,还没建立连接的状态下,这4种信息是不安全的,且描述符比上述4种信息的描述要更简单。

6.2服务器的接收操作在这里插入图片描述

1)网卡接收信号,将其还原成数字信息,
2)根据包末尾的帧校验序列(FCS)来校验错误,如果确认数据无误,需要检验MAC头部中的接收方MAC地址,确认是否是发给自己的包,(还原后的数字信息被保存在网卡内部的缓冲区中)
3)网卡通过中断将网络包到达的信息告知CPU,CPU切换到网卡的任务,网卡驱动开始运行;
4)网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈;
5)IP模块,检查IP头部是否符合规范、然后检查接收方IP地址,看包是不是发给自己的,转发或保留,检查包是否分片,是否需要重组。检查协议号字段,转发给TCP模板或UDP模板;
6)TCP模块 ,当TCP头部中的控制位SYN为1时,表示这是一个发起连接的包,TCP执行接收连接操作,检查包接收方的端口号,确认是否有对应端口号等待连接的套接字,若没有则向客户端报错;
7)若存在等待连接的套接字,为其复制新副本,写入新的套接字中,分配收发缓冲区的内存空间,生成ACK号委托IP发送给客户端。客户端返回接收确认的ACK号,连接操作完成。
8)连接创建完成,TCP处理数据包。检查对应套接字(即收发方IP和端口号信息均满足的套接字),确定数据收发操作是否正常。根据头部中的序号判断是否存放至缓冲区中,还原成分包前的状态。数据进入缓冲区后,生成应答给客户端的ACK号。
9)服务器调用Socket库的close,TCP生成控制位FIN为1的TCP头部,委托IP发送给客户端,客户端返回ACK号,客户端调用close,同样生成FIN为1的TCP头部发送给服务器,服务器返回给ACK号,断开操作就完成了。
10)断开后,套接字经过一段时间后被删除

6.3Web服务器程序解释请求消息并作出响应

在Web服务器中,read获取的数据内容就是HTTP请求消息。服务器会根据收到的请求消息中的内容进行相应的处理,并生成响应消息,再通过write返回给客户端。消息主要包括“方法”和表示数据源的URI(文件路径名)
GET:从文件中读出HTML文档,作为响应消息返回即可。其中,Web服务器公开的目录其实并不是磁盘上的实际目录,而是虚拟目录,需要查询虚拟目录和实际目录的对应关系并转换URI后才能读取文件并返回数据。
运行CGI程序:检查URI指定的文件名,判断是否为程序,一般通过文件扩展名进行判断。Web服务器程序在组装网络包、还原数据之后,会运行(委托操作系统运行)其中指定的程序,将数据传递给已运行的程序。
**Web服务器的访问控制:**1.客户端IP地址;2.客户端域名;3.用户名和密码。对于用户名和密码这种方式,Web服务器会向用户发送一条响应消息,告诉用户需要在请求消息中放入用户名和密码,然后再将和用户输入的信息重新发送给服务器。

6.4浏览器接收响应消息并显示内容

首先判断响应消息数据属于哪个类型和编码方式。Content-Type: text/html;charset=utf-8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值