কি?
RTCQuicTransport হল একটি নতুন ওয়েব প্ল্যাটফর্ম API যা QUIC প্রোটোকল ব্যবহার করে দূরবর্তী সমবয়সীদের সাথে নির্বিচারে ডেটা আদান-প্রদান করতে দেয়৷ এটি পিয়ার-টু-পিয়ার ব্যবহারের ক্ষেত্রে তৈরি করা হয়েছে, এবং তাই ICE-এর মাধ্যমে পিয়ার-টু-পিয়ার সংযোগ স্থাপন করতে একটি স্বতন্ত্র RTCIceTransport API-এর সাথে ব্যবহার করা হয়। ডেটা নির্ভরযোগ্যভাবে এবং ক্রমানুসারে পরিবহণ করা হয় (অক্রমবিহীন এবং অবিশ্বস্ত ডেলিভারির বিবরণের জন্য নীচের বিভাগটি দেখুন)। যেহেতু এটি একটি জেনেরিক, দ্বিমুখী ডেটা ট্রান্সপোর্ট, এটি গেমিং, ফাইল স্থানান্তর, মিডিয়া পরিবহন, মেসেজিং ইত্যাদির জন্য ব্যবহার করা যেতে পারে।
কেন?
একটি শক্তিশালী নিম্ন স্তরের ডেটা ট্রান্সপোর্ট API ওয়েবে নতুন জিনিসগুলি করতে অ্যাপ্লিকেশনগুলিকে (যেমন রিয়েল টাইম যোগাযোগ) সক্ষম করতে পারে৷ আপনি এপিআই-এর উপরে তৈরি করতে পারেন, আপনার নিজস্ব সমাধান তৈরি করতে পারেন, পিয়ার টু পিয়ার সংযোগের মাধ্যমে যা করা যায় তার সীমা ঠেলে দিতে পারেন, উদাহরণস্বরূপ, কাস্টম বিটরেট অ্যালোকেশন নবগুলি আনলক করা। ভবিষ্যতে, এনকোডেড মিডিয়ার জন্য আরও সমর্থন এমনকি নিম্ন স্তরের নিয়ন্ত্রণের সাথে আপনার নিজস্ব ভিডিও যোগাযোগ অ্যাপ্লিকেশন তৈরি করতে সক্ষম হতে পারে। WebRTC-এর NV প্রচেষ্টা হল নিম্ন স্তরের APIগুলির দিকে এগিয়ে যাওয়া, এবং এটির সাথে প্রথম দিকে পরীক্ষা করা মূল্যবান।
কেন QUIC?
রিয়েল টাইম যোগাযোগের জন্য QUIC প্রোটোকল বাঞ্ছনীয়। এটি UDP-এর উপরে নির্মিত, এনক্রিপশন, যানজট নিয়ন্ত্রণে তৈরি এবং লাইন ব্লকিং ছাড়াই মাল্টিপ্লেক্স করা হয়েছে। RTCQuicTransport
RTCDataChannel
API-এর মতো একই রকম ক্ষমতা দেয়, কিন্তু SCTP-এর পরিবর্তে QUIC ব্যবহার করে তার পরিবহন প্রোটোকল হিসেবে। কারণ RTCQuicTransport
একটি স্বতন্ত্র API, এতে RTCPeerConnection
API-এর ওভারহেড নেই, যার মধ্যে রিয়েল টাইম মিডিয়া স্ট্যাক রয়েছে।
কিভাবে?
সাধারণ API ওভারভিউ
API-এর 3টি প্রধান বিমূর্ততা রয়েছে, RTCIceTransport
, RTCQuicTransport
এবং RTCQuicStream
।
RTCIceTransport
আইসিই হল ইন্টারনেটে পিয়ার-টু-পিয়ার সংযোগ স্থাপনের একটি প্রোটোকল এবং আজকে WebRTC-এ ব্যবহৃত হয়। এই বস্তুটি একটি ICE সংযোগ স্থাপন করতে একটি স্বতন্ত্র API প্রদান করে। এটি QUIC সংযোগের জন্য প্যাকেট পরিবহন হিসাবে ব্যবহৃত হয়, এবং RTCQuicTransport
এটিকে তার কনস্ট্রাক্টরে নেয়।
RTCQuicTransport
একটি QUIC সংযোগ প্রতিনিধিত্ব করে। এটি একটি QUIC সংযোগ স্থাপন এবং QUIC স্ট্রীম তৈরি করতে ব্যবহৃত হয়। এটি QUIC সংযোগ স্তরের জন্য প্রাসঙ্গিক পরিসংখ্যানও প্রকাশ করে৷
RTCQuicStream
রিমোট সাইড থেকে/থেকে ডেটা পড়া এবং লেখার জন্য ব্যবহৃত হয়। নির্ভরযোগ্যভাবে এবং ক্রমানুসারে ডেটা পরিবহন করে। একই RTCQuicTransport
থেকে একাধিক স্ট্রিম তৈরি করা যেতে পারে এবং একবার একটি স্ট্রীমে ডেটা লেখা হলে এটি দূরবর্তী পরিবহনে একটি "অনকুইকস্ট্রিম" ইভেন্ট চালু করে। স্ট্রীম একই QUIC সংযোগে বিভিন্ন ডেটা আলাদা করার একটি উপায় অফার করে। সাধারণ উদাহরণগুলি পৃথক স্ট্রীম জুড়ে পৃথক ফাইল, বিভিন্ন স্ট্রীম জুড়ে ডেটার ছোট অংশ বা পৃথক স্ট্রীম জুড়ে বিভিন্ন ধরণের মিডিয়া পাঠানো হতে পারে। RTCQuicStream
গুলি হালকা ওজনের, একটি QUIC সংযোগের মাধ্যমে মাল্টিপ্লেক্স করা হয় এবং অন্যান্য RTCQuicStream
গুলিকে হেড অফ লাইন ব্লক করে না৷
সংযোগ সেটআপ
একটি পিয়ার-টু-পিয়ার QUIC সংযোগ স্থাপনের জন্য নিম্নলিখিত একটি উদাহরণ। RTCPeerConnection
এর মতো, RTCQuicTransport
API-এর নিরাপত্তার পরামিতি সহ সংযোগের প্যারামিটারগুলি নিয়ে আলোচনার জন্য একটি সুরক্ষিত সিগন্যালিং চ্যানেল ব্যবহার করা প্রয়োজন৷ RTCIceTransport
এটির ICE প্যারামিটার (ufrag এবং পাসওয়ার্ড), পাশাপাশি RTCIceCandidate
s নিয়ে আলোচনা করে।
ক্লায়েন্ট দৃষ্টিকোণ:
const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
iceParams: iceTransport.getLocalParameters(),
quicKey: quicTransport.getKey(),
});
iceTransport.onicecandidate = e => {
if (e.candidate) {
signalingChannel.send({candidate: e.candidate});
}
};
// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, candidate}) => {
if (iceParams) {
iceTransport.start(iceParams);
quicTransport.connect();
} else if (candidate) {
iceTransport.addRemoteCandidate(candidate);
}
};
সার্ভারের দৃষ্টিকোণ:
const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
iceParams: iceTransport.getLocalParameters(),
});
iceTransport.onicecandidate = e => {
if (e.candidate) {
signalingChannel.send({candidate: e.candidate});
}
};
// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, quicKey, candidate}) => {
if (iceParams && quicKey) {
iceTransport.start(iceParams);
quicTransport.listen(quicKey);
} else if (candidate) {
iceTransport.addRemoteCandidate(candidate);
}
};
ডেটা ট্রান্সফার
পড়া এবং লেখার জন্য RTCQuicStream API ব্যবহার করে ডেটা স্থানান্তর করা যেতে পারে:
RTCQuicStreamReadResult readInto(Uint8Array data);
void write(RTCQuicStreamWriteParameters data);
Promise<void> waitForWriteBufferedAmountBelow(unsigned long amount);
Promise<void> waitForReadable(unsigned long amount);
বাফারিং
waitFor*
পদ্ধতির দ্বারা প্রত্যাবর্তিত প্রতিশ্রুতিগুলি যখন JavaScript ব্যস্ত থাকে তখন ডেটা বাফার করার অনুমতি দেয়। রিসিভ সাইডে রিড বাফার পূর্ণ হয়ে গেলে সেন্ড সাইডে ব্যাক প্রেসার প্রয়োগ করা হয়। সেন্ড সাইডে একটি রাইট বাফার রয়েছে যা ব্যাক প্রেসার প্রয়োগ করা হলে পূরণ করতে পারে, এবং সেইজন্য লেখার সাইডে একটি waitForWriteBufferedAmountBelow
পদ্ধতি রয়েছে এবং সেইসাথে বাফারে লেখার জন্য অপেক্ষা করার অনুমতি দেওয়ার জন্য। ডেটা লেখা/পড়ার বিষয়ে আরও তথ্য আরও বিকাশকারী ডকুমেন্টেশনে পাওয়া যাবে।
অর্ডারবিহীন/অনির্ভরযোগ্য ডেলিভারি
যদিও একটি RTCQuicStream
শুধুমাত্র নির্ভরযোগ্যভাবে এবং ক্রমানুসারে ডেটা পাঠানোকে সমর্থন করে, অন্য উপায়ে অবিশ্বস্ত/অক্রমবিহীন ডেলিভারি করা যেতে পারে। ক্রমবিহীন ডেলিভারির জন্য, কেউ আলাদা স্ট্রীমে ডেটার ছোট অংশ পাঠাতে পারে কারণ স্ট্রিমগুলির মধ্যে ডেটা অর্ডার করা হয় না। অবিশ্বস্ত ডেলিভারির জন্য, কেউ ফিনিশিং ট্রুতে সেট সহ ছোট ছোট ডেটা পাঠাতে পারে, তারপর টাইমআউটের পরে স্ট্রীমে reset()
কল করে। টাইমআউট ডেটা ড্রপ করার আগে কতগুলি রিট্রান্সমিশন কাঙ্ক্ষিত তার উপর নির্ভর করা উচিত।
কখন?
অরিজিন ট্রায়ালটি Chrome 73 সংস্করণে শুরু হবে এবং M75 সংস্করণ পর্যন্ত উপলব্ধ থাকবে। এর পর মূল বিচার শেষ হবে। প্রতিক্রিয়া এবং আগ্রহের উপর ভিত্তি করে আমরা উপযুক্ত পরিবর্তন করব এবং হয় API পাঠাব, এই API-এর একটি নতুন অরিজিন ট্রায়াল চালিয়ে যাব, অথবা API বন্ধ করব।
কোথায়?
আইওএস ছাড়া সব প্ল্যাটফর্মে ক্রোম ব্রাউজার।
আর কি?
প্রতিক্রিয়া
অরিজিন ট্রায়ালের অন্যতম প্রধান লক্ষ্য হল আপনার, ডেভেলপারদের কাছ থেকে প্রতিক্রিয়া পাওয়া। আমরা এতে আগ্রহী:
- এই API আপনার জন্য কি সক্ষম করে?
- কিভাবে এই API অন্যান্য ডেটা ট্রান্সপোর্ট API (
WebSocket
s বা WebRTC এরRTCDataChannel
) এর উপর উন্নতি করে? এটা কিভাবে উন্নতি করতে পারে? - কর্মক্ষমতা
- API এরগনোমিক্স
মূল বিচারের জন্য নিবন্ধন করুন
- আপনার মূলের জন্য একটি টোকেন অনুরোধ করুন .
- আপনার পৃষ্ঠাগুলিতে টোকেন যোগ করুন, আপনার মূলের যেকোনো পৃষ্ঠায় এই টোকেনটি প্রদান করার দুটি উপায় রয়েছে:
- যেকোনো পৃষ্ঠার মাথায় একটি
origin-trial
<meta>
ট্যাগ যোগ করুন। উদাহরণস্বরূপ, এটি দেখতে এরকম কিছু হতে পারে:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
- আপনি যদি আপনার সার্ভার কনফিগার করতে পারেন, তাহলে আপনি একটি
Origin-Trial
HTTP শিরোনাম ব্যবহার করে পৃষ্ঠাগুলিতে টোকেন প্রদান করতে পারেন। ফলস্বরূপ প্রতিক্রিয়া শিরোনামটি এমন কিছু হওয়া উচিত:Origin-Trial: TOKEN_GOES_HERE
- যেকোনো পৃষ্ঠার মাথায় একটি
ওয়েব স্পেসিফিকেশন
খসড়া স্পেসিফিকেশনটি মূল বিচারে API-এর থেকে এগিয়ে গেছে:
- একমুখী স্ট্রীম যেগুলি WHATWG স্ট্রীমের সাথে আরও ঘনিষ্ঠভাবে সারিবদ্ধ
- রিট্রান্সমিশন অক্ষম করা হচ্ছে
- (শীঘ্রই আসছে) ডেটাগ্রাম
আমরা সম্পূর্ণ স্পেসিফিকেশন এবং এর বাইরে (WHATWG স্ট্রিম সমর্থন সহ) বাস্তবায়নে আগ্রহী, কিন্তু প্রথমে আপনার প্রতিক্রিয়া শুনতে চাই!
নিরাপত্তা
একটি এনক্রিপ্ট করা P2P QUIC সংযোগ স্থাপন করতে একটি পূর্ব-ভাগ করা কী ব্যবহারের মাধ্যমে QUIC হ্যান্ডশেকের নিরাপত্তা প্রয়োগ করা হয়৷ এই কীটি গোপনীয়তা এবং অখণ্ডতার গ্যারান্টি সহ একটি নিরাপদ আউট অফ ব্যান্ড চ্যানেলে সংকেত করা দরকার৷ লক্ষ্য করুন যে কীটি জাভাস্ক্রিপ্টে উন্মুক্ত করা হবে।
সক্রিয় আক্রমণ
ডিটিএলএস-এসআরটিপির বিপরীতে, যার জন্য শংসাপত্রের আঙুলের ছাপ সংকেত দেওয়ার জন্য কেবলমাত্র অখণ্ডতা প্রয়োজন, পূর্ব-ভাগ করা কী সংকেত দেওয়ার জন্য অখণ্ডতা এবং গোপনীয়তা প্রয়োজন। যদি পিএসকে আপস করা হয় (সিগন্যালিং চ্যানেলে সার্ভার দ্বারা বলুন), একজন সক্রিয় আক্রমণকারী সম্ভাব্যভাবে QUIC হ্যান্ডশেকের বিরুদ্ধে একটি ম্যান-ইন-দ্য-মিডল আক্রমণ মাউন্ট করতে পারে।
বর্তমান অবস্থা
ধাপ | স্ট্যাটাস |
---|---|
1. ব্যাখ্যাকারী তৈরি করুন | সম্পূর্ণ |
**2ক. RTCQuicTransport স্পেসিফিকেশন ** | **প্রগতিতে আছে** |
**2 খ. RTCIceTransport স্পেসিফিকেশন ** | **প্রগতিতে আছে** |
**3. প্রতিক্রিয়া সংগ্রহ করুন এবং ডিজাইনের উপর পুনরাবৃত্তি করুন** | **প্রগতিতে আছে** |
4. মূল বিচার | Chrome 73 এ শুরু হয়! |
5. লঞ্চ করুন | শুরু হয়নি |
সহায়ক লিঙ্ক
- আরও ডকুমেন্টেশন
- পাবলিক ব্যাখ্যাকারী
- ট্র্যাকিং বাগ
- একটি মূল ট্রায়াল টোকেন অনুরোধ করুন
- কিভাবে একটি অরিজিন ট্রায়াল টোকেন ব্যবহার করবেন
- RTCQuicTransport- এর সমস্যা নিয়ে আলোচনা
- RTCIceTransport- এর সমস্যা নিয়ে আলোচনা