C cenaly.com
להתחיל בחינם

השיחה מתנתקת: לאחר 30 שניות, לאחר 15–30 דקות

ניתוק בשנייה ה-32 (אין ACK), לאחר 15–30 דקות (טיימרים של הסשן), שיחות נכנסות עובדות רק בדקות הראשונות לאחר ההפעלה — מנגנון ופתרון

On this page 21

השיחה מתנתקת: אחרי 30 שניות, אחרי 15–30 דקות

ניתוק „בדיוק אחרי כך וכך“ הוא לא קשר גרוע, אלא טיימר: אחד הצדדים חיכה למשהו, לא קיבל אותו וניתק את השיחה ביושר. לכן לפי זמן הניתוק אפשר לזהות את הסיבה כמעט בוודאות: ~32 שניות — אישור תחילת השיחה לא הגיע; ~15 או ~30 דקות — חידוש השיחה לא עבר; שיחות נכנסות עובדות רק בדקות הראשונות — הנתב סגר את הדרך לטלפון. להלן המנגנון של כל מקרה במילים ומה לעשות.

הגדרה כללית של טלפונים נמצאת בסקירה „הגדרת טלפוני SIP“, שאר הסימפטומים באבחון לפי סימפטומים.

קודם כל לבדוק בממשק הניהול#

  1. יומן שיחות — פתחו את השיחה שהתנתקה. „שיחה“ תציג את משך השיחה בדיוק של שנייה: 0:31–0:33 — כתב היד של המקרה הראשון, בסביבות 15:00 או 29:30 — של השני. שם גם „מי ניתק“ (המתקשר, העובד או מרכזיית ה-VoIP) ו**„סיבת הניתוק“**.
  2. בדיקת הד *43, אבל ארוכה: חייגו והחזיקו את השפופרת 45 שניות. *43 היא גם שיחה, ואישור תחילת השיחה בה עובר את אותו מסלול. התנתקה בשנייה ה-32 — תקלה בין הטלפון למרכזיית ה-VoIP; החזיקה — הטלפון והרשת של העסק תקינים, חפשו הלאה (שיחות חוץ, ספק התקשורת).
  3. כרטיס המכשיר → „תקינות“: כשלים חוזרים של „אין קשר“ — הנתב סוגר את הדרך חזרה לטלפון (ראו המקרה השלישי).
  4. „להתקשר למכשיר“ בכרטיס, 10 דקות אחרי השיחה האחרונה: צלצל — הדרך לטלפון חיה; שותק למרות שנקודה ירוקה — זה הנתב.
  5. SIP-טרייס במרכזיית VoIP ייעודית: 200 OK חוזר בלי ACK, ואחריו BYE — המקרה הראשון; BYE אחרי INVITE או UPDATE באמצע השיחה — השני.

ניתוק אחרי 30–32 שניות#

למה זה קורה#

תחילת השיחה היא לחיצת יד של שלוש הודעות: „מתקשר“ (INVITE) — „ענו“ (200 OK) — „הבנתי, מתחילים“ (ACK). הצד שענה חוזר על ה„ענו“ שלו עד שיקבל „הבנתי“. כלל בפרוטוקול SIP: אם ה„הבנתי“ לא הגיע תוך 64 × T1 = 64 × 0.5 שניות = 32 שניות, יש לסיים את השיחה. הקול כבר עובר — לכן חצי דקה הכול תקין, ואז השיחה נופלת מעצמה.

אם כך, ניתוק בשנייה ה-32 אומר: אישור ה-ACK הולך לאיבוד איפשהו. למה — מהשכיח לנדיר:

  1. SIP ALG בנתב. הנתב משכתב כתובות בתוך הודעות השירות, והאישור יוצא למקום הלא נכון או נזרק. הדבר הראשון שצריך לבדוק תמיד.
  2. חבילה גדולה מדי. אם בטלפון מופעלים עשרות קודקים, תיאור השיחה מתנפח ליותר מ-~1300 בתים, וב-UDP הוא יוצא „בחתיכות“ (פרגמנטים). נתבים וחומות אש רבים זורקים פרגמנטים בשקט — וההודעה הזאת בדיוק הולכת לאיבוד. פרוטוקול SIP דורש במפורש להודעות כאלה לעבור ל-TCP.
  3. כתובת פנימית בהודעות. הטלפון כותב על עצמו כתובת פנימית (192.168.x.x), והאישור נשלח לשם. מרכזיית ה-VoIP שלנו מתקנת זאת בעצמה — עונה לשם שממנו ההודעה באמת הגיעה — אבל לספק התקשורת הגנה כזאת עשויה לא להיות: אז מתנתקות רק שיחות חוץ.
  4. NAT כפול או חומת אש קפדנית שמעבירה את ההודעות הראשונות של השיחה וחותכת את הבאות.
