VoLTE学习笔记杂谈(10)-承载传输协议初体验(TCP篇)


今年是北京邮电大学,这所中国信息科技产业的“黄埔军校”从建校之初至今不断引领祖国信息化变革的甲子之庆。这所坐落于北京海淀区学院路上,以信息科技为特色,工学门类为主体,管理学、文学、理学等多个学科门类协调发展的全国重点大学为我国培养了一代又一代优秀的信息以及高新科技人才。祖国的邮电事业从军工转民用,天南海北光缆的拉通,从古人只靠明月寄相思到实现千里共传音,有着他们那一辈以及我们这一辈几代人,万千人,太多艰辛的努力与无悔的付出,此篇文章旨在以最朴素的技术学习笔记方式,向北邮60岁诞祝贺,向邮电人致敬!让我们重温那些年轻的岁月,鲜活的面容。

TCP传输协议与VoLTE到底有什么关系? 在VoLTE引入后,对于业务层面传输层协议进行了相应的甄选用以进行对话音业务的承载。目前主流就是TCP/UDP/RTP这些协议标准,一般TCP针对对于时延不太敏感的数据业务,而UDP/RTP这样的协议则更适合承载对时延比较敏感的话音业务。涉及到IMS的SIP/SDP协议,既可以由TCP协议来承载,也可以由UDP协议来承载。

TCP协议:

Transmission Control Protocol(TCP)早在80年代初期已经完整提出。最早的需要来源于军方对于计算机通信网络的稳定性以及可靠性,后来越来越多的被使用在了民用以及政府的计算机通信网络中。TCP协议是一种可信的,面向连接的,端到端的适用于分层架构设计的协议。其本身可以支持多种网络应用。理论上,TCP协议适合不同属性网络的互联通信,例如有线网络与分组网或者交换网之间,所以TCP的设计目标是可以在不同的因特网使得不同进程的通信得以保证,在不同的网络下的主机间的通信得以保证。

为了在网络环境中提供可靠,安全的连接服务,TCP协议需要能够实现如下功能特点

1、 基本数据传输:TCP将字节数据进行分段传输,并却可以适时阻止以及继续传输数据,同时还要确保用户数据被完成传输;

2、 可靠性:通过每个字节进行序号标识以及设置应答机制(ACK),TCP需要确保数据能够从损坏、丢失、复制以及乱序传输中恢复。如果超时后仍没有收到ACK,数据需要进行重传。在接收端,序号被用来修复乱序传输的片段以及重复传输副本。接收端进行校验,并且将损毁片段予以丢弃。这种机制理论上确保传输错误都能被及时修正;

3、 流控:TCP提供了一种基于ACK应答方式的“窗口”指示,该窗口指示下一次接收端能够接收的数据大小,也就意味着发送端下一次可发送的字节大小;

4、 复用:为了使单一主机提供多进程的TCP服务,TCP可以支持该主机一系列的地址或者端口号,将因特网通信层与网络和主机的地址级联就形成了socket,一对socket唯一标识了一个连接,这也意味着单一的socket可以同时被多个连接使用;对于经常使用的服务可以将某些socket通过固定端口的方式进行固化,而其他的一些进程的端口地址则可以通过动态机制建立获取;

5、 连接:为了保持传输可靠性以及流控机制,TCP需要为每一个数据流建立以及维护一系列状态信息,这些信息包括socket,序列号,窗大小,这些信息的结合就叫做一个连接。一个连接被唯一的一对socket标识。当两个进程需要通信时,它们的TCP必须先各自通过初始化状态信息建议一个连接。当通信完成之后,连接被终止或者关闭一边释放资源给其他用户使用。由于连接由相互不可信的主机和相互不可靠的因特网通信系统建立,结合时钟序列号的握手机制被用来避免连接的错误建立。

6、 优先级以及安全:TCP用户需要指明他们用户的安全级别和优先级。如果这些特性不被指明,那么使用默认设置。

对于数据传输,TCP协议提供了两种方法,一种通过push flag(推送标签)的方式设置push function(推送功能),一种是传输紧急数据。当push function发送时,发端将所有未发送数据全部发送,而接收端一旦收到push flag,则不再继续等待从发端来的数据,而将现有数据传递至接收进程。推送进程以及推送标签的目的就是将发端数据推送至接收端,它并不提供记录服务。TCP的另外一种传输数据的方法是发送紧急数据,虽然TCP协议对于接收端收到紧急数据做何处理没有严格定义,但一般接收进程都会对于紧急扎数据进行快速处理。

