Avatar
1
jungtin Beginner
jungtin Beginner
Có phải hầu hết app gửi tin nhắn đều sử sử dụng TCP để video call?
Vừa rồi em bảo vệ đồ án và bị chém 1 câu như sau: "Em kết nối P2P sử dụng giao thức TCP hay UDP để voice call?", em trl: "em sử dụng UDP ạ" và hội đồng không đồng ý

Ý kiến hội đồng: Hầu như tất cả service gọi điện đều phải sử dụng TCP vì firewall block, điều này em đồng ý và đã gặp. Và em phản biện lại rằng, đầu tiên nó là sẽ try connect with UDP nếu gặp tường lửa thì nó sẽ tạo TCP connnect -> MediaServer (Metered) và cũng không được đồng ý (Có vẻ lúc đó em giải thích chưa rõ hoặc cũng có thể sai :)) )

Hội đồng ý kiến: Tất cả mọi mạng đều có firewall nên các dịch vụ không thể nào tạo UDP connection được

=> Em tự hỏi, liệu chẳng lẻ đối với gọi 1-1 như zalo, messenger, telegram đều kết nối với TCP hết à, thế thì server nào mà chịu nổi?

  • Answer
udp webrtc tcp video call
Remain: 5
2 Answers
Avatar
jungtin Beginner
jungtin Beginner
Note: Câu hỏi chỉ áp dụng cho việc call 1-1, vì em biết nếu thiết bị group call thì bắt buộc phải sử dụng mô hình MCU hoặc SFU với việc tạo TCP connection -> MediaServer rồi

+ Thêm là liệu UDP connect có kém bảo mật hơn TCP?

  • 0
  • Reply
Em định nghĩa thế nào là kém hơn? Bản thân TCP và UDP đều là các giao thức truyền tải dữ liệu chứ không phải là giao thức bảo mật dữ liệu vậy thì ý em bảo mật ở đây là gì nhỉ? Tất nhiên là TCP vẫn có checksum nhưng việc này chỉ đảm bảo gói tin được toàn vẹn mà thôi.

Với anh bảo mật ở đây là việc không ai có thể đọc được dữ liệu của gói tin cả, ví dụ em gửi tin nhắn cho anh là Hello thì không ai có thể nghe lén đường truyền để biết em đang gửi Hello cho anh cả, thứ họ nhận được là một bản tin đã được mã hóa. Và thứ này phải do tầng ứng dụng cài đặt với các thuật toán cụ thể.

 –  monkey 1678222507000
Em đã hiểu, cám ơn anh rất nhiều ạ !  –  jungtin 1678233643000
Avatar
monkey Beginner
monkey Beginner
  1. Đối với việc gửi tin nhắn văn bản thì thường sẽ dùng TCP em ạ, vì nó sẽ đảm bảo tin nhắn sẽ được gửi đến đích, không như UDP có thể không gửi được đến đích nếu tin nhắn quá lớn, thông qua các cơ chế kiểm tra lỗi, kiểm tra toàn vẹn gói tin, window size, ... Còn về bảo mật thì cả TCP và UDP đều có thể được mã hóa thông tin ở tầng ứng dụng rồi gửi qua lại nên ko phải vấn đề.

  1. Đối với video call, audio call thì thường sẽ dùng udp vì dung lượng gói tin cho phần này cực kỳ lớn, nó cần một tốc độ truyền tải cao và độ trễ thấp. Chính vì vậy UDP phù hợp hơn. Bởi gói tin của udp có ít header hơn tcp, cũng không bị kiểm tra lỗi, không yêu cầu gửi lại, không yêu cầu thứ tự nên tốc độ truyền gần như là tuyệt đối, cũng may là phần call này thường chấp nhận việc mất gói tin và có thể sử dụng nội suy để đoán các frame bị thiếu nên UDP là hợp lý nhất.

Anh nghĩ các giảng viên cũng sẽ năm được điều này. Có thể ý họ ở đây là đầu tiên bao giờ cũng phải có kết nối tcp trước để hai bên bắt tay, xác thực nhau được trước rồi mới dùng udp để stream sau em ạ. Nên việc nói rằng một ứng dụng chat luôn cần phải có tcp là hợp lý.

  • 1
  • Reply
Cám ơn anh, em hiểu và giải thích lại câu trl của anh là

Đối với call, đầu tiên sẽ cần có kết nối TCP -> Server để trao đổi signal, xác thực & trao đổi description về cuộc gọi.

Sau khi 2 thiết bị đã có thông tin về ICE Candidates, SDP v.v. thì 2 thiết sẽ tự tạo UDP p2p connection để stream

 –  jungtin 1678219311000
Đúng vậy em ạ  –  monkey 1678222280000