浏览器知识点整理(四)网络协议

 

这篇文章主要介绍一些相关的网络协议,主要是 IP 协议、UDP 协议、TCP 协议、HTTP 协议和其它协议,还介绍了数据包传输的流程。

前言

互联网实际上是一套理念和协议组成的体系架构。其中,协议是一套众所周知的规则和标准,如果各方都同意使用,那么它们之间的通信将变得毫无障碍。

我们常说的 向服务器请求资源其实是我们的计算机(客户端)向另一台计算机(服务端)请求信息

而 两个计算机之间的数据传输是通过数据包来传输的。如果发送的数据很大,那么该数据就会被拆分为很多小数据包来传输。

数据在计算机之间传输会经过很多节点,不同节点之间的数据传输会用到不同的协议,它通过 分层 的概念来把复杂的网络通信划分多个层次,给每一个层次分配不同的职责,层次内只专心做自己的事情就好,用“分而治之”的思想把一个“大麻烦”拆分成了数个“小麻烦”,从而解决了网络通信的难题。

网络分层模型有两个,分别是 TCP/IP 网络分层模型(四层协议)和 OSI 网络分层模型(七层协议),这里要介绍的是四层协议。

四层协议

  • 第一层叫 链路层(数据链路层/网络接口层),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,也叫 MAC 层
  • 第二层叫 网络层(网络互连层),IP 协议 在这一层。在链接层的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
  • 第三层叫 传输层,这个层次协议的职责是保证数据在 IP 地址标记的两点之间可靠地传输,是 TCP 协议工作的层次。TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。
  • 第四层叫 应用层,这一层有各种面向具体应用的协议。比较典型的就是 HTTP 协议

IP 协议

IP 协议负责把数据包送达目的主机

数据包要在互联网上进行传输,要符合网际协议(Internet Protocol,简称 IP)标准。互联网上不同的在线设备都有唯一的地址,计算机的地址就称为 IP 地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息。

如果要想把一个数据包从主机 A 发送给主机 B,那么在传输之前,数据包上会被附加上主机 B 的 IP 地址信息,这样在传输过程中才能 正确寻址。额外地,数据包上还会附加上主机 A 本身的 IP 地址,有了这些信息主机 B 才可以 回复信息 给主机 A。

这些附加的信息会被装进一个叫 IP 头的数据结构里。IP 头是 IP 数据包开头的信息,包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息。

UDP 协议

UDP 协议,即用户数据包协议(User Datagram Protocol),负责把数据包送达应用程序

UDP 协议是工作在 传输层 上的协议,和 TCP协议类似,它能够和应用程序打交道,IP 协议负责把数据包传输到目标电脑之后由 UDP 协议或 TCP 协议接手,告诉目标电脑把数据包交给哪个应用程序。

UDP 里面一个最重要的信息是 端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。通过端口号 UDP 就能把指定的数据包发送给指定的程序了,所以 IP 协议通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 协议通过端口号把数据包分发给正确的程序

和 IP 头一样,端口号会被装进 UDP 头里面,UDP 头再和原始数据包合并组成新的 UDP 数据包。UDP 头中除了目的端口,还有源端口号等信息。

在使用 UDP 发送数据时,有各种因素会导致数据包出错,虽然 UDP 可以校验数据是否正确,但是对于错误的数据包,UDP 并不提供重发机制,只是丢弃当前的包,而且 UDP 在发送之后也无法知道是否能达到目的地。

UDP 是 面向无连接 的协议,不用像 TCP 协议那样先三次握手建立连接,想发数据就发数据,是不够可靠的。而虽说 UDP 不能保证数据可靠性,但是传输速度却非常快,所以 UDP 会应用在一些关注速度、但不那么严格要求数据完整性的领域,比如在线视频、互动游戏等。

TCP 协议

TCP (Transmission Control Protocol)协议,即传输控制协议,负责把数据完整地送达应用程序

UDP 传输会存在两个问题:

  • 数据包在传输过程中容易丢失;
  • 大文件会被拆分成很多小的数据包来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而 UDP 协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。

TCP 协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,相对于 UDP,TCP 有下面两个特点:

  • 对于数据包丢失的情况,TCP 提供 重传机制
  • TCP 引入了 数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。

一个完整的 TCP 连接的生命周期包括了建立连接、传输数据和断开连接三个阶段。

  • 首先是 建立连接 阶段。
    • 这个阶段是通过 三次握手 来建立客户端和服务器之间的连接。
    • TCP 提供面向连接的通信传输。
    • 面向连接是指在数据通信开始之前先做好两端之间的准备工作。
    • 所谓三次握手,是指在建立一个 TCP 连接时,客户端和服务器总共要发送三个数据包以确认连接的建立。
  • 其次 传输数据 阶段。
    • 在该阶段,接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端。
    • 所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息,则判断为数据包丢失,并触发发送端的重发机制。
    • 同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。
  • 最后是 断开连接 阶段。数据传输完毕之后,就要终止连接了,涉及到最后一个阶段 四次挥手 来保证双方都能断开连接。