TCP协议有几个鲜明的特点,例如控制承载不分离,三次握手协议,建立同步等等。TCP协议通过一些控制字段进行同步与响应,例如在连接建立或者初始化过程中,两个TCP必须与彼此的初始序列号同步,主要通过交换控制比特“SYN”以及初始序列号来实现。所谓的三次握手本质是四次,只不过接收端可将ACK消息以及初始化的SYN捆绑一起发送,这样双方在数据传输前就进行了同步。同时,由于TCP协议并不与时钟进行同步,因此三次握手保障机制也通过“接收端请求发送端校验第一次发送的SYN”的方式确保了TCP双方的同步。另外,TCP协议通过设置MSL(Maximum Segment Lifetime)与2^32个循环序列号的方式(采样频率恒定)确保序列传输中的唯一性。例如在第一次传送数据后等待响应的阶段,下一次发送数据的序列号都是以增量的方式进行发送,直到收到响应。

TCP协议一般与IP协议捆绑使用,也是目前互联网中最为重要的协议族之一。TCP协议是OSI架构中传输层的协议,而IP协议是OSI架构中网络层的协议,相对于电信网络中控制与承载分离的协议设计架构(控制面,用户面),TCP/IP协议并不将控制面与数据业务面进行逻辑分离,相反通过一些包头(header)的方式封装控制字段。在移动互联网中(从网络架构角度可以认为就是电信基础网络承载互联网),TCP/IP被用作用户面的协议,电信AS/NAS协议栈打通了电信控制面的路由,而具体对于数据业务传输过程中的控制,则由TCP/IP,或者UDP,RTP等其他协议进行参与。TCP协议与IP协议像一对优势互补的“合作伙伴”,IP协议提供了点到点的服务(就如同投递员投递信件一样,投到准确的每家每户,因此门牌号也就是IP地址需要唯一的标识),但是IP协议也具有其局限性,即其不可靠性,不能确保IP数据报成功地到达目的地(这就好比投递员不负责用户是否能够成功接收到邮件,只负责投递)。同时,还具有无连接的缺点,即数据报的的接收不按照次序。这些局限性IP层不负责解决,而是由其上层TCP进行解决,因此可以说TCP提供了流程上的保障,提供了所谓端到端的服务,二者结合一起的协议簇,对于数据传递的准确性提供了保障,但是相应的开销就是时延。

TCP协议中通过一些基本特性对数据包传输的准确性以及及时性进行保证:

确认和超时:TCP使用确认(ACK)机制以及超时重传机制来确保每一个分片的成功传送。这里有点像LTE在做初始RRC连接时发送随机接入的msg1(Random access request),如果在一定时间间隔内(这里是由backoff指定的一个随机变量)没有收到msg2(random access response,RAR),那么会继续发送msg1,直到达到最大发送次数。而TCP协议这里却没有最大发送次数的限制,也就意味着一旦网络中出现问题,发端TCP会不断的进行重传。因此将超时重传间隔设置很小,可以导致对服务器的信令冲击。由于在数据传送过程中可能经历不同的网络,因此重传超时需要动态的设置。需要注意的是,RTO的设置(retransmission timeout)至少应该大于RTT(Round Trip Time)。值得一提的是,在TCP与上层协议的控制信息交互中,对于不同的上层用户控制命令中带的timeout的参数的值,作用意义也都有不同,而且在TCP的不同状态中会随之相应更新。例如在OPEN指令中如果携带timeout,意味着如果在该timeout之内的发端没有将数据全部成功发送到收端,那么TCP就会终止该连接,该值默认为5分钟;在SEND指令中如果携带timeout,那么当前的timeout就被替换更新了。一般来说timeout有三种,用户超时(user timeout),重传超时(retransmission timeout)和时间等待超时(time-waittimeout,该值用于CLOSING流程,设置值为2MSL,MSL即最大片段生命周期,rfc793协议规定为经验值2分钟),除了重传超时的处理不同外,用户超时和时间等待超时后,上层对于TCP的处理是一样的,即删除已建立的TCP,进入CLOSED状态,并反馈上层。

窗口:这里的窗口有三种,发送窗(sendwindow),接收窗(receive window),片段窗(segment window)。

发送窗:表示着远端TCP能够接收的数据序列号的大小。一般通过数据接收过程从远端TCP收到的指示。发送窗其实是本地和远端TCP相交互的信息,通过分片窗口大小进行本地更新。当发送窗设置为0时,本地发端TCP也应至少发送一个字节的新数据,并且发端TCP应该周期性的重发至收端TCP,一般周期间隔推荐为2分钟,这样的好处是无论任一端TCP窗口为0,当重新打开窗口(大于0)的时候,能够可靠的将该设置通知另一端。

