热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图解HTTP,状态码,TCP、UDP等网络协议相关总结(持续更新)

前言:主要是记录学习《图解HTTP》这本书的知识,此外,还会夹杂一些平时整理的网络相关的笔记。一、TCP/IP的分层管理1.首先分为4层:应用层,传输层,网络

前言:主要是记录学习《图解HTTP》这本书的知识,此外,还会夹杂一些平时整理的网络相关的笔记。

一、TCP/IP 的分层管理

1.首先分为4层:应用层,传输层,网络层,链路层。

应用层:决定了向用户提供应用服务时通信的活动。TCP/IP 协议族内预存了各类通用的应用服务。 比如, FTP(File
Transfer Protocol, 文件传输协议) 和 DNS(Domain Name System, 域名系统) 服务就是其中两类。此外,HTTP也属于这一层。
 传输层:传输层对上层应用层, 提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议: TCP(Transmission Control Protocol, 传输控制协议) 和 UDP(User Data Protocol, 用户数据报协议) 。
网络层(又名网络互连层):用来处理在网络上流动的数据包。 数据包是网络传输的最小数据单位。 该层规定了通过怎样的路径(所谓的传输路线) 到达对方计算机, 并把数据包传送给对方,网络层所起的作用就是在众多的选项内选择一条传输路线。
链路层(又名数据链路层, 网络接口层):用来处理连接网络的硬件部分。 包括控制操作系统、 硬件的设备驱
动、 NIC(Network Interface Card, 网络适配器, 即网卡) , 及光纤等物理可见部分(还包括连接器等一切传输媒介) 。 硬件上的范畴均在链路层的作用范围之内。


2.TCP/IP 通信传输流参看下图

发送端在层与层之间传输数据时, 每经过一层时必定会被打上一个该层所属的首部信息。 反之, 接收端在层与层传输数据时, 每经过一层时会把对应的首部消去。其实包装数据信息的过程就是封装。

二、HTTP协议:

1.负责传输的 IP 协议

作用是把各种数据包传送给对方。 而要保证确实传送到对方那里, 则需要满足各类条件。 其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address) 。这两个地址的差别:IP 地址指明了节点被分配到的地址, MAC 地址是指网卡所属的固定地址。 IP 地址可以和 MAC 地址进行配对。 IP 地址可变换, 但 MAC地址基本上不会更改。

1)、APR协议:

用以解析地址的协议, 根据通信方的 IP 地址就可以反查出对应的 MAC 地址,即在信号传输的过程中,一般会暴露IP地址,可以通过ARP协议,解析IP地址,找到对应的MAC地址。如下图:
ARP解析原理:1、每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2、当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包该数据包包括的内容有: 源主机IP地址,源主机MAC地址,目的主机的IP地址。
3、当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写
入ARP响应包中
,告诉源主机自己是它想要找的MAC地址。
4、源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。

2.TCP协议: 

参照这个:https://blog.csdn.net/striveb/article/details/84063712

3.DNS协议:

提供域名到 IP 地址之间的解析服务。我们平时在访问网站的时候,一般都是输入英文字母,比如:www.baidu.com,这就是域名,而我们的服务器和协议一般都无法识别域名的,这个时候就需要将他们转换为数字,即IP地址,DNS就是干这个事的。DNS 协议提供通过域名查找 IP 地址, 或逆向从 IP 地址反查域名的服务。
接下来,我们就来看看访问一个网站的整个过程:

4.URL和URI

URL:统一资源定位符,即我们平时访问的网址等待路径。

URI:由某个协议方案表示的资源的定位标识符。 协议方案是指访问资源所使用的协议类型名称。比如采用HTTP协议时,协议方案就是HTTP。URI 用字符串标识某一互联网资源, 而 URL 表示资源的地点(互联网上所处的位置) 。 可见 URL 是 URI 的子集。


5.HTTP协议

(1)HTTP简介

HTTP 协议规定, 请求从客户端发出, 最后服务器端响应该请求并返回。 换句话说, 肯定是先从客户端开始建立通信的, 服务器端在没有接收到请求之前不会发送响应。先看下面这个例子:

起始行开头的GET表示请求访问服务器的类型, 称为方法(method) 。 随后的字符串 /index.htm 指明了请求访问的资源对象,
也叫做请求 URI(request-URI) 。 最后的 HTTP/1.1, 即 HTTP 的版本号, 用来提示客户端使用的 HTTP 协议功能。
综合来看, 这段请求内容的意思是: 请求访问某台 HTTP 服务器上的/index.htm 页面资源。请求报文是由请求方法、 请求 URI、 协议版本、 可选的请求首部字段和内容实体构成的。
 

(2)HTTP 是不保存状态的协议
HTTP 是一种不保存状态, 即无状态(stateless) 协议。 HTTP 协议自身不对请求和响应之间的通信状态进行保存。 也就是说在 HTTP 这个级别, 协议对于发送过的请求或响应都不做持久化处理。使用 HTTP 协议, 每当有新的请求发送时, 就会有对应的新响应产生。

(3)HTTP协议相关方法

1)GET : 获取资源
GET 方法用来请求访问已被 URI 识别的资源。 指定的资源经服务器端解析后返回响应内容。 也就是说, 如果请求的资源是文本, 那就保持原样返回; 如果是像 CGI(Common Gateway Interface, 通用网关接口) 那样的程序, 则返回经过执行后的输出结果。

