IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP与移动性 -> 正文阅读

[网络协议]TCP与移动性

又跟朋友聊TCP,这次说到了移动性。

一个TCP连接是绑定五元组的,该连接的生命周期呢,五元组不可改变,如果IP变化了,需要重新建立一个新的连接,这是众所周知的。

如果在TCP连接上直接构建应用,一旦IP地址发生了变化,该应用必须自己处理连接的重建。若希望应用无感于IP地址的改变,常见的方法是增加一个会话层。很早以前我做Open-V-P-N的时候,就是采用了这个方法,在协议头里增加了一个全局唯一的SID,用于识别连接。现在QUIC协议也是这样处理的。

还有别的方案吗?

还有一种扁平的方案,将IP地址的变化直接纳入TCP连接管理中,在TCP内部处理IP地址的变化,这样TCP就天然支持移动性了。

按照对端到端的理解,“端”是一个物理节点,而IP地址只表示一个位置,它不能作为“端”的唯一标识,“端”可以被配置不同的IP地址,比如手机,接入WI-FI和接入5G时IP地址显然不同。LISP就是将标识属性从位置中分离了出来。

这并不是说TCP/IP设计的不好,TCP/IP从来不是被设计的,而是进化出来的,TCP/IP的端到端原则保持一个足够简单的核,这就可以经得起迭代了。

在1970年代,根本没有移动IP的需求,等到有需求的时候再支持它就好了。现在移动互联网时代,需求来了。

增加一个会话层理论上是不错的选择,但这是设计出来的,凡设计出来的东西都很难无缝切入现实。假设需要为一个TCP应用支持移动性。为了增加那个会话层,必须修改应用,这并不现实,没人想改既有的代码。

增加一个层属于过度设计了。用IP地址标识一个“端”是时代的局限,破除这个局限甚至不需要LISP。既然是TCP的问题,迭代它自己就是了。

目前TCP协议分为两个子协议,连接协议和传输协议,连接协议目前包括三次握手和四次挥手,再加个地址变更就即可。和SYN,FIN等连接标志位一样,增加一个ALTER标志位就好了。在一个TCP ALTER报文中,用通告窗口和紧急指针存放旧IP地址,用option存放也可以。

连接查找逻辑也需要适当修改。现在是用五元组查找socket,为了支持ALTER协议,当收到携带ALTER标志位的报文后,需要用旧IP地址作为源IP来查找socket,然后用新IP地址更新连接五元组。

更新了TCP之后,应用无需任何改变就可以支持移动性。总有人说TCP实现在内核中不好更新,我倒觉得这不是太大的问题。

首先,需要支持移动性的“端”目前基本都是Android或iOS,这种系统更新频度早就到了让人无法忍受的地步,某次更新时多一次内核的更新也不多。其次,对于服务端,目前有很多Live patch方案。

今天又聊到了老话题,TCP对移动性的支持。思考了一番,为了增加一个层而增加一个层可能涉嫌过度设计,如果返璞归真,可能只需要抽掉原始实现的那根鱼腥线就行了,这种方式并非仅仅直接,更重要的是它悄无声息,完全透明。反之,增加一个层,无论如何都要大动干戈,适合尚未上线时的设计,不适合迭代。写点感想。

浙江温州皮鞋湿,下雨进水不会胖。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:14:59  更:2022-05-10 12:15:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:36:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码