接收窗:表示本地(收端)TCP可以接收的序列号。如果收到的分片序号等同于在窗内的序号,本地TCP认为收到正确数据或者控制消息,否则,则认为是重传序列予以丢弃。当接收窗口为0的时候,除了ACK分片外,其他的数据分片都不被接收。因此,对于TCP可以存在0接收窗口的情况,这样其可以发送数据的同时只接受ACK。另外,即使接收窗为0,收端TCP还是可以对任意的分片中所含RST和URG字段进行处理。

分片窗口:分片窗口是传送分片中的一个域,通过该域的值来传递远端TCP的接收窗口以供给本地发端TCP窗口进行相应更新。

面向连接(同步):TCP是一种面向连接的协议,这也同时确保通信双方的通信和数据传输是一种同步双工机制。连接由用户OPEN指令调用建立,同时TCP提供用户建立连接的名字以供用户后续引用。OPEN调用指出了该连接是主动建立的或者被动等待建立。主动建立是高层通过active OPEN指令触发,而被动连接则是通过收到分片中所携带SYN字段,并通过后续的握手机制来建立。被动OPEN(passive OPEN)要求意味着进程可以接受来访建立请求,一般passive OPEN意味着可以接受任意的远端连接建立请求。在这种情况下,全“0”配置的外部socket表征未明确的socket,这种未明确的socket设置只允许应用在passive OPEN。窗口的设计需要进行平衡,指示较大窗口鼓励更多的数据传输,一旦超过其接收能力,会导致重传从而网络以及TCP的负荷。指示较小的窗口则会对数据进行过多的分片,由于过多的握手机制导致传输时延的增加。

状态转换:TCP含有多种状态,例如LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLIASHED,FIN-WAIT-2,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT,CLOSED,这些状态之间的转换通过用户调用的事件(OPEN,SEND,RECEIVE,CLOSE,ABORT,STATUS),接收到携带标志位(SYN,ACK,RST,FIN)的分片和超时进行相互转化,详见RFC 793。

与上层协议接口的异步机制:TCP与上层进程通信可以采用异步机制,当TCP通知上层用户时,确定的信息就传递到用户。这些信息主要是报错机制或者进程事件完成标志(例如SEND或者RECEIVE)。

PUSH Flag与Urgent FlagPUSHFlag与Urgent Flag的作用相似,是分片携带中的一个标识字段,如果收端读取到该字段,则无需等待是否到达了buffer的边界,而将buffer里面存在的数据同时上传。如果发端触发了PUSH Function,则立即将发端buffer里面未发送的数据立即发出。Urgent Flag是通过分片中的Urgent Pointer来传递信息的,通知收端在Urgent Pointer之前的数据还没有完全接收,收端的Urgent Flag(on)通知收端上层进程进入紧急模式(Urgent Mode),意味着额外的紧急数据等待接收,如果Urgent Flag置为off,则向上层返回当前所有紧急数据,至于后续连续序号的非紧急数据则不会在同一个buffer中被传递给上层进程(除非buffer中明确划分了边界)。PUSH Flag与Urgent Flag是TCP中对于向上层推送数据的一种特殊处理方式,即确定了那些数据无需等待,可以优先推送给用户,PUSH Flag对于分片中的数据进行了标识推送,而Urgent Flag则对可能跨分片的数据进行标识推送。

TCP的crash保护机制:对于TCP本地进程的崩溃(crash),一般TCP不提供记忆机制,即本地TCP并不记得之前发送过什么,以及发送序号是什么,而是通过一种“半开启连接发现”机制来进行本地crash之后的进程回复,其实与远端的信息交互触发本地的RESET机制,从而使得本地与远端进行重新同步,详见RFC 793。

梦绕神州路,怅秋风,连营画角,故宫离黍。

  底事昆仑倾砥柱,九地黄流乱注?聚万落千村狐兔。

  天意从来高难问,况人情易老悲难诉。

  更南浦,送君去。

  凉生柳岸催残暑,耿斜河,疏星淡月,断云微度。

  万里江山知何处,回首对床夜语。雁不到,书成谁与?

  目尽青天怀今古,肯儿曹恩怨相尔汝!

  君且去,休回顾。

张阳,英国布鲁内尔大学(Brunel Univ.)设计与工程学院电子与计算机工程博士,高级工程师,博士阶段主要进行LTE物理层、处理优化算法研究。主要从事TD-LTE/TD-SCDMA网络优化工作。曾参加中国移动无线网络优化技术高级培训,荣获优秀学员称号,参加中国移动LTE维护优化技能竞赛,荣获一等奖。长期关注跟踪一线实际优化工作,具有丰富的理论基础及实践经验。在国内外通信期刊发表学术论文数十篇,并合著有《TD-LTE无线网络优化与应用》一书。

