通络通信

网络详解:

网络的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 08:47
下一篇 2016-09-02 08:47

相关推荐

  • Linux的诞生史

    Linux诞生史 远古记忆-UNIX的诞生 Multics计划—开始 这是由麻省理工学院,通用电气和AT&T的贝尔实验室合作的操作系统项目,用于使用在GE-645大型主机上的。但是由于整个目标过于庞大,Multics虽然发布了一些产品,但是性能都很低,AT&T退出了Mulitcs项目,计划终止。肯.汤姆逊当时也参加了这个项目,很不…

    2017-07-11
  • Java中的CopyOnWrite容器

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和…

    Linux干货 2016-08-15
  • 利用heartbeat构建高可用http

    一、实验准备:  1)实验环境:          2)同步时间;确保可以使用主机名通信;确保可以使用ssh秘钥方式进行彼此登录;由于是两台设备,需要仲裁;  确保可以使用主机名通信 web1修改hosts文件如下: 172.16.2.12 web1.linux.com…

    Linux干货 2015-07-08
  • 第九周

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;   1 #!/bib/bash   2 #   3 a=0   4 x=0   5 y=…

    Linux干货 2017-05-25
  • N21天天第十四周课程练习

    系统的INPUT和OUTPUT默认策略为DROP; #把默认策略设置为DROP [root@localhost ~]# iptables -P INPUT DROP [root@localhost ~]# iptables -P OUTPUT DROP 1、限…

    Linux干货 2016-12-05
  • N25第一周作业

    个人习惯用导图写的作业

    Linux干货 2016-12-04

评论列表(1条)

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

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