计网-1(协议层次&HTTP概述)

1-5 协议层次及其模型

1.5.1 因特网协议栈

  • 因特网协议栈由五层组成:应用层、传输层、网络层、链路层、物理层

  • OSI(开放系统互连参考模型)参考模型的七层组成:应用层、表示层、会话层、运输层、网络层、链路层、物理层。

  • 表示层与会话层留给应用程序开发者处理。

1.应用层

  • 应用层是网络应用程序以及它们的应用层协议存留的地方。

    • 应用层协议:HTTP(提供Web文档的请求和传送),SMTP(提供电子邮件报文的传输),FTP(提供两个端系统之间的文件传送)
  • 应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息分组

  • 应用层的信息分组:报文 message

(2) 表示层

  • 使通信的应用程序能解释交换数据的含义(数据压缩、数据加密、数据描述)

(3) 会话层

  • 提供数据交换的界定和同步功能,不同机器上的用户建立和管理会话(建立检查点、回复方案)

2.传输层

  • 在应用程序端点之间传送应用层报文。

    1. TCP传输协议:向其应用程序提供面向连接的服务(确保传递、流量控制、拥塞控制)
    2. UDP传输协议:向其应用程序提供无连接服务(无可靠性、流量控制、拥塞控制)
  • 运输层分组:报文段 segment

3.网络层

  • 网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机。

  • 控制子网的运行:逻辑编址、分组传输、路由选择,比如 IP、IPV6、SLIP 等等。

  • 网络层分组:数据报 datagram

4.链路层

  • 网络层依靠链路层服务将分组从一个节点(主机、路由器)移动到路径上的下一个节点。
    即:在每个节点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点,在下一个节点链路层将数据报上传给网络层。

  • 网络层将受到来自每个不同链路层协议不同的服务(链路层协议)。

  • 链路层分组称为帧 frame

5.物理层

  • 将链路层的帧中的一个个比特从一个节点移动到下一个节点(仍是链路相关协议),且与实际传输媒介有关(铜线、光纤)

1.5.2 封装

  • 在每一层,一个分组具有两种类型字段:首部字段和有效载荷字段(来自上一层的分组)。
  1. 发送主机端,应用层报文被传送给运输层,运输层收取报文并附附加信息(运输层首部信息)被接收端运输层使用
    • 首部信息包含:允许接收端运输层向上向适当应用程序交付保温信息;差错检测位信息(判断报文比特途中是否改变)
    • 应用层报文+运输层首部信息 -> 报文段
  2. 运输层向网络层传递该报文段,网络层增加了源、目的端系统地址等网络层首部信息,生成网络层数据报
    • 报文段+网络层首部信息 -> 数据报
  3. 链路层增加其自身链路层首部信息生成链路层帧
    • 数据报+链路层首部信息 -> 帧

2-1 应用层协议原理

2.1.1 网络应用程序体系结构

  • 应用程序体系结构由应用程序研发者设计,规定了如何在端系统上组织该应用程序

1 客户-服务器体系结构(client-server cs)

服务器:一台总是打开的主机,服务于来自许多其他称为客户的主机的请求。
数据中心:配备大量主机的强大虚拟服务器

  1. 客户之间不直接通信
  2. 服务器具有固定的周知的地址(IP地址)

2 P2P体系结构(P2P)

  • 对位于数据中心的专用服务器有最小(或无)依赖,应用程序在间断链接的主机之间使用通信(对等方)

2.1.2 进程通信

  • 两个不同端系统上的进程,通过跨越计算机网络交换报文进行通信。
    • 发送进程:生成并向网络中发送报文
    • 接受进程:接受这些报文并可能通过回送报文进行相应。

1-客户和服务器进程

  1. 客户:发起通信的进程(浏览器)
  2. 服务器:等待联系的进程(Web服务器)