למנהל הרשת: איזה צד מנתק את השיחה

לפי RFC 3261 (§13.3.1.4) הצד שענה 200 OK חוזר עליו במרווחים שבין T1 ל-T2, ואחרי 64 × T1 בלי ACK מסיים את הסשן בבקשת BYE; ברירת המחדל של T1 היא 500 מ״ש (§17.1.1.1), ומכאן 32 שניות.

  • שיחה נכנסת לטלפון: את ה-200 OK שולח הטלפון, את ה-ACK — מרכזיית ה-VoIP. ה-ACK אבד בדרך לטלפון — הטלפון מנתק.
  • שיחה יוצאת מהטלפון ו-*43: את ה-200 OK שולחת מרכזיית ה-VoIP, את ה-ACK — הטלפון. ה-ACK אבד בדרך למרכזיית ה-VoIP — מרכזיית ה-VoIP מנתקת.
  • פרגמנטציה: RFC 3261 §18.1.1 — אם בקשה ארוכה מ-1300 בתים (או בטווח 200 בתים מה-MTU של המסלול), הלקוח חייב לשלוח אותה ב-TCP עם בקרת עומס. מרכזיית ה-VoIP שלנו מקבלת TCP באותו פורט 5060.

מה לעשות#

אחרי כל שלב חזרו על *43 הארוך (45 שניות) ועל שיחת בדיקה; ממשיכים הלאה רק אם לא עזר.

  1. כבו את SIP ALG בנתב („SIP Helper“, „SIP Passthrough“, „ALG ל-SIP“) והפעילו מחדש את הנתב. איפה זה נמצא בדגמים הפופולריים — „רשת, נתב ואינטרנט“.
  2. השאירו בטלפון שלושה קודקים — G.711 PCMA, G.711 PCMU ו-G.722 — ואת השאר כבו: ההודעות יתקצרו ויפסיקו להתפרגן.
  3. החליפו את התעבורה ל-TCP (אותו פורט, 5060), אם שלב 2 לא עזר: TCP חותך הודעות ארוכות נכון בעצמו, והפרגמנטציה נעלמת. מרכזיית ה-VoIP שלנו מקבלת גם UDP וגם TCP.
  4. מתנתקות רק שיחות חוץ, אבל *43 ושיחות פנימיות מחזיקות — התקלה בין מרכזיית ה-VoIP לספק התקשורת. שלחו לתמיכה את הזמן של כמה שיחות שהתנתקו.
  5. בטלו את ה-NAT הכפול — העבירו את נתב הספק למצב גשר או חברו את הטלפון ישירות אליו.

ניתוק לאחר 15 או 30 דקות#

מדוע זה קורה#

במהלך שיחה ארוכה הצדדים מאשרים מדי פעם שהשיחה עדיין מתקיימת — אלה טיימרים של סשן. המרווח נקבע בתחילת השיחה; צד אחד מתחייב „להאריך“ את השיחה באמצע המרווח, והצד השני ממתין להארכה. במרכזייה שלנו הטיימרים של הסשן מופעלים עם מרווח של 1800 שניות (30 דקות); הם נחוצים כדי ששיחה שאבד הקשר בה בשקט לא תישאר תלויה שעות ולא תתפוס את הקו.

מכאן שני סוגי מקרים:

  • בסביבות 15 דקות — באמצע המרווח נשלחה הארכה, אך היא לא עברה: הצד שכנגד דחה אותה או לא קיבל תשובה;
  • בסביבות 29.5 דקות — ההארכה לא נשלחה כלל, והצד שחיכה לה ניתק את השיחה מעט לפני תום המרווח.

