网络基础
我们常说上网上网,可是具体我们是怎么通过单独的一台电脑连接到网络的呢?全世界成千上万不计其数的电脑又是如何去通信的呢?
互联网协议的核心是一系列协议的总称,他们对各个部分的交流做出了详细的规定用以规范网络。
互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层:
就和我们人与人之间去沟通一样,人与人之间交流需要用语言去交流。不同区域的人,语言不同交流方式也不同,所以出现了全球通用语-英语。那么计算机也可如此。
osi协议可以分为七层协议也可看作五层,自下而上可以分为,物理层,数据链路层,网络层,传输层,还有应用层。
物理层
最为计算机的最底层,两台计算机进行通信时,都是通过硬件发出高低电频信号1,0.一串数据发到对方计算机去接收。但是一串101010毫无意义,所以出现了以太网协议。
数据链路层
以太网规定,一组电信号构成一个数据包,叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。
head头包括1、发送者2、接受者3、数据类型。一般固定长度为18字节。
head头包含了发送者的信息,以太网规定,连接网络的所有设备都必须有“网卡”。数据包从这块网卡传输到那块网卡。网卡的地址就是数据接收与发送的地址。 这个地址称mac地址。
知道了mac地址之后,如何知道对方的mac地址对他发送数据呢。
我们向一个网络发送数据包后,网络内的所有计算机它们读取这个包的"标头",找到接收方的 mac 地址,然后与自身的 mac 地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。
有了数据包的定义、网卡的 mac 地址、广播的发送方式,"链路层"就可以在多台计算机之间传送数据了。
以太网协议,依靠 mac 地址发送数据。理论上,单单依靠 mac 地址,任意计算机的网卡的都可以找到洛杉矶的网卡了,技术上是可以实现的。
但是,这样做有一个重大的缺点。以太网采用广播方式发送数据包,所有计算机都在接收这数据包,不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。如果能接收,那计算机每时每刻都在接收辨别数据。
所以需要一种方法去区别,不同的mac地址位于哪些不同的网络,如果位于一个子网络,那就进行“广播”否则就“路由”。
网络层
由此出现网络层,每台计算机有了两种地址,一种是 mac 地址,另一种是网络地址。mac 地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。
网络地址帮助我们确定计算机所在的子网络,mac 地址则将数据包送到该子网络中的目标网卡。
规定网络地址的协议,叫做 IP 协议。它所定义的地址,就被称为 IP 地址。
目前,广泛采用的是 IP 协议第四版,简称 IPv4。这个版本规定,网络地址由 32 个二进制位组成。
互联网的每台计算机都被分配了一个IP地址
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
有了 MAC 地址和 IP 地址,我们已经可以在互联网上任意两台主机上建立通信。
传输层
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。
TCP 协议
TCP协议比较可靠,需要回复才会断开链接
首先client对server发送标头,syn seq=x. server收到出建立链接请求后回复:ACK=Y+1 同时发出链接请求syn seq=y client接收到后回复 ack=y+1 双方建立链接。
之后才进行数据传输,client发送数据,server接收数据。
当要断开链接时.client发送一个标头,fin 请求断开,server接收到后,确认断开,回复ack x=3.如果server端已经传输完毕,断开链路,便也发送标头,fin,当client接收回复后断开。
这是tcp协议的三次握手和四次挥手。
UDP协议
UDP 数据包,也是由"标头"和"数据"两部分组成。
UDP协议不需要回复请求,所以传输过程中,并不知道是否传输到位。
应用层
应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
我们通过解包数据,获得应用数据,通过开放的端口获得数据。
"端口"是 0 到 65535 之间的一个整数,正好 16 个二进制位。0 到 1023 的端口被系统占用,用户只能选用大于 1023 的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
TCP 协议可以为各种各样的程序传递数据。
假设我们用QQ发送消息,首先,QQ消息数据包通过Appl封装到传输层,接着往下tcp分装在网络层,往下ip分装在数据链路层,后来以太网协议分装,通过硬件电信号传输信号,查询传输到对方电脑,对方电脑一层一层的解包最后获得QQ数据。
平常我们上网,都是打开一个网页,例如,我们访问www.baidu.com
我们知道,发送数据包,必须要知道对方的 IP 地址。但是,现在,我们只知道网址 www.baidu.com,不知道它的 IP 地址。
DNS 协议可以帮助我们,将这个网址转换成 IP 地址。已知 DNS 服务器为 8.8.8.8,于是我们向这个地址发送一个 DNS 数据包(53端口)。
然后,DNS 服务器做出响应,告诉我们 baidu的 IP 地址是 119.75.218.70。于是,我们知道了对方的 IP 地址。
接下来,我们要判断,这个 IP 地址是不是在同一个子网络,这就要用到子网掩码。
已知子网掩码是 255.255.255.0,本机用它对自己的 IP 地址 192.168.16.33,做一个二进制的 AND 运算(两个数位相同,结果为1,否则为0),这两个结果不相等,所以结论是,baidu 与本机不在同一个子网络。
因此,我们要向 baidu 发送数据包,必须通过网关 192.168.1.1 转发,也就是说,接收方的 MAC 地址将是网关的 MAC 地址。
最后,IP 数据包嵌入以太网数据包。以太网数据包需要设置双方的 MAC 地址,发送方为本机的网卡 MAC 地址,接收方为网关 192.168.1.1 的 MAC 地址(通过 ARP 协议得到)。
本机收到 HTTP 响应以后,就可以将网页显示出来,完成一次网络通信。
这个例子就到此为止,虽然经过了简化,但它大致上反映了互联网协议的整个通信过程。