网络协议的意义-阿里云开发者社区

开发者社区> javaedge> 正文

网络协议的意义

简介: 网络协议的意义
+关注继续查看

如今的世界,正是因为互联网,才连接在一起。

当"Hello World!"从显示器打印出来的时候,还记得你激动的心情吗?

1.png

作为程序员,一定看得懂上面这一段文字。这是每一个程序员向计算机世界说“你好,世 界”的方式。

但是,你不一定知道,这段文字也是一种协议,是人类和计算机沟通的协议,只有通过这种协议,计算机才知道我们想让它做什么。


1 协议三要素

当然,这种协议还是更接近人类语言,机器不能直接读懂,需要进行翻译,翻译的工作交给编译,也就是程序员常说的compile。这个过程比较复杂,其中的编译原理非常复杂,这里不详述。

2.png

可以看出,计算机语言作为程序员控制一台计算机工作的协议,就具备了协议的三要素


1.1 语法

这一段内容要符合一定的规则和格式。

例如,括号要成对,结束要使用分号等。


1.2 语义

这一段内容要代表某种意义。

例如数字减去数字是有意义的,数字减去文本,一般来说就没有意义。


1.3 顺序

先干啥,后干啥。

例如,可以先加上某个数值,然后再减去某个数值。


会了计算机语言,你就能够教给一台计算机完成你的工作了。恭喜你,入门了!

但是,要想打造互联网世界,只教给一台机器做什么是不够的,你需要学会教给一大片机器做什么。这就需要网络协议。只有通过网络协议,才能使一大片机器互相协作、共同完成一件事


当你想要买一个商品,常规的做法就是打开浏览器,输入购物网站的地址。浏览器就会给你显示 一个缤纷多彩的页面。

那你有没有深入思考过,浏览器是如何做到这件事情的?它之所以能够显示缤纷多彩的页面,是 因为它收到了一段来自HTTP协议的“东西”。举个例子,格式就像下面这样

HTTP/1.1 200 OK
Date: Mon, 19 July 2019 16:50:26 GMT
Content-Type: text/html;charset=UTF-8
Content-Language: zh-CN
<!DOCTYPE html>
<html>
<head>
<base href="https://www.google.com/" />
<meta charset="utf-8"/> <title>谷歌搜索</title>

这符合协议的三要素吗?我带你来看一下


符合语法,也就是说,只有按照上面那个格式来,浏览器才认。

例如,上来是状态,然后是首部,然后是内容

符合语义,就是要按照约定的意思来

例如,状态200,表述的意思是网页成功返回。如果不成功,就是我们常见的“404”

符合顺序,你一点浏览器,就是发送出一个HTTP请求,然后才有上面那一串HTTP返回的

东西

浏览器显然按照协议商定好的做了,最后一个五彩缤纷的页面就出现在你面前了。


2 常用网络协议

你先在浏览器里面输入 https://www.google.com ,这是一个URL。

浏览器只知道名字 是“www…google.com”,但是不知道具体的地点,所以不知道应该如何访问。

于是,它打开地址簿去查找。可以使用一般的地址簿协议DNS去查找,还可以使用另一种更加精准的地址簿查找协议HTTPDNS。

无论用哪一种方法查找,最终都会得到这个地址:93.123.23.1。这个是IP地址,是互联网世界的“门牌号”。

知道了目标地址,浏览器就开始打包它的请求。对于普通的浏览请求,往往会使用HTTP协议

但是对于购物的请求,往往需要进行加密传输,因而会使用HTTPS协议。无论是什么协议,里 面都会写明“你要买什么和买多少”。

3.png

应用层

DNS 、 HTTP、 HTTPS 所 在 的 层

传输层

经过应用层封装后 , 浏 览 器 会 将 应 用 层 的 包 交给下一层去完成,通过socket编程来实现。

传输层有两种协议

是无连接的协议UDP

面向连接的协议TCP

对于支付来讲,往往使用TCP协议。所谓的面向连接就是,TCP会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达。

TCP协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作 系统往往通过端口来判断,它得到的包应该给哪个进程

4.png

网络层

传输层封装完毕后,浏览器会将包交给操作系统的该层

网络层的协议是IP协议。在IP协议里面会有源IP地址,即浏览器所在机器的IP地址和目标IP地址,也即电商网站所在服务器的IP地址

5.png

操作系统既然知道了目标IP地址,就开始想如何根据这个门牌号找到目标机器。操作系统往往会 判断,这个目标IP地址是本地人,还是外地人。如果是本地人,从门牌号就能看出来,但是显然 电商网站不在本地,而在遥远的地方。


操作系统知道要离开本地去远方。虽然不知道远方在何处,但是可以这样类比一下


如果去国外 要去海关

去外地就要去网关

而操作系统启动的时候,就会被DHCP协议配置IP地址,以及默认的网关的IP地址192.168.1.1


