文章目录
一、产生网络的原因
当多台计算机要交互数据的时候,可以使用U盘的方式,也可以让这些计算机链接同一台计算机来实现数据的交互。非常的麻烦。
因此网络诞生的主要目的就是提高效率。
二、网络协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。所谓的计算机协议,约定是由编码的程序员根据文档或者自己喜好定义的协议。
计算机的生产厂商有很多,网络协议约定了一种设计或者通信标准,让这些不同厂商生产的计算机可以互相顺畅的通信。网络协议是人为设计的。
三、TCP/IP模型
1.五层结构
TCP/IP是一组协议的代名词,它还包含很多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了五层层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层:负责光电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆,光纤,现在wifi无线网使用电磁波都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器工作在物理层。
数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动,帧同步(就是说从网线上检测到什么信号作为新帧的开始)、冲突检测(如果检测到冲突就自动重发),数据差错校验工作等。有以太网、令牌环网,无线LAN等标准。交换机工作在数据链路层。
网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来是被一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器工作在网络层。
传输层:负责两台主机之间的数据传输,如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
应用层:负责应用程序间的沟通,如简单电子邮件传输,文件传输协议,网络远程访问协议等,我们的网络编程主要就是针对应用层。
物理层属于硬件和物理范畴,我们暂时不做了解。
将这些层的作用总结一下,就是
网络层:路线规划
链路层:具体走的过程
传输层:保证数据的可靠性。
应用层:产生数据或者接收并处理数据。
2.各层的位置
网络是贯穿整个计算机体系结构的,物理层属于硬件的位置,我们不做研究。我们所说的TCP/IP部分属于OS。
四、局域网vs广域网
1.范围不同:局域网范围小,广域网范围大。
2.作用不同:局域网可以实现文件管理、应用软件共享、打印机共享等功能;广域网能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。
3.连接方式不同:局域网靠交换机来进行连接的;广域网则是靠路由器将多个局域网进行连接。
五、局域网传输数据
1.传输路线图
在局域网中,两台主机之间的数据交互是这样的,其中最底层的一条线是网线,属于物理结构。它的作用是将主机链接起来。从A发出的数据,从上到下到达网线,再从下到上到达B主机的应用层,然后B主机对数据进行处理。
2.报头与报文
当A主机的应用层产生数据的时候,我们称该数据为报文,该数据每向下经过一层都会获得一个报头。
观察图我们发现,数据发送方需要添加报头,而数据接收方需要去掉报头,去掉报头的过程称之为分用。
发送方自上向下加报头的方式称为封装,接收方自下向上去掉报头的方式称为解包。
那么为什么这些层级要对数据加报头呢?注意,用户是并不关心怎么加的报头的,它类似于快递单,表示的是快递的发送过程。需要报头中的数据来指引当前层进行某种协议的决策。比如传输层既可以是TCP协议,也可以是Udp协议,就是通过报头来确定的。
通常来讲,报头报含两部分内容:
1.当前报文的有效载荷交给上级的哪一个协议。
2.明确报头和有效载荷的边界。
在发送方中,我们称新加入报头的后部分(包含之前加的报头和数据)为有效载荷
3.报头的本质
Linux操作系统是使用C语言来实现的,实现报头的是C语言的位段。大概的实现逻辑如下:
struct my_hdr
{
unsigned int src:16;
unsigned int dst:16;
unsigned int type:8;
unsigned int len:24;
}
当添加报头时,我们可以报头拷贝到报文的前面。当去掉报头时,我们可以将指向报头首地址的指针++。
4.多主机局域网通信
(1)mac vs IP
地址长度不同:
1、MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:00:50:29:5A:8H:1E就是一个MAC地址。
2、IP地址为32位,由用点分隔开的4个8八位组构成,如192.168.0.1就是一个IP地址,这种写法叫点分十进制格式。
所在寻址协议层上的区别:
1、MAC地址应用在OSI第二层,即数据链路层。数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址)。
2、IP地址应用于OSI第三层,即网络层。网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。
分配依据不同:
1、MAC地址的分配是基于制造商。
MAC地址由网络设备制造商生产时写在硬件内部。这个地址与网络无关,也即无论将带有这个地址的硬件(如集线器、网卡、路由器等)接入到网络的何处,它都有相同的MAC地址,是不可变的。
2、IP地址的分配是基于网络拓朴。
IP地址由网络地址和主机地址两部分组成,分配给这两部分的位数随地址类(A类、B类、C类等)的不同而不同。
我们目前只需要知道IP位于网络层,mac位于数据链路层,它们都可以用来索引主机地址,只不过mac是在局域网中索引,而IP是在广域网中索引。在广域网中传输数据时,mac是不断变化的,而IP是不变的。
(2)碰撞检测与碰撞避免
在一个局域网中,通常存在着多个主机:
当一个主机向另一个主机发送数据之后,报头是带有目标主机的mac的,以方便找到目标主机。
当多个主机同时发送数据的时候,就会造成一条网线上有多个数据在跑,就会发生碰撞而导致信息发送错误。
因此,每台主机都有碰撞检测的能力,当发生碰撞的时候就执行碰撞检测算法,目的是为了让同一时间只有一个信息通过网线。
我们可以把网线看成临界资源,而同一时间只有一条信息通过网线代表互斥。因此系统和网络是不分家的。
六、广域网传输数据
广域网即将多个局域网使用路由器链接起来,当一个局域网中的主机向另一个局域网中的主机发送数据的时候,就需要用到广域网。
每一台路由器和与其相连的主机都可以看做是在一个局域网中,比如下图中的路由器和A主机以及B主机都在同一个局域网中。但是A和B不在同一个局域网中。
此时A与B通信就需要用到IP了,而mac是寻找同一个局域网中主机或者路由器的地址,当数据传输经过多个路由器时,mac在不断变化而IP是不变的。
如果在IP处画一条线,IP以上的部分是看不到底层的,这是分层的好处,因为用户其实并不关心数据是怎么传递的。
对于令牌环,我们可以将其理解成一把互斥锁,只有持有令牌的主机才能向令牌环网中发送信息,同时令牌会被传递。
在传输数据的过程中,可能经过多个路由器。