1.IP地址:每地方对应ip地址是不同的,每条电脑连上网都有IP地址,IP地址区域分配
2.路由器:分配网络该怎么走,有很多口,网络请求要有IP地址,路由器会根据目标地址,自己来看每一步该走哪一条。
3.光纤:作用就是只是连接。
mac地址:是硬件的唯一标识,出厂前在网卡里面设定好的,全球唯一,网卡换了就变。
image.png
操作过程:
1.www.baidu.com,先包装,准备数据有,date,源ip,目标ip,当前mac地址m1,下一跳的mac地址m2,mac地址是唯一的,所以它找得到,准备好后发送,到达下一个,m1变m2,m2变m3,最后找到DNS服务器(它会找www.baidu.com注册时备份的ip地址),源ip,目标ip互相交换,10.7.181.1,源ip,目标ip,当前mac地址,下一跳的mac地址,到对应的网页请求数据
2.局域网不出交换机,不产生流量,cmd netstat -nb,查看木马
image.png
1.掌握最多前4层,怎么来确定,根据协议,文档或者代码支持
image.png
image.png
image.png
http协议:对网络请求的规定,属于应用层协议,tcp和udp同层
7层都是在硬件里完成的,然后才交到网络里面,实现传输 数据封装后,传到另一边,需要对数据进行解封装
image.png
image.png
TCP协议实现可靠传输,会建立会话,大的数据不能一次返回,它会拆分数据成多段,分多次返回,可靠传输,拆完过后,会标记记号1,2,3,拷贝一份,进入缓存区,先传1,1收到会发送,我已经收到1,这时缓存删除1,传输2,如果中间断了,服务器收不到客服端是否接收到的消息,如果等了一段时间,没有收到消息,它会自己再发一次,选择其他路径,如果收到,缓存区删除2,过程很啰嗦,因为它有会话,每次传送都有确认,所以可靠,请求只一次
不可靠传输,客服端给服务端发送一次请求,服务器一次给你,但不建立会话,如果失败,只能再请求,视频
流量控制,会话内容大小,数据大小,有必要才传
1.服务端
socket套接字:基于tcp和udp,用在服务端和客户端的两端,客服端:发送请求,服务端:收到请求,返回数据。
python对套接字支持,提供socket库
import socket
def creat_server():
"""写服务器"""
#1 创建套接字对象
"""
socket(family,type)
family:确定IP协议类型
AF_INET:ipv4
AF_INET6:ipv6
type:传输协议类型
SOCK_STREAM:TCP协议
SOCK_DGRAM:UDP协议
"""
server=socket.socket()#family=socket.AF_INET,type=socket.SOCK_STREAM
#创建对象完成
#2.绑定IP地址和端口
# 查看IP,cmd--ipconfig,10.7.153.104
"""
bind(ip地址,端口)
端口:一台电脑上一个端口标记一个唯一的服务,范围0-65535,
0-1024是著名端口,专门用来标记一个特殊的服务,一般不用
但是,同一端口,同一时间,只能绑定一个服务
"""
server.bind(('10.7.153.104',8080))
#3.开始监听
"""
listen(最大个数),同一时间,能够连接的客服端的个数
"""
server.listen(512)
#4.让服务器处于运行状态
while True:
print('监听状态')
#5.连接客服端(建立连接),返回连接对象,和客服端地址
connect,addr=server.accept()#返回元组
#这句代码会让程序停下来,直到有客服端来请求当前服务器为止,input也是,堵塞线程
print(addr)
#6.服务器给客户端发送消息
"""
send(data)
data:python3中要求bytes类型,python2中可以是字符串
图片都是二级制发送
字符串:转换成二进制,str-->bytes
1.字符串.encode(默认utf-8,可以不传)
2.bytes('你好','utf-8')
"""
while True:
message=input('服务端:')
connect.send(message.encode())
# connect.send(bytes('我是谁','utf-8'))
#7.也可以接收客户端发过来的消息
"""
recv(bufsize),recv一样会堵塞线程
bufsize:每次能接收的最大的字节数,如果实际偏大,分多次传输
返回值:就是接收到的数据,但是编码方式任然是二进制的
二进制转字符串
recv_data.decode()
str(recv_data,'utf-8')
"""
recv_data=connect.recv(1024)
print(str(recv_data,'utf-8'))
#8.断开连接
connect.close()
creat_server()
2.客户端
import socket
def creat_socket():
#1.创建
client=socket.socket()
#2.连接
"""
connect(服务器地址)
"""
client.connect(('10.7.153.104',8080))
while True:
#3.接收消息
data=client.recv(1024)
print(data.decode(encoding='utf-8'))
#4.发送消息
message=input('客户端:')
client.send(message.encode())
#5.断开
client.close()
creat_socket()
3.图片服务端
import socket
#1.创建座机
server=socket.socket()
#2.插入电话线
server.bind(('10.7.153.104',12345))
#3.人坐电话旁
server.listen(520)
#保证电话开机
while True:
#4.接电话
connect,addr=server.accept()
print(addr)
#5.讲电话
with open('./files/luffy2.png','br')as f:
data=f.read()
connect.send(data)
#6.听电话
# connect.recv(1024)
#7.挂电话
connect.close()
4.图片客户端
import socket
client=socket.socket()
client.connect(('10.7.153.103',12344))
all_data=bytes()
data=client.recv(1024)
while data:
print('接收到数据')
all_data+=data
data=client.recv(1024)
with open('./files/new.png','wb')as f:
f.write(all_data)
client.close()
网友评论