OSI(open system internet)七层模型介绍以及NAT(Network Address Translation)技术详解


1- OSI七层模型介绍

ISO标准是指由『 国际标准化组织 (International Organization for Standardization), ISO 』,OSI是由ISO提供的。

在这里插入图片描述

各层的功能:

在这里插入图片描述


2- 物理层

(1)作用

物理层:在TCP/IP协议栈中的物理层,他对应到OSI七层协议中的物理层和数据链路层。其中物理层用来决定了两张物理网卡之间通信的电信号(0和1)的传输方式。利用传输介质为数据链路层提供物理连接。
直接可以理解为以二进制数据形式在物理媒体上传输数据。

工作:集线器、网络适配器

(2)常见协议

在物理层中常见的协议有:有线网络802.3无线网络802.11
IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。IEEE802协议簇由IEEE802标准委员会维护。其中最广泛应用的协议有以太网(802.3)和WLAN(802.11)。

以太网/有线网络协议: 802.3协议
无线局域网标准/wifi的标准(规定了一个基站和无线客户端或两个无线客户端之间通过空气传输的接口): 802.11标准


3- 数据链路层

(1)作用

数据链路层:对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。(我的理解就是获取对方的MAC地址形成数据帧然后才能发送)

我么详细了解一下:
以太网(IEEE 802.3,有线网络)规定一组电信号就是一个数据包,一个数据包被称为一帧,制定这个规则的协议就是以太网协议。一个完整的以太网数据包如下图所示:
在这里插入图片描述
在这里插入图片描述

整个数据帧由首部、数据和尾部三部分组成:

  • 首部:固定为14个字节,包含了目标MAC地址、源MAC地址和类型
  • 数据:数据最短为46个字节,最长为1500个字节,如果需要传输的数据很长,就必须分割成多个顿进行发送。
  • 尾部:尾部固定为4个字节,表示数据顿校验序列,用于确定数据包在传输过程中是否损坏。

因此,以太网协议通过对电信号进行分组并形成数据顿,然后通过物理介质把数据帧发送给接收方。那发给谁呢?这个标识是什么呢?

以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡,数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。

MAC地址采用十六进制标识,共6个字节,前三个字节是厂商编号,后三个字节是网卡流水号,例如4C-OF-6E-12-D2-19。有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。

所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。

工作:网桥、交换机

(2)常见协议

数据链五层涉及到的协议有:ARP协议(地址解析)RARP协议(逆地址解析)PPP协议

【1】ARP协议(地址解析)

就是ARP(Address Resolution Protocol)协议来获取到的主机的MAC地址的。

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。

源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。

每台主机都维护一个ARP缓存表。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。

【2】RARP协议(逆地址解析)

RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。平时我们可以通过电脑设置IP,也可以通过DHCP自动分配获取IP地址。

比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。
在这里插入图片描述

【3】PPP协议(点对点协议)

PPP协议:point-to-point协议,即点对点协议,是数据链路层封装协议的一种。PPP协议工作在串行接口和串行链路上,一般来说,PPP协议所构成的网络只允许双方之间通信,不允许像以太网一样接入交换机后接入其他的主机或设备。

手机上网都是PPP协议。点对点协议(Point-to-Point Protocol)提供了一种通过点到点链路传输多协议数据报的标准方法。


4- 网络层

(1)作用

网络层:为数据包选择路由。

网络层使用的中间设备:路由器

我们来看一看网络层具体有哪些功能:【具体参考的这篇文章:网络层的作用
在这里插入图片描述

左边的主机想和右边的主机通话,那么这个数据包一定会经过网络。中间灰色的圈是路由器,他们组成了一个网络,数据链路层只是把数据从一端传递到另一端,在图里面比如说从路由器1传递到2。但是网络层做的事情是,规划好所有跳的路线,比如说数据包要依次经过1,2,3,6才能从左边主机到达右边主机,这就是网络层一个非常重要的作用,也就是提供“路由routing”。

别看这个功能看似简单,实际上非常复杂,因为网络是动态可变的,每个链路成本可能都在变化,网络层需要时刻都对于每一个数据包给定最佳的路线,这就涉及到路由器的各种确定最佳路线的算法,比如距离矢量算法和链路状态算法等等,想了解的可以去看看这篇文章:
路由算法之距离矢量算法和链路状态算法

网络层除了上面说的第一个功能 ——路由选择以外,还有第二个功能:存储、交换、转发。
具体来说这是具体的网络中路由器做的事情。路由器中存在着路由表,路由表的作用是为路由器提供包的方向依据。路由器会根据每个到达包的目的地址来确定他应该向那个方向转发这个包。这个就是转发的功能。当路由器接收包的速度要小于它转发包的作用时候,他就会把暂时发送不了的包缓存在自己的缓冲区里面,直到前面的都发出去再将其发出去,这就是存储。

