网络编程
1.c/s架构(client/server)
c:客户端
s:服务端
c/s架构主要运用于如QQ这样的应用程序,只有QQ相关方面的功能
2.b/s架构(brower/server)
b:浏览器
c:服务端
b/s架构主要是运用于浏览器这样的应用程序,因为我们可以通过浏览器这个程序来访问网页上的资源,
目前如支付宝,微信这样的应用程序里都会有其他应用程序的功能,这也是使用了b/s架构
服务端:24小时不间断提供服务
客户端:需要使用的时候就会向服务端发起请求,服务端就会给客户端提供服务
二、网络编程发展史
任何先进的技术最早都来源于军事,
想要实现远程通信第一个具备的条件时需要物理连接介质(笔记本电脑需要网卡这个物理介质)
计算机与计算机之间需要实现远程通信除了物理介质,还需要一套公共的标准/协议
三、OSI协议
OSI七层协议
应用层
会话层
表示层
传输层
网络层
数据链路层
物理连接层
1.物理连接层
基于电信号传输01010110101二进制数据
2.数据链路层
①规定电信号的分组方式
②规定了任何一台接入互联网的计算机都必须有一块网卡,每一块网卡都刻着世界上独一无二的编号
网卡上具有12位16进制数:
前六位是厂商编号
后六位是流水线编号
这12位数又称为mac地址
结合以上两点合称为“以太网协议”
交换机就是基于“以太网协议”通信的,不能跨局域网通信
互联网就是由n个局域网彼此连接组成的
早期:联机
以太网:局域网与交换机
3.网络层
IP协议
规定了只要是接入互联网的计算机都必须有一个IP地址,用来唯一标识接入互联网的一台计算机
IP地址的特点:点分十进制,点分十进制就是IPV4的IP地址表示方法,
IPV4中用4个字节表示一个IP地址,每个字节按十进制表示为0~255,
也就是用4个从0~255的数字,来表示一个IP地址,如192.168.1.1
IP地址最小:0.0.0.0
IP地址最大:255.255.255.255
IP地址有两个版本:IPV4 IPV6
IP地址是动态分配的:当启动计算机的时候,计算机会获取一个IP地址,如果重启了又会重新获取新的IP地址
4.传输层
计算机与计算机之间其实就是应用程序与应用程序之间的通信
TCP/UDP都是基于端口工作的协议
端口(prot):设备与外界通讯交流的出口,用来唯一标识一台计算机的某个应用程序
端口的范围:0~65535
通常0~1024都是操作系统默认使用的端口号,建议使用8000之后的端口
MYSQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000
端口号也是动态分配的,某个应用程序第一次启动端口号是8666,
如果将此程序关闭,再次启动,那么它的端口号又会改变
5.应用层
HTTP协议
FTP协议
TCP协议
流式协议,可靠协议
基于TCP协议通信必须先建立双向通道
TCP协议传输数据之所以可靠的原因在于双向通道吗?
不对,是因为它有一个反馈机制
比如客户端需要请求服务端发送某个东西,客户端收到了会返回消息告诉服务端,如果客户端没有返回消息给客户端,服务端中还备份了客户端所需要的东西,那么服务端会在一定的时间内每隔一段时间在次发消息给客户端,直到客户端回消息告诉服务端,如果在这一定的时间内客户端还没回消息,那么服务端回自动删除这个东西。
三次握手与四次挥手
三次握手连接:
首先,客户端访问服务端,需要建立一个通道,那么服务端建立一个通向客户端的通道,在建立通向客户端的同时还需要建立一个回应客户端的通道,所以在通向客户端的通道与回应客户端的通道可以合并成一条通道,同时进行;
那么客户端收到服务端的消息也需要回应服务端,所以还需要建立一条回应服务端的通道,
所以就是三次建立连接。
四次挥手连接:
首先,客户端已经不需要从服务端获取数据了,就会建立一个通道告诉服务端,服务端也会建立一个通道回复客户端,所以第一条通信通道就断了;
然后服务端还会检测是是否还有未发完的数据,然后将数据发送给客户端,客户端收到后会回复服务端,断开第二次连接。