c/s架构和b/s架构编程
学习网络编程的目的就是为了写一个cs架构的软件浏览器
网络:网络链接介质+网络协议(osi七层)服务器
网络协议:osi七层协议:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层微信
五层协议:应用层,传输层,网络层,数据层,物理层网络
四层协议多线程
物理层:010101这种电信号架构
数据链路层:并发
网络层app
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.0/24包含了ip地址和子网掩码
ip跟mac有转换的关系
主机176.16.10.10.10/24访问172.16.10.11/24
ARP协议:广播的方式发售那个数据包,获取目标主机的mac地址
mac地址:查找学习mac地址和ip地址的映射表
第一次接收到就会在ip/mac映射表中添加一条数据{’172.16.10.11“:ddsadfgegsdgsdg}
任何一种协议都是由头部和内容的
传输层
tcp协议:
三次握手,四次挥手(重点),链接如何创建,发送数据如何保证可靠,断开如何断开,在创建链接过程当中由状态。
服务的若是看到大量的syn_rcvd状态,请求同步收到状态
dos和ddos攻击:拒绝服务攻击,分布式的拒绝服务攻击
端口号:端口号的范围0~65535,0-1023位系统占用端口
udp协议:
应用层
socket:在应用层和传输层之间的一个抽象层:它把TCP/TP层复杂的操做抽象为几个简单的接口供应用层调用已经实进程在网络中的通讯。
#服务端 #导入一个socket模块 import socket #想象成买手机打电话:socket.SOCK_STREAM 表示创建tcp链接 ,udp链接socket.SOCK_DGRAM #买了个手机 soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #插电话卡:绑定ip地址 传元组:(ip,端口号) soc.bind(('192.168.11.146',8080)) #若是写本机ip,局域网外部能够访问 # soc.bind(('127.0.0.1',8080)) #若是写127.0.0.1,只能本身访问 #开机,监听,这个5 是半链接池的大小 soc.listen(5) #等待别人给我打电话 print('xxxx') conn,addr=soc.accept() print('yyyy') print(addr) # conn 就是通路 #接收1024个字节 data=conn.recv(1024) print('我收到客户端发的',data) #conn.send 发送数据,数据必须是bytes格式 conn.send(b'xxxxx') #挂断电话 conn.close() #销毁手机 soc.close()
#客户端 import socket #建立一个socket对象 soc=socket.socket() #链接服务端 soc.connect(('192.168.11.146',8080)) #发送消息 soc.send(b'xxx') data=soc.recv(1024) print('我收到服务端回的',data) #关闭链接 soc.close()