-
网络通信协议
2017-11-30 15:33:40网络通信协议 今天学习了网络通信协议,总结出来的知识点,不足之处请大家多多指教! 网络通信协议:负责在网络上建立通信通道和控制通过通道的信息流的规则 为了进行网络通信,通信双方必须遵守通信...网络通信协议
今天学习了网络通信协议,总结出来的知识点,不足之处请大家多多指教!
网络通信协议:负责在网络上建立通信通道和控制通过通道的信息流的规则
为了进行网络通信,通信双方必须遵守通信协议
网络通信协议的组成:
语法(syntax):包括数据格式、数据编码以及信号等。
语义(semantics):包括用于协调和差错处理的控制信息。
定时(Timing):包括传输速率和数据排序等。
常见的网络协议
IP(Internetworking Protocol)网间网协议
IP协议是是网络层的主要协议,支持网间互联的数据报通信,它是无连接、不可靠的协议。IP 网络上的主机只能直接向本地网上的其他主机(也就是具有相同IP 网址的主机)发送数据包TCP(Transport Control Protocol)传输控制协议
TCP协议是面向连接(需要在客户端和服务器之间建立连接)、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达,安全性可以得到保障)传输层协议
UDP(User Datagram Protocol)用户数据报协议
UDP协议跟TCP协议一样也是传输层协议,但它是无连接(无需在客户端和服务器之间建立连接),不保证可靠(安全性得不到保障)的传输层协议
UDP和TCP协议区别:
TCP协议:可靠,传输数据包的大小没有限制,但是连接建立需要时间,差错控制的开销大;
UDP协议:不可靠,差错控制开销小,传输数据包大小有限制(64K以下),不需要建立连接。应用层:
应用层也称为应用实体(AE),它由若干个特定应用服务元素(SASE)和一个或多个公用应用服务元素(CASE)组成。每个SASE提供特定的应用服务,例如文件运输访问和管理(FTAM)、电子文电处理(MHS)、虚拟终端协议(VAP)等。CASE提供一组公用的应用服务,例如联系控制服务元素(ACSE)、可靠运输服务元素(RTSE)和远程操作服务元素(ROSE)等。
基本简介:
开放式系统互连 (Open Systems Interconnection reference,OSI) 参考模型是一种抽象的分层模型。OSI七层网络参考模型:Layer 7:应用层(Application Layer)Layer 6:表示层(Presentation Layer)Layer 5:会话层(Session Layer)Layer 4:传输层(Transport Layer)Layer 3:网络层(Network Layer)Layer 2:数据链路层(Data Link Layer)Layer 1:物理层(Physical Layer)TCP/IP协议模型:应用层(Application Layer);传输层(Transport Layer);Internet层/网络层;网络接入层(Network Access Layer)网络应用是计算机网络存在的原因,而应用层正是应用层协议得以存在和网络应用得以实现的地方。应用层(Application layer)是七层OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层也向表示层发出请求。应用层应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务.其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE.CASE提供最基本的服务,它成为应用层中任何用户和任何服务元素的用户,主要为应用进程通信,分布系统实现提供基本的控制机制;特定服务SASE则要满足一些特定服务,如文卷传送,访问管理,作业传送,银行事务,订单输入等。这些将涉及到虚拟终端,作业传送与操作,文卷传送及访问管理,远程数据库访问,图形核心系统,开放系统互连管理等等。应用层的软件1、 网络感知应用程序:应用程序是指人们用于网络通信的软件程序。有些终端用户应用程序是网络感知程序,即这些程序实现应用层协议,并可直接与协议栈的较低层通信。电子邮件客户程序和 Web 浏览器就属于这种类型的应用程序。2、 应用层服务[1]如何实现一个网络应用1. 选择一个合适的网络应用体系结构;2. 根据所选的网络应用体系结构,确定客户进程和服务器进程;3. 确定客户进程和服务器进程的端口号;4. 确定客户进程和服务器进程的IP地址;5. 选择一个合适的应用层协议;6. 考虑网络应用所需的服务。
功能特点:
属于应用的概念和协议发展得很快,使用面又很广泛,这给应用功能的标准化带来了复杂性和困难性。比起其它层来说,应用层需要的标准最多,但也是最不成熟的一层。但随着应用层的发展,各种特定应用服务的增多,应用服务的标准化开展了许多研究工作,ISO已制定了一些国际标准(IS)和国际标准草案(DIS)。因此,通过介绍一些具有通用性的协议标准,来描述应用层的主要功能及其特点。主要是提供网络任意端上应用程序之间的接口。运输访问和管理
文件运输与远程文件访问是任何计算机网络最常用的两种应用。文件运输与远程访问所使用的技术是类似的,都可以假定文件位于文件服务器机器上,而用户是在顾客机器上并想读、写而整个或部分地运输这些文件,支持大多数现代文件服务器的关键技术是虚拟文件存储器,这是一个抽象的文件服务器。虚拟文件存储给顾客提供一个标准化的接口和一套可执行的标准化操作。隐去了实际文件服务器的不同内部接口,使顾客只看到虚拟文件存储器的标准接口,访问和运输远地文件的应用程序,有可能不必知道各种各样不兼容的文件服务器的所有细节。电子邮件
虽然电子邮件被认为只是文件运输的一个特例,但它有一些不为所有文件运输所共有的特殊性质。因为,电子邮件系统首先需考虑一个完善的人机界面,例如写作,编辑和读取电子邮件的接口,其次要提供一个运输邮件所需的邮政管理功能,例如管理邮件表和递交通知等。此外,电子邮件与通用文件运输的另一个差别是,邮件文电是最高度结构化的文本。在许多系统中,每个文电除了它的内容外,还有大量的附加信息域,这些信息域包括发送方名和地址、接收方名和地址、投寄的日期和时刻、接收复写副本的人员表、失效日期、重要性等级、安全许可性以及其它许多附加信息。 1984年CCITT制定了叫做MHS(文电处理系统)的X.400建议的一系列协议。ISO试图把它们收进OSI的应用层,并叫做MOTIS(面向文电的正交换系统)。由于X.400结构的缺少,这种吸收不是很简单。1988年又修改了X.400,力争与MOTIS会聚。本章我们将介绍MHS。虚拟终端
由于种种原因,可以说终端标准化的工作已完全失败了。解决这一问题的OSI方法是,定义一种虚拟终端,它实际上只是代有实际终端的抽象状态的一种抽象数据结构。这种抽象数据结构可由键盘和计算机两者操作,并把数据结构的当前状态反映在显示器上。计算机能够查询此抽象数据结构,并能改变此抽象数据结构以使得屏幕上出现输出。其它功能
其它应用已经或正在标准化。在此,要介绍的是目录服务、远程作业录入、图形和信息通信。(2)远程作业录入:允许在一台计算机上工作的用户把作业提交到另一台计算机上去执行。(3)图形:具有发送如工程图在远地显示和标绘的功能。联系控制服务元素]ACSE和up][2]sup]提交、并发与恢复CCR b]随着应用层的发展,各种特定应用服务增多,当初ISO7498中定义的应用层服务已大部分划归到公共应用服务元素(CASE)中去了,而且许多应用有一定数据的共同部分,几乎所有这些应用都需要管理连接。为了避免每一个新的应用都要重新从头开始,ISO决定把这些公共部分实行标准化。下面描述其中最重要的两个。(1)联系控制服务元素ACSE联系控制服务元素提供应用连接的建立和正常或异常释放的功能。所谓联系是指两个应用实体之间的连接;联系控制服务元素是应用层的基本核心子集。提出以下几个ACSE原语:1)A一ASSOCIATE建立一个联系2)A一RELEASE 释放一个联系3)A一ABORT 用户发起的夭折4)A一P一ABORT 提供者发起的夭折每一条ACSE原语与相应的表示层服务原语有一一映照关系,也即应用联系与表示连接是同时建立、同时释放的。(2)托付、并发和恢复(CCR)CCR的主要目的就是协调若干个(相互关联的)应用联系,为基本多应用联系的信息处理任务提供一个安全和高效的环境。几乎所有的需要可靠性操作的应用都使用CCR。在CCR模型中,数据分为两大类:安全数据和常规数据,所谓安全数据是那些能经受应用失败,并且在应用联系恢复到正常后可以重新引用的数据。通常是把安全数据存储在外部存储介质中。为了保证安全数据的完整性和可靠性,对它的修改要用一些特定的规则,例如特定的封锁机制。所谓常规数据是那些在应用联系工作期间并没有被保存在可靠存储区域的数据。例如在缓冲区或工作栈中。当应用联系受到破坏后,这些数据将不再可用。
协议举例:
DNS
DNS最早于1983由保罗.莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。早期的域名必须以英文句号“.”结尾,,这样DNS才能够进行域名解析。如今DNS服务器已经可以自动补上结尾的句号。当前,对于域名长度的限制是63个字符,包括www.和.com或者其他的扩展名。域名同时也仅限于ASCII字符的一个子集,这使得很多其他语言无法正确表示他们的名字和单词。基于Punycode码的IDNA系统,可以将Unicode字符串映射为有效的DNS字符集,这已经通过了验证并被一些注册机构作为一种变通的方法所采纳。HTTP
HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议中一个现今被广泛使用的版本——HTTP 1.1。HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)调用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnel)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。 通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。通过HTTP或者HTTPS协议请求的资源由统一资源定位器(Uniform Resource Identifiers,或者,更准确一些,URI)来标识。FTP
FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流,空闲很长时间后,客户端的防火墙,会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。FTP实现的目标:密码和文件内容都使用明文传输,可能产生不希望发生的窃听。因为必须开放一个随机的端口以建立连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题,通过使用被动模式的FTP,得到了很大解决。服务器可能会被告知连接一个第三方计算机的保留端口。此方式在需要传输文件数量很多的小文件时,效能不好FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。应用层协议为应用程序之间的通信提供规则,为确保通信畅通,源主机和目的主机上所实现的应用层协议必须一致。应用层协议的功能:l 为通信双方定义过程;l 定义消息类型;l 定义消息的语法;l 定义任何信息性字段的含义;l 定义发送消息的方式和预期的响应;定义与下一层之间的交互。
-
什么是网络通信协议?
2020-08-11 15:53:51网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的...-
网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
-
TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。
链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
运输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。 -
-
WebSocket 网络通信协议介绍
2019-06-26 08:41:02WebSocket 是一种网络通信协议。RFC6455定义了它的通信标准。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 二、为什么需要WebSocket? 我们知道,传统的HTTP协议是无状态的,...一、WebSocket是什么?
WebSocket 是一种网络通信协议。RFC6455定义了它的通信标准。
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
二、为什么需要WebSocket?
我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便。
因此,随着HTML5的诞生,一种新的通信协议应运而生---WebSocket,他最大的特点就是服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了真正的平等。
举个例子:如带有即时通信、实时数据、订阅推送等功能的应用。在WebSocket规范提出之前,开发人员若要实现这些实时性较强的功能,经常会使用折衷的解决方法:ajax轮询(最原始的实现实时Web应用的解决方案)
ajax轮询的原理:ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。明显地,这种方法会导致过多不必要的请求,浪费流量和服务器资源。
场景再现:
客户端:有没有新信息(Request)
服务端:没有(Response)
客户端:有没有新信息(Request)
服务端:没有。。(Response)
客户端:有没有新信息(Request)
服务端:你好烦啊,没有啊。。(Response)
客户端:有没有新消息(Request)
服务端:有啦,给你。(Response)
客户端:有没有新消息(Request)
服务端:。。。。。没。。。。没。。。没有(Response) ---- loopwebsocket的原理:当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。
场景再现:
客户端:我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)
服务端:确认,已升级为Websocket协议(HTTP Protocols Switched)
客户端:麻烦你有信息的时候推送给我噢。。
服务端:好的,有的时候会告诉你的。
服务端:balabalabalabala
服务端:哈哈哈哈哈啊哈哈哈哈
服务端:笑死我了哈哈哈哈哈哈哈三、WebSocket其他特点如下:
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。
(4)可以发送文本,也可以发送二进制数据。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是
ws
(如果加密,则为wss
),服务器网址就是 URL。四、创建WebSocket对象
浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。当你获取 WebSocket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。
// url, 指定连接的 URL // protocol 是可选的,指定可接受的子协议。 let Socket = new WebSocket(url, [protocol] );
五、WebSocket属性
假设我们创建了一个Socket对象
属性 描述 Socket.readyState 只读属性 readyState 表示连接状态,可以是以下值:
0 - 表示连接尚未建立。
1 - 表示连接已建立,可以进行通信。
2 - 表示连接正在进行关闭。
3 - 表示连接已经关闭或者连接不能打开。
Socket.bufferedAmount 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。 六、WebSocket事件
假设我们创建了一个Socket对象
事件 事件处理程序 描述 open Socket.onopen 连接建立时触发 message Socket.onmessage 客户端接收服务端数据时触发 error Socket.onerror 通信发生错误时触发 close Socket.onclose 连接关闭时触发 七、WebSocket方法
假设我们创建了一个Socket对象
方法 描述 Socket.send() 使用连接发送数据
Socket.close() 关闭连接
八、WebSocket实例
【1】原生JavaScript实现WebSocket连接
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <style> </style> <body> <input id="text" type="text" /> <button onclick="send()">发送消息</button> <button onclick="closeWebSocket()">关闭WebSocket连接</button> <div id="message"></div> <script> let websocket = null; //判断当前浏览器是否支持WebSocket if ('WebSocket' in window) { websocket = new WebSocket("ws://localhost:8080/websocket"); } else { alert('当前浏览器不支持websocket!') } //连接发生错误的回调方法 websocket.onerror = function () { console.log("WebSocket连接发生错误"); }; //连接成功建立的回调方法 websocket.onopen = function () { console.log("WebSocket连接成功"); } //接收到消息的回调方法 websocket.onmessage = function (event) { document.getElementById('message').innerHTML += event.data + '<br/>'; } //连接关闭的回调方法 websocket.onclose = function () { console.log("WebSocket连接关闭"); } //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = function () { closeWebSocket(); } //关闭WebSocket连接 function closeWebSocket() { websocket.close(); } //发送消息 function send() { let message = document.getElementById('text').value; websocket.send(message); } </script> </body> </html>
【2】在vue项目中实现WebSocket连接
<template> <div> <el-input v-model="params" clearable/> <el-button type="primary" @click="send">发消息</el-button> </div> </template> <script> export default { data() { return { params: '', path: "ws://localhost:8080/websocket", socket: "" } }, mounted() { // 初始化 this.init() }, destroyed() { // 销毁监听 this.socket.onclose = this.close }, methods: { init: function () { if (typeof (WebSocket) === "undefined") { console.log("您的浏览器不支持socket") } else { // 实例化socket this.socket = new WebSocket(this.path) // 监听socket连接成功回调 this.socket.onopen = this.open // 监听socket连接失败回调 this.socket.onerror = this.error // 监听后台返回的socket消息 this.socket.onmessage = this.getMessage } }, open: function () { console.log("socket连接成功") }, error: function () { console.log("连接错误") }, getMessage: function (msg) { console.log(msg.data) }, send: function () { this.socket.send(params) }, close: function () { console.log("socket已经关闭") } } } </script>
-
网络通信协议篇(一)
2019-08-29 00:50:34网络通信协议本质上是由一组协议组成的,而协议的本质则是一组规则和规范的组合体。举个例子:两个物流业务点在地域角度看是两个独立的整体,那么要何如对接才能把货物从一点输出到另一点呢?首先他们需要商定一个...网 络 通 信 协 议 概 述
网络通信协议本质上是由一组协议组成的,而协议的本质则是一组规则和规范的组合体。举个例子:两个物流业务点在地域角度看是两个独立的整体,那么要何如对接才能把货物从一点输出到另一点呢?首先他们需要商定一个暗号,这个暗号的作用是可以证明货物是输出地发出来的,当前的站点可以进行接收,这个暗号可以任何形式:工牌、工服等,接下来还需要考虑用什么交通工具,可以是电车,也可以无人机等。
其中工服、工牌、电动车属于一个一个规则和规范,而他们结合起来就形成了配送的协议,而站点按照这个协议最终就可以完成货物的运输和配送。
OSI七层模型、TCP/IP四层模型
随着技术的发展,计算机的应用越来越广泛,计算机之间的通信开始了百花齐放的状态,每个具有独立计算服务体系的信息技术公司都会建立自己的计算机通信规则,而这种情况会导致异构计算机之间无法通信,极大的阻碍了网络通信的发展,至此为了解决这个问题,国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
这七层模型是设计层面的概念,每一层都有固定要完成的职责和功能,分层的好处在于清晰和功能独立性,但分层过多会使层次变的更加复杂,虽然不需要实现本层的功能,但是也需要构造本层的上下文,空耗系统资源,所以在落地实施网络通信模型的时候将这七层模型简化合并为四层模型分别是应用层、传输层、网络层、网络接口层(各层之间的模型、协议统称为:TCP/IP协议簇)。
一、网络接口层:
TCP/IP的网络接口层承接OSI七层模型中物理层和数据链路层的功能,对标物理层的部分完成的是将高低电压转换成传输信号(电信号、无线信号等)传递给目标方;对标数据链路层的部分则是规定了输出信号组的规则及格式,统一标准后则为我们所知的以太网协议(ethernet),协议规定网络接口层每一个信号数据包称为一个数据帧,数据分为head和data两部分,其中head部分包括:
-
发送者地址---6字节(mac地址)
-
目标地址---6字节(mac地址)
-
数据类型---6字节
mac地址释义:以太网协议规定接入的网络设备必须具备网卡,而网卡的标识就是mac地址,地址为6个字节,前三个字节为标准化组织给厂商分配的编码,后三个字节为厂商生产的序列号,由此保证地址唯一。
数据部分为上层需要向外发送的数据,如下:
具有了上述规则,两台计算机就可以进行通讯了,而通讯的方式则为广播,类比为通信的时候先问所有人”故宫”是谁家的地址,局域网内地址是”故宫”的主机则会回复自己的mac地址,这个模式在小型的局域网主机数相对较少的情况下可以玩转,但整个世界数以亿计的主机,如果一台主机需要知道目标的地址就需要给世界上所有的主机都发一个广播消息,那就成为灾难了,故需要下一层设计解决这个问题。
二、网络层:
由上层的遗留问题可知,必须找到一种方法,区分相同局域网内的直播域,不是同域内的请求需要进行转发广播,而网络层就是解决这种问题而存在,它定义了一套地址称之为ip地址,有读者可能会有疑问:为什么不使用mac地址在上一层完成这个需求呢?这是因为mac地址只跟厂商有关,不能标识局域网内网规则,就类比笔者虽然身份证是黑龙江人但是人却在北京飘,身份证类比mac地址,身份证是无法证明本人到底在哪也就无法做下一步骤了,这个网络层的协议目前通常使用的是IPV4,协议规定地址为32位表示,通常大家看到ip地址都是以十进制展示,每8位以 . 号分割,例如:192.168.1.1,IP数据包同样分为head和data两部分:
接下来我们通过抓包的形式来看一下ip头的主要字段:
至此网络层帮我们定位目标网路,网络接口层帮助我们锁定目标主机,我们之间距离天涯海角的两台主机已经可以完成通讯,但是每一台机器上有好多服务,比如邮件服务、微信、咚咚,如何定位是哪个应用的数据包呢,这需要下层设计给予解决。
三、传输层:
由上层协议遗留问题可知,我们需要定位是哪个服务程序的数据包,不然会造成数据错乱,而传输层正是解决此类问题,传输层依靠端口来唯一定位一个服务,而发送端端口+接收端端口组成一组链接,传输层的作用总结为提供端口到端口的通信,传输层通常是指tcp(udp)协议,TCP协议提供可靠性传输能力、分包传输能力。tcp层数据包也分为head和data部分:
接下来让我们通过抓包的方式来看一下tcp头信息的主要字段:
至此两台主机已经有可以完成指定服务信息传输的能力,但是不同应用程序所要应用的场景不同,需要数据的数据结构也不尽相同,截止目前的能力无法为丰富多彩的应用程序提供规范的数据信息,此问题需要由下层设计给予解决。
四、应用层:
由上层协议遗留的问题可知,我们需要为丰富多彩的应用程序对应不同场景设计不同的数据结构。而应用层正是为了解决此问题而存在,所以需要应用层定义丰富多彩的协议来对应适配复杂场景所需的数据结构,故应用层定义为规范了应用层的数据结构,目前大家常用的应用层协议有http、https、ssl、ftp等。
接下来让我们通过抓包的形式,来看看应用层(http)协议数据信息:
至此两台主机对等应用程序信息传输的条件都已具备,可以愉快的开始通信了。
小 结
本文通过问题解决维度梳理了网络协议层次结构及对应层次的作用、存在意义,下一部分将会从tcp三次握手、四次(三次)挥手为切入点分析tcp的可靠性发送等,小伙伴们如果对本文有疑问可以咚咚咨询,可以加入问题讨论群,大家一起进步。
-
-
网络编程(网络通信协议、TCP和UDP协议、TCP和UDP通信)
2018-07-20 08:54:53网络通信协议: &nbsp; &nbsp; &nbsp; &nbsp;通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的... -
网络通信协议、IP地址、端口号
2019-04-08 17:49:35一、网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信... -
网络通信协议结构图
2014-12-18 13:49:36网上找的 网络通信协议结构图 , 虽然比较老, 但是也够一般的查询使用了. -
第07章-网络通信协议(OSI、TCP、UDP、IP、ARP、ICMP等)
2017-02-27 18:27:55课程内容如下: 通信协议的概念 ISO、OSI七层参考模型详解 TCP、IP模型详解 网络接口层详解 IP协议详解 IP地址和MAC地址特征分析 有了IP地址为什么还要使用MAC地址 ...网络通信协议(应用层)协议 -
网络通信协议笔记(一)
2018-08-30 22:45:58主要参考:网络编程懒人入门(一):快速理解网络通信协议(上篇) 几种计算机网络体系结构 互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。用户接触到的,只是最上面的... -
网络通信协议基础(ISIS)——入门
2017-02-02 13:51:53网络通信协议是一个挺窄的方向。相对于Android、ios、JavaScript、python等等方向,网络通信协议知道的人很少。本文也指在普及一下网络通信协议,让更多的人知道世界上还有这么一群人在维护着这么一堆协议。 想要... -
网络通信协议图
2018-07-30 16:06:41 -
网络通信协议(互联网协议)
2019-08-19 15:00:13一、操作系统基础 操作系统:(Operating System,简称OS)是管理和控制...二、网络通信原理 2.1 互联网的本质就是一系列的网络协议 一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用 像... -
DICOM:DICOM3.0网络通信协议(三)
2015-11-23 22:07:08背景:专栏对于DICOM网络传输介绍过多次,例如DICOM:DICOM3.0网络通信协议(续)、DICOM医学图像处理:DICOM网络传输、DICOM医学图像处理:全面分析DICOM3.0标准中的通讯服务模块。此次通过对比fo-dicom与dcm4che两... -
Socket 网络通信协议 http、TCP/IP协议与socket之间的区别
2017-02-27 18:28:35Socket 网络通信协议 http、TCP/IP协议与socket之间的区别 2015-03-25 13:38 1578人阅读 评论(0) 收藏 举报 网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- ... -
Internet网络通信协议
2017-09-16 13:13:08Internet通讯协议 -
关于计算机网络通信协议
2018-11-30 22:25:07open system interconnection :开放式系统互联,ISO发起,其任务是指定国际计算机通信标准,特别是促进兼容系统间的互联。 www:world wide web 万维网 HTML:hyper text transfer protocol 超文本传输协议 CGI:... -
网络通信协议层的七个部分
2012-12-13 08:53:40我们将网络通信协议层分为七个层次。这也是著名的OSI模型标准。现在,根据每一个层次我们来详细说一下有关的协议。看看他们每一个层次的具体作用是什么。 网络通信协议层1:物理层 物理层(physical layer)的主要... -
网络通信协议(7层协议)
2018-07-14 20:47:58mac地址、IP地址和端口号看了很多遍,才整理出来我对整个通信过程的理解,大致如下,后期会不断学习补充更正:在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:mac地址、IP地址和端口号。... -
几种网络通信协议
2017-10-23 10:48:40HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页)DNS(Domain Name System)域名系统FTP(File Transfer Protocol)文件传出协议SFTP(SSH File Transfer Protocol,和FTP不一样)安全文件传送协议SCP... -
TCP/IP 网络通信协议 之 OSI 七层模型
2020-02-06 00:03:17它是在网络的使用中的最基本的通信协议。 针对TCP/IP协议的标准化,国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI(Open System Interconnection)参考模型或七层模型。它从... -
分布式基础-网络通信协议讲解
2020-01-13 13:53:55网络七层协议模型 OSI的体系结构:应用层用来跑应用程序的。7层是指OSI七层协议模型,主要是:应用层(Application),表示层(Presentation),会话层(Session),传输层(Transport),网络层(Network),数据链路层(DataLink... -
网络通信协议(IP地址,端口号,InetAddress,UDP与TCP)
2017-07-10 18:04:35二、网络通信协议:同一个网络中的计算机进行连接和通信时的规则;目前应用最广泛的是TCP/IP协议(包括,IP协议、TCP协议,UDP协议,ICMP协议等)。在进行数据传输时,要求发送的数据与接收到的数... -
iOS-网络通信协议
2016-03-14 15:48:512、TCP/UDP协议:主要解决数据如何在网络中传输,对应于传输层; 3、IP协议:对应于网络层; 在传输数据时,可以只使用传输层(TCP/IP),但是那样的话,由于没有应用层,便无法识别数据内容,如果想要使传输的数据有... -
实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用之案例分析
2016-03-30 17:37:28import java.io.IOException; import java.net.ServerSocket;... * 基于TCP网络通信协议的多客户端简单应用 * 案例设计: * 1:服务器端通过ServerSocket的accept方法等待客户端链接的到来 -
论网络通信协议之间的相互作用
2010-03-10 11:35:00提出了网络通信协议的4层逻辑结构,提出了协议相互作用的3种方式。将对协议分析领域的研究产生深刻而深远的影响。 话说无忌和小过各占一方,谁也不让谁,互相竞争了数年,两者各立门派,势不两立。“夫天下之势,分... -
网络通信协议的基本知识
2015-07-01 11:03:17通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议... -
常用网络通信协议结构图
2017-06-28 23:30:04
-
基于Django的电子商务网站设计--第二章
-
postgresql
-
剪绳子
-
sqlite
-
思考(七十七):一个 goroutine 的性能问题
-
微信公众号2021之网页授权一学就会java版
-
Scala入门系列(6)-Scala之三大流程控制语句
-
Leetcode刷题笔记 724. 寻找数组的中心索引
-
微信小程序之颜值测试项目(测颜值)【项目实战】
-
Python语言编程高级精讲课 从程序员到架构师的必修课
-
vue-router
-
Servlet创建时机
-
SAP ALV 拖拽放置 drag&drop 实现方法
-
C/C++编程学习 - 第13周 ① 最大数输出
-
FluentTerminal.Package_0.7.5.0.zip
-
Unity对象池
-
21年新消息队列RabbitMQ视频教程AMQP教程
-
Python入门到项目直通车
-
简单-鼠标宏编辑工具.exe
-
C语言谭浩强版本学习笔记(3)