局域网内和局域网间的通信

1、交换机和路由器区别
交换机主要是用于组建局域网,而路由器则是负责让主机连接外网。

2、局域网间通信
例子1:

1. PC1与PC2通信时,在PC1电脑中,应用层产生数据交给传输层;传输层进行数据的分段,使数据的大小适合在网络上传递,根据应用层不同软件产生的数据,选择不同协议栈进行封装TCP或UDP,再进行不同服务端口号的封装(例:WWW 80 ,FTP 21),再传递给网络层;网络层在数据包头部进行封装源IP、目的IP,根据上层协议栈标识不同协议号,当IP包头封装TCP时协议号为6、UDP协议号为17,用来标识上层使用的协议,继续传递给数据链路层; 数据链路层在数据包头部进行帧的封装,封装源MAC、目的MAC,由于不知道目的MAC地址,会进行ARP的广播包,封装一个全F的类型字段为0X0806广播包,交付给物理层,物理层转换成电信号(bit流),发送到交换机;
2. 交换机接收后发现为ARP的广播包,进行其解封学习到PC1的MAC地址,继续封装并除接受端口以外的端口再次进行ARP的广播;
3. 路由器收到交换机发来的ARP广播,进行解封,查看到数据包中的类型字段为0X0806即ARP的广播包,进行回复,源MAC为路由(网关)的MAC,目的MAC为PC1的MAC,类型字段为0X0806,经过物理层将数据转换为电信号(bit流)发送给交换机;
4. 交换机收到后进行解封,学习到源MAC(路由器的MAC ),发现目的MAC已经存在自己的MAC表中,查看目的MAC对应的端口,并从对应的端口发送到PC1;
5. PC1接收数据包后进行解封,学习到路由器(网关)的MAC,在数据链路层将目的MAC封装为路由器(网关)的MAC, 类型字段为0X0800,并在数据帧尾部封装FCS,来校验数据的完整性,然后向下层传递给物理层,物理层把数据帧转换成电信号(bit流),发送到交换机;
(注:不同网段的通信,PC机先把数据传送到网关)
6. 交换机接收到数据包,查看到目的MAC已存在自己的MAC表中,根据自己MAC表中对应的端口发送出去;
7. 路由器接收到数据包后进行解封装,在数据包头部发现目的ip,便查找路由表条目中对应的端口,便对数据进行重写,由于不知道目的主机的MAC地址,路由器会发送ARP广播,PC2收到数据包进行解封,发现是ARP广播,类型字段为0X0806,
然后对其进行封装回复,源MAC为PC2的MAC,目的MAC为路由器的MAC,路由器收到后把PC2对应的MAC地址和端口记录在MAC表中,
8. pc2接受到信息,便对数据进行解封装,发现目的ip是给自己的,然后继续解封装,然后把数据传送给应用程序qq。然后对路由回复,在传输层设源端口号为8000,目的端口号为4000,封装udp头部。在网络层将源ip设为192,。168.2.1,目的ip设为192.168.1.2,协议号为17,在数据链路层将源mac设为12个3,目的mac设为12个1,类型字段为0x0800,封装FCS,然后经物理层将数据转为bit流传给路由器,路由器再查找路由表,并对数据进行重写,从f0/0传送出去,交换机解封装,查找mac表,再对数据进行封装,从f0/0传送给pc1.通信完成。

例子2:

1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。

2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。

3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。

4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。

5)此时HostB才会收到来自HostA发送的数据。

3、局域网内通信
ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。

1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。

2)当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。

3)当主机B接受到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。

4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。

4、总结
1)每个主机内都有ARP表。

2)交换机主要是转发数据的,根据MAC表,转发给指定接口,MAC表没有的话从非接受接口发送出去(也就是广播)。

3)局域网内通信是通过交换机的(同功能的),假如主机ARP表中没有目标MAC地址,发送ARP请求信息到交换机,交换机有的话直接回,没有的话就广播等目标返回,更新ARP表。源主机得到目标MAC重新填充数据包发送给交换机转给目标主机。

4)局域网间的通信通过路由器,目标主机在另一网络,这里可以将路由器看出目标主机,源主机发送ARP请求到交换机->路由器,路由器返回更新交换机和源主机的MAC表和ARP表,源主机将数据发送到路由器,检查路由表是否有目标网段相匹配的项,重新封装包,源MAC为路由MAC,目标MAC为目标路由2MAC,当到达路由2,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。

原文地址:https://www.cnblogs.com/zdcsmart/p/11791948.html

时间: 2024-10-12 04:37:57

局域网内和局域网间的通信的相关文章

erlang局域网内节点通信——艰难四步曲

