网络中存在多台主机,为保证主机间能顺利通讯,且通信双方可以获取到准确、有效的数据,应制订一组用于数据传输的规则,这组规则就是协议。

协议需要预先制定,同时,为确保网络通讯过程中对各种事件的应对能“有法可依”,协议应面面俱到。但网络间的通信需要经历复杂的过程,一段复杂过程中的各项操作会出现各种各样的结果,为复杂过程的多种结果也会是复杂的。为了简化协议,人们考虑按照通信过程中各项工作的性质,将工作分为不同层次,并为每一层制定各自的协议。

制定协议时为网络间通信过程所划分的层次通常称为计算机网络的体系结构。下面先对网络体系结构进行讲解,再基于体系结构中的层次介绍常用的网络协议。

1. 网络体系结构

计算机网络中常见的体系结构有OSI(Open System Interconnect,开放式系统互联模型)和TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议模型)。

OSI由国际标准协会ISO制定,共分为七层,由上而下依次为应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,虽然OSI由ISO制定,但其实用性较差,并未得到广泛应用。

在OSI诞生时,因特网已实现了全世界的基本覆盖,因此市面上应用最广泛的体系结构为因特网中使用的TCP/IP体系结构,该结构包含四层,分别为应用层、传输层、网际层和网络接口层。

此外,在计算机网络中通常以一种包含五层协议的体系结构来讲解各层之间的功能与联系,这种体系结构结合OSI和TCP/IP的优点,分为应用层、传输层、网络层、数据链路层和物理层。

以上三种体系结构中各层的对应关系如图1所示。

图1 计算机网络体系结构

五层协议体系结构中各层的功能分别如下:

(1)物理层。物理层是计算机体系结构的最底层,它为设备之间的数据传输提供可靠的环境。

(2)数据链路层。数据链路层简称链路层,该层将从网络层获取的数据报组装成帧,在网络结点之间以帧为单位传输数据。

(3)网络层。为分组交换网上的不同主机提供通信服务,在进行通信时,将从传输层获取的报文段或数据报封装成分组或包,数据或包通常称为数据报。

(4)传输层。为应用进程提供连接服务,实现连接两端进程的会话。

(5)应用层。为应用进程提供服务,定义了应用进程间通信和交互的规则。

2. 协议

计算机网络通信基于TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议),TCP/IP实际上并不是协议,而是协议族,它由多种协议构成,包括TCP协议、UDP协议、IP协议等等,其中TCP、UDP协议应用在传输层;IP协议应用在网络层。

(1)TCP协议

TCP协议即传输控制协议(Transmission Control Protocol),该协议是一种面向连接的、可靠的、基于字节流的传输协议。在传递数据之前,收发双方会先通过一种被称为“三次握手”的协商机制使通信双方建立连接,为数据传输做好准备。为了防止报文段丢失,TCP会给每个数据段一个序号,使接收端按序号顺序接收数据。若接收端正常接收到报文段,向发送端发送一个确认信息;若发送端在一定的时延后未接收到确认信息,便假设报文段已丢失,并重新向接收端发送对应报文段。此外,TCP协议中定义了一个校验函数,用于检测发送和接收的数据,防止产生数据错误。

通信结束后,通信双方经过“四次握手”关闭连接。因为TCP连接是全双工的(全双工指交换机在发送数据的同时也能够接收数据,两者同步进行,类似语音通话,双方在说话的同时也能够听到对方的声音),所以每个方向必须单独关闭连接,即连接的一端需先发送关闭信息到另一端,当关闭信息发送后,发送关闭信息的一端不会再发送信息,但另一端仍可向该端发送信息。

(2)UDP协议

UDP协议即用户数据报协议(User Datagram Protocol),它是一种无连接的传输层协议。 UDP的收发双方不存在连接,当按照UDP协议传输数据时,发送方使用套接字文件发送数据报给接收方,之后可立即使用同一个套接字发送其它数据报给另一个接收方;同样的,接收方也可以通过相同的套接字接收由多个发送方发来的数据。

UDP不对数据报进行编号,它不保证接收方以正确的顺序接收到完整的数据,但会将数据报的长度随数据发送给接收方。虽然UDP面向无连接的通信,不能如TCP般很好地保证数据的完整性和正确性,但UDP处理速度快,耗费资源少,因此在对数据完整性要求低、对传输效率要求高的应用中一般使用UDP协议传输数据。

(3)IP协议

IP协议的两个基本功能为寻址和分段。传输层的数据封装完成后没有直接发送到接收方,而是先递达网络层;网络层又在原数据报前添加IP首部,封装成IP数据报,并解析数据报中的目的地址,为其选择传输路径,将数据报发送到接收方,IP协议中这种选择道路的功能称为路由功能。此外,IP协议可重新组装数据报,改变数据报的大小,以适应不同网络对包大小的要求。需要说明的是,IP协议不提供端到端或结点到结点的确认,只检测报头中的校验码,不提供可靠的传输服务。