HTTP 协议

HTTP 协议,即 超文本传输协议(HyperText Transfer Protocol)。

  • 超文本:文字、图片、音频和视频等的混合体,含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。
  • 传输:HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
  • 协议:HTTP 是一个用在计算机世界里面的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。

即 HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

HTTP 允许浏览器向服务器获取资源,是构建互联网的重要基础技术,它没有实体,依赖许多其他的技术来实现,但同时许多技术也都依赖于它。我们可以把 HTTP 定义为“与 HTTP 协议相关的所有应用层技术的总和”

HTTP 协议有以下特点:

  • 灵活可扩展:可以任意添加头字段实现任意功能。
  • 可靠传输:基于 TCP/IP 协议“尽量”保证数据的送达。
  • 应用层协议:比 FTP、SSH 等更通用功能更多,能够传输任意数据。
  • 请求 - 应答模式:客户端主动发起请求,服务器被动回复请求。
  • 无状态:每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。

其它协议

  • HTTPS 协议:HTTP 是明文传输,不够安全;于是有了 HTTPS 协议,使用密文传输,"HTTP over SSL/TLS",是运行在 SSL/TLS 协议上的 HTTP,相当于 "HTTP+SSL/TLS+TCP/IP"。

  • SSL/TLS 协议一个负责加密通信的安全协议,通过 SSL 加密算法实现加密,在 TCP 三次握手建立连接后还要经过 TLS 连接,进一步保障安全通信。

  • DNS (域名系统):通过 使用有意义的名字来作为 IP 地址的等价替代;域名用 . 分隔成多个单词,级别从左到右逐级升高,最右边的被称为“顶级域名”;域名解析即是把域名解析映射为对应的IP地址。

  • URI/URL:URI 即 统一资源标识符,使用它就能够唯一地标记互联网上资源;URL 即统一资源定位符,俗称的“网址”,实际上是 URI 的一个子集。

  • 代理:代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答,有匿名代理、透明代理、正向代理(发送请求)、反向代理(响应请求);可以做的事情有负载均衡、内容缓存、安全防护、数据处理等。

数据传输流程

从浏览器发起 HTTP 请求开始:

  • 构建 HTTP 请求行:浏览器构建 HTTP 请求行信息,准备发起网络请求
  • 查找缓存:在发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件
  • DNS 域名解析:通过 DNS 系统拿到 IP 地址
  • 等待 TCP 队列:一个域名同时最多只能建立 6 个TCP连接,大于 6 个后面的请求需要等待
  • 建立 TCP 连接:通过三次握手和服务器建立连接
  • 发起 HTTP 请求:浏览器会向服务器发送请求行的数据包,它包括了请求方法、请求 URI 和 HTTP 版本协议

数据包从客户端到服务端的流程:

  • 应用层打包:浏览器(应用程序)发起 HTTP 请求会给数据包添加 HTTP 头部信息,并把数据包交给 传输层
  • 传输层附加 TCP 头:传输层会在数据包前面附加上 TCP头,组成新的 TCP 数据包,并交给网络层
  • 网络层附加 IP 头:网络层再将 IP 头附加到数据包上,组成新的 IP 数据包,并交给底层
  • 数据包被底层传输到服务端(另一台计算机)的网络层
  • 网络层拆包:在这里拆开 IP 头信息,并将拆开来的数据部分交给传输层
  • 传输层拆包:在传输层,数据包中的 TCP 头会被拆开,把数据部分交给上层的应用程序
  • 到达:最终,数据包就传输到了服务端上层应用程序这里。

服务器端处理 HTTP 请求流程:

  • 响应返回:返回响应头和响应体的数据。响应头包括协议版本和状态码;响应体包含了 HTTP 的实际内容
  • 断开连接
    • 一般情况下,服务器返回了请求数据,就要关闭 TCP 连接
    • 如果头字段包含keep-Alive,则会保持连接状态,保持 TCP 连接可以省下下次请求时需要建立连接的时间,提升资源加载速度。
  • 重定向:如果状态码为 30X,则需要进行重定向的操作,指向 Location 字段中的地址。

总结

  • 互联网中的数据是通过数据包来传输的,数据包在传输过程中会丢失或出错。
  • TCP/IP 网络分层模型(四层协议)的四层分别是链路层、网络层、传输层、应用层。
  • IP 协议负责把数据包送达目的主机
  • UDP 协议负责把数据包送达具体应用;不能保证数据可靠性,但是传输速度很快。
  • TCP 协议同样是负责把数据包送达具体应用;可以保证数据完整地传输,连接可分为三个阶段:建立连接、传输数据和断开连接。
  • HTTP 协议即超文本传输协议,是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
  • 还有其它协议如 HTTPS 协议、SSL/TLS 协议、DNS 系统、URI/URL 和代理等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光机上敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值