第三个功能是拥塞控制。拥塞控制是网络设计的时候必不可少的功能。就像城市里面哪里堵车了,其他人就知道不要再去了,网络层也一样。比如上图中2,3路由器出现了严重的拥塞,那么左边主机往右边发送包就会从1236变成1456。拥塞控制对于网络的效率以及降低丢包率有着无可替代的作用。

网络层第四个作用是呼叫准入。什么是呼叫准入呢?比如左边主机想传一个大的视频文件给右边的主机,但是网络这个时候非常拥挤很难传送。首先左主机先发送一个控制包给右主机,这个控制包说明了自己视频数据所需要的带宽等等信息,那么这个包所途径的路由器都会首先查看自己能不能满足这个需求,如果不能就返回一个不能的信息,如果能就按照路由表向右主机传送。所以一旦有一个路由器不能提供这个服务,那么呼叫建立就失败了,否则只要所以路由器许可,才能传送。呼叫准入是在网络层所选路径沿途的路由器,在真正数据交换之前握手协商状态信息。呼叫准入是为了保证网络的服务质量而设计的功能。

网络层的核心就是路由器的功能,上面的几个功能,比如路由,存储转发,拥塞控制,呼叫准入都是路由器的功能,除此以外,路由器还有包分类的功能。比如说一个直播视频和一个ftp文件流都需要一个路由器转发,那么视频流肯定是优先级更高的,因为直播的高延迟是不可忍受的,所以路由器会根据不同包确定优先级,优先转发高优先级的,低优先级的需要在高优先级转发之后再转发。

(2)常见协议

网络层涉及到的协议:IP协议

【1】IP协议

IP 协议(Internet Protocol)又称互联网协议,是支持网间互联的数据包协议。该协议工作在网络层,主要目的就是为了提高网络的可扩展性,和传输层 TCP 相比,IP 协议提供一种无连接/不可靠、尽力而为的数据包传输服务,其与TCP协议(传输控制协议)一起构成了TCP/IP 协议族的核心。

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。


5- 传输层

(1)作用

传输层:提供端对端的接口
传输层是用来实现不同PC上的两个进程之间互相通信,在传输层中有一个非常重要的概念,叫做端口。其中端口是16位的,最大为65535,其中1024以下的端口为众所周知端口,这些端口已经分配给了一些常用的服务:

ftp (20/21) - ssh (22) - telnet (23) - smtp (25) - dns (53) - dhcp (67/68) - tftp (69) - www/http (80) - ntp (123) - snmp (161) - https (443)

每一个需要使用网络通信的程序都会占用一个端口,当操作系统从网络上收到一个数据包之后,他根据数据报文中的目的端口号来决定这个数据包给哪个应用程序,这样一个端口只能被一个应用程序占用使用。

在Linux下,使用低于1024以下的端口的程序必须以root权限运行。另外可以使用netstat命令查看哪些端口正在被使用。
sudo netstat -tlnp
sudo netstat -tlnp | grep pid
在这里插入图片描述

(3)常见协议

TCP的三路握手和TCp断开四次挥手想了解的可以看这篇文章:TC三次握手与四次挥手

【1】TCP协议

TCP协议是一个面向连接的、可靠的传输协议,它提供一种可靠的字节流,能保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。
TCP协议传输效率低,但可靠性强。

【2】UDP协议

UDP协议是一个无连接的数据报协议,是一个“尽力传递”和“不可靠”协议,不会对数据包是否已经到达目的地进行检查,并且不保证数据包按顺序到达。
UDP协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据(比如QQ聊天数据)。

【3】传输层常考概念
  • MTU (Maximum Transfer Unit,最大传输单元)
    链路层的帧(frame)中的数据部分的最大字节数,以太网中的一般为1500字节。
  • MSS (Maximum Segment Size,最大报文段大小)
    TCP的报文段中的数据部分的最大字节数, MTU减去IPv4的Header和TCP的HeaderIPv4(一般都是20字节),则MSS=1500-20-20 = 1460字节
  • MSL (Maximum Segment Lifetime,报文最大生存时间)
    报文在网络上存在的最长时间,TCP四次挥手是主动断开连接的一方再发送完最后一个ACK后进入TIME_WAIT状态时,需要等待2MSL时间后才变成CLOSED状态,,RFC793建议为2分钟
  • RTT (Round-Trip Time)
    从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。TCP中保留了RTT的加权平均值RTTS (下标S表示Smoothed)
  • TTL (Time To Live)
    该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段
  • RTO (Retransmission Timeout,超时重传时)
    TCP中触发超时重传机制的时间,应略大于RTT。 RFC2988中建议RTO = RTTS + 4 * RTTD

6- 数据收发流程

在这里插入图片描述
在这里插入图片描述


7- NAT技术详解

(1)私有IP和公网IP

家里的路由器为什么可以上网,我们了解NAT技术之后,就会知道啦。首先我们需要了解IP地址有两种:公网IP和私有IP。

  • 私有IP:私有IP就相当于自己的一个绰号,这个绰号在家中(局域网)有效,去外面(internet)可能重名了。这个绰号“局域网”内生效。
  • 公网IP:公网IP就相当于你的身份证号,假设身份证号是12345。公网IP在Internet上有效。