2-进程与计算机网络间的接口

  • 进程通过套接字(socket)的软件接口向网络发送报文和从网络接受报文
    • 套接字相当于一台主机内应用层与传输层之间的接口
    • 套接字为建立网络应用程序的可编程接口-应用程序编程接口(API)

3-进程寻址

  • 发送进程向接受进程发送分组需接受进程的地址,标识接受进程需定义
    1. 主机地址 - IP地址
    2. 在目的主机中制定接受进程的标识符 - 目的地端口号

2.1.3 可供应用程序使用的运输服务

  1. 可靠数据传输:确保应用程序一段发送正确数据且完全交付给应用程序另一端
  2. 吞吐量
    1. 带宽敏感的应用:具有吞吐量要求的应用
    2. 弹性应用:能根据可用带宽利用可供使用吞吐量。
  3. 定时
  4. 安全性

2.1.4 因特网提供的运输服务

1. TCP服务:面向连接服务和可靠数据传输服务

  1. 面向连接服务:应用层数据报开始流动之前,TCP让客户和服务器互相交换运输层控制信息
    • 为握手过程-为大量分组到来做好准备。 握手后一个TCP连接就在两进程套接字间建立。
  2. 可靠数据传送服务:通信进程依靠TCP,无差错、按适当顺序交付所有发送的数据。
  3. 拥塞控制机制:抑制发送进程(客户/服务器),试图限制每个TCP连接使其公平共享网络带宽

2. UDP服务:提供不必要服务的轻量级运输协议(不可靠数据传送服务)

2.1.5 应用层协议

  • 定义不同端系统上应用程序进程如何相互传递报文
    1. 交换的报文类型(请求/相应报文)
    2. 各种报文类型的语法(报文各个字段及如何描述)
    3. 字段语义
    4. 确定进程何时如何发送报文,相应报文的规则

2-2 Web和HTTP

2.1.1 HTTP概况

  • 超文本传输协议(HTTP):Web的应用层协议,Web的核心
  • 实现方式:客户程序和服务器程序实现
    • 客户程序和服务器程序运行在不同的端系统,通过交换HTTP报文进行会话。
    • HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。
  • HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。
  • HTTP使用TCP作为其支撑运输协议(客户发起一个与服务器的TCP连接,连接建立后浏览器和服务器进程可通过套接字接口访问TCP)
  1. Web页面由对象组成,多数Web页面含有一个HTML基本文件和几个对象引用(1个HTML和5个JPEG)
  2. HTML基本文件通过对象的URL地址引用页面的其他对象,每个URL地址由两部分组成
    • 存放对象的服务器主机名和对象的路径名
  3. Web浏览器实现了HTTP的客户端
  4. Web服务器实现了HTTP的服务器端,用于存储Web对象,每个对象由URL寻址

2.2.2 非持续连接和持续连接

  • 非持续连接:每个请求相应对经过一个单独的TCP连接发送
  • 持续连接:所有请求和相应经相同的TCP连接发送
  • HTTP默认情况下使用持续连接

连接步骤:

  1. HTTP客户进程在端口号80发起一个到服务器的TCP连接(客户和服务器上分别有一个套接字与该连接相关)
    • 第一次握手(发送小报文段)
  2. HTTP客户经其套接字想服务器发送一个HTTP请求报文(包含路径名)
  3. HTTP服务器进程经其套接字接受该请求报文,从其存储器检索出对象,在一HTTP相应报文中封装对象并通过套接字想客户发送响应报文
    • 第二次握手(服务器用小TCP报文段做出确认和相应)
  4. HTTP服务器进程通知TCP断开连接(直到TCP确认客户完整接受响应报文才实际断开)
    • 第三次握手:客户向服务器返回确认
  5. HTTP客户接受相应报文,TCP连接关闭
  • 非持续连接:先接受HTML文件得到对象引用再重复前序步骤获得所有对象(使用不同TCP连接)
  • 持续连接:发送相应后保持TCP连接打开,后续请求和相应通过相同连接传送。

2.2.3 HTTP报文格式

