python之路---网络基础一

两个架构:C/S和B/S(B/S也是C/S的一种)

C/S架构:Client --------基于网络通信---------Server

B/S架构:Browser -----基于网络通信---------Server

服务端应该遵循的原则:

1.稳定运行(网络,硬件,服务端的操作系统,服务端的应用软件),一直对外提供服务

2.绑定固定的IP以及port

3.支持并发

无论是C/S架构还是B/S都要基于网络通信,那么什么是网络?

什么是互联网,两大要素:

1.底层的物理连接介质 --->为通信做好准备(就好比电话线)

2.统一的标准(互联网通信协议) --->为了让全世界的计算机能够理解彼此的意思(可以将其理解为计算机界的英语)

什么是互联网协议?

互联网协议按照功能的不同分为:osi七层协议/tcp/ip五层协议/tcp/ip四层协议

osi五层协议(将会话层,表示层,应用层合称为应用层)

1 .物理层(最接近硬件):

基于电器特性,发送电信号(高低电平,高电平:1,低电平:0) 

2. 数据链路层:

单纯的0,1毫无意义, 必须对其进行分组。所以,数据链路层定义了电信号的分组方式

以太网协议(ethernet)规定:

1:一组电信号称之为一个数据帧/数据报,一个帧包含:报头head和数据data两部分,其中报头(固定18个字节):发送者/源地址,接收者/目标地址,数据类型(各六个字节),数据data:46-1500字节(超过长度就分片发送)

2:但凡接入internet的设备都必须具备网卡,每个网卡上都拥有一个MAC地址(用12位16进制表示,前6位为厂商编号,后6位为流水号)

到这里为止,同一局域网内的两台计算机就可以通过广播的方式进行通信了,为什么只能在同一局域网内?

粗略的来讲,在一个局域网内,你的主机产生的数据包先发送给交换机,交换机负责将每份数据复制后发送给同一局域网内的所有其它计算机,其它计算机通过拆包来确定是不是自己的(如果全世界的计算机都靠这种方式工作,那么数据量....)

python之路---网络基础一

3.网络层:

为了实现在不同局域网内的通信,就得先区分是否在同一个局域网内(在同一个局域网就可以用广播的方式,不在的话就用另一套),而单纯的MAC地址无法区分,所以有了另一个概念:网络地址,用来规定网络地址的协议称之为ip协议,它定义的地址,也称之为Ip地址(IP地址通过四段点分十进制表示,范围为:0.0.0.0 -- 255.255.255.255),但是,单纯ip地址段只是标识了ip地址的种类,所以还得通过子网掩码,将子网掩码与ip地址按位与运算得到子网地址,如果子网地址相同,那么就在一个局域网内

那么如何进行通信的呢?

1.首先对Ip地址与子网掩码进行按位与运算(对方的ip地址肯定是已知的) ----> 判断是否在同一个局域网内

如果是:

先通过arp协议获取目标的MAC地址:

python之路---网络基础一

你将数据包发送到交换机(数据包的内容如上:未知的MAC地址用F标记),交换机将数据包复制并发送给同一局域网内的每台计算机,计算机开始拆包(拆到数据链路层,发现目标MAC是F(知道这是在获取MAC),于是接着拆,然后拆到IP地址,发现是自己的IP就响应,其余计算机丢包)

当拿到目标的MAC地址就可以在同一局域网内通信了,此外,值得知道的是,交换机拥有一个MAC地址学习功能:他会记录MAC地址与自己端口的位置对应关系,意味着以后再次发送就不需要广播

如果不是同一局域网:

会先通过arp协议获取网关的MAC,即目标MAC为网关MAC,目标ip为网关ip,拿到网关MAC后再次发送数据包,此时目标MAC是网关MAC,目标IP就变成了你要发送的那台计算机的ip地址,然后网关再根据路由协议发送给目标主机的网关(目标主机的网关当然能通过ip找到自己局域网内的主机)

4.传输层

上面可以总结为:

根据IP地址 + MAC地址就可以定位到全世界独一无二的那台主机(其实只要知道IP地址就可以了,MAC地址可以通过arp协议),而我们说,通信都是应用软件在通信(比如qq,微信),如何定位到独一无二的应用软件?

通过端口,端口是应用软件与网卡关联的编号(0-1023预留给系统,1024-65535),所以传输层是建立端口到端口的通信

IP + port 就可以定位到全世界独一无二的应用软件(只有基于网络传输的应用才有端口)

此外,传输层中有TCP和UDP协议

TCP协议规定服务端与客户端之间的通信得有两条通信隧道(逻辑层面)

三次握手与四次挥手

python之路---网络基础一

 

为什么建立连接只需要三次,而断开连接需要四次

建立连接的时候没有真正的数据传输,并且其目的就是建立连接,所以可以将中间的两部合并,而断开连接的时候,是有数据传输的,哪个先传输完,就先断开哪个(一般是服务端先传输完)

为什么TCP是可靠协议,UDP是不可靠协议

TCP的数据传输是要接收对方响应的,对方未响应会再次发送(数据在第一次发送后并未删除),而UDP是不需要等待对方响应的

半连接池

半连接池是限制同一时刻的请求数(其余的在外等待),而不是最终建立的连接数

5 应用层

应用层规定了应用软件的数据格式,如FTP协议,HTTP协议等

此外还有一个DNS域名解析,也就是电脑中的DNS服务器的用处,我们通常在浏览器找一个资源,它的URL是https://mp.****.net/postedit/82181905

那么,https就是应用层的协议,/mp.****.net就是域名(通过DNS解析得到这个服务端的ip地址),postedit/82181905用于定位到这个服务端下的哪一个文件(你浏览网页就是在向服务端下载数据,然后在客户端的浏览器中展示出来)

此外,解析域名:查找域名与ip地址+端口的关系(查找是根据UDP协议,通过递归与迭代查询)