以太网协议
日常生活中我们经常使用以太网进行上网,那么什么是以太网?他是如何让我们实现上网的?
以太网实际是一种协议,它实现了对电信号的解释功能,即把0/1电信号转换为有用的信息。ethernet规定
- 一组电信号构成一个数据帧,叫做‘帧’
- 每一数据帧分成:报头head和数据data两部分
- head包含:(固定18个字节)
- 源mac地址,6个字节
- 目mac地址,6个字节
- 数据类型,6个字节
- data包含:(最短46字节,最长1500字节)
- 数据包的具体内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
注释:
mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
网络7层模型(OSI)
- 分层的目的是为了解耦,这样当每层的内部实现变化时不会影响其它层。
- 应用层、表现层、会话层并作应用层,属于用户态。
- 传输控制层、网络层、链路层、物理层都在内核中,由内核处理,属于内核态。
- 用户感知到的只是最上面的应用层,自上而下每层都依赖于下一层。
- 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件。
物理层
主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0,通过光纤或网线进行传输。
链路层
常见的协议为arp协议,所有上层的数据包到这层都要封装上以太网头,然后通过以太网协议发送。
arp -an
单纯的01信号是没有意义的,必须对这种01信号进行特殊的规定才能使其具有意义。比如多少位为一组,每组代表的含义是什么。而数据链路层的功能就是定义了电信号的分组方式。
早期各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet。
在以太网协议中需要源mac和目标mac,那么如何知道目标mac?
因为不知道目标主机mac,所以arp请求中的目标主机mac为FF:FF:FF:FF:FF:FF,对于这种mac为FF:FF:FF:FF:FF:FF的数据包,会在该数据包发送端所处的内网中广播出去,所有主机接收后拆开包,发现目标ip为自己的便进行响应,返回自己的mac。不是自己的ip则废弃该数据。
网卡激活,也会发送通告,向其他主机告知自己的mac
网络层
网络层的协议为IP协议,所有上层数据包到这都要封装上下一个主机的IP,例如:机器A和机器B不在同网段,机器A需要将数据先发送到网关,再由网关发送到机器B(机器A>网关>机器B)。具体的过程需要结合路由表计算出下一个要去的主机,下一个主机再计算下一个主机,一直重复下去直到到达最终的目标主机,响应便是一个目标主机返回给上一个主机,最终返回源主机。
请求:A>B>C
响应:C>B>A
重复的操作过程如下:通过路由表确定出下一个主机(下一跳),并将下一个主机的IP封装上,然后去链路层封装Mac信息,最终通过以太网协议发送给下一个主机。
通过路由表计算下一个主机的过程
例如,我要从百度上获取资源,肯定要先给百度发送一个数据包,计算机进行dns解析拿到真实的ip,如下图 182.61.200.6
拿到ip后与路由表的每个条目的掩码进行按位与操作,得到的值 与 destination(目标主机)的值进行比较。相等则看该条条目的网关地址,本机(计算机A)将数据包发送给网关地址(计算机B),再由 计算机B 将数据包发送给百度的计算机,不相等则与下一个条目进行匹配。
以上图为例,182.61.200.6(百度) 与第一条条目的掩码进行按位与操作后得到 0.0.0.0,与该条目的destination的值一致,便会先把数据包发送给192.168.1.1(网关),再由网关发送到百度182.61.200.6。182.61.200.6把也数据包返回给192.168.1.1(网关),本机再去192.168.1.1(网关)上拿百度返回的数据包。
注意
有的网关地址为0.0.0.0,说明本机 与 资源所在的机器在同一个网段内,不需要经过网关便可以相互传递数据包。
查看路由表(route -n)
传输控制层
链路层的mac帮我们找到主机,网络层的ip帮我们定位IP找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。传输层功能:建立端口到端口的通信。
盖层的协议主要有TCP、UDP。
TCP:主要是基于socket建立端口到端口的通信,是一种可靠的传输协议。可靠性主要通过确认机制保证(三次握手,四次挥手)。三次握手与四次挥手的每次数据发送与接收都会通过网络层、链路层、物理层。
三次握手
四次挥手
udp(不可靠的)
会话层
主要是对session的管理
表现层
对数据的管理,加密等
应用层
一般用户自己部署的一些软件都属于应用层,如浏览器,nginx,tomcat等等,常用协议
http:多用于浏览器
ssh:多用于连接shell
交换机
交换机包含了链路层,物理层两层,其作用主要体现在mac的管理上,多台机器连接在同一个交换机上,当有数据交互时,便会将mac与交换机上的插口对应起来,这样交换机在拿到响应时通过mac就知道从哪个口将数据发送给对应的主机。
交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
交换机将响应数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发,这一过程称为泛洪(flood),即上面所述目标Mac为FF:FF:FF:FF:FF:FF
更多信息可以在百度上进行搜索。
路由器
路由器包含了交换机的功能,有网络层、链路层、物理层三层。
路由器上包含了两块网卡,一块设置为局域网的网关的ip,另一块设置为另一个局域网网关的ip/广域网的ip,同时在两块网卡的路由表上设置好路由条目使其跳到另一个网卡,既能实现局域网与广域网/局域网与局域网的访问。