一、请求消息的生成

1.1、生产HTTP请求消息

  1. 浏览器的第一步就是根据规则对URL进行解析

    http://服务器名/目录名/+……/文件名

  2. Http的工作过程:

    • 浏览器向Web服务器先发送头节点,再发送请求

    • Web服务器解析请求,并做出响应放在响应消息中,通过响应消息的头部状态码判断响应是否成功

    • 响应失败,则显示状态码,否则将响应消息返回客户端,由浏览器读出响应结果。

  3. 生成http请求消息

    • 第一行是请求行:重点是最开头的方法(GET、POST等)。方法+URI+HTTP版本号

    • 第二行是消息头:存放额外的详细信息(日期、语言、压缩格式等)

    • 添加一个没有内容的空行,然后写上需要发送的数据(称为消息体)

      这里要注意:一条请求消息只能写一个URI,每个文件都要单独发送一次1次请求。

  4. 这里简单说下响应消息:格式和思路基本和请求消息一样,差别在第一行:响应消息第一行为状态码和响应消息,表示执行是否成功。

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

  1. 生成HTTP消息之后,下一步就是根据域名查询IP地址

    • 先了解IP地址

      (1)局域网都是基于TCP/IP的思路设计的:多台计算机通过集线器组成子网,子网再通过路由器连接形成网络

      (2)通过IP地址我们可以判断出访问对象服务器的位置,从而将消息发到服务器中。

      (3)IP地址是比特的数字,按照8比特为一组分成4组,十进制表示并用原点隔开

      注:IP地址的主机号为0,表示整个子网,为1表示向子网上所有设备发送包

    • 为什么使用域名和IP地址并用?

      域名容易记住,IP地址比较难记;域名的长度是IP地址的很多倍,只用域名会加重路由器的负担,传送数据会发费更多时间

  2. 怎样通过域名来查询IP地址?(反之亦然)

    • 通过查询DNS(域名服务系统)服务器,会返回IP地址

      (1)解析器可以看作是DNS服务器的客户端,调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。

      (2)响应消息包含查询到的IP地址,解析器会取出,将其放入浏览器指定的内存中。

      (3)浏览器向Web服务器发送消息时,从内存中取出地址,将其与HTTP请求消息一起交给操作系统就可以了

      注:根据域名查询IP地址时,浏览器会使用Socket库的解析器

    • DNS服务器的基本工作

      (1)基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。

      (2)DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址

    • 域名的层次结构

      (1)越靠右的位置级别越高,如www.lab.glasscom.com,.com的级别最大

      (2)一个域的信息是作为一个整体存放在服务器中,不可拆开放在其他服务器

      (3)下级域的IP地址会注册到上级域中

    • DNS服务器查询IP地址的过程

      (1)客户端会会先访问最近的DNS服务器,如果服务器有的话直接可以查询地址,没有的话转而向根域查询

      (2)通过根域一级一级往下一级找,最后会找到目标服务器

      (3)向目标DNS服务器查询IP地址,服务器将地址返回给客户端

      注:为了加快查询的速度,可以在DNS服务器中设置缓存,记住之前的查询过的域名,为了保证信息一致性,给缓存设置有效期

  3. 委托协议栈发送消息

    • 查询到IP地址之后,就委托操作系统内部的协议栈方向Web服务器发送消息

    • 收发操作大致分为以下4步:

      (1)创建套接字(创建套接字阶段)

      调用Socket库的socket组件就可以创建套接字,协议栈在套接字创建完成后,会返回一个描述符,应用程序将描述符保存到内存中。应用程序通过”描述符“这一类似号码牌的东西识别套接字

      (2)将管道连接到服务器端的套接字上(连接阶段)

      调用Socket库中的connect组件,需要指定描述符、IP地址和端口号三个参数

      描述符:协议栈知道去使用哪个套接字去和服务器的套接字连接

      ip地址和端口号:客户端和服务器之间用来识别对方套接字的机制

      (3)收发数据(通信阶段)

      发送数据调用的是Socket库的write组件,接收消息是调用read组件,响应消息会被存放在应用程序内部的接收缓冲区中

      (4)断开管道并删除套接字(断开阶段)

      调用Socket库中的close组件。

    • 实际上负责收发消息的是协议栈、网卡和网卡驱动

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值