• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 webRTC관련 질문(한번만 도와주십쇼 애플센세..)

webRTC관련 질문(한번만 도와주십쇼 애플센세..)

7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 글쓴이
  • #112636

    천재민
    참가자
    먼저 강의와는 관련없는 질문을 드려 죄송합니다. 
    여러가지 문서들을 뒤져보기도 하고, chatgpt를 여러번 돌려봐도 도저히 모르겠어서 질문드립니다. 
    이 우매한 수강생을 한번만 도와주십쇼 애플센세..
    
    질문드릴 것은 webRTC에 관한 것입니다.
    먼저 webRTC 구현에 성공을 했고, 실제로 화상채팅도 성공했었으나..  
    특정 네트워크 상태에 한에서 화상채팅이 되지 않습니다. 그리고 그 이유가 궁금합니다. 서버는 stun 서버만을 사용했습니다.
    (symmetric nat개념은 알고 있고, stun만을 사용했을 때 symmetric nat 이용자와 통신이 불가능하다는 것을 알고는 있습니다만
    그 경우가 아닌 것 같습니다.)
    
    
    wifi - wifi => 잘됩니다. (서로 다른 wifi) / wifi 둘다 symmetric nat이 아니었습니다. 
    (symmetric nat인지 확인하려고 같은 네트워크로 다른 목적지의 p2p 연결을 시도한 후icecandidate 패킷을 뜯어서 ip를 확인해봤습니다.=>데이터를 보내려는 목적지가 어디든 같은 ip를 쓰고 있었습니다.) 
    
    wifi -> lan (wifi-offer, lan-answer) => 잘됩니다. / lan선은 nat을 사용하지 않고 있고 wifi는 symmetric nat이 아니었습니다.
    (lan선도 어디에 연결하든 같은ip를 쓰고 있었고, 내부ip와 외부ip가 같았습니다. => nat안쓰고 고유 공인ip를 사용하는 것 같습니다.)
    
    lan -> wifi (lan-offer, wifi-answer) => 안됩니다.
    offer와 answer를 모두 잘 주고 받는 것을 확인했습니다. 
    (offer와 answer가 올바른 offer와 answer인지는 확인 방법을 잘 몰라서 확인 못해봤습니다.)
    
    icecnadidate도 잘 주고 받는 것을 확인 했습니다.
    (rtc 연결되었을 때의 icecandidate를 주고 받는 것과 비교해봤는데 이상이 없었습니다.) 
    
    wifi(symmetric아님), lan(nat안씀) 이기 때문에 잘못된 ip를 얻어온 것 같지도 않습니다.
    (실제로 icecandidate를 뜯어봤을 때에도 rtc 연결을 성공했을 때의 ip와 같은 것을 확인했습니다.)
    
    브라우저도 chrom, 사파리 edge 다 써보았는데, 3개의 브라우저 다 안됩니다. - 브라우저 문제는 아닌 것 같습니다.
    (3개의 브라우저 모두 rtc연결이 원활히 되는 걸 확인한 후 테스트 한 것이라 브라우저 문제는 아닌 것 같습니다.)
    
    symmetric문제도 아니고 브라우저가 rtc를 지원안해서 생기는 문제도 아닌 것 같은데, 대체 왜 이런 문제가 생기는지 잘 모르겠습니다.
    turn서버를 이용하면 relay로 화상채팅을 가능하게 할 수 있다는 것은 알지만, 이 문제가 왜 발생하는지 알고싶습니다...
    (강의와 상관없는 글은 죄송하게 생각하고 있습니다. 너무나도 궁금해서 물어봅니다.) 
    
    
    #112670

    codingapple
    키 마스터
    ip를 못찾아서 그런것이겠지만 왜 발생하는지 이유는 잘모르겠군요
    #112746

    천재민
    참가자
    ㅠㅠㅠㅠㅠㅠㅠ 답변감사합니다
    
    저 답글 읽고 몇가지 의문점이 더있습니다 센세
    ip를 못찾는다는게 올바른 ip를 넘겨주었더라도 받는쪽에서 받은 ip을 올바르게 적용 못할 가능성이 있다는 것인가요??
    그 wifi(offer)<=>lan(anwer) 일때 통신이 되길래 그때 icecandidate를 통해 주고받은 ip를 기록해두고 
    wifi(answer) <=>lan(offer) 일때(통신안되는경우임) 주고받은 ip와 비교해 봤는데 두 경우 주고 받은 ip는 같았는데 한 경우는 통신이 되고 한 경우는 통신이 안되요
    분명 되는경우와 안되는 경우 둘다 주고받은 ip는 같은데 왜 한쪽은 되고 한쪽은 안되는지 모르겠어요 ㅠㅠㅠㅠㅠ
    
    
    #112776

    codingapple
    키 마스터
    안되는 원리는 저도 모르겠습니다 turn서버나 씁시다
    #112815

    천재민
    참가자
    아쉽네용..
    이해하기 쉽게 강의 만들어주셔서 항상 즐겁게 배워가는 중이에요 응원합니당
    #137065

    신문종
    참가자
    저도 비슷한 경험이 있고 조금은 도움이 될까 싶어서 댓글 남깁니다. (이미 1년이나 지났지만.... ㅠㅠ)
    
    TURN을 사용하자니 비용이 부담되고
    STUN으로 어떻게 되지 않을까 삽질해서 원인은 파악하지 못헀지만
    연결이 실패한 몇몇 케이스들에서 효과를 본 방법이 있어 공유 드립니다.
    
    제경우는
    1. google STUN을 사용
    2. webRTC 피어끼리 sdp(offer, asnwer)를 주고받은것을 확인하였고, sdp 내용에 문제가 없는것을 확인
    3. iceCandidate도 주고받은것을 확인 (연결이 실패했을 때 ice를 DB에 업로드 해두었고 두 피어 모두 srflx후보가 있었습니다.)
    4. 두 피어 모두 방화벽은 설정돼있었지만 크롬은 허용 앱에 들어가 있었으며 (피어 모두 chorome에서 접속)
    5. symmetricNAT 환경도 아닌것을 확인하였습니다.
    
    이상한점은
    offerer와 answerer의 역할을 바꿨을 때 연결이 성공했습니다.
    e.g.
    PeerA가 offer를 만들고 -> PeerB에게 전달 -> PeerB는 answer를 만들고 -> PeerA에게 전달 -> connectionstate failed ->
     PeerB가 offer 생성 -> PeerA에게 전달 -> PeerA가 answer 생성 -> PeerB에게 전달 -> 연결 성공
    
    ChatGPT에게 물어봤더니 symmetric call이라는 방법(?) 이라고 하더군요 (그런데 검색해봤을 때 자료가 나오지 않는것으로 보아 해당 방법이 많이 쓰이지 않거나, 없는 방법인데 GPT가 알려준것 같습니다. thx gpt)
    GPT에 의하면 위 방법은
    - 두 peer중 한쪽이 방화벽으로 막혀있다면  UDP 프로토콜로 들어오는 패킷을 차단
    - 그러나 만약 UDP패킷으로 막힌쪽이 먼저 패킷을 전송한다면 해당 세션은 열려있어 패킷 열려있는 세션에 한해 차단을 하지않고 (방화벽이 statefu하다면)
    - 다른 peer쪽은 방화벽이 안막혀있다는 가정 하에 위의 방법이 사용 가능하고
    - 정확한지 모르겠지만 해당 방식을 UDP hole punching이라고 하는것 같았습니다 (정확하지 않습니다 검색해보시는것을 추천드립니다)
    
    1년이나 지난 글이고, 지금도 webRTC 프로젝트를 하고계신지 모르겠지만
    저도 비슷한 문제를 겪었었고, 자료 또한 많지 않아 이리저리 돌아다닌 경험이 있어.... 이렇게 글을 남깁니다 
    조금이라도 도움이 되었으면 좋겠습니다.
    
    
     
    #140304

    천재민
    참가자
    헉 오랜만에 코딩센세 강의좀 들어볼까 하고 왔는데 귀한 답글이 달렸었네요
    
    
    그때 이후로 webRTC 손을 땠었어서 기억이 가물가물한데
    한번 날잡고 문종님 답글 보면서 공부해보면 좋을 것 같다는 생각이 드네요
     오랜만에 복습도 할겸 공부해봐야겠어요 답글 감사합니다 ㅎㅎ
7 글 보임 - 1 에서 7 까지 (총 7 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