网络编程_new
2023-04-18 17:25:04 4 举报
AI智能生成
python_网络编程基础
作者其他创作
大纲/内容
在同一个局域网内的机器由交换机负责通信
交换机只认识MAC地址
局域网内的某台设备给另一台设别发送消息,由交换机负责广播通信,来寻找局域网内的目标设备
广播
组播
通过MAC地址实现单播,在网卡上
单播
交换机功能:
交换机
局域网的概念
提供网关IP,同一个局域网内的所有设备共享同一个网关
不能访问本局域网之外的内网IP地址
路由器
0.0.0.0 ~255.255.255.255 之间,用来判断设备是不是在同一个局域网内
子网掩码
交换机遵循ARP协议,通过ip找MAC地址
MAC地址
用来区分同一设备上的不同应用服务
端口port
不同局域网之间的通信
四位点分十进制
IPV4协议
IPV6协议
需要申请购买的地址
公网地址
192.168.0.0~192.168.255.255
172.16.0.0~172.31.255.255
10.0.0.0~10.255.255.255
内网地址
127.0.0.1
本地回环地址
mac/linux
ifconfig
win
ipconfig
查看IP地址
IP地址
通过IP找到MAC地址
ARP地址解析协议
1.局域网
Client/Browser
C/S架构
Browser/Client
B/S架构
B/S架构 不用安装即可使用,统一PC端用户的入口
区别
2.网络开发架构
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
七层协议
改层包含原七层协议中的:应用层、表示岑、会话层
python代码
port端口
效率低、面向链接、可靠、全双工
三次握手
四次挥手
tcp
效率高、无链接、不可靠
udp
概念
四层路由器
四层交换机
设备
ipv4
ipv6
三层交换机
mac地址
ARP协议
概念
网卡
二层交换机
五层协议
3.OSI协议
1.需要先建立连接,然后才能通信
2.占用链接、可靠(消息不会丢失)、实时性高、慢、全双工通信
语音、视频聊天
线下缓存高清电影、远程控制、发邮件等
3.场景
TCP
1.不需要建立连接就可以通信
2.不占用链接、不可靠(消息因网络问题丢包)、块
UDP
SYN
ACK
信号
1.建立链接
FIN
2.断开链接
1.客户端请求建立链接时,服务端一次发送ACK信号加请求连接客户端的SYN信号,导致省略了一次握手过程
2.四次挥手是因为要确保双发消息全部发送完成后,才能断开链接,避免出现一方的消息丢失
3.为什么建立链接是三次握手而断开链接是四次挥手?
4.socket代码中的三次握手与四次挥手
TCP协议三次挥手四次握手过程
4.传输层的TCP和UDP协议
网络概念
import socketsk = socket.socket()
实例化socket对象
绑定IP 和 端口
sk.listen()
监听客户端链接
包含服务端的ip和端口,以及与服务端建立链接的客户端的ip和端口
conn
当前链接到的客户端的ip和端口,元组的形式
addr
与申请链接的客户端进行三次握手
服务端接收和发送都是通过conn对象,因为conn中存储这当前服务和当前链接的客户端的ip和端口
# 接收消息msg = conn.recv(1024).decode('utf-8')
# 发送消息conn.send('你好'.encode('utf-8'))
接收和发送消息
conn.close()
断开链接(四次挥手)
sk.close()
关闭服务
服务端
包含客户端的ip和端口,以及与服务端的ip和端口
sk
申请与服务端进行三次握手
客户端接收和发送都是通过sk对象,因为sk存储着客户端和当前链接的服务端的ip和端口
# 接收消息msg = sk.recv(1024).decode('utf-8')
# 发送消息sk.send('你好'.encode('utf-8'))
客户端
1.TCP协议通信过程
sk = socket.socket(type=socket.SOCK_DGRAM)
绑定 IP 和 端口
元组形式接收客户端发送的消息和客户端地址
接收消息
发送消息及接收的客户端地址
发送消息
给服务端发送消息及客户端地址
msg = sk.recv(1024)
接收服务端发送的消息
2.UDP协议通信过程
1.服务端一对一
TCP协议时全双工通信,客户端和服务端都必须进行三次握手和四次挥手,才可以断开链接
2.服务端一对多通信
1.服务端一对多通信
3.编码实现
4.TCP/UDP协议socket流程图
TCP协议是流式传出,多条消息之间没有边界,并且再操作系统层面还有许多优化算法(缓存等)
发送端:两条消息都很短,发送的时间间隔也非常短
接收端:多条消息由于没有及时接收,而在接收端的缓存端堆在一起导致的粘包
粘包问题出现的本质:就是TCP协议流式传输没有边界,设置每次接收的边界值即可解决
粘包产生的原因
不同局域网之间的网络最大带宽限制为15000字节;
而最大带宽取决于网络传输过程中,MTU的最小值
网络最大带宽限制(MTU)
发送方每次发送消息,先发送即将发送消息的字节长度,再发送内容
接收方每次先接收4个字节的长度,再将4字节长度转移称数值,然后再接收制定长度的字符,从而避免粘包
1.自定义协议
将字符串的字节编码长度转成4个字节
2.struct模块
3.自定义协议解决粘包问题代码(更新这张图片,struct模块还需要理解下)
解决TCP协议的粘包现象
5.TCP协议黏包现象
socket模块
网络编程_new
0 条评论
回复 删除
下一页