(2)NAT技术流程图

假设我们需要向www.qq.com腾讯服务器发送一个“腾讯你好”,我们来看一下实际的流程是怎么样子的。
在这里插入图片描述

(3)分步细分讲解

我们来分步讲解一下实际的流程是怎么样子的(一图一解释)

我们的电脑会域名解析这个域名,将这个域名的IP地址解析出来,默认端口号是80端口;我们的主机IP(私有IP)以及默认生成的端口号也会随着报文发送出去。

在这里插入图片描述
当然,我们的IP地址需要和我们的路由器在一个网段内,不然没法发送到路由器的。
至于如何在一个网段内,是需要自己的私有IP和子网掩码按位与运算获得的。
图中我们的IP是192.168.1.2,子网掩码是255.255.255.0,那么按位与运算过后就得到192.168.1.0
图中路由器的IP是192.168.1.1,子网掩码也是255.255.255.0,按位与运算也是192.168.1.0,所以是在一个网段内的。

在这里插入图片描述
我们的路由器从LAN口收到这个报文之后,肯定不能直接将你的数据从WAN口发送出去,因为你的私有Ip没有人知道这是什么,只能使用路由器的公网IP替代你出去路由,并且端口号也是需要改的,如果不改的话,每个PC来的数据报文都是这个路由器的公网IP,如何区分?所以端口也需要改。
改了之后路由器中有NAT表会记住,因为还需要等你回来,回来之后再改回来才能发送到你的PC上,不然路由器找不到你的PC。

在这里插入图片描述
然后通过路由发送到腾讯服务器 (www.qq.com 180.97.33.108)上,腾讯服务器就收到了你的消息内容。

如果是腾讯服务器要回复你的话,那就需要将目的Ip和源IP,以及源端口和目的端口互换一下就可以了,然后路由到我们的路由器上的时候,路由器就会查询NAT表,将IP地址和端口号换回来,然后发送到你的PC上,刚好发送回来你发出去的那个端口上。


8- DNS域名解析流程

当我们在浏览器输入www.baidu.com是,浏览器都做了什么呢?

  • 因为baidu.com是一个域名,所以需要将百度的域名翻译成IP地址,这个是由windows上的DNS客户端访问DNS服务器实现的。(访问DNS服务器肯定存在一个客户端的)Windows+R键打开输入services.msc可以看见。
  • DNS上存在着全世界所有的域名,只需要去里面找就可以了。
    在这里插入图片描述
    在这里插入图片描述
    (1)DNS服务器的设置是在windows的网络设置里面配置的,Linux下是在 /ect/resolv.conf 下配置的。DNS服务器的IP地址为114.114.114.114
    (2)客户端就要发送一个应用层数据报文,“baidu.com的IP地址是多少?”
    (3)到了传输层,传输层加上TCP的头20个字节,有两个关键的元素就是源端口(系统随机分配的,假设为8888)和目的端口(DNS默认端口53)
    (4)到了网路层,网路层加上IP头20个字节,有两个关键的元素,源IP(假设自己的IP为192.168.1.2)和目的IP(114.114.114.114)
    (5)操作系统看见源IP和目的IP不在一个网段内,就会把数据给默认网关,默认网关就是路由器的LAN口IP地址(192.168.1.1)
    (6)数据链路层要给数据加上帧头,帧头里面两个元素叫源MAC地址和目的MAC地址(网关的MAC地址)接下来用源MAC和目的MAC封装数据报文,通过物理层以广播的形式发送出去。【不知道网关的MAC地址,PC会发送一个ARP广播报文,“192.168.1.1,你的MAC地址是多少?”,局域网内的主机都会收到该报文,然后zhiyou192.168.1.1的主机会回复,我的MAC地址是:AA:BB:CC:DD:EE:FF】
    (7)局域网内所有的机器都会收到这个报文,他们会检查目的MAC是不是自己的,不是直接丢掉,是的继续解析。
    (8)路由器的LAN口收到数据发现是给自己的,就往上层网络层走,网路层收到数据包之后,检查源IP和目的IP,将公网IP转为私有IP,将端口也改掉。并且记录在NAt表中。
    (9)然后从WAN口发送出去,经过Internet路由转发到达114.114.114.114主机
    (10)114.114.114.114 DNS服务器查询自己的数据库,获取baidu.com的IP地址,然后封装数据报文“baidu.com的IP地址是:AA:BB:CC:DD”
    (11)到传输层,将源端口和目的端口互换,到网络层将源IP和目的IP互换,咋经过Internet上的路由器路由转发到家里的路由器上。
    (12)路由器查询NAT表,修改回来自己的私有IP和端口,然后路由器在自己的LAN口将数据报文光比发送出去,PC查询到MAC地址是自己,去掉帧头然后给网络层,网络层查看IP地址,是给自己的就给传输层,数据层解析出端口号,再给DNS客户端,这时候DNS客户端就知道baidu.com的IP地址是AA:BB:CC:DD

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值