人生道路上:希望自己做到保持简单,保持学习,保持严谨!
第一:计算机通信原理
1.OSI七层模型
应用层:网络服务与最终用户的一个接口。
表示层:数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、DECOIC、加密格式等
会话层:建立、管理、终止会话。(在五层模型里面已经合并到了应用层)对应主机进程,指本地主机与远程主机正在进行的会话
传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6)
数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验 [2] 等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层:建立、维护、断开物理连接。
2.客户端与服务端通信原理
第一步:B机器与A机器建立连接,A机器上有很多服务,故要指明具体连接哪一个服务(ip+port,ip相当于总机,port相当于分机号)
第二步:访问服务
第三步:服务响应客户端请求(同理,也要ip+port,指明回给客户端哪一个服务)
第二:socket介绍
1.实现一个简单的socket(伪代码)
第一步:
Socket socket = getSocket(type = "TCP") #设定好协议类型
第二步:
connect(socket, address = "1.2.3.4", port = "80") #连接远程机器
第三步:
send(socket, "Hello, world!") #发送消息
第四步:
close(socket) #关闭连接
2.建立客户端和服务端通信
2.1.客户端(伪代码)
import socket
socket.TCP/IP #指定协议类型
connect(a.ip,a.port) #建立连接
socket.send(hello world!) #发送请求
socket.recv() #接收数据
socket.close() #关闭连接
2.2.服务端(伪代码)
import socket
socket.TCP/IP #声明协议类型
listen(A.ip,A.port) #在这个接口监听,一般多个网卡,故也要指定网卡,要是没有可默认:0.0.0.0
waiting() #等数据请求过来
socket.recv() #接收数据
socket.send() # 返回数据
socket.close() #关闭连接,也可以不关闭,服务端可以等很多人来连接
第三:实现socket简单实例
1.客户端:
import socket
# 客户端
client = socket.socket() # 声明socket类型,同时生成socket连接对象
client.connect(('localhost', 6969))
client.send(b"hello czy!")
data = client.recv(1024) # 接收回应数据
print('接受到的数据为:', data)
client.close()
"""
执行结果:
接受到的数据为: b'okokokok'
"""
2.服务端:
import socket
# 服务端
server = socket.socket()
server.bind(('localhost', 6969)) # 绑定要监听的端口
server.listen()
print("我要开始等待对方请求了")
# conn就是客户端连接过来的时候,服务器为其生成的一个连接实例
conn, address = server.accept() # 等电话打进来
print(conn, address)
print("请求来了")
data = conn.recv(1024)
print('客户端请求数据为:', data)
conn.send(b"okokokok")
"""
执行结果:
我要开始等待对方请求了
<socket.socket fd=648, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 10068)> ('127.0.0.1', 10068)
请求来了
客户端请求数据为: b'hello czy!'
"""