网络编程
C/S和B/S架构
c:client s:server 客户端 服务端,电脑上装的QQ,微信等
b:browser s:server 浏览器 服务端,京东,天猫等
B/S架构本质也是C/S
学习网络编程为了写一个cs架构的软件
c端------网络-------s端
s端特点: 有固定ip ;稳定一直在运行,支持并发
网络
网络连接介质+网络协议(osi七层)
网络协议
osi七层协议
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
五层协议将应用层,表示层,会话层合为应用层就行了
物理层
010101电信号,主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0
数据链路层
把物理层的电信号分组,每一组叫一个数据报/数据帧,每一数据帧分成:报头head和数据data两部分
每一个数据报,都有报头和数据部分
头:固定18个字节,6:发送者地址/6:接收者地址/6:数据类型
mac地址: 发送者,接收者地址,就是mac地址
每块网卡都有一个唯一的mac地址:12位16进制数表示(前六位是厂商编号,后六位是流水线号)
广播:同一个局域网内通信,会出现广播风暴
网络层
ip: ipv4:32位2进制表示:点分十进制表示 从0.0.0.0到255.255.255.255,范围是有限的,不能表示出所有的网络设备,于是出现了ipv6
子网掩码: 通过子网掩码和ip判断两个ip是否处于同一个网段,通过ip地址和子网掩码做按位与运算
ip地址: 172.16.10.1: 10101100.00010000.00001010.000000001
子网掩码: 255.255.255.0: 11111111.11111111.11111111.000000000
按位与运算 172.16.10.0 10101100.00010000.00001010.000000000
172.16.10.10/24 包含了ip地址和子网掩码
ip跟mac有转换关系
主机172.16.10.10/24访问172.16.10.11/24
首先通过ip地址和子网掩码区分出自己所处的子网
分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac)
源mac | 目标mac | 源ip | 目标ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 数据 |
这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac
ARP协议:广播的方式发送数据包,获取目标主机的mac地址
mac地址学习:mac地址和ip地址的映射表
第一次接收到就会在ip/mac映射表中添加一条数据{’172.16.10.11“:ddsadfgegsdgsdg}
任何一种协议都有头和内容
传输层
tcp协议:三次握手,四次挥手(重点),连接如何建立,发数据如何保证可靠,断开如何断开,在建立连接过程中有状态
服务的如果看到大量的syn_rcvd状态
dos和ddos攻击: 拒绝服务攻击,分布式的拒绝服务攻击
端口号: 端口范围0-65535,0-1023为系统占用端口
udp协议:发送,不需要要响应,所以数据不可以靠,看视频用的就是udp协议
端口:
通过ip+子网掩码唯一确定一台设备
通过ip+子网掩码唯+端口号唯一确定一个软件
半连接池:
限制的是同一时刻的请求数,而非连接数
应用层
应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
应用层功能:规定应用程序的数据格式。
上网流程分析
在浏览器输入www.baidu.com
会取dns服务器通过域名解析成ip地址
向ip+端口号这个地址发送请求,就会访问到百度的服务器
socket:在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信
在python中通过socket写一个cs架构的软件