מדוע ההארכה לא עוברת:

  1. הראוטר סגר את הנתיב להודעות שירות. הקול במהלך השיחה זורם ברציפות, ואילו הודעות השירות — שותקות. אם ב-Telefon מושבת keep-alive, הראוטר סוגר לאחר כמה דקות את „הדלת“ להודעות שירות — וההארכה מהמרכזייה לטלפון כבר לא מגיעה.
  2. הטלפון לא מבין את שיטת ההארכה או דוחה אותה — קושחה ישנה, „Session Timer“ מופעל עם פרמטרים לא תקניים.
  3. SIP ALG מקלקל את הודעת ההארכה.
  4. טיימר של ספק התקשורת — אם מתנתקות רק שיחות חוץ ותמיד באותה דקה.

המרכזייה מפעילה טיימרים בשיחה רק אם גם הטלפון תומך בהם ⚠️ verify. ברוב טלפוני השולחן „Session Timer“ מושבת מהמפעל (ב-Yealink וב-Grandstream — לפי התיעוד), ואז אין טיימרים בשיחה כלל.

למנהל הרשת: הערכים בצד המרכזייה
  • timers=yes — הטיימרים נתמכים; timers_sess_expires=1800 — מרווח של 1800 שניות; timers_min_se=90 — המרכזייה לא תקבל פחות מ-90 שניות (shared/sip/advanced-options.json, קבוצה protocol).
  • לפי RFC 4028 ההארכה נשלחת באמצע המרווח (900 שניות), והצד שלא קיבל אותה מסיים את הסשן ב-BYE עד min(32 שניות, מרווח / 3) לפני תום המרווח — כ-1768 שניות.
  • המרכזייה לא מנתקת בגלל שקט (rtp_timeout=0), ולכן „שיחה בלי צליל“ כשלעצמה אינה מתנתקת.
  • במרכזייה ייעודית אותם ערכים נמצאים ב„הגדרות SIP מתקדמות“ („טיימרים של סשן“, „רענון סשן, שניות“). אין צורך לשנות אותם בלי דרישה מהספק.

מה לעשות#

  1. הפעילו keep-alive בטלפון — הוא שומר על הנתיב להודעות שירות פתוח גם במהלך השיחה. Yealink: Account → Advanced → Keep Alive Type (Default או Options) ו-Keep Alive Interval — 30 שניות (ערך המפעל).
  2. השביתו SIP ALG בראוטר.
  3. אם בטלפון הופעל „Session Timer“ — החזירו את ערך המפעל (כבוי) או קבעו מרווח של 1800 שניות: Yealink — Account → Advanced → Session Timer / Session Expires; Grandstream — Account → SIP Settings → Session Timer (Enable Session Timer, Session Expiration).
  4. עדכנו את הקושחה של הטלפון — שגיאות בהארכת שיחה מתוקנות לעתים קרובות בגרסאות חדשות.
  5. מתנתקות רק שיחות חוץ, באותה דקה — שלחו את זמני השיחות לתמיכה: נשווה את הטיימרים מול ספק התקשורת.

שיחות נכנסות עובדות רק בדקות הראשונות לאחר ההפעלה#

מדוע זה קורה#

הטלפון נמצא מאחורי הראוטר, והמרכזייה יכולה להגיע אליו רק דרך „דלת“ שהטלפון פתח בהודעה האחרונה שלו. הראוטר מחזיק דלתות כאלה זמן קצר — בראוטרים ביתיים מחצי דקה עד כמה דקות של שקט — ואחר כך סוגר אותן. כל עוד הטלפון שולח משהו לעתים קרובות (רישום מיד לאחר ההפעלה, keep-alive), הדלת פתוחה. השתתק — נסגרה, ושיחה נכנסת מהמרכזייה נתקלת בראוטר.

הסניף בממשק הניהול עשוי להישאר ירוק: את הרישום הטלפון מחדש בעצמו, מבפנים, והוא עובר, אבל להיכנס אל הטלפון מבחוץ כבר אי אפשר. אתחול „מרפא“, כי הוא פותח את הדלת מחדש — לזמן מה.

