RFC856:TELNET二进制传输协议详解与实现

需积分: 10 0 下载量 168 浏览量 更新于2024-09-09 收藏 51KB DOC 举报
RFC856,全称为"TELNET BINARY TRANSMISSION",是ARPA互联网社区制定的一个标准,规定了在该网络上进行二进制数据传输的方法。这份文档由J. Postel和J. Reynolds在1983年发布,旨在解决在早期文本协议的TELNET中处理非文本数据的挑战,如二进制图像、二进制文件等。 核心内容包括以下几个部分: 1. **命令和代码**: - IAC (Interpret As Command) 是一个特殊的控制字符,用于指示后续的命令。其中,`IAC WILL TRANSMIT-BINARY` 表示请求发送方开启二进制传输模式,而 `IAC WON'T TRANSMIT-BINARY` 则表示请求恢复标准的NVT ASCII解析。 - `IAC DOT TRANSMIT-BINARY` 和 `IAC DON'T TRANSMIT-BINARY` 分别用于确认当前是否正在进行二进制传输,前者用于要求以二进制形式发送数据,后者则可能要求切换回ASCII模式。 2. **命令意义**: - 发送 `IAC WILL TRANSMIT-BINARY` 表明请求方希望接收的数据将以二进制方式解读,而非默认的ASCII格式。 - `IAC WON'T TRANSMIT-BINARY` 或 `IAC DON'T TRANSMIT-BINARY` 在特定情况下,用于通知对方恢复标准的文本传输,避免误解或错误解释非文本数据。 3. **默认情况**: - 连接默认处于“won't transmit-binary”状态,即数据以ASCII格式解析。除非双方协商一致,否则任何一方发送 `IAC WILL TRANSMIT-BINARY` 都会被视为请求开启二进制模式,反之则要求恢复ASCII解析。 4. **选项出现的原因**: - 随着互联网应用的发展,有时需要在TELNET会话中传输二进制数据,如图片、视频等,传统的ASCII编码无法有效处理这些非文本内容,因此引入了二进制传输选项来扩展协议功能。 5. **实现问题**: - 实现 RFC856 的关键在于确保双方客户端和服务器之间的通信兼容性,包括正确识别和响应控制字符,以及在适当的时候转换数据解析模式。 这份RFC对TELNET协议的扩展提供了重要支持,使得网络设备和应用程序能够更有效地处理各种类型的数据传输,特别是在那些需要精确和无损传输二进制内容的场景中。翻译版本由顾国飞完成,可供网络管理员和开发人员参考,以确保在实际网络环境中正确地应用和管理二进制传输功能。

import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split # 读取训练集和测试集数据 train_data = pd.read_csv(r'C:\ADULT\Titanic\train.csv') test_data = pd.read_csv(r'C:\ADULT\Titanic\test.csv') # 统计训练集和测试集缺失值数目 print(train_data.isnull().sum()) print(test_data.isnull().sum()) # 处理 Age, Fare 和 Embarked 缺失值 most_lists = ['Age', 'Fare', 'Embarked'] for col in most_lists: train_data[col] = train_data[col].fillna(train_data[col].mode()[0]) test_data[col] = test_data[col].fillna(test_data[col].mode()[0]) # 拆分 X, Y 数据并将分类变量 one-hot 编码 y_train_data = train_data['Survived'] features = ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare', 'Sex', 'Embarked'] X_train_data = pd.get_dummies(train_data[features]) X_test_data = pd.get_dummies(test_data[features]) # 合并训练集 Y 和 X 数据,并创建乘客信息分类变量 train_data_selected = pd.concat([y_train_data, X_train_data], axis=1) print(train_data_selected) cate_features = ['Pclass', 'SibSp', 'Parch', 'Sex', 'Embarked', 'Age_category', 'Fare_category'] train_data['Age_category'] = pd.cut(train_data.Fare, bins=range(0, 100, 10)).astype(str) train_data['Fare_category'] = pd.cut(train_data.Fare, bins=list(range(-20, 110, 20)) + [800]).astype(str) print(train_data) # 统计各分类变量的分布并作出可视化呈现 plt.figure(figsize=(18, 16)) plt.subplots_adjust(hspace=0.3, wspace=0.3) for i, cate_feature in enumerate(cate_features): plt.subplot(7, 2, 2 * i + 1) sns.histplot(x=cate_feature, data=train_data, stat="density") plt.xlabel(cate_feature) plt.ylabel('Density') plt.subplot(7, 2, 2 * i + 2) sns.lineplot(x=cate_feature, y='Survived', data=train_data) plt.xlabel(cate_feature) plt.ylabel('Survived') plt.show() # 绘制点状的相关系数热图 plt.figure(figsize=(12, 8)) sns.heatmap(train_data_selected.corr(), vmin=-1, vmax=1, annot=True) plt.show() sourceRow = 891 output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions}) output.head() # 保存结果 output.to_csv('gender_submission.csv', index=False) print(output) train_X, test_X, train_y, test_y = train_test_split(X_train_data, y_train_data, train_size=0.8, random_state=42) print("随机森林分类结果") y_pred_train1 = train_data.predict(train_X) y_pred_test1 = train_data.predict(test_X) accuracy_train1 = accuracy_score(train_y, y_pred_train1) accuracy_test1 = accuracy_score(test_y, y_pred_test1) print("训练集——随机森林分类器准确率为:", accuracy_train1) print("测试集——随机森林分类器准确率为:", accuracy_train1)

2023-06-07 上传
2023-05-29 上传
2023-06-09 上传