在sip消息中,我们经常会看到ack消息。一般在整个invite过程的最后,我们都能看到ack。但是,有时候我们看不到ack,传输过程中可能会丢失ack。如果我们没有最终的确认消息,如何保证完整可靠的传输?另外,我们在其他sip请求中似乎看不到ack,只支持invite。在本文的讨论中,作者特别使用点对点通话中的ack进行讨论,解惑,向大家学习。
01
确认在sip邀请中的作用
在前面的文章中,我们已经充分介绍了100 trying与可靠传输之间的关系,并花了大量篇幅讨论了100 trying的问题和细节。很多读者可能都想过,如果要完成一个完整可靠的传输,200 ok的传输也是需要保证的。如果200 ok的传输有问题,当然以后也不可能传输ack。所以在讨论ack之前,我们先讨论一下200 ok传输的简单流程。
当200 ok传输过程开始时,被叫方将启动另一个定时器来计时作为响应。如果对方在超时后没有收到200 ok,则意味着200 ok丢失,再次发送,直到主叫收到200 ok,然后发送ack请求,直到被叫方最终收到ack请求消息,从而保证可靠传输的完整完成。接下来我们讨论ack的作用。
02
对sip中ack的质疑
很多读者可能对ack有些怀疑。ack似乎不会自己启动任何进程,不像其他请求,比如invite,它可以启动一个请求。那么,ack是请求还是响应呢?根据rfc3261中请求和响应的定义,请求定义规定请求必须是方法类型,响应必须由状态码和响应短语组成。rfc 32617.1和7.2:中有这样的语法规范
请求:
请求行=方法服务点请求-uri服务点sip-版本crlf
回应:
状态-行=sip-版本服务点状态-代码服务点原因-短语crlf
以下示例简要说明了请求和响应之间的区别。所以从定义上来说,ack是一种请求方式。
但让读者困惑的是,如果是请求,请求至少需要启动流程才能执行任何动作,而ack好像不执行任何流程,ack好像只负责发送响应消息。其实ack只负责可靠传输的最终确认。所以不管读者有什么困惑,ack还是一个请求。
三
ack本身就是一个事务
刚才作者前面提到,ack的概念似乎和请求的要求有冲突。但是ack的语法符合请求的定义,所以是请求。作者希望读者能清楚这个概念。但是我们在讨论sip交易的时候,很多用户对于ack的使用非常困惑。为什么在invite例子中ack是一个独立的事务?要回答这个问题,需要根据rfc3261来解释ack。
根据sip transaction-17的定义,一个事务必须以请求开始,以一个或多个最终响应结束,中间可以支持多个临时响应。
具体来说,sip事务由单个请求和对以下内容的任何响应组成
该请求包括零个或多个临时响应
一个或多个最终响应。
但是在rfc3261-17中,transaction对transaction有特殊的描述。也许一般读者没有注意到这个解释的解释。其定义如下:
在请求是邀请的交易的情况下(称为邀请交易)
,如果响应是2xx,则确认不被视为事务的一部分。
按照这个定义,ack可以构成自己独立的事务。因此,如果满足上述条件(这里的响应是200 ok),那么确认本身就是一个事务。
如果读者能理解上面的解释,读者可能就彻底明白为什么ack是一个完整的呼叫流程中的独立事务了。
04
确认只能在邀请中看到
在sip通话中,为什么我们只能在invite请求中看到ack,而不能在其他请求中看到(比如bye)?
bye中没有确认:
现在,我们来解释一下为什么。其实道理也很简单。大多数情况下,在发出invite请求后,电话系统需要人工干预,如等待被叫方应答,而其他请求不需要人工干预,如bye和注册。
bye请求是一个没有确认的使用场景。如果一方挂机,不需要另一方人工干预,挂机方只需简单回复200 ok就可以实现整个流程的完整。
接下来,注册也是如此。如果uac需要向服务器发送注册请求,服务器只能根据注册请求的信息验证其身份,无需人工干预。当服务器验证uac信息时,它将自动返回最终响应消息。
但是如果是invite请求,实现流程就完全不同了。因为,如果呼叫者发起呼叫,对面的电话就会响起。在振铃时间内,如果被叫方不在工作台上,电话一直响,需要一定的时间等待被叫方接听并接听电话。此时,需要人工干预来完成可靠的传输过程。当然,用户可以通过一些软交换呼叫路由设置(sip头)添加alter-info: ring
接听),终端电话(set ring answer)也可以实现自动接听来电,这是另外一个话题。
通过上面的例子,我们可以看到,其他非invite都可以通过自动处理来实现,不需要人工干预。因此,在邀请中只有请求用确认回复,而在其他请求中没有请求用确认回复。
05
关于确认的其他讨论
由于篇幅所限,我没有充分讨论过ack的语法和完整细节,因为ack请求涉及很多不同的场景,灵活性很大。具体详见rfc3261。这里我们简单讨论一下结果中可能经常遇到的问题。
首先,说到sip transaction,我们需要注意的是,invite中的ack是一个独立的事务(正如我们刚才提到的)。
其次,在某些场景下可能会忽略ack,比如无状态服务器端的ack的处理机制。根据rfc3261 8.2.7,在无国籍uas,确认请求必须被忽略。这个一定要注意。
最后,ack的处理机制取决于最终响应的类型。当uac发起初始化请求时,uac需要向每个最终响应(300-699)发送一个响应消息,但是完全取决于response的响应类型。,处理该确认的机制在处理事务时遵循特定的规则。关于规则的定义,读者可以参考refc3261的17章。
06
摘要
在本文中,作者首先介绍了邀请呼叫过程中确认的组成和必要性,然后解释了确认是请求还是响应的疑问,然后讨论了确认未包含在非邀请请求中的原因,最后讨论了确认需要特别注意的其他几个方面。
通过以上讨论,作者为读者提供了对ack相对全面的认识。为了便于解释,作者在示例中只使用了点到点调用,并没有涉及多个代理之间的调用和多跳的处理。所以对ack过程的讨论是比较基础和简单的。如果讨论复杂的ack处理机制,还需要涉及sip的其他概念和内容,因为篇幅的原因,我们不会过多讨论。希望读者理解,以后章节我们会根据实际的内容安排更深入的讨论。
华为talkback强行关闭(怎么快速退出盲人模式)
华为作为国产机的龙头,不得不承认,它的实用性是有目共睹的,但使用华为手机难免会遇到一些棘手的问题,却无力解决。
不知道你有没有遇到过这样的问题。在使用华为手机时,有时会不经意间打开【对讲】功能(即屏幕阅读功能)。你可能尽力了,时间久了还是不知道怎么关掉。因此,为了节省你一点时间,你不要像小编那样举手惊慌。因此,在这里为大家。
方式一:利用【语音唤醒】功能
首先,在设置功能中打开语音唤醒功能。点击【设置】-【智能辅助】-【声控】-【唤醒功能】
然后设置唤醒词,分为两种,一种是默认的,一种是自定义的唤醒词。设置完毕后点击【继续】。
在手机桌面上,打开【语音助手】,阅读刚才定制的唤醒词,出现【对讲】界面后点击【确定】,然后使用【语音助手】阅读【闭屏阅读】。
方式二:长按电源键
长按电源按钮。重启和关机按钮出现后,您可以在屏幕底部看到一个提示,[用两个手指按住屏幕3秒钟以上,退出对讲]。
方式三:关闭talkback
相比以上两种方法,这种应该是比较好用的,而且这种方法也是最直接有效的方法,用来关闭小编!
打开手机中的【设置】-【智能辅助】-【辅助功能】。
最后,选择[听证]中的[回话]-[关闭按钮]。
好了,这是华为手机中关闭talkback的三种方法。如果你不知道怎么关掉,你的好处就来了。遇到过同样问题但没有解决的朋友可以试试。
backspace键失灵怎样恢复(backspace键锁住了怎样恢复)
很多朋友用电脑的时候,键盘突然失灵。不知道是什么原因造成的,也不知道怎么解决。本文将谈谈电脑键盘出现故障后的解决方案。
在谈解决方案之前,先说一下键盘的连接形式。早年键盘连接端口是ps/2,不支持热插拔功能,每次连接都要重启电脑。后来随着usb接口的出现,很多键盘都改成了这个接口。后来随着无线传输技术的成熟,出现了一种带蓝牙传输的无线键盘,每种键盘故障的原因和处理方法都不一样。然后,言归正传。
backspace键失灵怎样恢复
首先,检查键盘的电池电源
键盘损坏的概率很低。如果使用无线键盘,可以在发现键盘出现故障后,先摇摇鼠标。如果鼠标能正常使用,基本可以确定故障是键盘本身故障造成的。
如果发现键盘的电源指示灯熄灭,多半是因为无线键盘上安装的电池没电了。如果更换电池或给键盘充电,键盘将恢复正常。
第二,重启电脑
如果用的键盘是ps/2接口,鼠标能正常使用,多半是“未知电脑错误”造成的。因为键盘接口是ps/2类型,所以不支持热插拔。所以只能重启电脑恢复键盘的功能。
我们可以先关闭电脑,然后拔下键盘,检查ps/2接口是否有异物或弯曲现象,然后再插回去。开机后键盘会恢复正常。
第三,更换连接端口
如果使用的键盘是usb接口,不要在发现键盘出现故障后匆忙关闭电脑,因为usb接口支持热插拔功能,可以拔下键盘的usb线,尝试换成usb接口。
如果是使用寿命长的电脑,usb接口的电源会出现问题,导致键盘和usb接口之间传输的命令信号出现问题。更换插座后,键盘将恢复其功能。
题外话:但是需要注意的是,如果键盘出现故障,系统卡住,鼠标不能晃动,那么问题就不是键盘造成的,而是系统或者硬件造成的。最常见的问题,如系统故障、主板电容鼓包、硬盘坏轨等。一旦电脑出现问题,系统就会“死机”,键盘就会失灵。如果是这样的问题,个人用户无法自行修复,只能找售后维修。
布来亚克算什么档次(blackyak卖那么贵竟然是这个原因)
萧瑟属于韩国公司的品牌,定位为高档品牌。总体来说,blackyak还是挺不错的,喜欢登山攀岩的朋友都选择萧瑟作为品牌。
black yak的意思是黑牦牛,中文音译为萧瑟。成立于1973年,是一家研究和生产登山、野营和攀岩等户外服装和设备的国际专业户外运动用品品牌。牦牛是青藏高原特有的物种,生活在自然环境非常恶劣的高海拔地区。耐寒,善于负重,是古代藏族神话中氏族的守护神。在极端环境下,优秀的户外装备是生活的保障。因此,blackyak倡导“己所不欲,勿施于人”的客户理念,坚持“只为客户提供经过极端条件考验的产品”的质量理念,追求产品性能和功能的卓越,在户外活动中追求更贴近用户需求的设计。blackyak就像古代西藏神话中的氏族守护神和牦牛一样,默默陪伴着户外玩家,时刻守护着每一个户外登山探险爱好者。
以前在black yak的日常商务系列里穿软壳裤和速干裤。感觉不错,工作用的材料比较扎实,但是价格有点高。另外,启动的渠道不多,所以没有囤很多货。
户外用品总是装在简和楼里,只有一个塑料袋。
开箱
对于装备党来说,他们最喜欢厚厚的招牌。
衣服没有一些软壳那么纤细,也没有硬壳那么宽。
带有可拆卸和可折叠储物件的帽子。
它可以通过拉链和按扣安装和折叠,也可以根据需要拆卸或存放在衣服的衣领中。
因为定义为日常系列,所以不使用防水拉链,用挡风条来完成防风防水的功能。与防水拉链相比,普通拉链手感更好,上拉和下拉更顺畅,而拉链头制作精美,具有自动锁定功能。
blayak可以说是一个“logo”狂人。虽然logo低调的和衣服同色,但是它的号码遍布衣服,很惊艳。
双层设计,内侧有精致的羊毛,手感细腻温暖。
下摆有拉紧的缆绳,以避免强风。
windstopper是gore-tex公司开发的专业防风面料。采用超轻膜技术,不仅耐用透气,而且在服装的整个生命周期内完全防风。windstopper,中文直译为“挡风板”,不仅防风,而且透气度高,无论做什么都能让你保持干爽舒适。
衣服内侧设有多个拉链口袋,方便存放各种物品。内袋很大,所以放下我的坚果r1手机很容易。
除了拉链口袋,右边还有一个特殊的铅笔盒。
衣服下摆有专属的按扣。
外面的保暖手提袋有拉链,还可以存放各种物品;口袋上覆盖着天鹅绒,温暖舒适。
袖子设计有符合人体工程学的曲线,贴近身体,不干扰手臂的运动。
小臂上有一个“挡风板”的logo。
袖口调节钩环非常独特,在完全放松和收紧的地方采用两块,比平时的单片更加精致。但是logo狂人显然没有放弃钩环的位置,还是看到了一个logo.
上身
我175cm,68kg,175cm正好。服装设计简单干练,日常穿着搭配良好。
袖子是我最喜欢的地方,很多欧美品牌衣服的袖长简直是“疯了”,而blayak的版本对我们很友好,尺码很合适。
衣服的袖窿比较小,举臂不会把衣服拉得太高。
配色和品牌软壳裤一样,进出写字楼不会突兀。
实穿
春节期间,阴雨连绵。不出所料,windstopper只能短时间阻止小雨:
过了很久,雨开始变脏了.
就算是日常系列,这么优秀的户外品牌怎么能不在野外尝试呢?
帽子挺大的,但也是为光头设计的,戴头盔显然不能戴。
江南阴雨天,连东北的男人都怕三分的存在。黑牦牛在湿冷天气表现良好,有效阻挡冷风,体感温度相对较高。
牦牛这么贵。)" src=" http://p3.pstatp.com/large/pgc-image/rhwlocbilyzop"数据-原文=" http://p3.pstatp.com/large/pgc-image/rhwlocbilyzop"
透气性明显比硬壳好很多,休息时衣服内侧很干。
与背包接触的地方不像一些轻薄的材料那么容易起毛磨损,可以经受住军警背包的磨砺。
休息一下:
爬山过程中不可避免的会被树枝划伤,城市系列的衣服还是够结实的,没有发现破损。
裤子上有很多我称之为“粘鸡屎”的植物种子。
徒步旅行期间的温度约为5-8度。在这个温度下,衣服有足够的保温能力,领口敞开。虽然没有腋下拉链,但衣服内部几乎没有汗渍,显示出良好的排汗透气性能。
面料比较轻,感觉很贴合,方便走动。blayak相比于厚重坚硬的外壳,佩戴起来舒服多了,面料摩擦也不会发出声音,可以安静的听着风声、虫鸣、鸟鸣。
总结
优点:
1.防风效果好,能在短时间内防止小雨。
2.面料柔软,安静,透气性高。
3.剪裁设计简单,收纳包多,能适应城市、户外等各种环境和需求。
建议:
1.加个隐形左胸包。
2.左右内口袋互换,因为不方便把钱包放在左口袋。大部分人习惯把钱包、笔放在左边,手机、地图等东西放在右边(参考西装的插兜设计)。