Sunday, July 27, 2014

Real-time Transport Protocol (RTP) là giao thức thực hiện vận chuyển các ứng dụng dữ liệu thời gian thực như thoại và hội nghị truyền hình. Các ứng dụng này thường mang các định dạng của âm thanh (PCM, GSM và MP3 và các định dạng độc quyền khác) và định dạng của video (MPEG, H.263 và các định dạng video độc quyền khác). RTP được định nghĩa trong RFC 1889, RFC 3550.
RTP được sử dụng kết hợp với RTCP (Realtime Transport Control Protocol). Trong khi RTP được dùng để truyền dòng dữ liệu đa phương tiện truyền thông (âm thanh và video) thì RTCP được dùng để giám sát QoS và thu thập các thông tin về những người tham gia phiên truyền RTP đang thực hiện.
Giao thức RTP chạy trên nền UDP để sử dụng các chức năng ghép kênh và checksum. Cả hai giao thức RTP và UDP tạo nên một phần chức năng của lớp giao vận. Tuy nhiên RTP cũng có thể được sử dụng với những giao thức khác của lớp mạng và lớp giao vận bên dưới miễn là các giao thức này cung cấp được các dịch vụ mà RTP đòi hỏi. Một điều cần lưu ý là bản thân giao thức RTP không cung cấp một cơ chế nào đảm bảo việc phân phát kịp thời dữ liệu tới các trạm, mà nó dựa trên các dịch vụ của lớp thấp hơn để thực hiện điều này. RTP cũng không đảm bảo việc truyền các gói theo đúng thứ tự. Tuy nhiên số thứ tự trong header cho phép bên thu điều chỉnh lại thứ tự dòng gói tin của bên phát gữi đến.
RTP không chỉ hỗ trợ các dịch vụ phổ biến của hầu hết các ứng dụng truyền thông hội nghị đa phương tiện mà còn có khả năng mở rộng cho phù hợp với dịch vụ mới. Khả năng mở rộng, các mã tương ứng trong trường PT của header ứng với các loại payload trong gói RTP được mô tả trong profile đi kèm.
Cấu trúc giao thức RTP:

