应用层: 应用层功能:规定应用程序的数据格式
传输层:tcp协议可靠传输 tcp协议不可靠传输 设定端口,端口即应用程序与网卡关联的编号。
网络层: ip协议
-
网络部分:标识子网 前3位
-
主机部分:标识主机 最后1位
数据链路层: 以太网的协议规定 帧 固定字节 head18个字节 data最长1500字 由mac地址广播查找 局域网内
物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0
工作在传输层的2个协议 TCP /udp
传输层要求每一个联网的程序
ip用来标识一个局域网中的电脑 端口用来标识某个应用程序 至此我们就可以准确的定位到某个计算机得某个程序
TCP 是一种可靠的传输协议
如何保证数据传输是完整的
三次握手:
可靠连接,三次握手时的确保证了数据传输是可靠的,但是后续有可能由于种种原因丢包导致数据不完整所以TCP的解决方案每次发送数据报 都需要对方返回一个确认信息如果一段时间对方没有返回就重复发送直到重试的次数超过某个指定的值 就判断连接已经丢失
TCP的优点:可以保证数据完整性
由于需要接收确认信息所以整体的传输效率较低
socket 模块用于处理网络传输相关的操作 其实就是封装了底层的TCP和UDP协议对外提供接口 默认使用TCP协议
import socket 创建socket对象soc = socket.socket() #cs架构的程序必然有客户端程序和服务器程序 先写服务器. soc.bind(('192.168.12.211',1688)) 作为服务器必须为socket 指定ip和端口 soc.listen() 开始监听 相当于饭店开门了 等顾客过来 client,address=soc.accept() 接收客户端的请求作为一个对象 data = client.recv(1024) 接收数据 print(data.decode('utf-8')) client.send('我是服务器'.encode(('utf-8')) 服务端的发送数据都是调用客户端发送的,服务器只是用来建立连接
收发数据都是bytes类型
关闭socket回收资源 socket.close() 客户端: import socket client =socket.socket() 创建对象 client.connect(('192.168.12.211',1688)) 连接服务器 做三次握手 收发数据 client.send('你好'.encode('utf-8')) data = client.recv(1024)
print(data.decode('utf-8')) 关闭连接 client.close() # 在做四次挥手操作