当前位置: 首页>后端>正文

Network OSI model

【0】概述

OSI(Open System Internetwork)七层协议是由ISO (International Standards Organization)在1978(maybe 1979)年为网络通信制定的。事实上,当年的网络通信是个群魔乱舞的时代,因此很多协议无法准确定义为某一层的协议。TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等。

【1】物理层

定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换),这一层的数据叫做比特。此外,该层中还具有确定连接设备的电气特性和物理特性等功能。

【2】数据链路层

定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问,这一层通常还提供错误检测和纠正,以确保数据的可靠传输。为做到这一点,在每一帧中必须同时带有同步、地址、差错控制及流量控制等控制信息。

2.1 Mac(Media Access Control)地址

烧录在网卡中,48bit,前24位为厂家代码,后24位为扩展标识符。全球唯一。此地址位于2层数据链路层,交换机维护计算机MAC地址和自身端口的对应,然后根据数据帧中的“目的MAC地址”转发数据帧。

Q1:MAC地址是否可被修改?
A1:是,两种修改方式:1.直接修改硬件,地址写在网卡的EPROM中,可擦写;2.修改MAC缓存,Windows中保存在注册表里。数据包认的只是ARP 缓存表中的MAC地址,而不是到网卡中去寻找MAC,即ARP地址解析协议递交给路由的MAC地址也只是ARP缓存表中的MAC地址。

Q2:MAC地址冲突有何影响?
A2:同一局域网中若有相同MAC地址出现,系统会报MAC地址冲突的异常。不同局域网中的MAC地址一样也无妨,毕竟网关不同。一个子网中的消息通过broadcast发出去,目标MAC地址比对消息中的信息和自身的地址,成功后接收该消息,因此同一个子网中的MAC地址不能相同。

Q3:MAC地址如何获取?
A3:使用网络层的ARP协议。

2.2 Ethernet协议

一个数据包叫做一个Frame,包含两部分,Head(18字节)和Data(46-1500字节)。若数据较长,需要裁剪成多个frame传输。数据必须从一个MAC传送到另一个MAC,因此数据帧中必须含有MAC信息。

【3】网络层

定义了一套新地址,用于物理机寻址,因此可在不同地理位置的两个主机系统之间提供路由和交换节点的选择。

3.1 IP(Internet Protocol)协议

以IPV4为例,32个bit,0.0.0.0-255.255.255.255。每个计算机会分配到一个IP地址,这个地址分为两部分:前一部分代表网络,后一部分代表主机。网络部分相同的机器处在同一个子网络中。具体网络部分有多少位由子网掩码(subnet mask)决定。net=ip&mask。
IP数据包分为Head(20-60)和Data(0-65535)两部分,Head中包含版本、长度、IP地址等信息,Data是具体内容。将IP包整体放在以太包的Data中传输。

IP报文格式:

Network OSI model,第1张
IP报文.png

Q1:如何获取目标设备的IP地址?
A1:应用层的DNS协议可以将域名转化为IP地址。

Q2:IP分片是什么?为何要避免?如何避免的?
A2:IP协议理论上允许的最大IP数据报为65535字节(16位来表示包总长)。但是数据链路层一般允许的帧长远远小于这个值,例如以太网的MTU(即Maximum Transmission Unit,最大传输单元)通常在1500字节左右。所以较大的IP数据包会被分片传递给数据链路层发送。由于IP层没有超时重传机制 ,如果IP层对一个数据包进行了分片,只要有一个分片丢失了,只能依赖于传输层进行重传,结果是所有的分片都要重传一遍,代价大。在建立连接的TCP三次握手的过程中,连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度1460),每次发送的TCP数据都不会超过双方MSS的值,所以就保证了IP数据报不会超过MTU,避免了IP分片。

3.2 ARP(Address Resolution Protocol)协议

用于在已知目标机器的IP情况下,获取对应MAC地址。这里可以分成两种情况:

第一种情况:如果两台主机不在同一个子网络,那么事实上没有办法得到对方MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

第二种情况:如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

ICMP(Internet Control Message Protocol)协议

IPv4中的一个子协议。用于ping以及traceroute命令。IPv6则使用ICMPv6协议。

报文封装了IP报文,当IP报头中的协议字段值为1时,就说明这是一个ICMP报文,ICMP报头长度至少8字节。

ICMP报头前4个字 节是通用部分(包括类型+代码+校验和),后4个字节随报文类型的不同有所差异。

报文内容如下:

Network OSI model,第2张
ICMP报文.png

【4】传输层

定义了传输数据的端口号(0-65535)和协议。将下层数据进行分段和传输,到达目的地后进行重组。提供了可靠的传输,因此需要ack/resend等机制。

0-1023端口由系统占用。传输层是port2port的通信,而网络层是host2host的通信。ip:port就是一个socket。

4.1 UDP(User Datagram Protocol)协议

包含两部分,Head(8字节)和Data。Head包括发送和接收端口。总长度不超过65535,正好放进一个IP数据包。

4.2 TCP(Transmission Control Protocol)协议

数据包没有长度限制,但是通常不超过IP数据包大小。

TCP报文格式:

Network OSI model,第3张
TCP报文.png

4.3 Socket

不是协议,只是一个API。socket跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。

利用Socket建立网络连接的步骤:

(1)服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

(2)客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

【5】会话层

通过传输层建立数据传输的通路,不参与具体的传输,主要在系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。

在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。

【6】表示层

确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。提供格式化的表示和数据转换服务。数据的压缩/解压缩,加解密等。

【7】应用层

定义应用程序的数据格式。因此各个协议都是为应用而设计的。

