域名解析

  1. 以浏览器进行HTTP访问为例,首先搜索自身DNS缓存(一般缓存1000条左右,仅缓存1分钟),若有且未过期,结束。
  2. 若未找到,则搜索操作系统的DNS缓存。
  3. 若未找到,尝试读取hosts文件。
  4. 若未找到,发起向本地首选DNS服务商。DNS服务商优先找自身缓存,未找到,则找根域名的ip(如com),根域名再逐级查找(如cnblogs.com),直到找到。

与服务器建立连接

整体流程简述

发送方:应用层(HTTP)-传输层(TCP)-网络层(IP)-链路层

  • HTTP协议: 生成对目标服务器目标资源的HTTP请求报文。
  • TCP协议: 将HTTP请求报文分割成报文段,打序号和端口号,将每个报文段可靠传输。
  • IP协议: 给TCP报文增加IP头部,转发给链路层。
  • 链路层: 利用ARP服务给IP增加目标MAC地址,处理物理层细节。

接收方:链路层-网络层(IP)-传输层(TCP)-应用层(HTTP服务器)

  • 链路层: 消去以太网首部。
  • IP协议: 消去IP头部。
  • TCP协议: 接收收到的报文,按序号以原来的顺序重组报文段。
  • HTTP协议: 根据收到的请求报文,访问目标资源。

    接收方同样利用TCP/IP通信协议向用户回传。

链路层

  1. 处理连接网络的硬件部分。如操作系统中的设备驱动。
  2. ARP协议提供IP-MAC地址的映射。

ARP采用一问一答的形式,较为简单。发送方向ARP服务发出请求获取IP对应的MAC地址,并将其缓存在ARP缓存中。发送方(PC1)需要向ARP服务提供自己的IP和MAC地址,以及目标的IP地址。ARP服务会用这些信息在LAN内进行广播,其目标主机(PC2)收到该广播后,会先将PC1的信息放在自己的ARP缓存,之后,以单播形式向PC1回应ARP返回。

网络层-IP协议

IP协议作用是把数据包传给对方,因此需要给数据包添加两个条件:IP地址和MAC地址。IP地址指明节点被分配到的地址,可变。MAC地址指网卡所属固定地址,通常不变。当通信双方不在同一LAN时,则无法获取目标的MAC地址。此时,通常是经过多台计算机和网络设备中转才能连接到对方。中转时,利用下一站中转设备的MAC地址来搜索下一个中转目标。此时会使用ARP协议,ARP协议可以通过通信方的IP地址反查出对应的MAC地址。

IP协议提供的是不可靠的服务,TCP和UDP的每组数据都通过端系统和中间路由器的IP层在互联网中传输。ICMP协议是IP协议的附属协议,IP协议用它来与其他主机或路由器交换报文及其他重要信息。IGMP是组管理协议,UDP的多播就利用了IGMP。

传输层-TCP协议

TCP提供字节流服务,将大块数据分割成以报文段segment为单位的数据包进行管理,其目的是更容易传送大数据。为确保送达,TCP采用三次握手方式,首先发送带SYN bit的包,对方接收后回传带SYN bit和ACK bit的包表示确认信息,发送方再回传带ACK bit的可带数据的包开始发送数据。

传输结束后,TCP采用四次握手的方法断开连接,首先PC1发送FIN报文段,进入FIN_WAIT_1状态,表示自己没有信息发了。PC2收到后回复一个ACK报文段,同意其关闭连接的请求,PC1进入FIN_WAIT_2状态。PC2主动向PC1发送FIN报文段请求关闭连接,同时PC2进入LAST_ACK状态,PC1收到后回复ACK报文段,并进入TIME_WAIT状态,PC2收到PC1的ACK报文段则关闭,PC1等待后仍未收到回复则说明PC2正常关闭,于是PC1也关闭连接。

TCP详细另开文章,此处略。

应用层-HTTP协议

HTTP是应用层协议,是无状态的TCP连接。HTTP报文是面向文本的,每个字段都是不定长的ASCII编码。

HTTP请求报文格式如下:

请求方法 URL 协议版本
N行头部(字段名:字段值) 请求数据

请求方法在RESTful协议中常用GET POST PUT DELETE,其中GET和DELETE不能带数据

URL=<协议>://<主机>:<端口>/<路径>

HTTP响应报文格式如下:

协议版本 状态码 状态码描述
N行头部(字段名:字段值) 响应正文

HTTP状态码大致含义如下:

  • 1XX 表示请示已收到,继续处理,不常用。
  • 2XX 表示已成功。(200,成功)
  • 3XX 重定向 表示要完成请求必须进行更近一步操作。(301/302,跳转,响应头中的Location指定跳转地址,301则资源永久转移,302则资源临时转移)
  • 4XX 客户端错误 请求有语法错误或请求无法实现。(400,客户端语法错误不被服务器识别;403,认证失败拒绝提供服务;404,找不到资源)
  • 5XX 服务端错误 服务器未能实现合法的请求。(500,服务器内部错误;503,超负载暂时无法响应)

