简单的网络协议概述

简介: 这一篇文章主要是概述网络协议以及网络协议的分层。 首先,我们来思考一个问题,如何让两台计算机甚至多台计算机之间进行通信呢?回答这个问题之前,我们先来想想生活中两个人是如何交流的呢? 这个我们都知道,是通过语言,相同的语言(例如:汉语)。只有操着相同语言的两个人才能进行交流,这里的语言就是一种协议。同样的让计算机交流起来也需要通过协议来处理。

网络协议

这一篇文章主要是概述网络协议以及网络协议的分层。 首先,我们来思考一个问题,如何让两台计算机甚至多台计算机之间进行通信呢?回答这个问题之前,我们先来想想生活中两个人是如何交流的呢? 这个我们都知道,是通过语言,相同的语言(例如:汉语)。只有操着相同语言的两个人才能进行交流,这里的语言就是一种协议。同样的让计算机交流起来也需要通过协议来处理。

什么是协议呢?

下面我们通过下面这句话来总结协议的几个要素:

我吃完了饭。 这是一句很普通的汉语句子,这个句子符合汉语的语法(主(我)谓(吃完了)宾(饭))、

然后也是一段有意义的话,表明了我当前做完了某件事情。最后是这段话也是顺序的,我们不能说 饭吃完了我。这样是没意义的。

通过上面这个例子,我们可以总结出协议三个要素:

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头之后,就将包交给其下一层去处理。

896365d433010d8740393ced62c530ce_20200315214747713.png

应用层的下一层是传输层(TCP层),传输层的有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP,很显然,请求接口获取数据使用的面向连接的TCP协议。TCP协议里面会有两个端口,一个是计算机A(请求服务器)监听的端口,一个是计算机B(响应服务器)监听的端口。操作系统可以通过端口来判断,它得到的包应该给哪个进程,这就相当于告诉信号兵这封信要给谁。经过TCP层封装后的结果如下所示,传输层加上TCP头之后,然后把包给他的下一层处理。

8892230e4f1ae2679e6655b8501dd1bb_20200315214815255.png

传输层的下一层就是网络层(IP层)。网络层的协议是IP协议,在IP协议里面会有源IP地址,即计算机A(请求服务器)的IP地址和目标IP地址,即计算机B(目标服务器)的IP地址,网络层会加上IP头,然后把包给他的下一层。

1bd2873895ef59c1e397b7678cd66722_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

网络层的下一层就是数据链路层(MAC层),MAC层有ARP和RARP(Reverse Address Resolve Protocol)即逆地址解析协议,该协议实现了IP地址和物理地址(MAC地址)之间的转换,经过MAC层包装加上MAC头之后,就最终就是我们需要的包。请求到达计算机B之后

c06b6b133af4f6f1a02b2c8c8169a95a_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

计算机B(目标服务器)发现MAC地址对上了,取下MAC头来,发送给操作系统的网络层。发现IP也对上了,就取下IP头,IP头里会写上一层封装的TCP协议,然后将其交给传输层,即TCP层。

在这一层,对于收到的每个包,都会有一个回复的包说明收到了,这个回复的包绝非这次请求接口的结果,而仅仅是TCP层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去。

网络协议的分层

总结

本文简单的概述了网络协议的分层,以及请求包在网络上的传输过程。

参考

刘超老师的趣谈网络协议

TCP/IP协议四层模型


相关文章
|
2月前
|
机器学习/深度学习 运维 安全
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
金融交易网络与蛋白质结构的共同特点是它们无法通过简单的欧几里得空间模型来准确描述,而是需要复杂的图结构来捕捉实体间的交互模式。传统深度学习方法在处理这类数据时效果不佳,图神经网络(GNNs)因此成为解决此类问题的关键技术。GNNs通过消息传递机制,能有效提取图结构中的深层特征,适用于欺诈检测和蛋白质功能预测等复杂网络建模任务。
81 2
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
|
2月前
|
SQL 存储 安全
网络安全与信息安全概述####
本文探讨了网络安全(Cybersecurity)和信息安全(Information Security)的基本概念及其差异,重点介绍了网络安全漏洞、加密技术及安全意识在信息保护中的重要性。本文旨在通过深入分析这些关键技术和策略,提升对信息安全整体性的理解,帮助读者在数字化时代更好地应对信息安全挑战。 ####
|
7月前
|
网络协议 网络安全 网络性能优化
【计算机网络概述】第一章:概论 1.2什么是网络边缘
【计算机网络概述】第一章:概论 1.2什么是网络边缘
|
3月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
3月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
|
5月前
|
存储 网络协议 安全
|
5月前
|
数据采集 移动开发 Python
六:《智慧的网络爬虫》— 正则表达式概述
【8月更文挑战第7天】本文介绍了正则表达式的基本概念、用途,如表单验证和爬虫,以及Python中re模块的使用,包括match(),match()函数、元字符、预定义字符集、重复匹配、位置匹配、非贪婪模式和re模块的常用方法如compile(),search(),findall(),split(),sub()等。
80 1
六:《智慧的网络爬虫》— 正则表达式概述
|
4月前
|
Linux 调度 Docker
容器网络概述
【9月更文挑战第9天】容器技术利用如命名空间(namespace)和控制组(cgroup)等技术创建隔离环境,实现资源限制与独立运行。命名空间避免命名冲突,cgroup则能对CPU、内存等资源进行限制。容器状态可通过镜像保存并标准化,确保在任何环境中都能复现相同状态。
|
5月前
|
存储 NoSQL MongoDB
八:《智慧的网络爬虫》— MongoDB概述
【8月更文挑战第14天】本篇文章简单介绍了MongoDB的下载和安装以;其基本的操作语法,并附上每个语法的代码示例,为后续的爬虫学习打下基础
54 0
八:《智慧的网络爬虫》— MongoDB概述
|
5月前
|
SQL 数据采集 关系型数据库
七:《智慧的网络爬虫》— MySQL概述
【8月更文挑战第11天】本篇文章详细的介绍了MySQL数据库的安装与使用;并讲述了MySQL的基本操作及其应用语法
59 0
七:《智慧的网络爬虫》— MySQL概述

热门文章

最新文章