Linux中的网络功能概念介绍(一)

  在操作系统中,进程之间的通信是用ipc(内存基本通信)以及内存共享shm来实现本地的通信,那么如果跨主机间通信或者说是不同之间的主机用rpc(远程过程调用)以及socket套接字,用一个主机在socket中写数据,另一个主机在socket之间读数据,以实现进程通信的最终目的。

  在网络功能出现之前,基本都是用电话线来通信,发送数据基本都是靠着那根线,要是先坏了可能就无法发送数据,所以美国的军方就有那么一种设想,如果未来世纪大战时,我的数据的发送不要靠着一条线,或者如果说这个线路断了,那么数据自动判断走另一条线路,最后输出到目的地。

  计算机之间的通信数据是流式数据,所谓流式数据是指,在我的本地计算机中的文件抽成一条一条的丝通过介质的传输输送到对方的目标主机上,目标主机自动将这些流式数据拼凑起来再由计算机内部转化成我们人类看得语言。

  我们现在使用的主要还是以以太网为主,是施乐公司的Park实验室发明了,并无偿给了全人类。

  两台计算机彼此之间连接起来,这种连接是靠借助于某种介质(分为有线和无线),无论是用哪一个到另一端都要转换成电磁信号,彼此协商多长时间为一个信号,这种商定称之为协议。

  主机A发送给主机B,主机A在比之前的网络发送信号时,把信号广播出去,C、D看到不是他们的信号就不理了,但是B看见了会返回数据发送给A,主机A发送的信息首部叫报头,真正的信息在报文的后面,B数据返回给A之后,获得了B的地址A就可以直接通信,再也不用广播寻找B,不过要是找C主机的话,就得重新发一次广播了。

  我们有多种的线路拓扑图,有总线型、星型、环形等

  以上可以用总线型来实现网络之间的通信,但是有个问题,就是都是在同一链路上,如果A要想给B主机发数据,C和D想通信的话肯定会造成冲突,为什么?因为都在一个线路上,而造成线路冲突的地方我们也叫它为冲突域,所以我们就得搞一个线路仲裁机制,要实现线路仲裁,就先标识主机,标识主机的机制叫MAC,我们称为硬件MAC地址,这种地址是唯一性的,并且不可更改,但是问题依然没有解决,就是A和B发数据被别人用了怎么办?

  CSMA/CD(载波监听,多路访问/冲突检测),主要A要发信号时先探测一下这个线路是否有忙,如果不忙的话立即向外发送信号,且边发边听,过程中有冲突的话,则立即停止,等待一段时间后再次探测,如果A、C探测没有都发出去冲突了,都会等待一段时间延迟随机再次发送,过一段时间,A再次探测,如果其它主机没有占用的话,就边发边监听,因为发报文还是有冲突,有冲突的话,就会往后退,过一会再次探测,使用这种机制的通常为以太网。

  还有一种线路仲裁,就是以环形为主。

  这种线路仲裁就是形成(环形)环状结构,在线路中会有一个令牌环,如果没有主机发送数据的话,这个令牌环就会在这些主机上游走,那个主机想要发数据就会把那个令牌环拿过来,用完之后释放出来让令牌环继续在线路上游走,注意:只有持有令牌环的主机才能外网发送信号。

  另一种是星型,它使用的是在一个中心设备上有很多的接口,每个接口连接一台主机,早期用的HUB接入的时候非常简单,因为里面还是一根线,和总线型差不多。

  但如果接入的设备越来越多,说明冲突也会越来越多,搞得谁发就冲突,谁也干不成,还有就是线路过长就会失去作用,因为传输的信号总归来说是有限的,当完成到已经让接收方无法识别的时候,这个信号意味着就失去作用了,如果这样的话,可以使用中继器,把传输信号放大,向目标进行传输,存放传输的主机过多,可以用CSMA/CD,但是巨多的话,则冲突也会巨多,我们要找一个隔离设备,比如A和C在同一范围内,B和D在另一范围内,A向C主机发送信号时,这个设备不会转到主机B,同样也是如此,但如果A和B通信时,则就把信号转发给另一个范围到主机B中,这个设备就叫做网桥。

  在网桥内有一张表,里面记录了主机和接口,那如何获得的呢?网桥会广播到各个主机来获取MAC地址,具有自动学习的一个能力,当A发送到C主机时,网桥不知道C在哪儿,但知道A在那个接口上,C接收看到,回应这个报文的时候,C的源、目标地址也有了,这时候网桥也记录了C的源地址。

  如果这个网桥上有很多接口,而每个接口只能接一台主机,这个网桥内部是一个交叉网络,找个空闲的线路,所以A和B能通信,C和D也能通信,而且工作在全双工的模式下,整个网络可以有效的利用起来,而这个设备就是交换机,表里面的数据也是定时清理的,如果还有冲突,就切成更小的范围,但这种平面地址也是有限的,平面地址叫物理地址,当A要想从交换机以外的设备通信的话,就将要靠逻辑上的地址进行通信,这个逻辑就叫IP地址,当一个主机交换机通信能够通过中间的那个设备,所以中间那个设备是标记网络不同的设备,中间设备看的是逻辑地址是什么,用IP地址来标记网络,用1.0可以为一个范围,2.0为一个范围,转发不同的网络通过这个设备来转发,这个接口叫做网关,而在不同网络之间可以转发数据的设备叫路由器,整个就是把交换网络的报文接下来转到另一个交换网络(中间设计到MAC的转换)只要不在同一网络需要转发出去到另一个网络中,而这种转发就需要借助于路由器,每一个PC上都有一个默认网关,而这个网关就是路由器的IP地址,对于路由器的另一端接口也是PC网关的转发非本地网络通信,如果本地通信则不需要网关,相同的网用网卡上和IP通信,IP可以转为MAC地址。所以报文在前端中有源IP、目标IP、源mac、目标mac。

原创文章,作者:刘 祥宇,如若转载,请注明出处:http://www.178linux.com/60553

(1)
刘 祥宇刘 祥宇
上一篇 2016-11-23
下一篇 2016-11-23

相关推荐

  • MySQL基础知识

    1、SQL:结构化查询语言(Structured Query Language): DDL:Data Definition Language(数据定义语言): 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询…

    2017-11-20
  • Tomcat详解

    Tomcat详解 1、tomcat安装 tomcat的组件:<Server> <Service> <connector/> <connector/> <Engine> <Host /> <Host> <Context/> … </Host> &lt…

    2017-04-27
  • N28-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │   └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │   ├── bin
    │   └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    Linux干货 2017-12-11
  • 五大主流数据库模型

    导读:无论是关系型数据库还是非关系型数据库,都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型,让我们来追本溯源,窥探现在流行的数据库解决方案背后的神秘世界。 什么是数据模型? 访问数据库中的数据取决于数据库实现的数据模型。数据模型会影响客户端通过API对数据的操作。不同的数据模型可能会提供或多或少的功能。一般而言,数据模型不会直接提供过多的功能…

    Linux干货 2015-04-04
  • 进程和优先级

         什么是进程?我们先来了解一下进程的概念:我们知道操作系统最核心的概念就是进程。进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。    当多个任务要执行时怎么办呢?先执行…

    2017-09-09
  • 文本处理三剑客之awk

    一、知识整理 1、awk报告生成器,格式化文本输出 发明人:a.k.a. Aho,Kernighan,weinberger awk程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块三部分组成。program通常是放在单引号或双引号中。 基本用法:awk [] ‘program’ var=value fiel… pr…

    Linux干货 2016-09-26