软件开发架构
C/S架构(clinet/server):客户端/服务端
B/S架构(browser/server):浏览器/服务器
网络编程发展史
任何先进的技术最早都源于军事
要想实现远程通信第一个需要具备的条件是:物理连接介质
计算机之间要想实现远程通信除了有物理连接介质还需要一套公共标准/协议、
OSI七层协议
应用层
HTTP协议FTP协议
表示层
会话层
传输层
TCPUDP都是基于端口(port)工作的协议 计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信 端口:用来唯一标识一台计算机上的某个应用程序 端口号的范围:0~65535 注意:0~1024这些都是操作系统默认使用的端口号 建议:使用8000之后的端口 MySQL默认端口:3306 Redis默认端口:6379 django默认端口:8000 flask默认端口:5000 端口号是动态分配的 第一次起qq分配到的是8989将qq关闭再次启动端口号可能就变了 总结 ip地址:用来唯一标识接入互联网的一台计算机 port端口:用来唯一标识一台计算机上的某个应用程序 ip+port:唯一标识接入互联网一台计算机上的某个应用程序
网络层
IP协议规定了只要是接入互联网的计算机都必须有一个IP地址 ip地址特点:点分十进制 ip地址最小:0.0.0.0 ip地址最大:255.255.255.255 ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本)
数据链路层
1.规定的电信号的分组方式 2.规定了任何一台接入互联网的计算机都必须有一块网卡 每一块网卡上面都刻有世界上独一无二的编号 12位16进制数:前6位是厂商编号,后6位是流水线编号 我们管这12数叫mac地址 ps:以上两点合称为"以太网协议" 交换机:基于以太网协议通信,不能跨局域网通信。 以太网协议通信的特点:通信基本靠吼! 缺点:广播风暴 互联网是有N多个局域网彼此之间连接而成的。
物理连接层
基于电信号传输010101001010二进制数据
TCP协议(详见《TCP协议三次握手四次挥手》)
流式协议,可靠协议
基于TCP协议通信 必先建立双向通道
TCP协议传输数据可靠的原因在于它有反馈机制,发送消息之后对方必须回复确认收到消息才会将数据从内存中清空,否则在限定的时间时间内会每个一段时间发送一次,如果超过限定时间还为收到,就会把对方计算机列为宕机或其他故障,停止向此计算机发送消息
三次握手
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
第一次客户端发送SYN包给服务端,客户端发送完毕进入SYN_SEND状态,
第二次服务端收到第一次客户端发送的SYN包后发回ACK确认包并同时也发送一个SYN包到客户端,服务端发送完毕进入SYN_RECV状态,
第三次客户端接收到服务端发送的ACK+SYN包后向服务端发回ACK确认包,发送完毕进入Established状态。
四次挥手
第一次客户端发送一个FIN包到服务器端,发送完毕后客户端进入 FIN_WAIT_1 状态;
第二次服务器端收到客户端第一次发送的FIN包后返回一个ACK确认包,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接;
第三次服务端准备好关闭连接后向客户端发送FIN包,发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK确认包;
第四次客户端发回ACK确认包进入TIME_WAIT状态,服务器端接收到这个确认包之后关闭连接进入 CLOSED 状态,客户端被动关闭进入 CLOSED 状态。
END