Module 2 — Naming the Session: SDP, SIP, and Offer/Answer
This document defines a mechanism by which two entities can make use of the Session Description Protocol (SDP) to arrive at a common view of a multimedia session between them.— J. Rosenberg & H. Schulzrinne, RFC 3264, 2002
What this module established
SDP was never designed to negotiate anything. Mark Handley and Van Jacobson wrote it so that Mbone multicast sessions — the experimental backbone that first audiocast an IETF meeting from San Diego in March 1992 — could be advertised over SAP, the Session Announcement Protocol (RFC 2974, 2000). RFC 2327 (April 1998) is a flyer format: declarative lines, strict ordering, no reply expected. Then the VoIP wars of 1996–2002 chose its fate. The ITU-T's H.323 (1996) — binary ASN.1, gatekeepers, telco culture — lost the signaling crown to SIP (Handley, Schulzrinne, Schooler, Rosenberg — RFC 2543, 1999; rewritten as RFC 3261, 2002), and SIP carried SDP bodies inside its messages. RFC 3264 (June 2002, Rosenberg & Schulzrinne) then conscripted the flyer into a negotiation algebra — the offer/answer model — and WebRTC inherited the whole arrangement in 2011 via what became JSEP (RFC 8829, 2021), while deliberately standardizing no signaling transport at all. This examination tests whether you can read, repair, and reason about that inheritance.
Plan on 90 minutes. Part A is code, graded by the harness with hints disabled and partial credit per assertion. Part B is forensic scenario work. Part C is concepts and history, and — as every exam from this module onward does — it reaches back with two spaced-review questions from Module 1. The pass mark is 80 percent; retakes draw variants of these problems, so understanding beats memorizing the answer key.
Three session descriptions arrived damaged, each broken in a different layer of the grammar. SDP A has legal lines in an illegal order — the o= line has sunk below s= and t=, which any conforming parser (including the browser's) rejects outright. SDP B has a healthy skeleton but a broken retransmission chain: its RTX payload type declares apt=98, and payload type 98 does not exist in the section. SDP C is an offer/answer pair in which the answer replies to a sendonly video offer with sendrecv — a direction RFC 3264 forbids the answerer to choose. Repair all three. Your repaired SDP A is additionally fed to a live setRemoteDescription() call on a real RTCPeerConnection; the a=ice-ufrag, a=ice-pwd, and a=fingerprint lines it carries are the pointers to ICE and DTLS that Modules 3 and 4 will open — for now, leave them exactly as found.
SDP A — session-level lines out of order.
SDP B — an orphaned RTX apt= reference.
SDP C — the offer (left intact) and the illegal answer.
The second problem is archaeology of a different kind: a loopback call script — the very pattern you built in § 2.5 — seeded with five sequencing bugs. The topology is correct, every API name is correct, and it still cannot connect, because offer/answer is a state machine and the script walks it in the wrong order. Fix the order, nothing else.
Repair the three descriptions above, then resurrect the loopback script.
Lab 1
Repair three corrupted SDPs
Graded in the browser against 6 assertions; the editor and harness require JavaScript.
Lab 2
Resurrect the loopback call
Graded in the browser against 2 assertions; the editor and harness require JavaScript.
The description below is the kind a selective forwarding unit sends a subscriber: one Opus-led audio section riding alongside RED and three static-table survivors, a camera video section with VP8, VP9, and two H.264 profiles each dragging an RTX shadow behind an apt= pointer, a second video section for a screen share, and a=ssrc-group:FID lines pairing every primary SSRC with its retransmission SSRC. Ten structured queries follow. Answer them by reading the artifact — a parser is optional; precision is not.
The canned SFU offer, verbatim as passed to your function.
Account for every claim with a specific line of the offer.
Lab 3
Interrogate the SFU offer
Graded in the browser against 10 assertions; the editor and harness require JavaScript.
Module 2 gave you a diagnostic axis that will carry you through the rest of this course: the signaling plane (did the descriptions get where they were going?) is not the media plane (did packets flow once they agreed?). The scenarios below are triage. Classify first, then name the artifact you would open — and notice the glare condition at the end, the crossing-offers accident SIP met as crossing INVITEs and that perfect negotiation will later tame.
Five incidents. Decide which plane failed before deciding anything else.
Check your understanding
Auto-graded check
5 auto-graded questions with an explanation for every wrong answer. Requires JavaScript. (m2-exam-quiz-b)
Part C closes with the ideas that make the syntax make sense — BUNDLE, msid, the curious port 9, the answerer's obligations — and with SDP's origin story, because knowing that the format predates negotiation explains most of its scar tissue. The final two questions deliberately reach back to Module 1: RTP's framing fields and the choice of UDP are the foundation everything in this module stands on.
Seven questions; every explanation cites its source.
Check your understanding
Auto-graded check
7 auto-graded questions with an explanation for every wrong answer. Requires JavaScript. (m2-exam-quiz-c)
Examination score
The scorecard totals this page’s graded work as you go. It requires JavaScript.
The Impossible Call · Module 2 Examination