这是张富涛的第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)

知乎:张富涛

CSDN:张富涛

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

长按下图二维码关注:

网络编程:网络协议简介相关推荐

  1. (转)C#网络编程(订立协议和发送文件) - Part.4

    源码下载:http://www.tracefact.net/SourceCode/Network-Part4.rar C#网络编程(订立协议和发送文件) - Part.4 文件传输 前面两篇文章所使用 ...

  2. windows网络编程——telnet协议

     1.windows网络编程--telnet协议 Telnet是最老的Internet应用,起源于1969年的ARPANET,名字是"电信网络协议(TelecommuicationNetwo ...

  3. 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发

    深入分析websocket协议,从3个方面设计网络应用层协议 视频讲解如下: 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/ ...

  4. Java网络编程(网络基础(IP端口号网络通信协议)、TCP编程、UDP编程和URL编程原理以及常用方法的实例)

    网络编程 网络基础概述 计算机网络:   把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信息.共享硬件.软件.数据信息等 ...

  5. java 编程原理_Java网络编程 -- 网络编程基础原理

    Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...

  6. epoll原理剖析以及reactor模型应用丨网络编程|网络IO|select|poll|socket|reactor多核实现丨c/c++linux服务器开发

    epoll原理剖析以及reactor模型应用 视频讲解如下,点击观看: epoll原理剖析以及reactor模型应用丨网络编程|网络IO|select|poll|socket|reactor多核实现丨 ...

  7. 网络编程——常用协议解析

    ** 1.网络基础知识 ** 1.1> 什么是OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织?提出的概念模型,试图?供一个使 ...

  8. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块-TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  9. python tcp协议_python 网络编程 -- Tcp协议

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 ...

  10. 网络编程-HTTPS协议的实现原理

    HTTP传输协议缺点 之前几篇文章中详细讲解了TCP/IP协议栈中的几个协议,其中个就有对HTTP做了一个比较详细的讲解.HTTP是基于TCP进行传输的,其中传输的内容都是明文报文数据,如果我是一个黑 ...

最新文章

  1. C语言第一次实验报告
  2. c语言贪吃蛇最简单,熬书几个月,终于编出简易的贪吃蛇了,VS2013
  3. 【视频回放与课件】Build your AI solution with MLOps
  4. C语言基于dag的基本块优化,基于dag的基本块优化参考.docx
  5. XAF-BI.Dashboard模块概述 web/win
  6. 全国计算机一级考试试题大题,2016年全国计算机一级考试试题汇集
  7. 取出字符串strName前4个汉字
  8. 企业发展如何启动云的力量
  9. 深度解析脑机接口技术的现状与未来!
  10. 数字基带传信号传输与码间串扰
  11. IntelliJ IDEA 2017 破解
  12. [任天堂社长访谈之:Nintendo 3DS内置软件
  13. mime 类型列表_MIME类型的完整列表
  14. 上市公司9月23日晚间公告速递
  15. 山东省计算机软件比赛,山东省大学生软件设计大赛报名通知
  16. TeamView 无法捕捉画面问题的解决办法
  17. 二叉树高度 [log2n]+1与log2(n+1)是否相等
  18. IDEA全局搜索快捷键(ctrl+shift+F)失效修复
  19. haoi2008木棍分割解题报告
  20. 1095 习题6-9 折半查找

热门文章

  1. Google(谷歌)正在构造可怕的帝国
  2. 微信小程序cover-image手机上不显示问题
  3. 悟透JavaScript-对象素描
  4. deepin 安装到移动硬盘_系统装机|硬盘里的Linux之deepin 20系统安装教程
  5. 用java编写圆锥_用java中的graphics画圆锥的代码
  6. 秋招手撕代码:4bit转换为1bit,且是慢时钟域到快时钟域
  7. R语言如何绘制PCoA主坐标分析(30)
  8. c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
  9. c++新技能不断get中
  10. HDU 4125 Moles 段树+KMP