大家好,欢迎来到IT知识分享网。
网络协议
这一篇文章主要是概述网络协议以及网络协议的分层。 首先,我们来思考一个问题,如何让两台计算机甚至多台计算机之间进行通信呢?回答这个问题之前,我们先来想想生活中两个人是如何交流的呢? 这个我们都知道,是通过语言,相同的语言(例如:汉语)。只有操着相同语言的两个人才能进行交流,这里的语言就是一种协议。同样的让计算机交流起来也需要通过协议来处理。
什么是协议呢?
下面我们通过下面这句话来总结协议的几个要素:
我吃完了饭。 这是一句很普通的汉语句子,这个句子符合汉语的语法(主(我)谓(吃完了)宾(饭))、
然后也是一段有意义的话,表明了我当前做完了某件事情。最后是这段话也是顺序的,我们不能说 饭吃完了我。这样是没意义的。
通过上面这个例子,我们可以总结出协议三个要素:
1. 语法:语法就是一段内容要符合一定规则和格式,例如括号要成对,结束要有分号,汉语句子要有主谓宾
2. 语义: 就是这一段内容代表了某种意义,例如:数字减去数字是有意义的,数字减去文本是没有意义的。
3. 顺序:就是先干啥,后干啥,比如先起床,后穿衣服。
计算机之间进行通信就需要网络协议。例如:我们输入 http://www.baidu.com 。我们就可以得到如下响应信息:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 2381
Content-Type: text/html
Date: Sun, 15 Mar 2020 08:26:41 GMT
Etag: "588604c8-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<html> <head><meta http-equiv=content-type content=text/html;charset=utf-8>
<title>百度一下,你就知道</title>
这段响应的报文就符合协议的三要素。
第一:符合语法,只有按照上面那个格式来,浏览器才会认,例如:首先是响应状态,然后是首部,最后是请求体。
第二:符合语义,就是按照约定的意思来。例如:状态200,表述的意思是网页成功返回,如果不成功的话,就是我们常见的404,400等错误
第三:符合顺序,你点击浏览器,就会发送出一个HTTP请求,然后,才会有上面一串HTTP的响应内容。
认识网络协议
古代战报传送
我们先来看看古代战报传送的例子:将军发命令,下属来写。写完之后找人包装盖章,然后,把公文交给信号兵,没信号兵每过一个关卡都要盖公函,到达京城之后,再一层一层的往上传。先看是发给哪个部门的,去掉一层包装,再把内容发给上一级,最终送到皇上手上,皇上大人无需知道经过了哪些驿站关卡。只需要知道哪个将军发的,发的什么。用中文写的还是用英文写的就OK了。
从架构分层的角度上我们来分析下这个过程。
这里的将军和皇上相当于应用层,由将军发送命令,发出信件,将军是源地址,由皇上来接受信件,皇上是目标地址
这里的信号兵就是传输层,由他来传送信件。
这里的关卡相当于物理层,由他来指导信号兵的行进方向,因为,京城很远,直接让信号兵一个人跑,他可能完全不知道去的路,所以,这里关卡的作用就是主要是盖章告诉给信号兵指明去京城的路。
同样的,为了明确职责,网络协议也进行了分层。下面我们就来看看网络的分层吧。
网络分层
现在我们来看看如下场景: 假设计算机B上有接口getJson2.do
,
当传入的请求参数是{"name":"张三","id":12}
时,响应的数据是{"name":"张三","id":12,"age":34,"sex":"男"}
,现在计算机A要请求计算机B的这个接口。
- 如下,写好请求地址
http://192.168.216.96:8080/ssm-req/json/getJson2.do
和请求参数{'name':'sange','age':12}
。设置好请求头application/json;charset=UTF-8
。请求发出后,首先到达HTTP协议所在的应用层,HTTP头主要是封装请求方法,请求地址,请求头的格式等信息。封装后的结果如下图所示。应用层加上HTTP头之后,就将包交给其下一层去处理。
- 应用层的下一层是传输层(TCP层),传输层的有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP,很显然,请求接口获取数据使用的面向连接的TCP协议。TCP协议里面会有两个端口,一个是计算机A(请求服务器)监听的端口,一个是计算机B(响应服务器)监听的端口。操作系统可以通过端口来判断,它得到的包应该给哪个进程,这就相当于告诉信号兵这封信要给谁。经过TCP层封装后的结果如下所示,传输层加上TCP头之后,然后把包给他的下一层处理。
- 传输层的下一层就是网络层(IP层)。网络层的协议是IP协议,在IP协议里面会有源IP地址,即计算机A(请求服务器)的IP地址和目标IP地址,即计算机B(目标服务器)的IP地址,网络层会加上IP头,然后把包给他的下一层。
- 网络层的下一层就是数据链路层(MAC层),MAC层有ARP和RARP(Reverse Address Resolve Protocol)即逆地址解析协议,该协议实现了IP地址和物理地址(MAC地址)之间的转换,经过MAC层包装加上MAC头之后,就最终就是我们需要的包。请求到达计算机B之后
- 计算机B(目标服务器)发现MAC地址对上了,取下MAC头来,发送给操作系统的网络层。发现IP也对上了,就取下IP头,IP头里会写上一层封装的TCP协议,然后将其交给传输层,即TCP层。
在这一层,对于收到的每个包,都会有一个回复的包说明收到了,这个回复的包绝非这次请求接口的结果,而仅仅是TCP层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去。
网络协议的分层
总结
本文简单的概述了网络协议的分层,以及请求包在网络上的传输过程。
参考
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22641.html