【Network】网络基础扫盲

网络基础扫盲

正文开始@小边小边不秃头

hi~ 宝子们,好久好久不见,从今往后,我的文章会较为随意(因为我懒得维持文章严谨的逻辑了,写文章只不过已经变成了习惯,也就是说我只是抱着“学习”的态度来更新,毕竟 —— “进大厂”已不再是我的追求了(是时候放弃幻想面对现实了

1. 协议分层

网络协议栈层状结构贯穿操作系统,其中tcp/ip属于OS的一部分 ——

【Network】网络基础扫盲_第1张图片

认识协议:

所谓的计算机协议,本质其实就是约定,约定是由编码的程序员自己根据标准文档或者自己的喜好定义协议。

因为计算机生产厂商有很多,计算机操作系统有很多,计算机网络硬件设备有很多,如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准。大家都来遵守,这就是网络协议

协议为什么要分层?

软件设计上层状结构的好处 —— 解耦

OSI的七层模型

  • OSI (Open System Interconnection)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范(硬件不实现,通过软件层实现)

  • 把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机

  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输

  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯

但是,它既复杂又不实用,所以我们按照TCP/IP四层模型来认识。

2. TCP/IP五层(或四层)模型

【Network】网络基础扫盲_第2张图片

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

物理层我们考虑的比较少,因此很多时候也可以称为 TCP/IP四层模型

⬇️ ​一般而言 ——

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;

  • 对于一台路由器,它实现了从网络层到物理层;

  • 对于一台交换机,它实现了从数据链路层到物理层;

  • 对于集线器,它只实现了物理层

但是并不绝对,很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)

3. 网络传输流程

3.1 局域网通信

理解封装和解包&分用:

【Network】网络基础扫盲_第3张图片

如何理解报头,what & why?

报头中的数据,用来指导当前层进行某种协议决策。报头是一种结构化的数据。Linux OS是C语言写的,在语言角度 ——

//自己随意定义的一个报头,只是示意
struct my_hdr
{
    unsigned int src:16; //位段
    unsigned int dst:16;
    unsigned int type:8;
    unsigned int len:24;
};
// 定义了一个位段变量→定义了一个报头
struct my_hdr my;
my.src = 0x1;
my.dst = 0x2;
my.type = 0x3;
my.len = 0x16;

几乎每一层协议的报文[ 报头+有效载荷 ],都要包含两种字段 ——

  • 当前报文的有效载荷要交付给上层的哪个协议 - 分用
  • 几乎每个报头,都要明确报头和有效载荷的边界 - 解包

以上是协议的共性

局域网中的两台主机能直接通信吗?可以哦

这就像在一个教室里上课。网络资源由大家共享,如果同时发送,可能发生数据碰撞的问题。每台主机都有碰撞检测的能力,也都有碰撞避免算法。这是在数据链路层做的。局域网中任何一个时刻,都只能有一台主机在向局域网中发送消息 - 互斥

如果我想攻击这个局域网,我应该怎样做?占用临界资源,造成其它主机饥饿。

3.2 跨网络通信

【Network】网络基础扫盲_第4张图片

理解IP的意义?

  • 从哪里来,到哪里去 (几乎一直不变) —— IP
  • 上一站从哪里来,下一站去哪里 (一直在变化) —— Mac

所有的变化都围绕这这一个不变展开,这也是一个人生问题,我们顺其自然就好了,宝宝们。

由于路由器的存在,在IP层向上的所有协议,看不到底层网络的任何差异。由于IP的存在,把不同的网络进行大一统。

认识IP地址

  • IP地址是在IP协议中, 用来标识网络中不同主机的地址;

  • 对于IPv4来说, IP地址是一个4字节, 32位的整数; 对于IPv6, 有16字节, 128位

  • 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

认识Mac地址

  • MAC地址用来识别数据链路层中相连的节点;

  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)

  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).

你可能感兴趣的:(Linux网络编程,网络,网络协议,tcp/ip)