虽然各层使用的协议互不相同,但协议通常都由如下3个部分组成:

(1)待交互数据的结构和格式;

(2)进行交互的方式,包括数据的类型、对数据的处理动作等;

(3)事件实现顺序的说明。

一组完整的协议不仅需要考虑通信双方在正常情况下的动作,还应考虑到通信时可能出现的异常,并对异常情况下通信双方的动作做出规定。

猜你喜欢:

python网络通信协议_Python网络概述:协议与体系结构的运用相关推荐

  1. python 网络编程_Python网络编程(原书第2版)

    Python网络编程(原书第2版) 作者:(美)埃里克·周(Eric Chou) 著 出版日期:2019年06月 文件大小:54.50M 支持设备: ¥68.00 适用客户端: 言商书局 iPad/i ...

  2. python 网络编程_Python网络编程(六)

    回顾 在<Python进阶记录之网络编程(五)>中,我们介绍了如何利用TCP服务端和客户端实现一个简单的点对点聊天,区别基于TCP协议和UDP协议的不同之处.今天我们讲一下如何利用多进程和 ...

  3. python udp通信_Python网络编程(三)

    回顾 在<Python进阶记录之网络编程(二)>中,我们介绍了UDP端口号的基本概念和作用以及Python中UDP服务端的端口绑定和简单创建.今天我们利用UDP server和UDP cl ...

  4. python socket 域名_Python网络编程中的套接字名和DNS解析。

    距离上一次TCP的文章,这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理. 下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址 ...

  5. python网络提示_python 网络发现

    书籍:掌握Python的网络和安全 Mastering Python for Networking and Security - 2018.pdf 简介 掌握Python的网络和安全 掌握Python ...

  6. python 爬虫论_Python网络爬虫(理论篇)

    欢迎关注公众号:Python爬虫数据分析挖掘,回复[开源源码]免费获取更多开源项目源码 网络爬虫的组成 网络爬虫由控制节点,爬虫节点,资源库构成. 网络爬虫的控制节点和爬虫节点的结构关系 控制节点(爬 ...

  7. 网络通信协议(7层协议)

    mac地址.IP地址和端口号 看了很多遍,才整理出来我对整个通信过程的理解,大致如下,后期会不断学习补充更正: 在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:mac地址.IP ...

  8. python 网络渗透_python 网络编程(渗透与编程一)

    原博文 2016-03-31 18:17 − 0x00 网络一直是黑客们最喜欢的竞技场.通过简单的网络访问,攻击者可以做任何想做的事情.例如主机扫描,数据包注入,远程攻击等.但是当我们通过某种方法进入 ...

  9. python网络信息提取_python网络爬虫与信息提取I

    一.Requests库的安装 安装Requests非常简单,只需一行代码即可.首先以管理员身份运行cmd,输入如下代码: 1.pip的安装 其实一般安装的python其Script文件包下都会自带有p ...

最新文章

  1. m_Orchestrate learning system---七、如何快速学好前端
  2. 了解和入门注解的应用
  3. 关于python中requests模块导入问题-python引入requests模块报错
  4. JUC并发编程七 并发架构--wait/notify
  5. 连载《一个程序猿的生命周期》- 32、两个企业急着上项目,紧急赶赴现场了解情况...
  6. Ribbon-2通过代码自定义配置ribbon
  7. 网易前端进阶特训营,邀你免费入营!一举解决面试晋升难题!
  8. LDR 、ADR介绍
  9. Win7旗舰版禁止修改文件属性的设置方法
  10. TCP/IP网络协议栈:ARP协议详解
  11. SQL中GROUP BY的理解
  12. expec不管异常 try_JUnit测试异常
  13. Zookeeper应用场景
  14. python 正则表达式 分组_正则表达式之分组的用法
  15. 都别争了!分布式锁也是锁
  16. c语言命名规则 [转载]
  17. Windows10关闭占用某一端口号的进程
  18. 简述旋转编码器的工作原理_绝对值编码器工作原理以及故障处理方法有哪些?...
  19. android gradle 在assembleRelease之前 or 之后执行自定义task
  20. 图片放大后变模糊了怎么办?

热门文章

  1. linux发送http请求xml报文,使用curl命令行发送/发布xml文件
  2. Caffe-windows入门学习,编译、训练、测试详细教程
  3. Win7系统Visual Studio 2013配置OpenCV3.1图文详解
  4. Linux设备驱动模型之platform总线
  5. xmodmap: unable to open display '' Error: Couldn't connect to XServer passing null display
  6. pfSense book之静态路由
  7. Luy 1.0 :一个React-like轮子的诞生
  8. 《逻辑与计算机设计基础(原书第5版)》——3.9 二进制加法器
  9. Collections.unmodifiableMap
  10. MySQL查询in操作 查询结果按in集合顺序显示(转)