1- HTTP请求报文

点击查看实例请求报文
GET /article/ae97a6469d2591fafd461dd4.html HTTP/1.1
Host: jingyan.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://www.baidu.com/link?url=3MYyQnhUNvb0WZ6fx-iURy86qugB6-yMFGI7kouDzC46_O6c7vdGeinYRVYhXE5XVkKL6d7918xZbjfVn30lFrf_kBRYjMltPWmkjntZO4C&wd=&eqid=b33b0e350007696100000002614d2269
Connection: keep-alive
Cookie: BAIDUID=84AC2E3F08910E0A86009C5123A582A8:FG=1; BIDUPSID=E52CF02E8A85497FDCD7843CABB6C220; PSTM=1591362239; Hm_lvt_46c8852ae89f7d9526f0082fafa15edd=1631953943,1632104317,1632398957,1632445042; bdshare_firstime=1591625320291; EXP_NAV_AUTH_NEW=1; __yjs_duid=1_bdea06de88ea2bcdd4019be614d8909f1619689514623; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDUSS=BSSEt5OWx-Tzh-dGhmNGV2WFpNcmZnOUtDTVctdmxzMUFlTXR5ZVR2ZnpkMjloRUFBQUFBJCQAAAAAAAAAAAEAAAB3koL5yrLDtNLiy7zaq9qrxNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPqR2Hz6kdhRz; H_PS_PSSID=34652_34530_34068_31253_34655_34584_34518_34662_34578_26350_34420_34697_34676; ab_sr=1.0.1_ZWRhMTI1NmM0MDlhODZiMWU2NmVmYTI3YTk5MGRjNDFhN2Y3NjQxYjJmZDlhMzJlOTIzYTEwZWIwOWEyNmVmOWVmMGMyMDk3OWZhOGFjMDFkMWE2YmQ2MzA4YzkwNzJmNGRjZTc1MTY2ZjZhOTI1M2NhZDY0YzdiNGQ4OTY0MTQ3NGFhYmI5NjI0MjFhYWQzNzk5NDhkZWI1NWRiOTMxMQ==; BDSFRCVID=oZ_OJeCmHx4cYXoHEerHuaF0k2KK0gOTHllnbRLIKOBhh4IVJeC6EG0Ptf8g0KubuTkzogKK0gOTH6KF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tbCeoK0-tDt3DC_l-tvfq44yKgc22Dre2I6X0bnq26rHDbTw5tTjKICShUFs2hTdB2Q-5b6dMIbjofnvyMoqKxk0-tDja5jiWbRM2MbdanR_HxosyfRcL4kJj-rpBtQmJeTxoUJ25DnJhhvG-RoxMnIebPRiJPb9Qg-qahQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjLBD63W3j; BA_HECTOR=0k21240l8h040k0kje1gkqdha0q; Hm_lpvt_46c8852ae89f7d9526f0082fafa15edd=1632445042; delPer=0; PSINO=2
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-site
Cache-Control: max-age=0
  1. 请求行:HTTP请求报文的第一行,包含方法字段、URL字段和HTTP版本字段
    • egGET /article/ae97a6469d2591fafd461dd4.html HTTP/1.1
    1. 方法字段:GET/POST/HEAD/PUT/DELETE,当浏览器请求一个对象时使用GET方法
    2. URL字段:带有请求对象的标识
    3. HTTP版本字段:HTTP/1.1
  2. 首部行:请求行后继的额行
    1. Host:指明对象所在主机
    2. User-Agent: 首部行用来指明用户代理,即向服务器发送请求的浏览器类型。(Mozilla-Firefox)
    3. Accept-Language:首部行标识用户想得到该对象的语言版本
    4. ...

2-HTTP响应报文

