互联网协议与socket编程

昨天我们讲了互联网协议 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(
原文地址:https://www.cnblogs.com/yftzw/p/8885841.html