Cấu trúc gói tin RTP
Theo cấu trúc trên:
- Phần header cố định
·   Version: 2 bit. Trường vesion để chỉ phiên bản của giao thức. Có 3 phiên bản 0,1,2. Phiên bản hiện tại được sử dụng là 2.
·   P (Padding): 1 bit. Nếu trường P được thiết lập thì gói tin sẽ có một hoặc nhều octets P (những octets này không phải một phần của payload) được thêm vào cuối gói tin. Octet P cuối cùng chỉ kích thước của tổng octect được thêm vào. Mục đích của việc thêm octect P là để dùng cho thuật toán mã hóa cần kích thước gói cố định hoặc được dùng cho việc cách ly các gói RTP trong trường hợp nhiều gói thông tin được mang trong cùng một đơn vị dữ liệu của giao thức lớp dưới.
·   X (Extension): 1 bit. Nếu trường X được thiết lập thì phần header cố định phải được liên kết với phần header mở rộng.
·   CC (CSRC count): 4 bits. Chứa các giá trị của trường CSRC ID trong header cố định.
·   M (Marker): 1 bit. Được sử dụng ở lớp ứng dụng để xác định một profile.
·   PT (Payload type): 7 bits. Xác định và nêu ý nghĩa các dạng payload của RTP.  RTP có thể hỗ trợ đến 27  = 128 loại payload khác nhau. Với một luồng âm thanh hay video trường PT được sử dụng để kí hiệu các mã âm thanh hay video. Ví dụ: mã PT của một số định dạng âm thanh và video: PCM (0),GSM(3), LPC (7), G.722 (9), MPEG Audio(14), G.728(15), JPEG(26), H.261(31), MPEG1(32), MPEG2(33) . Nếu máy phát quyết định thay đổi mã ở phần giữa của một phiên làm việc, thì máy phátcó thể thông báo cho máy thuvề sự thay đổi trường PT. Máy phát có thể thay đổi mã để tăng chất lượng âm thanh hay video hoặc giảm tốc độ luồng RTP.
·   Sequence Number: 16 bits. Trường mang số thứ tự của các gói tin RTP. Số thứ tự này được tăng lên 1 sau mỗi lần gói tin RTP được máy phát gửi đi và còn được dùng để máy thu phát hiện mất gói và khôi phục lại trình tự chuỗi gói tin. Giá trí khởi đầu của trường này là một giá trị ngẫu nhiên. Vd: máy phát nhận được luồng gói tin RTP có khoảng trống giữa 2 hai số thứ tự 86, 89 thì máy phát sẽ biết rằng gói tin có số thự tự 87, 88 đã bị mất.
·   Timestamp: 32 bits. Trường xác định thời điểm lấy mẫu của octets đầu tiên trong gói tin RTP. Thời điểm lấy mẫu phải được  đo bằng một đồng hồ tăng đều đặn và tuyến tính về mặt thời gian để cho phép việc đồng bộ và tính toán độ jitter. Tần số đồng hồ này là không cố định mà phụ thuộc vào loại định dạng của payload. Giá trị khởi đầu trường timestamp cũng được chọn một cách ngẫu nhiên. Một vài gói tin RTP có thể mang cùng một giá trị của trường này nếu như chúng được phát đi cùng một lúc về mặt logic (ví dụ như các gói của cùng một khung hình video). Trong trường hợp các gói dữ liệu được phát ra sau những khoảng thời gian bằng thì giá trị timestamp được tăng một cách đều đặn. Ngược lại, trong trường hợp khác giá trị timestamp sẽ tăng không đều đặn.
·   SSRC (Synchronization Source Identifier): 32 bits. Giá trị của trường SSRC chỉ ra nguồn đồng bộ (nguồn phát gói tin RTP từ micro, camera hay RTP mixer) của gói tin RTP, giá trị này được chọn ngẫu nhiên. Trong một phiên kết nối RTP thì có nhiều nguồn đồng độ phát ra nhiều dòng gói tin RTP. Máy thu sẽ nhóm các dòng gói tin RTP cùng nguồn để phát lại tín hiệu thời gian thực (real-time). 
·   CSRC (Contributing Source List): từ 0 đến 15 items, 32 bits. Trường CSRC xác định các nguồn đóng góp payload cho gói tin (CSRC cho phép xác định tối đa 15 nguồn đóng góp tương ứng vớ 15 items). Giá trị của CSRC được cho bởi trường CC và giá trị này được chèn vào mỗi items bằng các bộ trộn (mixer).
- Phần header mở rộng:

Cơ chế mở rộng của RTP cho phép những ứng dụng riêng lẻ của giao thức RTP thực hiện được với những chức năng mới đòi hỏi những thông tin thêm vào phần header của gói tin. Cơ chế này được thiết kế để một vài ứng dụng có thể bỏ qua một số ứng dụng khác lại có thể sử dụng được phần nào đó. Nếu như trường X (bit X) trong phần header cố định được đặt bằng 1 thì theo sau phần header cố định là phần header mở rộng có chiều dài thay đổi. 16 bit đầu tiên của  trong phần tiêu đề được sử dụng với mục đích riêng cho từng ứng dụng được định nghĩa bởi profile (thường nó được sử dụng để phân biệt các loại tiêu để mở rộng). 16 bits kế tiếp mang giá trị chiều dài của phần header  mở rộng tính theo đơn vị là 32 bits (Giá trị này không bao gồm 32 bit đầu tiên của phần header mở rộng)

Saturday, July 19, 2014