点击查看实例响应报文
HTTP/1.1 200 OK
Bdpagetype: 3
Bdqid: 0xf275fc6200001d4c
Cache-Control: private
Ckpacknum: 2
Ckrndstr: 200001d4c
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Fri, 24 Sep 2021 03:07:45 GMT
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BD_CK_SAM=1;path=/
Set-Cookie: PSINO=2; domain=.baidu.com; path=/
Set-Cookie: BDSVRTM=41; path=/
Set-Cookie: H_PS_PSSID=34652_34530_34068_31253_34655_34584_34518_34662_34578_26350_34420_34697_34676; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1632452865242458036217471147827290709324
Vary: Accept-Encoding
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
  1. 初始状态行:协议版本字段、状态吗字段和状态信息
  2. 首部行
    1. Date:首部行指示服务器产生并发送该响应报文的日期和时间(服务器检索到该对象,将该对象插响应报文并发送报文的时间)
    2. Server:首部行指示该报文是一台BWS/1.1服务器产生的(Baidu Web Server)
    3. Content-Length/Type:首部行指示被发送对象的字节数和文本形式
    4. ...
  3. 实体体:报文的主要部分,包含了请求的对象本身

3-常用状态码和相关短语

  1. 200 OK:请求成功,Web 服务器成功处理了客户端的请求,信息在返回的响应报文中
  2. 301 Moved Permanently: 请求的对象被永久转移,新的URL在相应报文的Location:首部行中。客户软件将自动获取新的URL
  3. 302:临时重定向,浏览器会抓取重定向后网页的内容而保留旧的网址,因为搜索引擎认为重定向后的网址是暂时的。
  4. 400 Bad Request:通用差错代码,指示该请求不被服务器理解,多为参数不合法导致 Web 服务器验参失败。
  5. 404 Not Fount: 被请求的文档不在服务器上,Web 服务器找不到资源。
  6. 500:Web 服务器错误,服务器处理客户端请求的时候发生错误。
  7. 503:服务不可用,服务器停机。
  8. 504:网关超时。
  9. 505 HTTP Version Not Supported: 服务器不支持请求报文使用的HTTP协议版本

2.2.4 用户和服务器的交互:cookie

  • HTTP使用Cookie:Web站点希望能识别用户以限制用户访问或将内容与用户身份联系。

组成:

  1. HTTP相应报文中的一个cookie首部行
  2. HTTP请求报文中的一个cookie首部行
  3. 用户端系统中保留有一个cookie文件,由用户浏览器进行查看
  4. 位于Web站点的一个后端数据库。

当用户首次访问一个站点时可能需要提供一个用户标识(姓名、年龄...),后继会话中浏览器向服务器传递一个cookie首部从而向服务器标识了用户。
即cookie可在无状态的HTTP之上建立一个用户会话层。

2.2.5 Web缓存

  • 能够代表初始Web服务器来满足HTTP请求的网络实体。
    1. 充当服务器:若Web缓存器检查本地存储了对象副本,则向客户浏览器用HTTP响应报文返回该对象
    2. 充当客户:若没有,则打开一个与该对象的厨师服务器的TCP连接,Web缓存器发送一个对该对象的HTTP请求。当Wen缓存器接受到该对象时在本地存储空间存储一份副本,并向客户浏览器用HTTP相应报文发送该副本。

优势:

  1. 减少客户请求的响应时间(客户与Web缓存器的瓶颈带宽可能很高)
  2. 减少一个机构接入链路到因特网的通信量。

2.2.6 条件GET方法

  • HTTP协议提供的机制,允许缓存器证实其对象是最新的而非陈旧的
    1. 请求报文使用GET方法
    2. 请求报文中含有一个If-Modified-Since首部行

工作机理:

  1. 请求报文中首部行If-Modified-Since值等于最近一次服务器发送的相应报文中的Last-Modified:首部行的值
  2. Web服务器向缓存器发送一个相应报文(空的实体体),包含Last-Modified信息
    • 304 Not Modified标识缓存器中的为最新版本
posted @ 2021-09-24 12:19  rttrti  阅读(764)  评论(0编辑  收藏  举报