网络编程
软件开发架构分为C/S架构(client/server),B/S架构(browser/server)。
C/S架构
C是客户端,用户安装的软件,比如QQ,微信。
S是服务端,统一管理数据库的主机中的软件就叫做服务端,再后来服务端不只是管理数据,外加处理业务逻辑。
服务端:24小时不间断提供服务。
客户端:什么时候想体验服务,就去服务端寻求服务。
学习网络编程之后,就可以开发一个C/S架构的软件。
B/S架构
B是浏览器,S是服务器,B/S架构本质上也是CS架构。手机端看上去C/S架构比较火,实际上B/S架构已经在崛起。比如微信,支付宝上面的小程序,两家都在统一接口。手机端之后肯定也是B/S比较火。
学习数据库,前端,diango,就可以开发一个B/S架构的软件
网络编程的发展史
任何先进的技术最早都来源于军事。早期的电话需要用电话线连接,大头电脑需要用网线连接,笔记本电脑,无线电话,需要用网卡连接。所以要想实现远程通信的第一个需要具备的条件是:物理连接介质。计算机与计算机之间要想实现远程通信除了有物理连接介质之外,还需要有一套公共的标准/协议。
OSI协议
OSI七层协议:应用层,表示层,会话层,传输层,网络层,数据链路层,物理连接层。
OSI五层协议:应用层,传输层,网络层,数据链路层,物理连接层。
物理连接层
基于电信号传输01001010011001011001二进制数据
数据链路层
1.规定的电信号的分组方式
2.规定了任何一台接入互联网的计算机都必须有一块网卡,每一快网卡上面都刻有世界上独一无二的编号,12位16进制数,前6位是厂商编号,后6位是流水编号,我们管这12位数叫mac地址。
以上两点合称为"以太网协议"
交换机
特点:基于以太网协议通信,不能跨局域网通信。互联网是有N多个局域网彼此之间连接而成的。
网络层
IP协议
规定了只要是接入互联网的计算机都必须有一个IP地址
ip地址特点:点分十进制
ip地址最小:0.0.0.0
ip地址最大:255.255.255.255
ip地址目前有两个版本,IPV4,IPV6(由于IPV4已经不够表示目前存在的计算机了,所以推出了IPV6版本)
IP地址是动态分配的。
传输层
TCP/UDP都是基于端口工作的协议
计算机与计算机之间的通信其实就是计算机上的应用程序与应用程序之间的通信。
端口:用来唯一标识一台计算机上的某个应用程序。
端口号的范围:0-65535
注意:0-1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口
MySQL默认端口:3306
Redis默认端口:6379
diango默认端口:8000
flask默认端口:5000
端口号是动态分配的,比如第一次qq分配到的是8989,将qq关闭后再次启动端口号可能就变了。
总结
ip地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机上的某个应用程序
ip+port:唯一标识接入互联网一台计算机上的某个应用程序。
应用层
HTTP协议,FTP协议。
TCP协议:流式协议,可靠协议,基于TCP协议通信,必选先建立双向通道。
面试题:TCP协议传输数据之所以可靠的原因就在于有双向通道???这句话是错的,
答:TCP协议传输数据之所以可靠的原因是在于它有反馈机制,发送消息之后对方必须回复确认消息才会将数据从内存中清空,否则在限定的时间内每隔一段时间就会发送一次。
三次握手
三次握手建立连接,四次挥手断开连接。
- 最开始的时候客户端和服务器都是出于CLOSED(关闭)状态。主动打开连接的为客户端,被动打开连接的是服务端。
三次握手,由于TCP协议传输数据需要建立双向通道。
所以客户端要想访问服务端的数据,必须先发请求给服务端,此时,客户端就进入到了SYN-SENT(同步发送状态)。
服务端由于时刻准备着接受客户的连接请求。就进入了LISTEN(监听)状态。
服务端响应客户端的请求,并携带着对客户端的请求,返回给客户端。此时,服务端就进入了SYN-RCVD(同步收到)状态。
客户端收到服务器的请求后,还需要向服务器发送确认。此时,客户端进入ESTABLISHED(已建立连接)状态。
服务器接收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
四次挥手
- 数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是出于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭
客户端发出断开连接请求,并且停止发送数据,此时,客户端进入FIN-WAIT-1(终止等待1)状态。
服务器接收到客户端请求,发送给客户端确认信息。此时,服务器就进入到了CLOSE-WAIT(关闭等待)状态。客户端向服务器的方向就断开了连接,这个时候处于半封闭的状态,客户端已经没有数据要发送了,但是服务器若要发送数据,客户端依然可以接收。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态的持续时间。客户端收到服务器的确认请求后,此时,客户端就进入了FIN-WAIT-2(终止等待2)状态,等待服务器断开连接。(在这之前还需要接受服务器发送的最后的数据)
服务器将最后的数据发送完毕后,就像客户端发送断开连接请求,此时,服务器就进入到了LAST-ACK(最后确认)状态,等待客户端的确认。客户端收到服务器的断开连接请求之后,必须发出确认。此时,客户端就进入到了TIME-WAIT(时间等待)状态。
客户端发送确认断开连接,服务器收到客户端发送的确认,立刻进入CLOSED状态。客户端此时也进入到CLOSED状态。