1、OSI七层模型
- 应用层(http、ftp)
- 表示层
- 会话层
- 传输层(TCP、UDP)
- 端口通信:0-1023-65535
- 网络层(IP协议)
- IP地址(32位:4段十进制)
- 子网掩码(32位:网络位1、主机位0)
- 数据链路层(以太网协议enternet)
- head(发送者mac6字节+接受者mac6字节+数据类型6字节)
- data(46字节~1500字节)
- 广播
- 物理层(01010101)
2、socket
- TCP(数据流)
-
服务端
sever = socket(AF_INET, SOCK_STREAM)
sever.bind((IP, port))
sever.listen(5)
conn, addr = sever.accept()
conn.recv(1024)
conn.send(str.encode('utf-8'))
conn.close()
sever.close()
-
客户端
client = socket(AF_INET, SOCK_STREAM)
client.connect((IP, port))
client.send(str.encode('utf-8'))
client.recv(1024)
client.close()
-
- UDP(数据报)
- 服务端
sever = socket(AF_INET, SOCK_DGRAM)
sever.bind((IP,port_sever))
msg, addr = sever.recvfrom(1024)
sever.sendto(msg,(IP,port_client))
sever.close()
- 客户端
client = socket(AF_INET,SOCK_DGRAM)
client.bind((IP,port_sever))
client.sendto(msg,(IP,port_client))
msg, addr = client.recvfrom(1024)
client.close()
- 服务端
3、粘包
- 原因
- 用户态
分包
- 内核态
粘包(仅TCP)
- 用户态
- 解决
- 规范传输协议
- 加head
struct模块
bytes = struct.pack('i',int)
int = struct.unpack('i',bytes)