简述网络协议

什么是网络
我们每天都会在手机上打开一些应用,例如我们平常刷的抖音,微信,这些APP都是在应用程上的,我们在应用程上下达一些指令或信息,操作系统会下有一个协议栈,而我们下达的信息会在此进行各种的封装,通过网卡将信息传输到网络当中,并经过一系列的转发,最终到达目标位置,而这个目标位置也可以是一台计算机,其也有自己的协议栈,其将得到的数据进行解包,然后交给应用层。

那么我们的网络协议是存放在哪里呢?

    应用层是位于用户层:这部分的代码是网络协议相关开发人员进行编写

    传输层和网络层是位于操作系统层:传输层最经典的协议是TCP,而网络层最经典的协议是IP协议,并且构成了TCP/IP协议

    数据链路层是位于驱动层:负责数据的转发传输

协议分层
上面的TCP/IP协议,只是传输层和网络成的协议,其实我们早期的协议其实是有七层,但是随着发展,现在慢慢 的渐变成了五层协议
TCP/IP五层协议
物理层:负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层
数据链路层:负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层
网络层:负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层
传输层:负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层
而现在网络中使用的主流协议族是TCP/IP协议族,所以接下来就简单的介绍一下TCP/IP协议族

TCP/IP协议族
TCP/IP协议族是一个四层的协议系统,从上到下依次是应用层、传输层,网络层和数据链路层,每一层都有自己特定的功能,然后通过若干协议来实现,上层协议使用下层协议提供的服务来推进
在这里插入图片描述
应用层
应用层主要负责处理应用程序的逻辑,因为其是我们实现的,所以负责的逻辑也会很多,我们目前只讨论用户空间的网络编程,应用层的协议有很多,其中需要注意的就是ping命令

我们常见关于ping命令的问题,需要区分的就是:

ping命令不是一个协议,ping是跳过传输层直接和网络层进行交互的,所以没有端口号,因为端口号的概念是传输层的概念

而应用层常见的还有DNS协议,也就是域名服务,实现的是从机器域名到IP地址的转换

传输层
传输层主要实现的是为两台主机提供端到端的通信,只关心通信的起始段和目的端,不在乎数据包的中专过程

现在我们只关心的是传输层,而传输层最为出名的协议就是TCP和UDP

TCP协议:为应用层提供可靠的,面向流的服务,TCP协议采用了超时重传机制,数据确认灯方式来确保数据报能够被正确的发到目的端,所以TCO服务是可靠的,但是使用TCP服务的双方都必须先建立起TCP连接之后,才能正常的交互,面向流表示的就是,建立通信的两端,一端可以源源不断的从自己想另一端发送数据,其可以一个字节一个字节的发送,也可以多个字节的发送,而接收端同样的读取也可以一字节的读,也可以多字节的读取

UDP协议:为用户端提供不可靠,无连接和基于用户数据报的服务

最为重要的“不可靠”表示的就是UDP协议无法保证数据从发送端完整的到达接收端,如果数据在传输过程中丢失,那么UDP协议会直接丢弃,然后通知接收端发送失败,

而无连接表示的是:双方通信不需要保持长久的通信,所以应用程序每次发送数据的时候都需要指定接收端

数据报:每个发送的数据都是一个有长度的,而接受端也必须一次性的将数据全部读出,否则就丢失

网络层
网络层主要实现的是数据在网络当中的选路和转发,WAN通常使用众多分级的路由器来连接分散的主机或者LAN,所以通信的两台主机一般是不能直接相连的,而是通过多个中间节点(路由器)连接的,而网络层就是来选择这些节点,然后确定一条通信路径,我们都知道网络层最出名的就是IP协议,其为上层协议提供的是无状态、无连接、不可靠的服务,而网络层另一个重要的协议是ICMP协议,它是IP协议的重要补充,主要用于检测网络连接

而我所想说的是ICMP是IP的补充,它使用的是同一层的IP协议提供的服务,所以其严格意义上不是网络协议,这一点需要我们注意

数据链路层
数据链路层主要实现了网卡接口的网络驱动程序,以及处理数据在物理媒介上的传输,不同的物理网络具有不同的特性,而数据链路层最常见的就是ARP协议和RARP协议,他们实现了IP地址和主机地址之间的转化

封装和分用
我们使用同局域网的两台主机之间的通信来演示
在这里插入图片描述
当用户将文件转发给另一台主机前,将沿着协议栈从上到下的依次传递,每一层都将在上层数据的基础上添加上自己的头部信息

1.文件先在应用层,应用层添加上对应应用层协议的报头信息,然后交给传输层

2.传输层收到数据后,会添加上自己的协议报头信息,然后交给网络层

3.网络层收到数据后,也会添加上自己的协议报头信息,然后交给数据链路层

4.数据链路层收到数据后,也会添加上自己的协议报头信息

数据封装之后就可以通过网络发送给对端主机了,而当对端主机收到信息后,会从下到上的进行解包和分用

1.数据链路层收到数据后,会先将本层协议的报头信息提取出来分析,然后再将剩下的数据交给网络层

2.网络层收到数据后,也会先将本层协议的报头信息提取出来分析,然后再将剩下的数据交给传输层

3.传输层收到数据后,也会先将本层协议的报头信息提取出来分析,然后再将剩下的数据交给应用层

4.应用层收到数据后,先将自己的协议报头信息提取出来,然后将最后的真实数据交给特定应用使用

在这里插入图片描述
例如传输层,经过TCP协议封装后的数据称之为T CP报文段,我们知道的是TCP给通信双方维持着一个连接,并且封装有相关的数据,在这部分数据当中的TCP头部信息和TCP内核缓冲区中的数据组成了TCP报头段
在这里插入图片描述当我们使用send函数向TCP连接写入数据时,内核中的TCP模块会把这些数据复制到和该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,把TCP头部信息和发送缓冲区中的数据组合成TCP数据段

那么我们就又有疑问了,报头和有效载荷是怎么分离的?

协议栈的每一层都要从数据中提取对应的报头信息,而要将数据中的报头提取出来,首先就需要明确报头与有效载荷之间的界限,这样才能将它们进行分离。而每一层添加报头时都是将报头添加到数据的首部的,因此我们只要知道了报头的大小,就能够讲报头和有效载荷进行分离。

获取报头大小的方法通常有两种:

1.定长报头。顾名思义就是报头的大小是固定的。
2.自描述字段。报头当中提供了一个字段,用来表示报头的长度。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值