网络编程 之 软件开发架构,OSI七层协议
- 去幕布>>
- 软件开发架构
C/S架构(client/server)和B/S架构(broser/server);
B/S架构本质上也是C/S架构 - 服务端:24小时不间断提供服务;
客户端:什么时候想体验服务,就无连接响应的服务器 - ps:
手机端看上去C/S架构比较火,实际上bs已经在崛起;
微信和支付宝都在做一件事:统一接口;
手机端以后肯定也是bs比较火 - OSI七层协议(物数网传会表应)
- 物理连接层
基于电信号传输0101二进制数据 - 数据链路层
1.规定电信号的分组方式
2.规定任何一台介入互联网的计算机必须有一块网卡, 每一块网卡上面都刻有世界上独一无二的编号(mac地址)
以上两点合称为 以太网协议 - 以太网协议的应用:局域网基于以太网协议通信,不能跨局域网通信
- ps:
a. mac地址:12位16进制;前六位是厂商编号,后六位是流水线编号
b.交换机:局域网内,计算机通过交换机通信
c.互联网是多个局域网,彼此之间链接而成的 - 网络层
IP协议:规定了只要接入互联网的计算机都必须有一个IP地址 - ip地址特点:点分十进制
- IP地址范围:0.0.0.0-255.255.255.255
- IP地址目前有两个版本:ipv4,ipv6
ipv6产生的原因是ipv4不够用了 - IP地址可以动态分配
- 传输层
计算机之间通信 其实是计算机上的应用程序之间的通信 - TCP/UDP都是基于端口工作的协议
- TCP协议(流式协议,可靠协议)
基于TCP协议通信,必须先建立双向通道三次握手四次挥手;
建立连接是三次,断开连接是四次 - ps: TCP协议传输数据之所以可靠是因为有双向通道: Wrong
是因为有通信的反馈机制 - 端口(port)
端口:用来唯一标识一台计算机上的某个应用程序
端口号范围:0~65535
注意:0~1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口 - 常用软件的端口号: MySQL:3306;Redis:6379;Django:8000;flask:5000;
- 端口号是动态分配的,目的是使同一个应用程序能同时为 多个用户服务
- IP和port异同:
IP地址:用来唯一标识接入互联网的一台计算机
port端口:用来唯一标识一台计算机上的某个应用程序
IP + port :唯一标识接入互联网的一台计算机上的某个应用程序 - 应用层
HTTP协议和FTP协议 - PS:三次握手四次挥手
- 三次握手流程
三次握手的目的是建立双向通道
第一次握手:客户端想服务端发送连接请求(syn = n)
第二次握手:服务端收到syn包,后向客户端发送确认(ack = n+ 1)
同时本次还要向客户端发送一个请求连接的请求(syn = m)
第三次握手:客户端收到服务端的syn包后, 向服务端返回一个确认连接的包(ack = m + 1)
双向通道搭建完成 - 四次挥手流程
四次挥手的目的是将已建立的双向通道断开
第一次挥手:客户端向服务端发送断开请求(syn = n)
第二次挥手:服务端收到syn包之后,返回一个确认(ack = n + 1)
第三次挥手:①服务端并没有在第二次同时发送一个请求确认的包,
原因是还要先处理完没有完成的业务, 例如还没有传输完的数据传输 此时客户端处于time_wait阶段
②服务端将未完成的任务完结之后, 才向客户端发送请求断连的包(syn = m)
第四次挥手:客户端收到syn包的请求,然后返回一个确认(ack = m + 1)
至此 断开连接 完成 - 三次握手和四次挥手的区别
四次多的一次是因为,客户端断连之后,
服务端不能直接断连,需要等待后期的业务(例如数据传输还未完成)处理完成后,再向客户端发送断连请求,
并收到客户端的确认断连,至此才完成断连 - 图示
- 三次握手流程
- 物理连接层