网络基础
-
软件开发架构
- 程序间的通讯大致分两种:
- 应用类程序:QQ
- web类程序 :借助浏览器
- 程序间的通讯大致分两种:
-
客户端服务器:
- 客户端
- 服务器
-
开发架构:
- C/S架构
- B/S结构
计算机网络
-
ip地址:
-
概念:
- 每台电脑在网络世界中都有一个全球唯一的标识
-
物理地址
- 网卡上有全球上唯一的物理地址(mac),长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
-
查看方式:
- ipconfig /all
- 注意:ip地址替代物理地址,更容易记忆
-
端口号
- 作用:区分电脑上的进程
- 描述:电脑上的每一个应用程序想运行必须占一个端口号。并且端口号同时间只能被一个应用程序占用。每一台电脑上一共有 65536 个端口,端口的范围是 0~65535。一般 0~1023 被一些其他应用已经占用,因此我们一般从 1024 开始指定端口
-
网络协议
-
网络协议就是为了能让计算机网络中进行数据交换而建立的规则、标准
-
互联网上有上百种协议,但是最重要的两个协议是 TCP 协议和 IP 协议,因此我们将上百种协议统称为 TCP/IP 协议族。TCP/IP协议族,根据协议的功能的不同抽象成了 4 层
- 应用
- TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
- 传输
- TCP,UDP
- 网络
- IP,ICMP,OSPF,EIGRP,IGMP
- 数据链路
- SLIP,CSLIP,PPP,MTU
- 应用
-
TCP(Transmission Control Protocol)
-
数据安全,速度略低。分为客户端和服务端
-
TCP 的三次握手和 4 次挥手
- 三次握手
- 第一次握手:是客户端让服务器准备好资源
- 第二次握手:服务端资源准备好了并且服务端问客户端资源有 没有准备好。
- 第三次握手:客户端资源也准备好了。接下来才真正的发生数据
- 四次挥手
- 第一次,客户端告诉服务端我不会给你发数据了
- 第二次服务端告诉客户端我收到你发生的信息了
- 第三次服务端给客户端发生数据说我也不给你发了
- 第四次客户端给服务端说我知道了
- 三次握手
-
UDP(User Datagram Protocol)
-
面向无连接,数据不安全,速度快。不区分客户端与服务端
-
TCP与UDP的对比
-
TCP提供的是面向连接、可靠的服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个 TCP 连接,之后才能传输数据。TCP 提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP–是一个简单的不可靠的运输层协议。它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
-
OSI模型(Open System Interconnect Reference Model)
-
OSI 模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为 OSI 参考模型或七层模型- -
-
socket的使用
#创建套接字的方式 import socket #目的:使用socket编程 通过网络实现进程间的通信 #udp编程 udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #tcp编程 tcpSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #参数说明:AF_INET(ipv4协议用于 Internet 进程间通信) #socket.SOCK_DGRAM 数据报套接字, 用于UDP协议 #socket.SOCK_STREAM 数据报套接字, 用于TCP协议
-
UDP
- 发送方
from socket import *
#创建一个udp Socket对象 udpSocket = socket(AF_INET,SOCK_DGRAM)
#优化代码 addr = (‘10.10.24.251’,9999) while True:
message = input(“请输入您要发送的信息:”)
udpSocket.sendto(message.encode(‘utf-8’), addr)
#用完socket后对象关闭 udpSocket.close()- 接收方
from socket import *
udpSocket = socket(AF_INET,SOCK_DGRAM)
#给socket对象绑定一个ip地址和端口号
udpSocket.bind((‘10.10.24.251’,9999))
while True:
# 接收信息
# recvfrom(1024):代表能接收1024个字节的信息
message = udpSocket.recvfrom(1024)
# 查看接收到的信息的格式:返回的是一个元组 (消息内容,(发送方的Ip,发送方的端口号))
# 如:(b’fffffff’, (‘192.168.2.119’, 8989))
# print(message)
# 利用decode(指定编码字符集类型)方法来进行解码
print(message[0].decode(‘utf-8’))
#关闭socket对象
udpSocket.close() -
TCP
-
发送方
from socket import * #创建对象 tcpSocket = socket(AF_INET,SOCK_STREAM) #与服务器端建立连接 3次握手 tcpSocket.connect(('10.10.24.251',9999)) #发送信息 tcpSocket.send('你好 张三'.encode()) #接收信息 message = tcpSocket.recv(1024) print("服务器端返回的消息为:",message.decode()) #关闭服务对象 tcpSocket.close()
-
接收方
from socket import * #创建socket对象 tcpSocket = socket(AF_INET,SOCK_STREAM) #给服务器端 绑定一个端口号 tcpSocket.bind(('10.10.24.251',9999)) #当服务器满载时,设置客户端最大的等待连接数为 5 tcpSocket.listen(5) #等待着客户端 来跟服务器端建立连接 :在此阻塞 newSocket,clientAddr = tcpSocket.accept() print(clientAddr) #接收客户端的信息 message = newSocket.recv(1024) print("服务器端收到信息为:",message.decode()) #发送信息给客户端 newSocket.send(b'nihao') #关闭服务对象 newSocket.close() tcpSocket.close()
-