本文用于记录学习计算机网络后,个人认为有价值的笔记,核心内容均围绕标题展开。既做一个学习的记录,同时也做一个沟通交流,欢迎各位大佬互动~
概述
五层模型
(用户) 应用层-传输层-网络层-链接层(数据链路层)-实体层 (硬件)
互联网的实现,基于分层的模型。每层有各自的协议,实现对应的功能。
我们日常所使用的网络就是遵守各个协议具体”规范”的产品和通信手段。
层与协议
每一层都为了完成一种功能,为了实现功能,需要遵守共同的规则,即协议。
所有协议的总称,互联网协议。
TCP/IP 是利用 IP 进行通信时所必须用到的协议群的统称。
实体层——以二进制数据形式在物理媒体上传输数据
定义/作用
负责物理媒介上传输的原始比特流,提供了网络设备之间的物理连接(光缆,电缆,双绞线,无线电波)和数据传输的基本功能。
它是把电脑连接起来的物理手段,规定了网络的一些电气特性,传输0和1的电信号。
链接层(数据链路层)——传输有地址的帧以及错误检测功能
定义/作用
①物理地址的识别和使用(MAC地址);
②帧封装和解封装,帧,链接层的传输单元;
③流量控制和拥塞控制。
以太网协议(解决电信号分组问题)
以太网协议,一种流行的电信号分组方式。
以太网规定:一组电信号构成一个数据包,即“帧”。每一个帧分为两部分:标头+数据
标头包含数据包信息:发送者、接收者、数据类型等;
“标头”的长度,固定为18字节。”数据”的长度,最短为46字节,最长为1500字节。因此,整个”帧”最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
MAC(解决定位地址问题)
MAC地址(Media Access Control Address)是用于在计算机网络中唯一标识网络适配器(网卡)的物理地址。每个网络适配器都被分配了一个全球唯一的MAC地址,由网络适配器的制造商在生产过程中设置。
前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。
广播(寻找同一子网下的主机)
(如何知道另一个网卡地址-ARP?知道地址怎么准确送达-广播)
以太网数据包必须知道接收方MAC地址才能发送(如何获取接收方MAC地址?ARP见4.4)。
拥有接收方地址后如何将数据包准确送到接收方?广播。向同一子网络的所有电脑发送数据包,任何子网内的设备,收包之后,判断包内目标MAC与自己MAC是否一致。
网络层——为数据包选择路由
由来
依靠以太网协议发送数据包(根据MAC地址)有缺点:
①以广播的方式,每个MAC地址一个包效率低;
②而且广播的方式局限于同一个子网;
IP协议(引入新地址,区分是否同一自网络)
规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。
互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。单单从IP地址,我们无法判断网络部分。
怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?
这就要用到另一个参数“子网掩码”(subnet mask)。“子网掩码”,就是表示子网络特征的一个参数,它在形式上等同于IP地址。知道“子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
IP数据包(根据IP协议发送的数据)
根据IP协议发送的数据,就叫做IP数据包(包含IP地址信息)。
IP数据包同样有标头+数据,可直接放进以太网数据包的“数据”部分。
ARP协议(借IP地址获取同子网络的主机MAC地址)
IP数据包是放在以太网数据包里传输的,因此需要知道MAC地址和IP地址,通常情况下IP地址是已知的(通过DNS,域名系统获取),但是MAC地址不知。
如果通过子网掩码判断不是一个子网络,只能通过把数据包传送到两个自网络连接处的网关、
如果通过子网掩码判断是一个自网络,通过ARP协议,可获取接收方MAC地址。
方式:通过发送一个数据包(包含在以太网数据包里),其中包含要查询主机的IP地址,对方MAC地址填FF:FF:FF:FF:FF:FF,表示广播地址。所在子网的每一台主机接收到该数据包会取其IP地址与自身IP地址比较,若相同向对方报告自己的MAC地址。
传输层——提供端到端的接口
由来
需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
“端口”是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
UDP协议(在数据包加入端口的协议)
在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。
UDP数据包,也是由”标头”和”数据”两部分组成。
“标头”部分主要定义了发出端口和接收端口,”数据”部分就是具体的内容。然后,把整个UDP数据包放入IP数据包的”数据”部分,而前面说过,IP数据包又是放在以太网数据包之中的,所以整个以太网数据包现在变成了下面这样
TCP协议(解决UDP协议传输不可靠的问题)
UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
TCP数据包和UDP数据包一样,都是内嵌在IP数据包的”数据”部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
应用层——规定应用程序数据格式
应用程序收到”传输层”的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
“应用层”的作用,就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的”数据”部分。因此,现在的以太网的数据包就变成下面这样。