המרכזייה שלנו מצדה בודקת כל מכשיר כל 60 שניות בשאלה „אתה מחובר?“: גם החבילה הנגדית הזו מחזיקה את הדלת פתוחה — אבל רק אם הראוטר סוגר אותה לזמן ארוך מדקה. המכשיר לא ענה — המרכזייה מחשיבה אותו ללא זמין, הסניף כבה, וב„תקינות“ מופיע כשל.

מה לעשות#

לאחר כל שלב בדקו שיחה נכנסת לאחר 10 דקות של חוסר פעילות (בכפתור „להתקשר למכשיר“ או משלוחה סמוכה); בהמשך — רק אם לא עזר.

  1. הפעילו keep-alive בטלפון עם מרווח של 20–30 שניות. Yealink: Account → Advanced → Keep Alive Type / Keep Alive Interval (ברירת מחדל Default ו-30 שניות); ב-Fanvil — Keep Alive Type בהגדרות הנוספות של הקו.
  2. השביתו SIP ALG בראוטר — גם הוא נוטה „לשכוח“ דלתות.
  3. קצרו את זמן הרישום בטלפון (Expires / Register Expiration) ל-60–120 שניות — הטלפון יפתח את הדלת בעצמו לעתים קרובות יותר. פחות מ-60 המרכזייה שלנו לא תקבל (423 Interval Too Brief).
  4. במרכזייה ייעודית אפשר לבדוק מכשירים לעתים קרובות יותר: „הגדרות SIP מתקדמות“ → „בדיקת קשר, שניות“ — 20–30 במקום 60. זה מחזיק את הדלת מצד המרכזייה, אבל מוסיף תעבורת שירות; keep-alive של הטלפון אמין יותר.
  5. NAT כפול (ראוטר של הספק + ראוטר משלכם) — יש שתי דלתות, והן נסגרות באופן שונה: הסירו אחת — „רשת, ראוטר ואינטרנט“.

ניתוק במעבר מ-Wi-Fi לאינטרנט סלולרי#

למה זה קורה#

ה-Wi-Fi של העסק והאינטרנט הסלולרי הם שני כתובות שונים. השיחה החלה מאחת מהן, ובתחילת השיחה מרכזיית ה-VoIP זכרה מאיפה מגיע הקול: משיקולי אבטחה היא מקבלת שמע רק מהכתובת הזו. כשהסמארטפון עובר לרשת הסלולרית, הקול מתחיל להגיע מכתובת חדשה — ועבור מרכזיית ה-VoIP זה כבר זרם זר, בעוד שהודעות השירות ממשיכות לצאת לכתובת הישנה, שכבר אינה קיימת. שיחה שהחלה ברשת אחת, במעבר לרשת אחרת כמעט תמיד נקטעת. זו מגבלה של הטכנולוגיה עצמה, לא תקלה.

הצד השני של אותו דבר: בזמן שהסמארטפון עובר, טלפון התוכנה מאבד את הרישום, ושיחות נכנסות בשניות האלה לא מגיעות. Android בנוסף מרדים אפליקציות ברקע — בהרחבה בסקירה, בפרק על טלפונים תוכנתיים.

מה לעשות#

  1. במהלך השיחה אל תחליפו רשת: סיימו את השיחה לפני היציאה מאזור ה-Wi-Fi.
  2. כבו בסמארטפון את המעבר האוטומטי מ-Wi-Fi חלש לרשת סלולרית (ב-iPhone — „סיוע Wi-Fi“, ב-Android — „מעבר לרשת סלולרית“ בהגדרות ה-Wi-Fi): כרגע הוא קוטע את השיחה על סף בית הקפה.
  3. אשרו לטלפון התוכנה לפעול ברקע ובטלו עבורו את חיסכון הסוללה — אז הוא יירשם מחדש מהר יותר לאחר החלפת רשת.
  4. במקום שבו אסור לאבד שיחה (דלפק, קבלה), הציבו טלפון שולחני או מכשיר DECT, ולא סמארטפון.

מה לשלוח לתמיכה#

  • תאריך ושעה של כמה שיחות שנקטעו בדיוק של דקה, המספרים והשלוחה;
  • כעבור כמה זמן זה נקטע (לפי היומן — „שיחה“) והאם תמיד באותו אופן;
  • האם נקטעות כל השיחות או רק חיצוניות; האם *43 ארוך מחזיק מעמד (45 שניות);
  • דגם וקושחת הטלפון (השורה מתג המכשיר), האם מופעלים בו keep-alive ו-Session Timer;
  • דגם הראוטר, האם SIP ALG כבוי, האם יש ראוטר שני של הספק;
  • במרכזייה ייעודית — טקסט ה-SIP-trace של הניתוק החוזר.

