昨天我们讲了互联网协议 tcp五层
物理层:高低电压传输数据
数据链路层:以太网 报,报头和数据 报头前面固定的字节来写源地址,目标地址,和数据类型
mac地址:网卡上出厂时自带的一个编号,前六位是厂商信息,后六位是流水线号
在相同的局域网的情况下,我们要传输文件,找目标地址,需要通过交换器,交换器有自动学习mac的能力,只要你一传输文件,它就会记住你的网口号和mac地址,然后,向它其他网口所有的计算机发消息,有一个匹配上目标地址的计算机会回复交换器,交换器就会记住它的mac地址和所在的网口号,这样只要你两边都不拔网线的情况下,下次你要再给目标传文件,就会直接传输,不用再去寻找了,如果拔掉了网线,交换器 还有更新学习的能力,会自动把没用的信息删除
网络层:如果不在一个区域网,就需要通过ip地址来找mac地址,我们就用到了ARP协议
传输层:通过端口来找到软件,建立端口到端口的通信 而建立通信的方式分为tcp和upd两种
tcp被称为好人,只要跟它建立了连接 ,消息发过来,它必定会回复
而upd它不跟你建立连接,它给你发送消息 不会等你回复 直接干死了
socke编程
客户端
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话 phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口 phone.send('你好'.encode('utf-8')) # 发消息b'hello' data=phone.recv(1024) #收消息 print(data.decode('utf-8')) phone.close()
服务端
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话 phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的 phone.listen(5) # 开机 print('start...') conn,client_addr=phone.accept() # 等电话连接 print('连接来了:',conn,client_addr) # 收发消息 msg=conn.recv(1024) #收消息,1024是一个最大的限制 print('客户端的消息: ',msg) conn.send(msg+b'SB') # 挂电话 conn.close() # 关机 phone.close(