一、软件开发架构:
1、 C/S架构:Client与Server 客户端与服务端架构 例如:手机APP程序,QQ,微信等属于客户端
B/S架构:Browser与Sever 浏览器端与服务器端 例如:百度、搜狗等一些浏览器
补充:B/S架构本质也是C/S架构,实现的原理基本一致
2、服务端:就是24小时不间断提供服务,客户端:是什么时候需要访问数据时就直接去服务端寻求匹配
二、学习网络编程后:
就可以开发一个C/S架构的软件,学习 并发 数据库 前端 diango 就可以开发一个B/S架构的软件
三、网络编程的发展史:
回顾历史任何先进的技术最早都来源与军事,简单的额概括
1:早期的电话: 通过电话线来实现通信
2:早期的大型计算机: 通过网线连接
3:如今的笔记本电脑,无线电话 网线 网卡
想要实现远程无障碍通信第一个需要具备的条件是:物理连接介质,还需要一套公共的标准和协议规范
四: OSI协议:
相关详细内容:https://baike.baidu.com/item/七层模型/1441391?fr=aladdin
OSI 七层协议 : 应用层 表示层 回话层 传输层 网络层 数据链路层 物理连接层
也可以称为OSI五层协议: 应用层 传输层 网络层 数据链路层 物理连接层
口诀:"应表会传网数物"
1:物理连接层
建立、维护、断开物理连接。(由底层网络定义协议)
基于电信号传输0101010101二进制数据
2:数据链路层:
(1):规定的电信号的分组方式
(2):规定了任何一台接入互联网的计算机都必须有一块网卡,每一块网卡上面都刻有世界上独一无二的编号
满足以上条件的合称为”以太网协议“
mac地址:12位16进制数:前6位是厂商编号,后6位是流水线的编号,这个数字称为Mac地址,
MAC(Media Access Control,介质访问控制)地址,硬件地址,用来定义网络设备的位置,Mac地址是集成在网卡上的
IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的
IP地址就如同一个职位,而MAC地址则像是去应聘这个职位的人。职位既可以由甲担任,也可以由乙担任。
(3)交换机:
基于以太网协议通信,不能跨局域网通信
(4): 互联网是有N多个局域网彼此之间的连接而成
3、网络层:
IP协议:规定了只要是接入互联网的计算机都必须有一个IP地址
(1):IP地址是指互联网协议地址,是一个32位的二进制,特点通常用”点分十进制“表示成a,b,c,d)的形成,是动态匹配的
(2):IP地址的最小值:0.0.0.0,最大地址为:255.255.255.255
(3):IP地址目前有两个版本 :ipv4 IPv6 (由于IP v4已经不够表示目前存在的计算机了,所以推出了ipv6)
(4):一个ip地址通常写成四段十进制数,例:172.16.10.1
4、传输层:
TCP/UDP都是基于端口工作的协议,
端口(port):可以认为是设备与外界通讯交流的出口,是用来唯一标识一台计算机上某个应用程序
端口号的范围:0~65535
0~1024这些都是操作系统默认使用的端口号
MySQL默认端口:3306
redis默认端口:6379
Diango默认端口:8000
flask默认端口:50000
端口是动态分配的:特点是:第一次启动分配的端口和关闭再次启动端口号可能都在变化
总结:IP地址:用来唯一标识接入互联网的一台技算机,port端口:用来唯一标识一台计算机的某个应用程序
IP+port:唯一标识接入互联网一台计算机上的某个应用程序
(因此ip地址精确到具体的一台电脑,而端口精确到具体的程序。)
5、应用层:
(1):HTTP协议和 FTP协议 HTTP协议就加不加S的区别加“s”代表是经过认证的:如常看到的https:// 和http://
(2):TCP协议:流式协议,可靠协议,基于TCP协议通信 必须先建立双向通道
TCP协议传输数据之所以可靠的原因就在于有双向通道??
不只是基于网络的双向通道,还有是基于反馈机制,有请求的同时也有反馈的请求返回
(反馈机制就是我给你一直发送请求,你必须有回应的消息,收到了才会删除内存里的内容然后传送给请求者)
五、三次握手连接
可以简单的比喻成:挖通道,你挖我的,我也挖你的,或者是男女之间的恋爱关系,相互暧昧一方表白后获取回应,成功确定关系
双向通道的反馈机制:(中间层)
洪水攻击概念
六、三次握手四次挥手
中间的两步不能合并,因为客户端发送的请求,服务端还未来得立马断开请求,有一个反时间,举例:男女分手 女的不能果断同意,死缠烂打,
断开指的是女的另寻他欢后才果断分手:
七、四次挥手断连接
三次握手过程理解
四次挥手过程理解
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
常见面试题
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?"""" 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。 但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。 只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。 """
HTTP 与 HTTPS 的区别
分类 编程技术
基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。
HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:
- 1、TCP 三次同步握手
- 2、客户端验证服务器数字证书
- 3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
- 4、SSL 安全加密隧道协商完成
- 5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
截至 2018 年 6 月,Alexa 排名前 100 万的网站中有 34.6% 使用 HTTPS 作为默认值,互联网 141387 个最受欢迎网站的 43.1% 具有安全实施的 HTTPS,以及 45% 的页面加载(透过Firefox纪录)使用HTTPS。2017 年3 月,中国注册域名总数的 0.11%使用 HTTPS。
根据 Mozilla 统计,自 2017 年 1 月以来,超过一半的网站流量被加密。
HTTP 与 HTTPS 区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
TCP 三次握手
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接- 第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
- 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
- 第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
简化:
HTTPS 的工作原理
我们都知道 HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。
1、客户端发起 HTTPS 请求
这个没什么好说的,就是用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。
2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl 就是个不错的选择,有 1 年的免费服务)。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。