应用层报文组成:

Network OSI model,第4张
应用层报文.png

7.1 DHCP(Dynamic Host Configuration Protocol)协议

基于UDP。用于动态分配IP地址。

工作流程

(1)发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

(2)提供阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息。

(3)选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。

(4)确认阶段,即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

(5) 重新登录。以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

(6)更新租约。DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

优缺点

优点:网络管理员可以验证IP地址和其它配置参数,而不用去检查每个主机;DHCP不会同时租借相同的IP地址给两台主机;DHCP管理员可以约束特定的计算机使用特定的IP地址;可以为每个DHCP作用域设置很多选项;客户机在不同子网间移动时不需要重新设置IP地址。

缺点:DHCP不能发现网络上非DHCP客户机已经在使用的IP地址;当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。

7.2 NAT(Network Address Translation)

地址转换,可用于内外网隔离,以及解决IP地址空间枯竭的问题。

3种类型:

1.静态:内外网地址一一对应

2.动态:随机分配一个可用的公网IP给内网。用于公网IP略少于内网机器个数的情况。

3.端口多路复用NAPT/PAT(Port address Translation):NAT设备通过建立五元组(源地址、源端口号、协议类型、目的地址、目的端口号)表项为依据进行地址分配和报文过滤。通过NAT映射,不同原地址/源端口的包都被转换到同一个外部地址,但每个数据报都被赋予了不同的源端口号,因而仍保留了报文之间的区别。当各报文的回应报文到达时,NAT设备仍能够根据回应报文的目的IP地址和目的端口号来区别该报文应转发到的内部主机。NAPT分为完全锥型Full Cone NAT、受限锥型Restricte Cone NAT、端口受限型Port Restricted Cone NAT、对称型Symmetric NAT。

ALG(Application Level Gateway):传统的NAT技术只对IP层和传输层头部进行转换处理,但是应用层的协议会把地址写在Data中,因此还需要对报文的数据部分做修改。

明显,加上NAT后外网不能主动扫描到内网的设备,这样带来了安全性加成,但是从外网发往内网的数据包将被NAT设备丢弃,这使得位于不同NAT设备之后的主机之间无法直接交换信息,也造成p2p等应用无法直接使用,这里又涉及到UDP打洞等网络穿透问题。另一个弊端是所有数据包都会被NAT设备修改,降低发送数据的效率。

7.3 NAT穿透

进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

7.3.1 UDP打洞

打洞主要采用的是UDP的无面向连接的特性来实现。

步骤:
1.A客户端和B客户端发消息给服务器S。
2.S转发A的ip+port(这里是A的外网ip+port,位于nat转发器上)给客户端B,S转发B的ip+port给客户端A。这样A,B都知道了对端的ip+port。
3.A发消息给B,此时B会屏蔽掉这条消息,但是在A的nat映射上加上了一条映射,允许A接收来自B的消息。在A上打洞成功。
4.B发消息给A,这里,由于流程3A能接收到这条消息,同时在B的nat映射上加了一条映射,允许B接收来自A的消息。在B上打洞成功。
5.到此,A,B打洞成功。

7.3.2 STUN(Session Traversal Utilities for NAT)

该协议允许位于(多重)NAT后的client找出自己的公网地址,查出NAT类型以及为本地端口所绑定的Internet端端口。参考文档

7.4 Telnet

提供远程登录(终端仿真)服务,比较古老的BBS就是用的这个登陆。

7.5 FTP

提供应用级的文件传输服务。

7.6 SMTP

电子邮件协议。

7.7 TFTP

提供小而简单的文件传输服务,实际上从某个角度上来说是对FTP的一种替换(在文件特别小并且仅有传输需求的时候)。

7.8 SNTP

简单网络管理协议。

7.9 DNS(Domain Name System)

域名解析服务。底层是UDP实现。

5种DNS记录类型:

  1. A
    地址记录(Address),返回域名指向的IP地址。

  2. NS
    域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。

  3. MX
    邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。

  4. CNAME
    规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,为服务器配置提供灵活性,如果需要更换ip地址,只要更换后者域名的,用户看到的域名不更改,用户感知不到。由于CNAME记录就是一个替换,所以域名一旦设置CNAME记录以后,就不能再设置其他记录了(比如A记录和MX记录),这是为了防止产生冲突。假设foo.com指向bar.com,而两个域名各有自己的MX记录,如果两者不一致,就会产生问题。由于顶级域名通常要设置MX记录,所以一般不允许用户对顶级域名设置CNAME记录。

  5. PTR(Pointer Record)
    逆向查询记录,只用于从IP地址查询域名。一个应用场景是可以防止垃圾邮件,即验证发送邮件的IP地址,是否真的有它所声称的域名。

一般来说,为了服务的安全可靠,至少应该有两条NS记录,而A记录和MX记录也可以有多条,这样就提供了服务的冗余性,防止出现单点失败。

两种查询模式:

1.递归查询
域名服务器就以DNS客户的身份,向其他顶级域名服务器继续发出查询,直到查询到结果后,再层层传递回来。

Network OSI model,第5张
DNS递归查询.png

2.迭代查询
客户端一层一层地去向各级域名服务器发送请求,直到获取到结果。

Network OSI model,第6张
DNS迭代查询.png

DNS查询过程如下:

1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就调用这个IP地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询:

如果未用转发模式,本地DNS就把请求发至13台根DNS服务器(从A.ROOT-SERVERS.NET一直到M.ROOT-SERVERS.NET)。根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。

不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

HTTP

超文本传输协议。


https://www.xamrdz.com/backend/3rj1945697.html

相关文章: