简单理解计算机通信

简单理解计算机通信

写在前面:

 在计算机刚出现的时候,只能在本机进行一些运算处理,想将一台计算机中的数据转移到另一台计算机中,需要通过外部存储介质来传输,例如磁带、软盘。而网络技术的出现,使得计算机间可以通过一些传输介质(网线、光纤等),实现快速的数据传输和信息交互。如今,网络已无处不在,那么,计算机之间究竟是如何通信的呢?下面会通过一些基础的网络知识来简单理解计算机之间的通信过程。

网络通信模型:

  网络通信模型是一种概念模型和框架,旨在使各种计算机在世界范围内互连为网络。其中有OSI七层模型和TCP/IP四层模型,现在大部分网络通信都是以TCP/IP四层模型为基础的。它们的对应层次如下图:

OSI七层模型和TCP/IP四层模型

OSI有七层:从上到下依次为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP有四层:从上到下依次为应用层、传输层、互连层(网络层)、网络接口层(链路层)。

因为目前大部分TCP/IP模型,所以就以TCP/IP为例,我们来理解下数据间的通信,下图是两台计算机通信的数据的传输过程:

计算机之间的数据传输过程

数据封装:

  在详细了解TCP/IP每一层各自的作用前,先要理解数据封装的概念,数据在通过网络接口传送出去前,会经过层层封装,每层都会在前面的基础上添加自己的信息,在传输到对方计算机后,又会被层层进行解封装后得到最后的数据。其过程如下图所示:

数据封装和解封装过程

 TCP/IP参考模型:

  TCP/IP参考模型是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协议都被归类到4个抽象的"层"中。每一抽象层创建在低一层提供的服务上,并且为高一层提供服务。 完成一些特定的任务需要众多的协议协同工作,这些协议分布在参考模型的不同层中的,因此有时称它们为一个协议栈。

  应用层(Application Layer):该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。 应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。

  常见的应用层协议有HTTP、FTP、DNS、SNMP(基于UDP)

  传输层(Transport Layer):主要为两台主机上的应用程序提供端到端的通信,包括TCP协议(传输控制协议)和UDP(用户数据报协议)。

  端口号由此层提供,且在一台计算机中具有唯一性。

  UDP为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。

  TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等,由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。

  因为TCP是一种面向连接的协议,所以两个在使用TCP的应用在彼此交换数据前必须先建立一个TCP连接,也就是有名的TCP三次握手,如下图所示:

  建立连接协议过程:(TCP三次握手协议)

  1)客户端发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。

  2)服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN占用一个序号。

  3)客户将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。

  网络层(Internet Layer):处理分组在网络中的活动。网络层协议包括IP协议(网际协议),ICPM协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议),其中的IP协议身是TCP/IP协议簇中最为核心的协议。IP提供的是不可靠、无连接的数据包传送服务。

  IP地址:

  讲到IP协议就应该讲讲IP地址,IP地址是分配给网络上使用IP协议的设备的数字标签,有IPv4和IPv6两大类,我们目前使用的大部分还是IPv4的地址,以下简称IP地址,IP地址由32位二进制数组成,为便于使用,常以XXX.XXX.XXX.XXX形式表示。IP地址由两个字段组成:网络号(net-id)和主机号(host-id),为方便IP地址管理,IP地址被分为五类,如下图:

  其中A、B、C类地址为单播(unicast)地址;D类地址为组播(multicast)地址;E类地址为保留地址,以备将来的特殊用途。目前大量使用中的IP地址属于A、B、C三类地址。

  A类地址范围:0.0.0.0~127.255.255.255

  B类地址范围:128.0.0.0~191.255.255.255

  C类地址范围:192.0.0.0~223.255.255.255

  私网地址范围:10.0.0.0~10.255.255.255 ,172.16.0.0~172.31.255.255 ,192.168.0.0~192.168.255.255,私网地址只能在本地局域网中使用,不在公网中使用。

  子网和掩码:

  传统的IP地址分配方式,对IP地址的浪费非常严重。为了充分利用已有的IP地址,人们提出了掩码(mask)和子网(subnet)的概念。

  掩码是一个与IP地址对应的32位数字,这些数字中一些为1,另外一些为0。原则上这些1和0可以任意组合,不过一般在设计掩码时,网络号码和子网号码的比特值为1,主机号码的比特值为0。掩码可以把IP地址分为两个部分:子网地址和主机地址。IP地址与掩码中为1的位对应的部分为子网地址,其他的位对应的部分则是主机地址。当不进行子网划分时,子网掩码即为默认值,此时子网掩码中“1”的长度就是网络号码的长度。即A类地址对应的掩码默认值为255.0.0.0;B类地址的掩码默认值为255.255.0.0;C类地址掩码的默认值为255.255.255.0。

  IP路由选择:

  概念:若目的主机与源主机在同一共享网络内,IP数据报直接送达目的主机,否则,主机把数据报发往默认的路由器上,由路由器进行数据报转发。

  链路层(Link Layer):通常包括设备驱动程序和网络接口卡。处理与传输媒介的物理接口细节。主要协议有:ARP协议和RARP协议

  MAC地址 :数据链路层具有自己的寻址机制(48bit地址),当一台主机把以太网数据帧发送到位于同一局域网上得另一台主机时,是根据48bit的以太网地址来确定目的接口的。

  而ARP和RARP协议是为IP地址和MAC地址提供映射的:

我们在判断两台主机应用之间的网络是否正常,通常是判断到对方IP和端口是否能通。

常用网络判断命令:

