前言
曾经学过计算机网络,感觉很枯燥,也对这些概念认识不清,
现在学习网络通信过程再细细的复习拓展
网络编程懒人入门(一):快速理解网络通信协议(上篇)
网络编程懒人入门(二):快速理解网络通信协议(下篇)
网络编程懒人入门(三):快速理解TCP协议一篇就够
这位大佬讲解的很通俗易懂,本文仅作为阅读笔记,并结合自己的一些思考
明白网络通信就是设备将相互发送接收数据包,其中的实现过程是一个很大的学问
目录
- 网络模型
- 物理层
- 数据链路层
3.1. MAC地址
3.2. 广播 - 网络层
4.1. IP协议
4.2. 子网掩码
4.3. 数据包
4.4. 网络层通信 - 传输层
5.2. UDP协议
5.2. TCP协议 - 应用层
6.1. DNS协议
6.2. HTTP协议 - 总结
网络模型
不同的模型有不同的分层,OSI七层模型,TCP/IP四层、五层模型
感觉还是TCP/IP五层模型比较好理解
不同的分层有不同的协议,其中著名的HTTP协议、DNS协议、TCP协议、IP协议、ARP协议等等需要了解
TCP/IP五层网络模型是:应用层 - 传输层 - 网络层 - 数据链路层 - 物理层
为什么要分层?就是将网络通信的任务解耦分层,每一层有自己的职责,根据协议仅负责自己的任务,更加方便、直观。
物理层
通过光缆、电缆、无线电波等方式将电脑连接起来,组成一个个网络,就是物理层的职责
物理层规定:为传输数据(也就是二进制信息-计算机底层只能识别0/1)所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性
物理层有四个特性:(来自百度物理层)
- 机械特性
也叫物理特性,指明通信实体间硬件连接接口的机械特点,如接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。这很像平时常见的各种规格的电源插头,其尺寸都有严格的规定。已被ISO 标准化了的DCE接口的几何尺寸及插孔芯数和排列方式。DTE(Data Terminal Equipment,数据终端设备,用于发送和接收数据的设备,例如用户的计算机)的连接器常用插针形式,其几何尺寸与.DCE(Data Circuit-terminating Equipment,数据电路终接设备,用来连接DTE与数据通信网络的设备,例如Modem调制解调器)连接器相配合,插针芯数和排列方式与DCE连接器成镜像对称。 - 电气特性
规定了在物理连接上,导线的电气连接及有关电路的特性,一般包括:接收器和发送器电路特性的说明、信号的识别、最大传输速率的说明、与互连电缆相关的规则、发送器的输出阻抗、接收器的输入阻抗等电气参数等。 - 功能特性
指明物理接口各条信号线的用途(用法),包括:接口线功能的规定方法,接口信号线的功能分类–数据信号线、控制信号线、定时信号线和接地线4类。 - 规程特性
指明利用接口传输比特流的全过程及各项用于传输的事件发生的合法顺序,包括事件的执行顺序和数据传输方式,即在物理连接建立、维持和交换信息时,DTE/DCE双方在各自电路上的动作序列。
这4个特性实现了物理层在传输数据时,对于信号、接口和传输介质的规定
物理层的协议:IEEE 802.1x限制未经授权的用户/设备通过接入端口(Access Port,AP)访问LAN/WLAN
可以看出物理层就是规定传输信息的链路的各个硬件方面,保证传输过程的稳定高效
数据链路层
以前一直有疑惑,传输这一堆0、1怎么能够从中解析出有用的信息
数据链路层,就定义了0、1的分组方式
数据链路层现在主流是“以太网”协议
以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)
"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。
"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节
如果上层传下的数据太大就需要分为多个帧发送
MAC地址
一个帧会包含一个说明帧信息的标头,帧信息包含发送者、接收者,怎么区分识别他们,用到的就是MAC地址
MAC地址(Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址
以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,也就是MAC地址
MAC地址由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片,通常可以通过程序擦写)。
MAC地址的长度为48位(6个字节),通常表示为12个16进制数00-16-EA-AE-3C-40
其中前6位16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后6位16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号,MAC地址是唯一的
广播
现在知道每一个进网设备都有一个唯一的MAC地址,他们要进行通信,通信方法就是广播(设备通过ARP协议知道别的设备的MAC地址)
一个设备想进行通信,会向本网络(局域网)所有设备发送数据包,标头包含着接受者的MAC地址,其他设置读取数据包的标头,查看标头的MAC地址,符合就接收数据包,不符合就抛弃
以太网协议解决局域网内的通信,对于局域网外的通信呢?设备广播发现接收者的MAC地址不在局域网内,设备就会返送给网关,网关通过网络层路由协议,找到子网
网络层
为了区分MAC地址属于哪个子网,“网络层”诞生
它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"
在数据链路层之上,有了网络层,现在有两个地址 - MAC地址、网络地址,网址确定子网位置,MAC地址确定子网中设备的位置
IP协议
在网络层,规定网络地址的协议叫IP协议,定义的地址叫IP地址,现在通用的有IPv4(第四版互联网协议)、IPv6(第六版互联网协议),IPv6相对IPv4强太多了,安全性、速度快、支持物联网等,但因为普及问题现在主流还是IPv4
IPv6是128位二进制,采用十六进制表示
IPv4这个版本规定,网络地址由32个二进制位组成,以点分十进制表示IP地址:
互联网上的每一个计算机都会分配一个IP地址
由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址
IP地址分为两部分:网络号(前一部分)、主机号(后一部分)
网络号表示属于哪个子网,主机号表示属于子网内哪个主机
有一个问题:通过IP地址就能指定子网中主机了,还有MAC地址干嘛?
IP地址是随机的,可以在设备启动时随机动态分配,也就IP地址不能固定的指定到一个主机,MAC地址是全球唯一,就可以完成固定指向,IP通信还是依赖MAC地址
对于上面这个地址:172.16.254.1,无法仅通过IP地址就知道网络号和主机,需要另一个东西 - 子网掩码
子网掩码
子网掩码在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0
P地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
通过子网掩码与IP地址与运算,可以知道哪些是网络号,哪些是主机号
子网掩码将A、B、C类地址(网络号:主机号不同比例)划分为若干子网
DHCP协议会将IP地址和子网掩码分配给主机
数据包
前面以太协议数据称为数据帧,在网络层的数据称为数据包(数据包、报、帧、段有点区别)
数据帧分为标头 - 数据,没有数据包的位置,网络层在链路层的上层,数据都是一层层往下传递的,可想而知数据包会封装在数据帧的数据里
数据包也分为两部分:标头 - 数据
IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节,但是以太网数据帧的数据部分只能1500字节,多了的要分割成多个数据帧发送
网络层通信
网络层要通信,必须知道MAC地址、IP地址,既然要通信,必然知道ip地址或网址(DNS协议可以找到IP地址)
根据IP地址进行ARP协议广播(百度:ARP协议)
有两种情况:
- 该主机在子网中,ARP协议广播会返回对方的MAC地址
- 不在子网中,只能将数据包发给网关,网关有处理方法
网络层大致就这样,网络层的主要功能即保证通信
传输层
有了MAC地址和IP地址,就可以实现通信了,但是一台主机可以运动多个程序,不同的程序发送的数据怎么区别?
端口(port) 表示这个数据包到底供哪个程序(进程)使用,它其实是每一个使用网卡的程序的编号,每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口,应用程序会随机选用一个端口,然后与服务器的相应端口联系
只要确定主机和端口,我们就能实现程序之间的交流,Unix系统就把主机+端口,叫做"套接字"(socket)
传输层:就是端口与端口之间的通信
传输层有两个著名的协议:UDP、TCP
UDP协议
UDP (User Datagram Protocol), 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成
UDP的特点:
一种无连接,不可靠、面向数据报、速度比较快、可实现一对一,多对一的传输层协议。UDP协议适用于对实时性有要求的场合。因为UDP不保证可靠性,所以UDP也没有重传机制,也没有拥塞机制,它只是尽最大努力交付数据
UDP协议,它的格式几乎就是在数据前面,加上端口号。
UDP数据报,也是由"标头"和"数据"两部分组成
到传输层已经有3个标头了:
UDP数据报非常简单,"标头"部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包
TCP协议
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议
TCP/UDP同为传输层的协议,由挺多不同,TCP是可靠安全的、面向连接、基于字节流的全双工可靠信道
UDP是不可靠、无连接、面向数据报、实时性强的不可靠信道
TCP中的知识很多:慢启动、TCP三次握手
传输层就是端口通信,区别数据包为哪个进程,有两个重要的协议TCP、UDP协议
应用层
应用层在TCP/IP五层网络模型中是最上层,上接应用程序
"应用层"的作用,就是规定应用程序的数据格式
整个数据包:
其中有两个重要的协议HTTP、DNS协议
DNS协议
如果访问一个网站,我们只能得到他的网址,DNS协议就是将网址转换为IP地址
DNS是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统
即我们将网址域名发送给DNS服务器,它会返回给我们IP地址,通过IP地址就可以向该网站通信
HTTP协议
HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式
总结
访问一个网站过程:
网络通信:
- 网络通信是设备间相互发送数据包,网络模型常见有3中:OSI的七层模型,TCP/IP的五层、四层模型,这里讨论TCP/IP的五层模型
- TCP/IP五层模型从上到下:应用层 - 传输层 - 网络层 - 数据链路层 - 物理层
- 物理层是为了保证设备链路的稳定高效而设置的硬件要求,其中有4个特性:机械特性、电气特性、功能特性、规程特性
- 数据链路层确定0/1的分组方式,主流的是“以太网协议”,其中每个设备有一个全球唯一的MAC地址
- 网络层实现设备间的连接(网络地址+MAC地址),主要的是IP协议
- 传输层实现端口与端口的通信(不同进程的数据包),主要有TCP、UDP协议
- 应用层上接应用程序,规定应用程序的数据格式,主要是HTTP、DNS协议