常见问题:计算机网络/完整HTTP访问的更多相关文章

  1. 【计算机网络】-介质访问子层-(信道划分介质访问控制&随机访问介质访问控制)

    [计算机网络]-介质访问子层-概述 介质访问控制子层功能 解决信道争用的协议,即用于多路访问信道上确定下一个使用者的协议 是数据链路层协议的一部分 介质访问控制子层位置 位于数据链路层的底部! 信道分 ...

  2. Java中获取完整的访问url

    Java中获得完整的URl字符串: HttpServletRequest httpRequest=(HttpServletRequest)request; String strBackUrl = &q ...

  3. 常见问题:计算机网络/运输层/UDP

    几乎不对IP增加其他东西,无连接. 优势 速度快.适合实时. 无连接建立,没有连接时延. 无连接状态. 分组首部开销小.TCP需20字节,UDP仅需8字节. 使用UDP的协议 DNS SNMP RIP ...

  4. 常见问题:计算机网络/运输层/TCP

    TCP 面向连接,全双工,点对点. TCP头格式 TCP包没有IP地址,IP地址在网络层的IP协议中,TCP包包括源端口号,目标端口号 一个TCP连接需要四个元祖表明是同一连接(src_ip,src_ ...

  5. Winform混合式开发框架访问Web API接口的处理

    在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的 ...

  6. Java访问数据库Mysql

    一.概述 本文主要介绍Java接连数据库的基本方法和步骤,并对其中的几个要点进行简要说明. 二.数据库访问步骤 在Java中连接数据库进行的访问主要有以下几个步骤: 加载数据库驱动 注册数据库驱动 建 ...

  7. PHP16 PHP访问MySQL

    学习要点 PHP访问MySQL配置 PHP访问MySQL函数介绍 足球赛程信息管理 PHP访问MySQL配置 PHP.ini配置文件确认以下配置已经打开 extension=php_mysql.dll ...

  8. 踩过好多次的坑 - ajax访问【mango】项目的service

    这个坑真的是踩过好多次了,好记性不如烂笔头,我总是太高估我的记忆力,这次真的是要写下来了. 项目是用的seam框架 + hibernate搭建的,架构是前辈们搭好的劳动成果,在配置service的访问 ...

  9. 夺命雷公狗---微信开发56----微信js-sdk接口开发(3)所有接口功能

    按照上节课程里面的介绍,我们可以先将刚才在signatrue.php里获取到的信息填写进jssdk.htm模版文件里填写各个权限的参数 jssdk.htm代码如下: <!DOCTYPE html ...

随机推荐

  1. 计蒜客模拟赛 #5 (B 题) 动态点分治+线段树

    虽然是裸的换根dp,但是为了在联赛前锻炼码力,强行上了点分树+线段树. 写完+调完总共花了不到 $50$ 分钟,感觉还行. code: #include <bits/stdc++.h> # ...

  2. 38、数据源Parquet之使用编程方式加载数据

    一.概述 Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存 ...

  3. 洛谷P2827蚯蚓

    题目 堆+模拟,还有一个小优化(优化后跟堆关系不大,而是类似于贪心). 如果不加优化的话,卡常可以卡到85. 思路是对于对每一秒进行模拟,用堆来维护动态的最大值,然后对于每个长度都加q的情况可以用一个 ...

  4. 如何手动安装WordPress主题和插件(Linux)

    1. 去官网找到你想使用的插件或主题,并复制下载地址 2. cd到WordPress网站目录下的插件或主题目录下 这里以我的为例: 安装插件:cd /var/www/html/wp-content/p ...

  5. zabbix-3.4邮件报警

    1.开启smtp邮件传输协议 会生成一个授权码后面有用 2.卸载旧版的邮件服务 rpm -qa | grep mailx rpm -qa | grep sendmail rpm -qa | grep ...

  6. Git Bash基础使用(初始化)

    前提是在码云上已经新建一个空的项目,可参考:https://www.cnblogs.com/babysbreath/p/9170455.html 1.新建一个目录,存放下载下来的项目,我在D盘新建了一 ...

  7. appium+python 微信小程序的自动化

    sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q  -p 8889 -s addons.py http: ...

  8. MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Without a Key Length【转】

    今天有开发反应他的建表语句错误,我看了下,提示: MySQL Error 1170 (42000): BLOB/TEXT Column Used in Key Specification Withou ...

  9. itop 环境

    iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,用于IT环境的日常运营.它基于ITIL最佳实践,而又不拘泥于任何具体流程.它很灵活,可以适应不管是非正 式 ...

  10. Flutter -------- Http库 网络请求封装(HttpController)

    http库 再次封装的网络请求类 HttpController 1.添加依赖 dependencies: http: ^0.12.0 #latest version 2.导入库 import 'pac ...