操作系统如何将IP地址发给网关呢?

在本地通信基本靠吼,于是操作系统大吼一声,谁是 192.168.1.1啊?

网关会回答它,我就是,我的本地地址在村这头

这个本地地址就是MAC地址,而大吼的那一声是ARP协议

6.png

MAC层

于是操作系统将IP包交给了下一层,MAC层

网卡再将包发出去。由于这个包里面是有 MAC地址的,因而它能够到达网关。

网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到某个 IP地址应该怎么走,这个叫作路由表。


路由器有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相 当于一个局域网,在每个国家内部,都可以使用本地的地址MAC进行通信。

一旦跨越城关,就需要拿出IP头来,里面写着贫僧来自东土大唐(就是源IP地址),欲往西天拜佛求经(指的是目标IP地址)。路过宝地,借宿一晚,明日启行,请问接下来该怎么走啊?

7.png

城关往往是知道这些“知识”的,因为城关和临近的城关也会经常沟通。到哪里应该怎么走,这种 沟通的协议称为路由协议,常用的有OSPF和BGP

8.png

城关与城关之间是一个国家,当网络包知道了下一步去哪个城关,还是要使用国家内部的MAC 地址,通过下一个城关的MAC地址,找到下一个城关,然后再问下一步的路怎么走,一直到走 出最后一个城关。


最后一个城关知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标IP啊?

目标服 务器就会回复一个MAC地址。网络包过关后,通过这个MAC地址就能找到目标服务器。


目标服务器发现MAC地址对上了,取下MAC头来,发送给操作系统的网络层。发现IP也对上

了,就取下IP头。IP头里会写上一层封装的是TCP协议,然后将其交给传输层,即TCP层


在这一层里,对于收到的每个包,都会有一个回复的包说明收到了。这个回复的包绝非这次下单 请求的结果,例如购物是否成功,扣了多少钱等,而仅仅是TCP层的一个说明,即收到之后的回 复。当然这个回复,会沿着刚才来的方向走回去,报个平安。


因为一旦出了国门,西行路上千难万险,如果在这个过程中,网络包走丢了,例如进了大沙漠, 或者被强盗抢劫杀害怎么办呢?因而到了要报个平安。


如果过一段时间还是没到,发送端的TCP层会重新发送这个包,还是上面的过程,直到有一天收 到平安到达的回复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次

对于浏览 器来讲,就发送了一次下单请求,TCP层不断自己闷头重试。除非TCP这一层出了问题,例如连 接断了,才轮到浏览器的应用层重新发送下单请求


当网络包平安到达TCP层之后,TCP头中有目标端口号,通过这个端口号,可以找到电商网站的 进程正在监听这个端口号,假设一个Tomcat,将这个包发给电商网站

9.png

电商网站的进程得到HTTP请求的内容,知道了要买东西,买多少

往往一个电商网站最初接待请求的这个Tomcat只是个接待员,负责统筹处理这个请求,而不是所有的事情都自己做。

例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告诉管理库存的进 程,库存要减少多少,要告诉支付的进程,应该付多少钱等


如何告诉相关的进程呢?往往通过RPC调用,即远程过程调用的方式来实现

远程过程调用就是当告诉管理订单进程的时候,接待员不用关心中间的网络互连问题,会由RPC框架统一处理

RPC框架有很多种,有基于HTTP协议放在HTTP的报文里面的,有直接封装在TCP报文里面的。


当接待员发现相应的部门都处理完毕,就回复一个HTTPS的包,告知下单成功。这个HTTPS的 包,会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显示支付成功。


3 总结

一个简简单单的下单过程,中间牵扯到这么多的协议。而管理一大片机器,更是一件 特别有技术含量的事情。除此之外,像最近比较火的云计算、容器、微服务等技术,也都需要借 助各种协议,来达成大规模机器之间的合作。

10.png

参考

趣谈网络协议


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8659 0
网络协议之:WebSocket的消息格式
我们知道WebSocket是建立在TCP协议基础上的一种网络协议,用来进行客户端和服务器端的实时通信。非常的好用。最简单的使用WebSocket的办法就是直接使用浏览器的API和服务器端进行通信。 本文将会深入分析WebSocket的消息交互格式,让大家得以明白,websocket到底是怎么工作的。
85 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2849 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10488 0
Linux网络协议栈(二)——套接字缓存(socket buffer)
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、    套接字缓存skb由两部分组成:(1)    报文数据:它保存了实际在网络中传输的数据;(2)    管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。
619 0
+关注
javaedge
关注公众号:JavaEdge,后台回复面试,领取更多大厂求职资源。曾在百度、携程、华为等大厂搬砖,专注Java生态各种中间件原理、框架源码、微服务、中台等架构设计及落地实战,只生产硬核干货!
2317
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载