Post Office Protocol Version 3 (POP3) là giao thức ở lớp ứng dụng, được dùng để truy cập email trên mail server, thông qua kết nối TCP trên cổng 110. Ngoài giao thức POP3, IMAP cũng là giao thức truy cập mail thông dụng nhất hiện nay. Hầu hết các ứng dụng email và mail server điều sử dụng giao thức POP3 và IMAP trên internet. Các nhà cung cấp dịch vụ mail lớn như Gmail, Microsoft Mail và Yahoo!Mail điều cung cấp cả hai dịch vụ IMAP và POP3. POP3 được định nghĩa trong RFC 1081, trước POP3 là hai phiên bản POP1 (trong RFC 918) và POP2 (trong RFC 937).
Phương thức hoạt động của POP3
POP3 được xem như giao thức truy cập mail  đơn giản nên có nhiều hạn chế về chức năng. POP3 bắt đầu phiên làm việc khi user agent mở kết nối TCP đến mail server trên cổng 110. Phiên làm việc POP3 gồm ba pha: authorization, transaction và update. Trong phiên làm việc này thì user agent sẽ đưa ra các lệnh và server sẽ hồi đáp lại bằng lệnh trả lời. Có hai phản hồi từ server: +OK là server thông báo lệnh được chấp nhận và  –ERR thông báo có lệnh có lỗi.
-    Pha đầu tiên, authorization: user agent sẽ gửi username và password đến để chứng thực người dùng bằng cách sử dụng hai lệnh: user <username> và pass<password>. 
Vd: Để minh họa cho pha authorization, ta telnet trực tiếp đến POP3 server trên cổng 110 và nhập các lệnh:
telnet mailServer 110
S:+OK POP3 server ready
C:user An
S:+OK
C: pass hutech123
S: +OK user successfully logged on
(Nếu bạn viết sai một câu lệnh, POP3 server sẽ trả lời –ERR)
-    Pha kế tiếp, transaction:user agent lấy thông điệp mail, trong pha này người dùng có thể đánh dấu thông điệp để xóa, loại bỏ đánh dấu và nhận thống kê mail. Một user agent đang sử dụng POP3 có thể cấu hình chế độ “tải về và xóa” (sau khi tải mail về thì mail server sẽ xóa mail đã tải) hoặc “tải về và giữ” (sau khi tải mail về thì mail server vẫn giữ các mail trong mail box) các thông điệp. Các câu lệnhlist (liệt kê số thông điệp trong danh sách) , retr (lấy thông điệp bằng số), dele (xóa) và quit (thoát) có cú pháp định nghĩa trong RFC 1939 vàđược đưa ra bởi một user agent phụ thuộc vào hai chế độ mà user agent đang hoạt động.
Ví dụ, giả sử người sử dụng có hai thông điệp trong mail. Trong cuộc đối thoại dưới đây C user agent và S là mail server, sẽ diễn ra như sau:
C: list
S: 1 498
S: 2 912
S: .
C: retr 1
S: <message 1 contents>
S: .
C: dele 1
C: retr 2
S: <message 1 contents>
S: .
C: dele 2
C: quit
S: +OK POP3 server signing off

-    Pha sau cùng, pha update xảy ra khi client đưa ra lệnh quit để kết thúc phiên POP3, lúc này các mail server tiến hành xóa thông điệp đã đánh dấu.

Thursday, July 10, 2014

Simple Mail Transfer Protocol (SMTP) là giao thức truyền tải e-mail qua mạng, SMTP cho phép chuyển thông điệp mail từ mail server của người gửi đến mail server của người nhận. Thông điệp mail ở định dạng ASCII 7 bit. SMTP được định nghĩa trong RFC 821, điều chỉnh trong RFC 1123 và mở rộng trong RFC 2821 với tên gọi ESMTP (Extended SMTP). SMTP sử dụng cổng 25 trên nền TCP.
Trong RFC 822 định nghĩa tiêu chuẩn của định dạng thông điệp maill, gồm 2 phần: dòng tiêu đề (header) và phần thân (body).
-    Mỗi tiêu đề có một dòng tiêu đề from,to, subject và một số dòng tiêu đề khác từ lệnh SMTP. Sau tiêu đề là một dòng trống.
-    Phần thân chứa các thông điệp định dạng ở mã ASCII. Mỗi dòng thông thông điệp được kết thúc bằng một dấu chấm.
Một hệ thống e-mail có ba thành phần chính: user agents, mail server và giao thức SMTP.
-    User agentcho phép người dùng đọc, trả lời, chuyển tiếp, lưu và soạn thông điệp mail. User agent là những phần mềm gửi mail như Microsoft’s Outlook, Apple Mail (những phần mềm này sử dụng giao diện GUI).
-    Mail server là thành phần cốt lỗi trong hạ tầng hệ thống e-mail. Khi người dùng soạn xong thông điệp thì user agent sẽ gửi thông điệp đến mail server và thông điệp được đặt trong hàng đợi (message queue), sau đó sẽ gửi đến mail server của người dùng khác và được lưu tại mailbox.
-    Giao thức SMTP đảm nhiệm việc truyền tải thông điệp từ mail server của người gửi đến mail server của người nhận. SMTP thiết lập kết nối TCP trên cổng 25.