网优小谈 是业内原创为主的通信技术交流平台,欢迎不同意见、新观点或建议。

支持原创,分享智慧!

投稿请发至:wirelessren@163.com

(0)

相关推荐

  • 工业RFID读写器中的modbus通信协议, RTU/ ASCII/ TCP

    Modbus是一种应用层消息传输协议,通过此协议,控制器之间.控制器经由网络(如以太网)和其他设备之间可以通信,在通信工作中,每个命令都会指定目的地址,虽然非通信设备也可能收到命令消息,但只有地址匹配 ...

  • 超赞!华为工程师都爱不释手的两份图解网络,助你圆满大厂梦

    写在前面 信息通信社会这个词俨然已经是现代社会的一个代名词.人们可以使用手机等信息终端随时随地进行交流,而这种环境正是要依赖于网络才得以实现.在这些网络当中,目前使用最为广泛的协议就是TCP/IP. ...

  • TCP/IP是什么意思?

    就像人类的语言一样,要使计算机连成的网络能够互通信息,需要有一组共同遵守的通信标准,这就是网络协议,不同的计算机之间必须使用相同的通讯协议才能进行通信.在Internet中TCP/IP协议是使用最为广 ...

  • VoLTE学习笔记杂谈(12)-承载传输协议初体验(RTP&RTCP篇)

    RTP协议作为一种实时传输协议,主要提供类似音频和视频这样的端到端的实时数据业务.RTP虽然和UDP同属于传输层协议,而一般典型的上层应用依靠二者协同提供传输协议的功能,例如处于RTP之下的UDP协议 ...

  • VoLTE学习笔记杂谈(11)-承载传输协议初体验(UDP篇)

    机械师是小编比较喜欢的一部影片,风格冷峻.镜头犀利,主要是主人公的演绎,艺高胆大,处理问题冷静,个性极其鲜明,好像"专业"内没有什么难事.这篇UDP协议解读就好像主人公所面对的一个 ...

  • VoLTE学习笔记杂谈(5)-被叫信令流程

    唐代大诗人李白曾经道过行路难,'行路难!行路难!多歧路,今安在?'在学习VoLTE这个新的承载话音技术上,面对的困难与茫然某种程度上并不亚于唐朝诗仙所面临的困惑,但是男子汉需要勇气和毅力去克服人生中存 ...

  • VoLTE学习笔记杂谈(4)-主叫信令流程

    登高,坡顶自有青云:倘若正有一朵白云闪耀,那就望云爬坡吧! 注册的目的是信息登记,并为后续的主被叫提前进行了相应的寻址.例如,主叫流程中信令所经历的网元路径就是在注册阶段被分配好的,并在该UE注册期间 ...

  • VoLTE学习笔记杂谈(3) 注册信令流程

    对于一个网络工程师而言,解读电信网络的信令是分析定位网络问题的有效手段之一.所谓兵马未动,粮草先行,网络信令就是先于业务流程的"粮草",当信令流程先打通时,才能保障后续业务流程的通 ...

  • VoLTE学习笔记杂谈(连载1)

    俗话说的好,一入豪门深似海,对于VoLTE这个新技术领域的学习认知也一样,相比传统的电信技术,它糅合了大量计算机互联网的理念,正可谓吸毒毁一生,学习VoLTE毁三代.但是任何复杂.先进的技术都是人类制 ...

  • VoLTE学习笔记杂谈(9)-现网测试案例分析

    提到甜点,大家第一时间想到的应该都是法国吧.德国美食在人们心中往往都是一副硬派的形象,肥美的烤猪肘子.烤香肠,再搭配上麦芽味醇厚的自酿黑啤酒,简直就是完美的享受.但是德国这个国家粗中有细,把严谨的做 ...

  • VoLTE学习笔记杂谈(8)-那些年与VoLTE相关的参数

    明天起,北京市将实施单双号限行临时措施,交管部门将最大限度将警力投入路面,严查违反单双号限行.同时,全市道路上的高清摄像头也将调整记录违法的模式,对违反限行的车辆拍照.限行的规则是单日单号行,双日双号 ...

  • VoLTE学习笔记杂谈(7)-eSRVCC篇

    今年是中国人民抗日战争暨世界反法西斯战争胜利70周年,这两天以来,天安门城楼前东西两侧竖起了红色围挡, 开始搭建93阅兵式临时观礼台.日本这个国家,在很多国人眼中,所看见的只有侵华屠杀,但日本却是当今 ...