网络编程
定义:实现远程数据传输
1、软件开发架构
c\s架构(c:客户端, s:服务端)
b\s架构(b:浏览器 s:服务器)
手机端:貌似c\s架构比较火, 其实不然,eg: 微信小程序和 支付宝的第三方接口应用,
统一接口!!!
pc端:b\s比较火
本质:b\s其实也是c\s
服务端:不间断提供服务
客户端:有需求才去找服务端体验服务
1.2 学习网络编程》》》 开发cs架构的软件
并发编程, 前端, 数据库, 框架 》》 开发bs架构的软件
1.3怎样实现远程数据传输:
必要条件:
1、物理连接介质
2、协议(OSI七层协议)
1、应用层:(HTTP协议 ,FTP协议)
2、表示层
3、会话层
4、传输层(端口协议):
1>TCP, UDP 基于端口工作的协议
2>计算机之间的通信实质上是计算机上的应用程序与应用之间的通信
3>端口(port):唯一标识一台计算机上某一个基于网络通信的应用程序
端口范围:0 ~65535
注意:1》、0~1024通常是操作系统分配的端口
2》、通常自己写的软件端口号在8000 后
3》flask 框架默认哭5000
Django 框架默认欢送5000 8000
mysql 框架5000 5000~8000
redis 据库默认端口 6379
总结:
ip+port:唯一标识世界上独一无二的计算机上的某一个应用程序
arp协议:根据ip地址解析mac地址
5、网络层(ip协议):1>规定了计算机必须有一个ip地址(特点:点分十进制,ipv6|ipv4)
最小:0.0.0.0; 最大: 255.255.255.255
2>跨局域网传输
3>唯一表示互联网中独一无二的一台机器
6、数据链路层:以太网协议「广播风暴」(交换机:实现多台电脑的连接)
1>规定类二进制数据的分组方式
2>规定只要介入互联网的计算机必须要有网卡,必有世界唯一编号:
mac地址,长度48位二进制,12位16进制表示
前6位厂商,后6位生产流水线
7、物理连接层:实现计算机之间的物理连接,传输的数据都是010101的二进制
(ps:电信号工作原理:电只有高低电频)
只需get 5 层(除去 表示层和会话层)
1.4 TCP协议(三次握手四次挥手)
三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,
需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
Clien Server
| SYN seq=x |
SYN_SENT|------------------------->|LISTEN
| |
| SYN seq=y,ACK ack=X+1 |SYN_RVCD
ESTABLISHED|<-------------------------|
| |
| ACK ack=Y+1 |
|------------------------->|ESTABLISHED
| |
| |
图 TCP三次握手
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=X+1,
随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为X+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,
并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,
完成三次握手,随后Client与Server之间可以开始传输数据了。
*****数据可靠原因:给对方必须回复确认收到传输的数据才会被删除
否则会在一定时间间隔之内反复发送直到对方接收或者超时
***四次挥手原因:
在断开连接时,双方都需要确认是否还有数据需要发送,所以四次
不能合并成三次。
**洪水攻击:syn_RVCD
SYN攻击:
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),
此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,
并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,
这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。
SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,
使用如下命令可以让之现行:
#netstat -nap | grep SYN_RECV