Hình 1. Hệ thống email
Phương thức hoạt động của SMTP:
-          Để mô tả hoạt động cơ bản của giao thức SMTP một cách dễ hiểu ta xem xét một hoạt cảnh phổ biến “An gửi thông điệp cho Bình” ở hình

Hình 2. Hoạt cảnh gửi email của An và Bình

Ø  Bước 1: An khởi động useragent của mình, cung cấp địa chỉ e-mail của Bình, soạn thông điệp và chỉ thị user agent gửi mail.
Ø  Bước 2: User agent của An gửi thông điệp đến mail server của An và thông điệp được đặt trong hàng đợi.
Ø  Bước 3: SNMP client chạy trên mail server của An phát hiện ra thông điệp trong hàng đợi và tiến hành mở kết nối TCP đến SMTP server chạy trên mail server của Bình.
Ø  Bước 4: Sau khi thực hiện bắt tay chào hỏi (handshaking), SMTP client của An sẽ gửi thông điệp của An đến kết nối TCP.
Ø  Bước 5: Tại mail server của Bình, SMTP server nhận được thông điệp và lưu lại trên mailbox.
Ø  Bước 6: Khi Bình khởi động user agent của mình thì sẽ thấy mail của An trong mailbox.
-          Lưu ý: SMTP không sử dụng các mail server trung gian để gửi thư, mà chỉ sử dụng một kết nối TCP trực tiếp giữa hai mail server ngay cả khi hai mail server cách nhau một khoản cách rất xa. Ví dụ: mail server của An ở thành phố Hồ Chí Minh và mail server của Bình ởMát-xcơ-va (thủ đô của Nga) thì chỉ có các kết nối TCP trực tiếp giữa hai mail server. Khi mail server của Bình bận, thì thông điệp sẽ được lưu trong hàng đợi của mail server An và chờ đợi để gửi lại tin nhắn.
SMTP truyền thông điệp mail qua ba pha: handshaking (chào hỏi), truyền thông điệp, đóng kết nối.
-          Pha handshaking: đầu tiên, SMTP client (chạy trên mail server bên gửi) thiết lập kết nối TCP trên cổng 25 tới SMTP server (chạy trên mail server bên nhận). Nếu SMTP server gặp sự cố thì client sẽ cố gắng kết nối lại. Khi kết nối được thiết lập, SMTP server và SMTP client thực hiện một số chào hỏi, SMTP client sẽ cho biết địa chỉ email của người gửi và địa chỉ email của người nhận.
-          Pha truyền thông điệp: sau cuộc chào hỏi, SMTP client tiến hành gửi thông điệp trên đường truyền tin cậy TCP.
-          Pha đóng kết nối: Nếu client muốn gửi tiếp tục gửi thông điệp thì lặp lại quá trình trên trong cùng kết nối TCP, còn không thì chỉ thị TCP đóng kết nối
Ví dụ về hoạt cảnh của client (C) là An (với tải khoản anhutech@gmail.com) gửi thông điệp "Hi Binh”,“How are you?” từ mail server gmail.com đến mail server yahoo.com của server (S) là Bình (với tài khoản binhmoskva@yahoo.com)
S: 220 yahoo.com
C: HELO gmail.com
S: 250 Hello gmail.com, pleased to meet you
C: MAIL FROM: <anhutech@gmail.com>
S: 250 an@gmail.com... Sender ok
C: RCPT TO: <binhmoskva@yahoo.com>
S: 250 binh123@yahoo.com ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Hi Binh
C: How are you?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 yahoo.com closing connection
Client sử dụng các lệnh: HELO (viết tắt cho HELLO), MAIL FROM, RCPT TO, DATA, và QUIT với ý nghĩa giống tên của chúng. Server trả lời cho mỗi lệnh bằng một mã số trả lời và một số (tùy chọn) giải thích bằng tiếng Anh. Mỗi thông điệp được client gửi đi bắt đầu bằng lệnh HELO gmail.com và chỉ đưa ra QUIT sau khi tất cả các thông điệp đã được gửi và server thực hiện đóng kết nối TCP

Khi cần thực hiện cuộc thoại trực tiếp đến SMTP server, client có thể thực hiện lệnh “telnet<serverName> 25”. Sau khi làm điều này client sẽ nhận được trả lời 220 của server. Client có thể thực hiện telnet đến mail server của mình hay các mail server khác.