比如两个地址192.168.1.3和192.168.2.5,判断是否是一个子网,首先会分别与子网掩码255.255.255.0进行二进制的与运算,然后对比网络部分的数字是不是一样的。
那么如果发现不在一个子网了,要怎么传输信息呢?
这个时候就需要路由来发送数据包了。
说到路由一定会想到我们平时使用的路由器,家里的路由器其实连接的就是你自己家里的一个子网,如果你要访问外网的时候,其实是跟那个网站机器所在的子网进行通信的。
路由器其实就是配置了多个网卡的专用设备,可以通过不同网卡接入不同的网络。而网关就是路由器的一种,我们可以认为路由器的ip地址就是网关地址,路由器上每个网卡都有ip地址和mac地址,但只能通过ip寻址,不能通过mac寻址。
那网络交换机又是什么呢?它也是一种设备,是工作在数据链路层的,是通过mac地址寻址和传输数据的。网络交换机主要用在局域网的通信,通过mac地址进行广播通信。而路由器一般是用来让你连接外网的。
顺便我们再介绍几个概念作为扩展。
LAN,就是local area network,就是局域网;WAN,就是wide are network,就是广域网。WLAN是wireless local area network,就是无线局域网,也就是wifi。
家里的路由器是包含交换机和路由两个功能的,如果连接到局域网内的设备就把网线插入LAN接口,如果连接外网就把网线插入WAN接口。
那么路由器访问外网的过程是怎么样的呢?
举个例子,两个局域网之间如何通过一个路由器进行通信。
大概过程就是,路由器配置了两个网卡,每个网卡可连接到一个局域网内。
局域网1内的电脑想发送数据到局域网2内的电脑,在数据包中会写上自己的ip地址和对方的ip地址。但是他们不在一个局域网内,于是局域网1的电脑先通过交换机将数据包发送给路由器,这个过程需要将路由器的一块网卡的ip地址对应的mac地址写到数据包的头部,然后才能通过交换机广播出去,发送给路由器。
接着路由器接到数据包,就会在局域网2内将目标机器的ip地址对应的mac地址写入头部,然后通过局域网2的交换机发送给局域网2内的电脑。
一个局域网内的每台机器都有自己的ARP Cache,这个ARP就是用来让局域网内各个设备都知道每个设备的ip地址和mac地址的对应关系的。所以在一个子网内通信,就是在数据包里写上对方的mac地址,交换机广播就完了。不同子网的通信,就是写上对方的ip地址,然后先通过路由器的mac地址广播到路由器,路由器再根据另外一个子网的ip地址转换为另外一个子网机器的mac地址,再通过交换机广播,就是这样的流程。如下图:
4.传输层
网上资料:
定义了一些传输数据的协议和端口号(www端口 80等),如:TCP(传输控制协议。传输效率较低,可靠性强,用于传输可靠性要求高数据量大的数据),UDP(用户数据报协议,与TCP相反,用户传输可靠性要求低,数据量较少的数据,如QQ聊天就是通过UDP传输的)主要从下层接收的数据进行分段和传输,到大目的地后再重组。
解释:
上边我们已经了解了网络层的通信流程,但还有个问题,就是机器上很多的程序都在使用一个网卡进行网络通信,那么怎么区分是哪个程序的数据呢?
这时候就引入了端口号的概念,就是发送的数据包其实是到网卡的某个端口上去的,然后那台机器上监听这个端口的程序就可以提取发送到这个端口的数据了。
端口号范围是0-65536,0-1023被系统占用了,其他应用程序用的是1024以上的端口。
所以小伙伴们会发现,网络层是基于ip协议进行主机之间寻址和通信的,然后传输层其实是建立主机的某个端口到另一个主机的端口之间的连接和通信的。
udp和tcp都是传输层的协议,作用就是在数据包里加入端口号,进行点对点通信。
udp是不可靠的,发出去人家收到没有就不知道了;tcp是可靠的,要求三次握手确认,接收到消息必须回复。
tcp协议仅仅规定了一套基于端口的点对点通信协议,包括如何建立连接,如何发送和读取消息,实际开发一般使用的就是socket网络编程了。
说到这里相信小伙伴们对与socket网络编程的原理也就有了一个更深层的了解了。
5.应用层
网上资料: