Linux网络编程 之 网络协议概述(一)

目录
1. 分层模型
2. 物理层
3. 链路层
4. 网络层
5. 传输层
6. 应用层


1. 分层模型

这里写图片描述
越接近下面的层,越靠近硬件,越上面的层,越接近用户。

网络的每一层都定义了许多协议,有个协议的总称,叫做“tcp/ip协议”,不仅仅包括TCP和IP协议,还包括了其他协议。

2. 物理层

物理层是将电脑连接起来的物理手段,作用就是负责传送0/1的电信号。

3. 链接层

因为0/1信号是没有意义的,必须规定他的解读方式。链接层负责规定了0和1电信号的分组方式。

早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做“以太网”(Ethernet)的协议,占据了主导地位。

以太网协议:以太网规定,一组电信号构成一个数据包,叫做“帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。

  • 标头:包含数据包的一些说明项,如发送者,接受者,数据类型等。
  • 数据:数据包的具体内容。

在这里,发送者和接受者是怎么标识的呢,是使用MAC地址来标识的,而MAC地址实际上就是网卡上的地址,这个地址是全球唯一的。

这里写图片描述

标头的两个MAC地址占了12字节,类型占了2个字节,FCS(帧校验序列)占了4个字节,所以标头固定占18字节,而数据为46-1500字节。

因此,如果两个网卡要进行通信,那么发送方必须知道接收方的MAC地址,那么怎么才能知道另一个网卡的MAC地址呢?答案是APR协议,APR是网络层协议,这里先不介绍,我们聊一下有了MAC地址如何把数据包准确送到接收方。

这里采用的是广播的方式,A向子网络发送一个数据包,子网络中的每台计算机都会受到这个包,计算机对比这个帧中的目标MAC地址是否一致,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。

4. 网络层

我们知道一个网卡知道另一个网卡的地址就可以进行通信,而且发送方是采用广播的方式,因为不可能广播到所有计算机,所以网络层定义了子网络,发送方只能发送到子网络中。

IP协议:网络层采用IP协议来定义网络地址。

互联网上的每一台计算机,都会分配到一个 IP 地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。

单单从 IP 地址,我们无法判断网络部分。以 172.16.254.1 为例,它的网络部分,到底是前 24 位,还是前 16 位,甚至前 28 位,从 IP 地址上是看不出来的,要用到子网掩码。

所谓“子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于 IP 地址,也是一个 32 位二进制数字,它的网络部分全部为1,主机部分全部为0,并且1和0分别连续。

比如,IP 地址 172.16.254.1,如果已知网络部分是前 24 位,主机部分是后 8 位,那么子网络掩码就是 11111111.11111111.11111111.00000000,写成十进制就是 255.255.255.0。

因此我们需要重新封装一下帧,这里我们只需要把IP数据包直接放到以太网数据包的数据部分,再把IP和一些校验信息放到以太网数据包的标头部分就可以了。

ARP协议:之前留了一个悬念,ARP协议就是发送方找到接收方的mac地址的,它是怎么做到的呢?

首先每台机器维持一个ARP高速缓存表,用来记录IP和MAC地址的映射。

  • 如果目的IP和自己在同一个网段:

    • 当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;

      • 当IP层的ARP高速缓存表中不存在目的IP对应的MAC地址时,发送ARP广播请求目的IP的MAC,收到ARP应答答之后,将应答中的IP地址,对应的MAC对缓存在本地ARP高速缓存表中,然后调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;。
  • 如果目的IP地址和自己不在同一个网段,就需要将包发送给默认网关,这需要知道默认网关的MAC地址:

    • 当IP层的ARP高速缓存表中存在默认网关对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC
        
      • 当IP层的ARP高速缓存表中不存在默认网关对应的MAC地址时,发送ARP广播请求默认网关的MAC,收到ARP应答之后,将应答之中的<默认网关地址,对应的MAC>对缓存在本地ARP高速缓存表中,调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去。

5.传输层

为什么要有传输层这个东西呢?原因是数据包如果发送到了你的电脑,你怎么知道是网页的内容还是qq音乐的内容?因此,我们需要一个参数,用来标识这个数据包属于哪一个进程,这个参数就是端口。

端口是0-65535之间的一个整数,16个bit,其中0-1023被系统占用,所以可以把传输层理解成端口到端口的连接。

其中UDP协议和TCP协议都是传输层协议,其实就是在ip数据包中加入端口信息,UDP协议实现起来比较简单,因为IP协议本来就是不可靠交付,一旦一个数据包发出,无法知道对方是否收到。

而TCP可以理解成有确认机制的UDP协议,每发出一个数据包都要求得到确认。如果有一个数据包遗失,但是收不到确认,就需要重传了。

6.应用层

应用层的作用,就是规定应用程序的数据格式。

TCP 协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP 等等。那么,必须有不同协议规定电子邮件、网页、FTP 数据的格式,这些应用程序协议就构成了“应用层”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值