איך לכתוב לנו — „תמיכה“.

שאלות נפוצות#

למה הניתוק דווקא בשנייה ה-32, ולא ב-30 וב-40?#

כי המספר הזה מוטבע בפרוטוקול SIP עצמו: אישור תחילת השיחה ממתין 64 מרווחים של חצי שנייה — 32 שניות. אם אצלכם „בערך 30 שניות“ ובכל פעם אותו דבר — זה זה, גם אם הסטופר הראה 31 או 33: חלק מהזמן הלך על צלצולים ותשובה.

SIP ALG כבוי, אבל הניתוק בשנייה ה-30 נשאר — מה עוד?#

בדקו ש-ALG כבוי בכל הראוטרים בדרך (בראוטר של הספק הוא לרוב נפרד), השאירו בטלפון שלושה קודקים ונסו תעבורת TCP. אם נקטעות רק שיחות חיצוניות, ו-*43 מחזיק 45 שניות, — הבעיה בקטע אל מפעיל התקשורת, שלחו את זמני השיחות.

הסניף ירוק, אבל שיחות נכנסות לא מגיעות — גם זה „ניתוק“?#

זה אותו מנגנון כמו בפרק על שיחות נכנסות בדקות הראשונות: הרישום מתעדכן מבפנים, אבל הדלת לטלפון מבחוץ כבר סגורה. הבדיקה — „להתקשר למכשיר“ לאחר 10 דקות של חוסר פעילות; התיקון — keep-alive בטלפון.

אפשר פשוט לכבות את טיימרי הסשן במרכזייה?#

אפשר (במרכזייה ייעודית, „הגדרות SIP מתקדמות“), אבל זה מטפל בסימפטום ולא בסיבה: ההארכה לא עוברת, כי נתיב הודעות השירות סגור או פגום, ואותו נתיב יידרש גם להעברת שיחה ולהמתנה. בנוסף, בלי טיימרים שיחות שנקטעו בשקט ייתלו שעות ויתפסו קווים. קודם keep-alive ו-SIP ALG.

פרקים קשורים#

מקורות#

  • RFC 3261 — SIP: חזרה על 200 OK עד לקבלת ACK וסיום הסשן לאחר 64 × T1 (§13.3.1.4), T1 = 500 מ״ש (§17.1.1.1), מעבר ל-TCP להודעות ארוכות מ-1300 בייט (§18.1.1) — https://www.rfc-editor.org/rfc/rfc3261
  • RFC 4028 — Session Timers: הארכה באמצע המרווח, BYE עד min(32 ש׳, מרווח / 3) לפני התפוגה — https://www.rfc-editor.org/rfc/rfc4028
  • Yealink SIP-T2/T3/T4/T5/CP920 Administrator Guide V86.60 — Keep Alive Type / Interval (ברירת מחדל מהיצרן, 30 ש׳), Session Timer (ברירת מחדל מהיצרן — כבוי; Session Expires 1800 ש׳; עדכון באמצע המרווח)
  • Grandstream GRP261x/262x/263x Administration Guide — Session Timer: Enable Session Timer (ברירת מחדל מהיצרן „No“), Session Expiration, Min-SE — https://documentation.grandstream.com/knowledge-base/grp261x-grp262x-grp263x-series-administration-guide/
  • Zoiper 5 User Guide v1.0.7 — UDP והגבלת גודל החבילה, פסקי זמן NAT בראוטר — https://www.zoiper.com/pdf/User%20Guide%20Zoiper%205%20v.1.0.7.pdf
  • קוד המרכזייה: shared/sip/advanced-options.json (timers=yes, timers_sess_expires=1800, timers_min_se=90, qualify_frequency=60, minimum_expiration=60, rtp_timeout=0, force_rport, rewrite_contact), sip-edge/asterisk/rtp.conf (strictrtp=yes), sip-edge/sipsync/linecheck.go (בדיקת הד *43, תקרת בדיקה 300 ש׳)
Was this article helpful?