Windows:

ping $IP:最常用的判断网络是否可达的命令。

tracert $IP:跟踪路由,即打印出本机到到目的IP,所经过路由。

telnet $IP $port:可以测试某个IP和应用端口是否能通。

netstat:查看本机监听和建立连接的端口。

Linux:

ping $IP:最常用的判断网络是否可达的命令

traceroute $IP:跟踪路由,即打印出本机到到目的IP,所经过路由。

或者使用mtr -ni 0.1 $IP,可以实现以上两个共同的效果

nc -vz $IP $PORT:测试到目的IP的应用端口是否能通。

netstat -tupln:可以查看本机目前监听的端口

参考:

https://en.wikipedia.org/wiki/Internet_protocol_suite

《TCP/IP详解卷1:协议》

时间: 2024-10-21 15:38:34

简单理解计算机通信的相关文章

php类的封装、继承和多态的简单理解

.面象对向的三大特点:封装性.继承性.多态性 首先简单理解一下抽象: 我们在前面定义一个类的时候,实际上就是把一类事物共有的属性和行为提取出来,形成一个物理模型(模版),这种研究问题的方法称为抽象 一.封装性  封装就是把抽取出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有被授权的操作(方法)才能对数据进行操作.  php提供了三种访问控制修饰符  public 表示全局,本类内部,类外部,子类都可以访问  protected 表示受保护的,只有本类或子类可以访问  pr

Http协议与TCP协议简单理解

在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解. TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的.所以Http连接是一种短连接,是一种无状态的连接.所谓的无状态,是指浏览器每次向服务器发起请求的时候,

回溯法之八皇后问题简单理解

回溯法,简单理解就是有源可溯.基本思想要借鉴穷举法,但是它不是一味地穷举,当发现某一步不符合条件时,这一步后面的穷举操作就不进行了(俗称“剪枝”),我自己把它叫做动态穷举法.假设第一个步骤可行,那么执行第二个步骤,第三个......如果其中第三个步骤不行,那么我们再回过来(回溯),第二个步骤换一种方法尝试,然后再重新第三个步骤,第四个......直到完成任务要求为止. 这里,以八皇后问题为例.试图把回溯法讲清楚. 注意:递归应该是一种算法结构,回溯法是一种算法思想. 何为八皇后问题? (百度百科

Javascript闭包简单理解

提到闭包,想必大家都早有耳闻,下面说下我的简单理解.说实话平时工作中实际手动写闭包的场景并不多,但是项目中用到的第三方框架和组件或多或少用到了闭包.所以,了解闭包是非常必要的.呵呵... 一.什么是闭包简而言之,就是能够读取其他函数内部变量的函数.由于JS变量作用域的特性,外部不能访问内部变量,内部可以外部变量. 二.使用场景1. 实现私有成员.2. 保护命名空间,避免污染全局变量.3. 缓存变量. 先看一个封装的例子: var person = function () { // 变量作用域为函

对数据类型封装和数据抽象的简单理解

请特别关注程序设计技术,而不是各种语言特征. --<C++程序设计语言> Bjarne Stroustrup 本文是<C++程序设计语言>(Bjarne Stroustrup )的第二章的读书笔记,例子来源于这本书的第二章. 在程序设计之中,我们倾向于将数据结构(也可以说是数据类型)以及一组对其操作的相关过程组织在一起,在逻辑上可以称将其为模块.此时程序分为一些模块,模块包括一组对数据的操作,数据隐藏于模块之中.以下以栈的设计为例,使用C和C++进行设计,简单理解模块化设计中的数据

对象序列化原因的简单理解

序列化和反序列化我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,其最终目的都是将内存中的对象持久化或者是在网络上传输.反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 使用序列化的原因 a. 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本.我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂.可

[干货分享]git的简单理解及基础操作命令

前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制>这本书(偏理论,内容完善,很不错),针对所学内容建了git仓库测试,且写了不少git操作命令的笔记,做个分享,有错误的地方各位大大也给提出,好做修改~ Git是一款免费.开源的.用Linux内核开发的分布式版本控制系统. git和svn有什么区别呢? git采用分布式版本库管理,而svn采用集中式版本库管理. 集中式版本库管理需要有一台存放版本库的服务器,

大话设计模式总结(28种设计模式定义+简单理解)

大话设计模式这本书写的非常有创意,非常适合我这种新手.用了大约两个星期的时间看完了这本书,代码全部都敲了一遍,虽然没有一点基础,但是还是领略到了面向对象的威力.看完之后再也不想使用面向过程的语言了,比如VB,想当初我也是VB狂热者,但是现在我几乎不想再使用了.现在只想着写点什么用上它几种设计模式. 可能是第一次接触这些东西,有些感觉看懂了,但是很难应用到实际编程中:有些感觉没看懂,但是还能说出那么点东西来.听七期学长说他们当初看了两遍,要求能背着写出代码,不知道这次我们八期要求怎么这么低,我只看

Hadoop-- MapReduce简单理解

1.Hadoop和MapReduce概念 Mapreduce是一种模式. Hadoop是一种框架. Hadoop是一个实现了mapreduce模式的开源的分布式并行编程框架. 2.Hadoop框架 借助Hadoop 框架及云计算核心技术MapReduce 来实现数据的计算和存储,并且将HDFS 分布式文件系统和HBase 分布式数据库很好的融入到云计算框架中,从而实现云计算的分布式.并行计算和存储,并且得以实现很好的处理大规模数据的能力. 3.MapReduce 原理 3.1 map和reduc