对网络传输的理解

0?wx_fmt=gif

网络:

Mac地址,网卡地址,网关,ip地址,子网,路由,子网掩码,广播,主机到主机,端口到端口,socket

物理层,链路层,网络层,传输层,应用层

物理层:硬件方面的一些连接,传输。

链路层:mac地址(网卡地址),多个网卡之间怎么进行通信,发送方知道自己的mac地址,但是怎么知道接收方的mac地址呢?

知道了接收方的mac地址之后怎么传递消息呢,通过广播的形式,向这个区域内的所有机器发送消息,每个机器自己判断和自己的mac地址是否相同,如果相同就接收,不相同就丢弃。

网络层:但是一个mac地址是上海的机器怎么给mac地址是洛杉矶的机器发消息呢,如果所有机器都在一个网络内,那这个广播的时候的量是不是太大了?

所以会有子网络这个概念,整个网络分为很多个子网络。

Mac地址在一个子网络里的机器可以通过广播的形式传递消息,不在一个子网络的机器只能通过路由的方式传递消息;

这也就导致了网络层的出现,网络层引进一个新的地址,就是网络地址(IP地址),那么每个机器就有了两个地址了,一个是绑定在网卡上的唯一的mac地址,另一个是网络管理员分配的网络地址,传递消息的时候就要先找到IP地址,然后再处理mac地址。

定义网络地址的协议叫ip协议,定义的地址叫IP地址,现在基本使用的都是IPV4协议。0?wx_fmt=jpeg

IP地址由32个二进制位组成,从0.0.0.0到255.255.255.255

每台机器都会有一个IP地址,IP地址分为两部分,前一部分是网络,后一部分是主机。

前一部分的网络是用来判断是否在同一个子网络内的,但是问题是:32里不一定前多少位是网络的,可能是前8位,可能是前16位,不一定。所以就有了子网掩码这个概念。

子网掩码和IP地址格式一样,都是32位的二进制数,但是有一个特征:网络部分全是1,主机部分全是0。那判断是否在一个子网络内就通过把两个IP地址分别和子网掩码进行AND运算(两个1结果是1,剩下的都是0),如果运算的结果一致,则在一个子网络内,否则不在。

那么知道两个机器的IP地址之后就可以判断是否在同一个子网络内了,如果是的话,则可以通过广播的形式传递信息,如果不是则只能将数据包传递给两个子网络的网关处,让网关进行处理。大概这样:0?wx_fmt=jpeg

所以:0?wx_fmt=jpeg

传输层:有了mac地址和ip地址以后两个机器就可以互相通信了,但是机器上有许多程序在跑,各种聊天工具,视频工具,不同网页;传递过来的数据包怎么知道是哪个进程的?

所以还有一个端口的参数,"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口;

网络层是主机到主机的确定,传输层就是端口到端口的确定;主机+端口称为套接字(socket)。

传输层的两个协议:UDP和TCP

UDP:不可靠的传输,但速度快。

TCP;可靠,但相对复杂,速度慢。

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

用户上网设置:0?wx_fmt=jpeg

0?wx_fmt=jpegwindow下的界面:

动态IP地址:一般都会使用动态IP地址,每次让网络管理的机器自动给分配一个这个子网络下的现在的唯一的

访问网页的实例:访问www.google.com0?wx_fmt=jpeg

通过DNS得到IP地址:www.google.com是域名,不是IP地址;需要通过DNS服务器解

传递数据给mac地址:根据两个IP地址和子网掩码判断是否在同一个子网络内,如果是则用广播的形式传递,不是则发给网关的mac地址。

0?wx_fmt=jpeg

posted @ 2017-05-12 11:35  Java技术头条  阅读(179)  评论(0编辑  收藏  举报