2)POST: 传输实体主体
POST 方法用来传输实体的主体。虽然用 GET 方法也可以传输实体的主体, 但一般不用 GET 方法进行传输, 而是用 POST 方法。 虽说 POST 的功能与 GET 很相似, 但POST 的主要目的并不是获取响应的主体内容。

3)PUT: 传输文件
PUT 方法用来传输文件。 就像 FTP 协议的文件上传一样, 要求在请求报文的主体中包含文件内容, 然后保存到请求 URI 指定的位置。但是, 鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制, 任何人都可以上传文件 , 存在安全性问题, 因此一般的 Web 网站不使用该方法。 若配合 Web 应用程序的验证机制, 或架构设计采用REST(REpresentational State Transfer, 表征状态转移) 标准的同类Web 网站, 就可能会开放使用 PUT 方法。

4)HEAD: 获得报文首部
HEAD 方法和 GET 方法一样, 只是不返回报文主体部分。 用于确认URI 的有效性及资源更新的日期时间等。

5)DELETE: 删除文件
DELETE 方法用来删除文件, 是与 PUT 相反的方法。 DELETE 方法按请求 URI 删除指定的资源。跟put方法一样,HTTP/1.1的DELETE方法自身不带验证机制。

6)OPTIONS: 询问支持的方法
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
7)TRACE: 追踪路径
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。

8)CONNECT: 要求用隧道协议连接代理
CONNECT 方法要求在与代理服务器通信时建立隧道, 实现用隧道协议进行 TCP 通信。 主要使用 SSL(Secure Sockets Layer, 安全套接层) 和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加 密后经网络隧道传输。

(4)持久连接
HTTP 协议的初始版本中, 每进行一次 HTTP 通信就要断开一次 TCP连接。但是当请求资源变多的时候多的时候,会造成资源浪费。为了解决这一问题,引入了持久连接。持久连接的特点是, 只要任意一端没有明确提出断开连接, 则保持 TCP 连接状态。持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销, 减轻了服务器端的负载。 另外, 减少开销的那部分时间, 使HTTP 请求和响应能够更早地结束, 这样 Web 页面的显示速度也就相应提高了。

(5).管线化

持久连接使得多数请求以管线化(pipelining) 方式发送成为可能。 从前发送请求后需等待并收到响应, 才能发送下一个请求。 管线化技术出现后, 不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求, 而不需要一个接一个地等待响应了。
(6)COOKIE技术

因为HTTP是无状态的,为了保存一些信息,引入了COOKIE。COOKIE 技术通过在请求和响应报文中写入 COOKIE 信息来控制客户端的状态。COOKIE 会根据从服务器端发送的响应报文内的一个叫做 Set-COOKIE 的首部字段信息, 通知客户端保存 COOKIE。 当下次客户端再往该服务器发送请求时, 客户端会自动在请求报文中加入 COOKIE 值后发送出去。服务器端发现客户端发送过来的 COOKIE 后, 会去检查究竟是从哪一个客户端发来的连接请求, 然后对比服务器上的记录, 最后得到之前的状态信息。
(7)发送多种数据的多部分对象集合
MIME(Multipurpose Internet Mail Extensions, 多用途因特网邮件扩展) 机制, 它允许邮件处理文本、 图片、 视频等多个不同类型的数据。在 HTTP报文中使用多部分对象集合时, 需要在首部字段里加上Content-type。

三、HTTP状态码

参见:https://blog.csdn.net/striveb/article/details/84070336

四、通信数据转发程序:代理、网关、隧道

当一台虚拟主机上寄存了多个不同主机名和域名的web网站时,在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。否则两个不同的域名通过DNS解析后,会得到相同的IP,因为它们位于同一个虚拟主机上。

在HTTP通信时,除了客户端和服务器,还有涉及到一些其他用于通信数据转发的应用程序,如:代理、网关、隧道等。它们可以将请求转发给通信线路上的下一站服务器,并且接收从那台服务器发送的响应再转发给客户端。接下来就说说这三个程序。

代理:

具有转发功能,介于服务器和客户端直接,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

代理服务器主要就是接收客户端发送的请求后转发给其他服务器。代理不改变请求URI,会直接发送给前方持有资源的目标服务器。持有资源实体的服务器被称为源服务器。从源服务器返回的响应经过代理服务器再传给客户端。

在HTTP通信过程中,可级联多台代理服务器。请求和响应的转发会经过数台类似锁链一样连接过来的代理服务器。转发时,需要附加Via首部字段以标记出经过的主机信息。代理服务器利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的等等。

代理有两种基准分类:1.是否使用缓存;2.是否会修改报文。

缓存代理:预先将资源的副本(缓存)保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将当前缓存的资源作为响应返回。

透明代理: 转发请求或响应时,不对报文做任何加工即为透明代理。反之,对报文内容进行加工的代理被称为非透明代理。

网关:

转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,对请求进行处理。其实就是相当于具有处理请求能力的服务器。

网关能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。比如:网关可以连接数据库,使用SQL语句查询数据。 

隧道(相当于是一个确保安全的介质):

在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。隧道可按要求建立起一条与其他服务器的通信线路,然后使用SSL等加密手段进行通信,目的是确保客户端能与服务器进行安全的通信。

隧道本身不会解析HTTP请求,即会保持请求的原样,其实就是相当于一个介质,会在通信双方断开连接时结束。

 

觉得有收获的,可以来一波赞赏!

 






 


推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
手机用户2502905117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有