http://blog.chinaunix.net/uid-22566367-id-382011.html 在Programming Erlang这本书中,在写到第十章中,主要实现的是不同节点之间的通信,书上列出了四步,其中的第一步很容易实现,依葫芦画瓢,很容易实现同一台机子上,不同节点之间的通信,运行结果和书上的完全一致.当你急切地去尝试第二步(在局域网内,不同机子之间的通信)时,你可能会卡住的(本人是这样的,不知道你?),实践的结果和Joe所说的完全不一样(你如果按照书上所说,在kvs:st

ESP8266学习笔记2:实现ESP8266的局域网内通信

上一篇熟悉了编译下载操作.如今就以实例入手. project使用的是IOT_DEMO,据DEMO文档能够知道ESP8266初始工作模式为softAP+station共存的模式.于是这边我们就先以softAP入手.研究下局域网内的通信. 转载请注明:http://blog.csdn.net/sadshen/article/details/46810755 一.DEMO原理介绍 画了DEMO的框图来帮助理解. 调试PC接入ESP的softAP中,PC端使用curl工具与ESP的webserver进行

公网访问局域网内的数据库

1,外网的服务器(比如Java web)如何连接局域网内的数据库呢? 2,公网的电脑如何访问局域网内的某个服务呢? 情景:我们之前做的一个项目,是要做一个网站,并且网站要能访问到客户公司局域网内的SQL Server数据库. 公网的电脑访问局域网内的数据库??? 当时可把我们难倒了.在无计可施的时候,我打电话咨询了前公司的技术大牛,给我介绍了端口映射和花生壳 首先我们要明确点: (a)公网中的电脑是可以访问局域网的网关(外网ip)的; (b)网关的外网ip是由运营商分配的,是不固定的(所以才要用

局域网内Linux服务器时间同步

局域网内Linux服务器时间同步 1.将一台能够上网的服务器作为时间服务器: # /usr/bin/rdate -s time-b.timefreq.bldrdoc.gov //将时间服务器与互联网时间服务器同步 # /etc/init.d/ntpd start //启动时间服务器 # vi /etc/cron.weekly/rdateweekly.sh //设置计划任务,每周同步一次时间 ---------------------------------------- #!/bin/sh  

局域网内基于UDP的文件传输小工具

一.目标 基于UDP来设计一个文件传输的小工具,以此来了解UDP协议的特点. 内容: 基本要求: 输入对方IP地址,对方如果存在,可以给对方发送文件. 扩展要求: (1)工具具有友好的用户界面: (2)局域网内使用该工具的两台主机可以互相进行文字通信: (3)自动按照一定频率扫描局域网内其他开启了该工具的主机,并在界面上用列表显示出来: (4)传输文件和文字内容时,直接选择界面上已经显示出来的存活主机,不需要手动输入IP地址. 二.设计实现 环境: Ubuntu14.04+Gcc4.8+Ecli

VM搭建LAMP和局域网内访问之 转

(2012-11-06 14:29:17) 转载▼ 标签: it 分类: WEB 1.apache:[[email protected] liuhan]# yum install httpd... 启动[[email protected] liuhan]# /etc/init.d/httpd startStarting httpd: 查看运行状态[[email protected] liuhan]# /etc/init.d/httpd statushttpd (pid  2633) is run

Socket Android手机客户端与PC服务端局域网内联测试

Socket Android手机客户端与PC服务端局域网内联测试,笔者采用的是 PC服务器,Android平板客户端 ,PC模拟器客户端, 前段时间为了加深对Socket通信的印象和知识的深度掌握,我模仿了QQ的一些元素,也借鉴了其他牛人的一些源码思想,写了 一个 叫 IQ 的 Android 聊天软件,该软件大致由 Android客户端.JAVA pc服务端.mysql数据库组成,客户端和服务端都 比较多的用到了读写的IO流,SCOKET,线程等,这篇博客主要给大家介绍测试环境,不讲源码实现方

局域网内时间同步net time的使用

局域网内时间同步net time的使用:https://blog.51cto.com/fan040908/1085952 需要在两台计算机间同步时间,其实就是局域网同步时间,找到命令 net time \\192.168.0.1 /set /y 但是会出现“发生系统错误 5”.出现这样的错误是因为客户端还没有登录进时间源服务器,客户机需要登录进服务器才能取得时间.使用Guest用户登录进时间源服务器就可以 net use \\192.168.0.1 “password″ /user:”usern

基于WIFI模块(ESP8266)与非同一个局域网内服务器建立连接(转)

原文地址:https://blog.csdn.net/ludaoyi88/article/details/62236644 案例简述: 以WIFI模块(ESP8266)为开发对象,处在局域内网中的WIFI模块,连接到另外一个局域内网的TCP服务器,形成WIFI模块和服务器之间通信.本文先以电脑控制WIFI模块的连接,熟悉AT指令的使用,再通过编程手段,由单片机去控制WIFI模块,深入学习. 一.电脑端调试,控制WIFI模块的连接 说明:将WIFI模块通过串口与电脑连接,电脑通过串口调试软件给模块