网络协议分层结构的简单理解

前言

在计算机网络技术中,网络的体系结构指的是通信系统的整体设计,它的目的是为网络硬件、软件、协议、存取控制和拓扑提供标准。1


一、参考模型概述

通常分层说到了两种参考模型,一种是OSI七层网络结构,一种是TCP/IP五层网络
结构,这里说的七层网络结构实际上是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型,它是一个抽象的仅供参考的网络结构,而五层网络结构是七层网络结构在实际中的具体实现。
在这里插入图片描述

二、关于TCP/IP五层网络模型的解释

1.应用层

操作系统最上层,直面用户的程序。

应用层处理通过收发端口的数据

比如微信,浏览器,常见的软件都算是应用层程序,常见的协议有http协议,ssh协议,ftp协议等

linux上用socket模拟发送http请求

  1. cd /proc/$$/fd 2
  2. exec 111<> /dev/tcp/www.baidu.com/80 建立连接 3
  3. echo ‘GET / HTTP/1.0\n’ >& 123
  4. cat <& 123

2.传输层

传输层主要有两大协议:TCP传输控制协议、UDP数据报协议,该过程处于CPU内核态

传输层用于确认数据的收发端口

(1) TCP

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。 这个过程就是常说的三次握手:
Alt

TCP三次握手的过程如下:握手过程中不包含用户数据

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,接下来是用户数据传输,数据传输结束后就是连接断开的过程。

当主动方发出终止连接FIN的时候,接收方要对发出发有应答,同时给出终止请求FIN(FIN+ACK),主动方收到接收方应答请求的同时还需要回应(ACK)接收方的终止清秋 这个过程就是四次挥手:
Alt

TCP四次挥手过程如下:

  1. 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
  2. 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
    注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
  3. 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
  4. 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
(1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。
(2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
(3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。

  • <三次握手>数据传输>四次挥手> 这是数据传输的最小粒度,不可分割
  • 建立的连接必须要断开,因为每个连接都会占用一个端口,但一台设备上只有65535个端口,不断开不够用了。

(2) UDP

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。常用的UDP端口号有:53(DNS)、69(TFTP)、161(SNMP),使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP。

(该部分选自百度百科)

3. 网络层

网络层核心协议是IP协议,与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。

网络用语确认数据的收发位置(IP)

IP主要包含三方面内容:IP编址方案、分组封装格式及分组转发规则。

IP分组的转发规则

路由器仅根据网络地址进行转发。当IP数据包经由路由器转发时,如果目标网络与本地路由器直接相连,则直接将数据包交付给目标主机,这称为直接交付;否则,路由器通过路由表查找路由信息,并将数据包转交给指明的下一跳路由器,这称为间接交付。路由器在间接交付中,若路由表中有到达目标网络的路由,则把数据包传送给路由表指明的下一跳路由器;如果没有路由,但路由表中有一个默认路由,则把数据包传送给指明的默认路由器;如果两者都没有,则丢弃数据包并报告错误。

IP分片

一个IP包从源主机传输到目标主机可能需要经过多个不同的物理网络。由于各种网络的数据帧都有一个最大传输单元(MTU)的限制,如以太网帧的MTU是1500;因此,当路由器在转发IP包时,如果数据包的大小超过了出口链路的最大传输单元时,则会将该IP分组分解成很多足够小的片段,以便能够在目标链路上进行传输。这些IP分片重新封装一个IP包独立传输,并在到达目标主机时才会被重组起来。
数据包的组成主要由首部+数据构成,其中首部如下:

IP分组结构

一个IP分组由首部和数据两部分组成。首部的前20字节是所有IP分组必须具有的,也称固定首部。在首部固定部分的后面是一些可选字段,其长度是可变的。
Alt

数据在因特网中传播就不可避免的要经过一个个路由,网络层就是确认下一个路由的方式,这个过程会由各个路由的路由表确认。
路由表
IP地址和子网掩码按位与操作之后确认其所在目标网段,然后对应到网关IP,数据包就会进入下一个网关所在的网络。匹配时按照路由表顺序匹配,如未找到匹配网关就会使用默认路由匹配。

默认路由:是一种特殊的静态路由,当路由表中与数据包目的地址没有匹配的表项时,数据包将根据默认路由条目进行转发。

比如IP地址111.33.242.136和掩码255.255.192.0按位与是111.33.192.0不和172.16.0.0匹配,使用默认路由匹配,将数据包发送给网关处理。

4. 数据链路层

数据链路层定义了在单个链路上如何传输数据。

数据链路层主要有两个功能 :帧编码和误差纠正控制。帧编码意味着定义一个包含信息频率、位同步、源地址、目标地址以及其他控制信息的数据包。数据链路层协议又被分为两个子层 :逻辑链路控制(LLC)协议和媒体访问控制(MAC)协议。

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。与之对应的时RARP(反向地址解析协议),即MAC地址转换成IP的过程。Linux中可以用arp命令查看地址解析列表。

5.物理层

数据传输的实体

信号传输,传输介质同轴电缆,光纤等。

现在所说的5G技术并没有让远程传输能力得到提升,5G技术是改善了基站到设备的传输速度,用的同轴电缆,毫米波传输信号 、传输速率23~25万公里/秒,衰减速度快,适合短距离传输,在骨干网中使用光纤传输,衰减慢适合长距离传输。

三、扩展

交换机:记录IP和其对应的MAC地址,无论是计算机到交换机还是路由器到交换机
路由器:连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。

现在的家用路由器囊括了交换机的功能,一般在公司的大型局域网中会有交换机。


  1. 引自百度百科释义 ↩︎

  2. $$获取当前进程的PID ↩︎

  3. 111,随便一个fd目录下没有的文件描述符 linux中一切皆文件 ↩︎

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值