今天学习一些网络的基础知识,是很基础知识。
- ip 地址:Internet Protocol,规定网络地址的协议叫 ip 协议,它定义的地址称之为 ip 地址。
- mac地址:Media Access Control Address,每块网卡都有唯一的 mac 地址,发送端和接收端的地址便是指网卡的地址。
- arp 协议:Address Resolution Protocol,查询 IP 地址和 MAC 地址的对应关系
- 路由器:Router,是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选
择和设定路由,以最佳路径,按前后顺序发送信号 - 局域网:Local Area Network,LAN,是指在某一区域内由多台计算机互联成的计算机组。
- 端口: Port, 逻辑上的,如TCP/IP协议中端口号的范围从0到65535,网页:80, https:443, 等
- TCP 协议:Transmission Control Protocol 属于传输层协议,提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送
- UDP 协议:User Datagram Protocol 是一个简单的面向数据报的传输层协议。UDP 不提供可靠性,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地
- 互联网的七层协议
- Socket: 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口。也可以说成 IP+Port,因为 ip 是用来标识互联网中的一台主机的位置,而 port
是用来标识这台机器上的一个应用程序。 - 每层与相应的协议
下面,介绍一下TCP 和 UDP 的简单使用,先看一张图了解一下,比如,TCP 基础的服务端有6步,UPD 的服务端只需要4步。
套接字的初使用
1. 基于UDP 协议的socket
服务端:
import socket
# 1 初始化一个对象
sock = socket.socket(type=socket.SOCK_DGRAM)
# 2 绑定端口
sock.bind(('127.0.0.1', 6668))
# 3 接受/发送消息
conn, add = sock.recvfrom(1024)
# 这句代码表示接收客户端传来的数据
# conn 代表传过来的数据,因为是流的形式传播,所以要进行编码解码
# add 应该就是 “套接字”: ip + 端口,为元祖形式
print('收到了客户端的数据:', conn.decode('utf-8'))
# 这句打印出接收到客户端的数据
print(add)
# 这句打印客户端的ip 与端口,ip 是规定的,但是端口是随机的
# 下面这句表示把数据发给客户端
sock.sendto('我是udp 服务端'.encode(), add)
# 4 关闭
sock.close()
客户端:
import socket
# 1. 初始化
sock = socket.socket(type=socket.SOCK_DGRAM)
# 2. 发送消息
sock.sendto('我是udp客户端'.encode('utf-8'), ('127.0.0.1', 6668))
# 3. 接收服务端的消息
msg, add = sock.recvfrom(1024)
print(msg.decode('utf-8'))
print(add)
# 这里的add 打印出来是 ('127.0.0.1', 6668)
# 刚好是我们在 udp_server 设立的
# 4 关闭客户端
sock.close()
2. 基于TCP 协议的socket
服务端:
import socket
# 1. 初始化一个对象
sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 2. 绑定一个端口
sock.bind(('127.0.0.1', 6667))
# 3 监听
sock.listen()
# 4 接受客户端的请求,如果没有,就一直阻塞
conn, addr = sock.accept()
# 5 接受/发送消息
ret = conn.recv(1024)
print(ret.decode('utf-8'))
rev = input('请输入你要回复的消息:')
conn.send(rev.encode())
# 6 关闭套接字
sock.close()
客户端:
import socket
# 1. 初始化一个对象
sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 2. 链接到一个套接字
sock.connect(('127.0.0.1', 6667))
# 3. 发送消息
msg = input('请输入你要发送的消息: ')
sock.send(msg.encode('utf-8'))
# 表示接收到服务端发来的消息
ret = sock.recv(1024)
print(ret.decode('utf-8'))
# 4. 关闭
sock.close()