通络通信

网络详解:

网络的osi层次结构:

osi2.png

物理层:

以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。

网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。

前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

数据链路层:

如果是同一个子网络,就采用广播方式发送,否则就采用”路由”方式发送。(”路由”的意思,就是指如何向不同的子

网络分发数据包,pc->switch->route<-switch<-pc)遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

这就导致了”网络层”的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”,简称”网址”。

于是,”网络层”出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则

是管理员分配的,它们只是随机组合在一起。网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,

必定是先处理网络地址,然后再处理MAC地址。

总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

网络层:

网络号 = IP与掩码 按位相与 ,其作用就是判断两个网络是不是在一个网段内。如果按位相与后的结果一样说明是一个网络段。

想要了解网络的详解,就必须了解网络的分层结构:网络的osi七层协议,也可称为5层协议,通过网络的分层了解数据包传输的过程。

首先,由于网络的通信就是为了进行数据包的传递,而数据又是从一个网卡到另一个网卡,而识别网卡就需要知道网卡的标识符(mac)。

这里就不得不提一下ARP协议,就是进行路径广播获取对方的mac地址。而ip数据包时放在以太网数据包中发送的,所以我们必须同时知道

两个地址,一个事对方的MAC地址,另一个是对方的IP地址,通常情况下对方的ip地址是已知道的,但是我们不知道它的mac地址。所以我们

就需要一种机制能够从ip获取到mac地址,这种机制就是所谓的ARP协议。这里面又分为两种情况:一是在同一个网络内,我们可以使用ARP协议,

ARP协议也是发送一个数据包(包含在以太网数据包中)。其中包含它说要查询的主机的ip地址,而对方的mac填的为:FF:FF:FF:FF:FF:FF ,表示

这是一个广播地址。它所在的子网络的每一台主机都会收到这个数据包,从中取出IP地址与自己的IP进行比对,如果一样,就会做出回复,告诉对

方自己的mac地址,如果不一样,就会舍弃这个数据包,不做回应。

举一个通俗易懂的例子,比如说:快递员(源ip)送货送到某小区的某栋楼下,只知道需要A(目标ip)收货,却不知道A具体住在哪个楼层,

于是只有在楼下喊话(ARP广播),A听到之后,在楼上告诉快递员具体位置(mac地址),快递员才能送上去(发送数据包)

二是:如果源主机与目标主机不在同一个网络内(是不是同一个网络查看网络号是否相同),不在同一个网络内就需要把数据包传递给网关的mac,网关的mac收到之后拆除mac的标头看到里面的ip不是自己的,又把数据包重新进行封装,然后传递给网关的另外一处,直到数据包传递给目标主机。

比如说:A(源ip)在北京(源mac),B(目标ip)在上海(mac)。因为不在同一个网络内,所以喊话是听不到的,只能通过北京火车站(源地址网关)到上海火车站(目标网关),到了同一个网络内再进行喊话,B听到之后会回应,告诉A它的mac,再进行数据包发送。

传输层:

有了ip地址和mac地址,我们可以在互联网上的任意两台主机进行网络通信。但是,这时又有一个问题就是:同一台主机上有不同的程序需要用到网络,

这时候如果我们一边浏览网页,一边和朋友聊条,而这是我们发送的数据怎么辨别是聊天信息还是浏览网页的内容呢? 这样看来,我们还需要一个参数来标记这个数据包时供哪个程序使用的。这个参数就是“端口号”。它其实是每一个使用网卡的程序的编号,每个数据包都发送到主机的特定端口,所以不同的程序就能获取到自己所需要的数据。而传输层就是建立端口到端口的通信,相比之下,网络层是建立主机到主机之间的通信。只要确定主机和端口我们就能实现程序之间的交流。因此,linux系统就把主机+端口 的合称叫做“套接字”。有了它,就可以进行网络应用程序开发了。

        而在数据包中我们加入端口信息的话,就需要新的协议,最简单的就是UDP协议,它的格式就是在数据前面加上端口号。UDP数据包也是由“标头”和“数据”组成。标头部分定义了发送端口和接收端口,数据就是数据包的具体内容。然后把整个UDP数据包放入IP数据包的数据部分,ip数据包又是放在以太网数据包中。

应用程序收到”传输层”的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。

应用层:

“应用层”的作用,就是规定应用程序的数据格式。


举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。


这是最高的一层,直接面对用户。它的数据就放在TCP数据包的”数据”部分。因此,现在的以太网的数据包就变成下面这样。

osi1.png

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

(0)
zhongzhong
上一篇 2016-09-02
下一篇 2016-09-02

相关推荐

  • Linux系统文件管理

    1、Linux的文件类型:       –:普通文件;       d:目录文件;       b:块设备:     &nbsp…

    Linux干货 2016-08-04
  • Nginx+Keepalived实现站点高可用

    Nginx+Keepalived实现站点高可用 vrrp 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引…

    Linux干货 2016-11-07
  • 过滤语句和复制,权限的一些事例

    1.复制/etc/skel 目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 ~]# cp -r /etc/skel/ /home/tuser1/ ~]# chmod go= /home/tuser1/ 2.编辑/etc/group文件,添加组hadoop ~]# echo "hadoop:…

    Linux干货 2016-10-14
  • Nginx负载均衡和动静分离

    实验目的:实现Nginx的负载均衡和动静分离 实现环境:一台server用作Nginx代理(需要两块网卡,eth0连接内网,eth1连接外网),两台用作web服务(每台server都定义两个虚拟机,端口分别是80和8080),一台客户端用于验证结果; 操作步骤 负载均衡的实现: 一、配置IP 1.配置A主机的IP # ip addr add dev eth0…

    2017-05-13
  • Linux文件压缩、解压、归档总结

    一、简介   压缩对我们来说通常意味着减小文件体积,节省硬盘空间。在Windows平台上处理大文件或目录中的文件很多时我们都需要对这些文件进行压缩处理,压缩格式多种多样,如:zip、rar、7z等格式,压缩方式也比较多样话,支持按最大压缩比例或者最快时间进行压缩等多种方式,而生成的压缩包就可以让我们更方便的进行拷贝及归档整理。解压缩顾名思义就是回归…

    Linux干货 2015-09-26
  • 设计模式(二)单件模式Singleton(创建型)

      几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录。 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例…

    Linux干货 2015-06-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-10 09:17

    文章对网络参考模型ISO阐述的很详细,但这个排版有点混乱,而且不只是这一篇了,希望作者能注意一下。