网络编程:网络协议简介

这是张富涛的第10篇原创

网络编程:网络协议简介

网络协议在网络编程中是一个比较神秘的概念,今天就由我们揭开它神秘的面纱吧。

1. 什么是网络协议?

网络协议是指对于网络中传输的数据格式的规定。在计算机网络通讯过程中,发送和接收方约定用一种协议(数据格式)进行通讯,发送数据的一方严格按照一个协议(数据格式)发送数据,接收方也严格按照协议(数据格式)进行解析,这样才能进行一次完整的网络通讯。

在本文中,我们不去研究TCP/IP和UDP协议是什么结构、又是怎么实现的,这些协议运行是传输层,在这些只有在深入底层开发时需要用到,而对于初学者来说,我们更多的是关心网络上传输的逻辑数据内容,也就是更多的是应用层上的网络协议,所以后续的内容均以实际应用的数据为基础来介绍网络协议的概念。

那么下面我们用一个简单的例子介绍网络协议:

比如协议为:只能对小明的优点说yes,对缺点说no

问:小明爱干净吗? 

答:(经过判断,得出爱干净是优点)回答“yes”

问:小明爱偷懒吗?

答:(经过判断,得出爱偷懒是缺点)回答“no”

这就是通讯的两方遵守的约定,在网络通讯中可以理解为“协议”,而如果这时候提问的一方突然问:“小明的七大姑的八大姨的名字叫什么?”我们肯定回答不出来,因为我们的约定中并没有这一项,所以我们回复的信息只能是:“通讯错误”。

这么说起来,其实不难理解最初介绍“网络协议是指对于网络中传输的数据格式的规定”的意思了。

在应用层面,我们也可以自己制定一些协议,只要有人用,有人跟你约定好,这个协议就是有效的。

2. 再举个例子

拿我最近在做的“万方数据知识服务新平台”中“微信支付”的功能来举例:我们在做的是原生的“微信扫码支付”,其中微信就规定了一套API供用户来提交,拿“生成微信订单”来举例,必须要以xml格式传递以下样式参数:

<xml>
        <appid>公众账号ID</appid>
        <mch_id>商户号</mch_id>
        <detail>商品详情</detail>
        <notify_url>通知地址</notify_url>
        <out_trade_no>商户订单号</out_trade_no>
        <total_fee>下单金额(以分为单位)</total_fee>
        <sign>签名</sign>
        ...............
</xml>

由此,我们必须按照这样的规则要求去传递数据,这样微信才能返回正确的回执。回执如下:

<xml>
        <return_code>通讯成功或失败</return_code>
        <return_msg>返回信息</return_msg>
        <result_code>业务处理结果成功或失败</result_code>
        <sign>签名</sign>
        <code_url>生成订单的支付二维码</code_url>
</xml>

如此,如果我们的参数传错了,或者通讯失败,都会在回执中拿到信息,如果一切顺利并且微信处理成功,我们就可以高高兴兴的拿着微信的二维码展示给用户让用户支付啦。

其实以上就是微信制定的一套协议,其实我在自己做前后端分离时,也研究了一个服务器端传输给移动端的协议例子:

如果我们的客户端使用这种数据格式,那么就能够识别出我们服务器端传递的信息了。

讲到现在,你可能不禁会说,这不就是接口嘛?没错,其实他们要解决的问题是一样的。在网络编程中,对于同一个网络程序来说,一般都会涉及到两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式,在实际设计时,需要一一对应。这就是最基本的网络协议的知识。

3. 常用协议

那么这就是网络协议了,下面我们看一下最常见的网络协议都有哪些吧:

  • TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/Internet协议 [运行在传输层]
  • UDP(User Datagram Protocol)用户数据报协议 [运行在传输层]
  • HTTP1.1(Hypertext Transfer Protocol Vertion 1.1)超文本传输协议-版本1.1[运行在应用层]
  • HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 [运行在应用层]
  • SMTP(Simple Mail Transfer Protocol)简单邮件传送协议 [运行在应用层]
  • FTP(File Transfer Protocol)文件传输协议 [运行在应用层]

咦,看到这里可能我们都会有一些疑惑,为什么有些协议是在传输层,有些协议又是用在应用层,那么“TCP协议”和“HTTP协议”的区别又是在哪呢?

首先我们要注意:

1、TCP、UDP不是应用层协议,是传输层协议。

2、应用层所谓的应用,就是为了一个具体的应用场景而做的协议,应用层协议之间的区别,就是应用之间的区别。HTTP和FTP有什么区别,就是HTTP用来传输超文本而FTP用来传文件。

3、而其他的“HTTP、FTP、SMTP 等所谓的“Application-layer Protocol”协议”指的是在TCP/IP 通讯协议框架下具体实现特定功能的应用(HTTP 用来实现超文本传输,FTP文件传输,SMTP处理邮件等等),两者的关系通俗的说:

TCP和UDP以及IP协议是互联网络通讯的基础,盖好的毛坯房,而应用协议是基于毛坯房的具体装修(功能实现),最后呈现可以使用的应用功能,但如果没有按照基础协议规定的内容进行装修,那将是不被允许的。



---------------

公众号:张富涛的学习笔记(ID:futaoNT)

知乎:张富涛

优快云:张富涛

这是一个在夜晚可以靠编程拯救世界的程序员,关注他将在第一时间获悉他的知识、工作心得!

长按下图二维码关注:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值