计算机网络的数据通信过程主要基于下三层来实现,在这里我简单的说一下关于下三层的硬件结构;
物理层主要是进行二进制转换的,两个主机互联,首先它的比特率必须一致,否则数据就无法正常的传输,会导致数据不一致等情况;而物理层的硬件设施有中继器,集线器;中继器,具有两个端口,可以在数据通信时因为距离过长而无法通信的问题,数据从一个接口进入中继器,由另一个接口出来后,数据通信的强度就会恢复,但是中继器只有两个接口,这样效率就会很低,而集线器的产生就是在中继器的基础上进行强化,集线器具有多个接口,可以将多个主机设备连接在一起,形成一个物理上是星型结构,逻辑上却是总线结构的网络拓扑;但集线器的一个问题就是,他这样的连接方式会导致数据之间的冲突过多,数据传输的效率就会慢;而什么是冲突,在下面会讲述到;
数据链路层主要是定义物理地址,对接收到的数据进行校验,判断是否有差错产生;数据链路层的主要设备是网卡,网桥以及交换机;其中网桥和交换机是在数据链路层的基础上扩展以太网;网桥工作在数据链路层,他根据MAC帧的目的地址对收到的帧进行转发和过滤,当网桥收到一个帧时,不是立刻将其广播给所有接口,而是判断该帧是否存在于网桥转发表中,若存在,则根据目的MAC地址在转发表中对应的接口进行单播转发,若没有,则广播所有接口;交换机实际上就是一个多接口的网桥;在交换机中,每一个主机都拥有自己的一个冲突域,即每一个主机之间是不会产生冲突的,但但这一点,就比集线器好很多,所以现在市面上所用的存储转发设备一般都是交换机了,很少看到有集线器的存在;
数据链路层所具有的差错检测功能是由CSMA/CD协议实现的,它是一种带有冲突检测的载波监听多路访问协议;该协议具有多路访问的特性,每一个主机都可从其信道上发送数据到总线上进行传输,这种多路访问的结构也容易导致冲突;CSMA/CD协议的一个重要的功能就是载波监听,主机在进行发送的时候,需要进行载波监听,如果检测到载波,就说明有数据在运行,就延时发送,延时时间为随机数,若没有检测到载波,表示总线空闲,则可发送数据,但如果有多个主机检测到总线空闲,一起发送数据,就会导致冲突,一旦产生冲突,所有的站点都回退,各个站点均等待一个随机时间重新进行载波监听;
交换机的功能主要体现在以下几个方面:
①学习:交换机对于每一个转发到它这里具有IP和MAC地址的帧,它会判断是否有这个帧的源MAC地址,若没有,则将源MAC地址写入交换机的转发表,然后在进行广播,寻找符合该目的MAC地址的接口;如果接收到的数据帧中的源MAC地址,已经出现在MAC地址表中,则更新该条目的时间戳;
②转发:
有目的转发:交换机在接受到数据帧时,若该目的MAC地址存在于交换机转发表中,则按该目的MAC地址所对应的接口进行单播转发;
无目的转发:交换机在接受到数据帧时,该目的MAC地址不存在于交换机转发表中,则将该数据帧进行广播,也可称之为泛洪;
过滤:如果交换机收到的一个数据帧,发现该数据帧的目的MAC地址对应的端口和接收数据的端口是同一个端口,则这样的数据,过滤不接收;
网络层主要是为上层运输层所传下来的分组能够找到合适的路由去寻找到目的主机;而在网络层中进行数据传输,不能使用IP地址,而要使用这个IP地址所对应的MAC地址,只有通过这个MAC地址才能找到合适的路由,IP地址一开始是由应用程序向DNS服务器进行请求所得出的,IP地址可以通过ARP协议进行转换,转换成物理地址即MAC地址,在这个过程中,需要知道的是,每一个主机都有其所对应的ARP缓存表,在表中有所对应的IP地址和其MAC地址,将IP地址转化为MAC地址的过程中,若能在该主机自身的ARP缓存表中找到所对应的MAC地址,则可直接获得,若无法找到,则需要通过ARP协议封装出一个ARP数据包里面有对应的MAC地址,将其广播出去,目的主机收到之后,将源MAC地址和源IP地址存在自身的ARP缓存表中,并将自己的MAC地址和IP地址数据封装后,以单播的形式返回,这样就可以获得目的主机的MAC地址;
数据通信之双机互连:
①如果用户在应用程序中没有指定目标IP地址,则可由应用程序发送请求到DNS服务器获取目标IP地址,或由用户自己手动指定;
②获取IP地址后,确定将要连接的传输层协议;选择TCP/IP协议;则要进行三次握手连接后再发送数据;
③IP协议会按照正确的地址和对应格式完成数据封装,但是网络访问层需要通过MAC地址完成数据传输,因此需要查询ARP缓存中是否有对应该IP地址的MAC地址记录;在ARP缓存表中查找目标IP地址的MAC地址,若无,则将TCP三次握手连接暂存在内存中;封装ARP数据包,广播发送,目标主机收到ARP数据包后,将源IP地址及MAC地址缓存,再将自身的IP地址和MAC地址封装单播发送回来;
④源主机接收到ARP数据包后,获得了目标主机的MAC地址,开始进行TCP三次握手连接;
⑤数据报文传输完毕后,再进行TCP四次挥手结束连接;
数据通信之交换机通信(UDP)
①如果用户在应用程序中没有指定目标IP地址,则可由应用程序发送请求到DNS服务器获取目标IP地址,或由用户自己手动指定;
②获取IP地址后,确定将要连接的传输层协议;选择UDP协议;则数据直接由应用层发往UDP进行直接传传输;将UDP封装好的数据交给IP协议进行进一步的封装;
③将封装好的IP协议交由网络层进行封装,网络层需要获取目标主机的MAC地址,才可在网络层中进行传输,访问当前主机的ARP缓存表,看是否有对应目标IP地址的MAC地址,若无,则将UDP连接暂存在内存中;封装ARP数据包,广播发送,经过交换机时,由交换机查看是否有该ARP封装的源MAC地址,若无,则将源MAC地址写入交换机转发表中,进行泛洪操作,若有,则进行单播发送到目标主机;目标主机收到ARP数据包后,将源IP地址及MAC地址缓存,再将自身的IP地址和MAC地址封装单播发送到交换机,交换机查看是否有该主机的源MAC地址,若无,则将源MAC地址写入交换机转发表中,进行泛洪操作,若有,则进行单播发送到目标主机;这样就可使源主机获取目标主机的MAC地址,并写入到源主机的ARP缓存表中,可以开始在网络层中传输;
④按照ARP缓存表中的目标MAC地址传送数据;
数据通信之交换机通信(TCP)
①如果用户在应用程序中没有指定目标IP地址,则可由应用程序发送请求到DNS服务器获取目标IP地址,或由用户自己手动指定;
②获取IP地址后,确定将要连接的传输层协议;选择TCP协议;则数据需要先建立TCP的连接,即三次握手后,才可传输数据;将TCP封装好的数据交给IP协议进行进一步的封装;
③将封装好的IP协议交由网络层进行封装,网络层需要获取目标主机的MAC地址,才可在网络层中进行传输,访问当前主机的ARP缓存表,看是否有对应目标IP地址的MAC地址,若无,则将TCP三次握手连接暂存在内存中;封装ARP数据包,广播发送,经过交换机时,由交换机查看是否有该ARP封装的源MAC地址,若无,则将源MAC地址写入交换机转发表中,进行泛洪操作,若有,则进行单播发送到目标主机;目标主机收到ARP数据包后,将源IP地址及MAC地址缓存,再将自身的IP地址和MAC地址封装单播发送到交换机,交换机查看是否有该主机的源MAC地址,若无,则将源MAC地址写入交换机转发表中,进行泛洪操作,若有,则进行单播发送到目标主机;这样就可使源主机获取目标主机的MAC地址,并写入到源主机的ARP缓存表中,可以开始在网络层中传输;
④进行TCP三次握手连接,按照ARP缓存表中的目标MAC地址传送数据;
⑤当数据报文传输完毕后,发起断开TCP连接,四次挥手;
本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1941720