网络基础知识

本文从开发者的角度,从底层往上层进行五层模型的概述。文章底部附一张x-mind结构图,从上层往底层进行概述。

网络通信概述

网络通信的实质就是:交换网络数据包。

数据包的结构:以太网标头-IP标头-TCP标头-应用层数据包

数据包能正常交换条件:本端及对端的MAC地址和IP地址

上网设置必要条件:

  1. 本机IP地址
  2. 子网掩码
  3. 网关IP地址
  4. DNS的IP地址

因为MAC有局限性,若不是在同个子网环境,无法知道对方的MAC地址,就需要网关转发

  • 同一子网络,需要知道对方的MAC地址及对方的IP地址
  • 非同一子网络,需要知道本端的网关MAC地址及对方的IP地址

物理层(实体层)

物理层是把电脑连接起来的物理手段,主要规定了网络的一些电气特性。基于电气特性发送高低电压(电信号),高电压对应数字“1”,低电压对应数字“0”

常见物理设备有:中继线、双绞线、集线器。

数据链路层

定义电信号“0”,“1”的分组方式,每组电信号是什么意思

常见物理设备

网卡、网桥

以太网协议

一组电信号构成一个数据包,叫做“帧”,每一帧分成两个部分:标头(Head)和数据(Data)。

“标头”包含数据包的一些说明项,例如发送者及源地址、接受者及目标地址、数据类型等。“数据”则是数据包的具体内容

"标头"长度固定18字节,“数据”长度最低46字节。最长1500字节。

所以,整个“帧”最低64字节。最长1518字节。如果数据很长,必须分割成多个帧进行发送(因为分帧后,多个被分割的数据包能不能按序号重新排序拼接,组成完成的原信息,后续会介绍到TCP和UDP协议)

MAC地址

以太网规定,连入网络的所有设备都必须具有“网卡”接口,数据包必须从一块网卡,传送到另一块网卡,网卡的地址就是数据包的发送地址和接收地址,即MAC地址

网络基础知识_第1张图片
image

每块网卡出厂时,都有一个独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示

举个栗子: 00-B0-D0-86-BB-F7
前6个十六进制数是厂商编号,后六个是该厂商的网卡流水号

广播(同一广播域内)

接下来又有几个问题:

1.一块网卡怎么知道另外一块网卡的MAC地址?

2.系统怎么才能吧数据包准确送到接送方?

首先通过ARP协议,可以知道另一块网卡的MAC地址(不详细说明)
其次,因为数据包的Head中含有接收方的MAC地址,所有以太网采用很原始的方式:向本网络内所有 计算机发送数据包,让每台计算机自己判断,自己是否是接收方。这种发送方式就是“广播”。

网络基础知识_第2张图片
数据包格式

网络层

由上述的“广播”方式可知,以太网采用广播方式发送数据包,不仅效率低。而且局限在发送者所在的子网络。
所以接下来要区分哪些MAC地址属于同个子网络,那些不是。

如果是同个子网络采用广播方式发送,否则就采用“路由”方式发送。

这就导致了“网络层”的诞生。他的作用是引进一套新的地址,使我们能区分不同的计算机是否属于同个子网络,这套地址就是“网络地址”,简称“网址”。

网络层的功能即建立主机到主机通信

常见物理设备

路由器、三层交换机

IP协议

规定网络地址的协议,即IP协议。他所定义的地址,被称为IP地址。

作用:1. 为每台计算机分配IP地址;2. 确定哪些地址属于同个网络。

目前广泛采用的是IP协议第四版,简称IPv4。IPv4规定网络地址由32个二进制位组成,习惯用四段十进制表示IP地址,从0.0.0.0 到255.255.255.255。

网络基础知识_第3张图片
IPv4地址

互联网上每台计算机会被分配到一个IP地址。地址分为两部分,前部分代表网络,后部分代表主机。那么如果从IP地址,判断两台计算机是否属于同一子网络?这时候需要另外一个参数子网掩码

子网掩码:表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

举个栗子:已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?

两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

IP数据包

根据IP协议发送的数据就叫IP数据包。IP数据包分为“标头”和“数据”两个部分

IP数据包的“标头”长度为20 ~ 60字节,整个数据包做大为65535字节。

如何在以太网协议中传递IP数据包?

把IP数据包把IP数据包直接放在以太网数据包的“数据”部分,无需修改以太网的规格。数据结构就变为:

以太网标头-IP标头-数据

传输层

由网络层协议可知,互联网上任意两台主机可以建立通信,但是同个主机上运行了多个程序,当一个数据包从互联网上发来时,怎么知道这个数据包对应是哪个程序上使用?

这时候必须引入端口,它实际是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

端口是0 ~ 65535之间的整数,0 ~1023的端口被系统占用,用户只能使用>1023的端口。
当启用某个应用程序时,若没有指定某个固定端口(例如NodeJs可以指定常用端口),程序会随机随机选用一个端口,然后和服务器对应端口联系。

所以传输层的功能:网络中的数据包发到接收方对应的哪个程序中,即端口到端口的通信

常见物理设备

四层交换机、四层路由器

UDP协议 和 TCP协议

数据包中加入端口信息,就需要新的协议

UDP协议

UDP数据包由“标头”和“数据”两部分组成,“标头”部分包含接收端口和发出端口,“数据”部分就是具体的内容。

UDP标头一共8个字节,总长度不超过65535字节,正好放进一个IP数据包。

把整个UDP包放入IP数据包的“数据”部分。整个IP数据包又放在以太网数据包的“数据”部分,最后形成的数据包格式:以太网标头-IP标头-UDP标头-数据

特点:网路中UDP数据包一旦发出,无法知道对方是否收到,不进行确定。容易实现但是网络可靠性低

TCP协议

TCP协议可近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包

特点:能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

TCP报文:

网络基础知识_第4张图片
image

TCP三次握手四次挥手


网络基础知识_第5张图片
TCP三次握手四次挥手

应用层

规定应用程序的数据格式,以太网数据包:(以太网标头-IP标头-TCP标头-应用层数据包)

举个栗子:TCP协议可以为各种程序传递数据,比如网页、FTP、Email数据,应用程序接收到传输层的数据,需要对其进行解读,那么,必须要有不同的协议规定网页、FTP、Email各自不同的格式。这些应用程序协议就构成了应用层。

文末加个X-mind结构图
网络基础知识_第6张图片
image

本文参考博客:

http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

你可能感兴趣的:(网络基础知识)