1. Trang chủ
  2. » Luận Văn - Báo Cáo

XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC CHỨC NĂNG CỦA RDT 2.1

16 394 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 275,05 KB

Nội dung

LỜI MỞ ĐẦU 3 CHƯƠNG I: TỔNG QUAN ĐỀ TÀI 4 1.1. Lý do chọn đề tài 4 1.2. Phạm vi đề tài 4 1.3. Yêu cầu của đề tài 4 1.4. Kết quả dự kiến đạt được 4 CHƯƠNG II: CƠ SỞ LÝ THUYẾT 5 2.1. Tổng quan RDT 5 2.1.1. Nguyên tắc truyền dữ liệu đáng tin cậy 5 2.1.2. Ưu điểm so với các phiên bản trước 5 2.2. Mô hình RDT2.1 5 2.3. Hiện thực code bang c 7 CHƯƠNG III: KẾT LUẬN 15 TÀI LIỆU THAM KHẢO 16

Trang 1

Đại Học Quốc Gia TP.HCM Trường Đại Học Công Nghệ Thông Tin

Khoa Mạng Máy Tính Và Truyền Thông

 BÁO CÁO ĐỒ ÁN

XÂY DỰNG CHƯƠNG TRÌNH

MÔ PHỎNG CÁC CHỨC NĂNG CỦA RDT 2.1

GV hướng dẫn: ThS Nguyễn Quang Minh

SV thực hiện: 1 Đặng Thái Hòa -12520596

2 Mạch Văn Nguyên -12520881

3 Nguyễn Văn Nhân -12520883

4 Nguyễn Thanh Tâm -12520909 Môn học: Lập trình mạng căn bản

Lớp: NT106F12

TP.Hồ Chí Minh, Tháng 1 năm 2015

Trang 2

MỤC LỤC

LỜI MỞ ĐẦU 3

CHƯƠNG I: TỔNG QUAN ĐỀ TÀI 4

1.1 Lý do chọn đề tài 4

1.2 Phạm vi đề tài 4

1.3 Yêu cầu của đề tài 4

1.4 Kết quả dự kiến đạt được 4

CHƯƠNG II: CƠ SỞ LÝ THUYẾT 5

2.1 Tổng quan RDT 5

2.1.1 Nguyên tắc truyền dữ liệu đáng tin cậy 5

2.1.2 Ưu điểm so với các phiên bản trước 5

2.2 Mô hình RDT2.1 5

2.3 Hiện thực code bang c# 7

CHƯƠNG III: KẾT LUẬN 15

TÀI LIỆU THAM KHẢO 16

Trang 3

LỜI MỞ ĐẦU

Ngày nay, với sự phát triển của khoa học kỹ thuật, máy tính trở nên phổ biến với mọi người, nó mang lại cho con người khả năng to lớn và làm được những công việc phi thường Máy tính ra đời không chỉ là công cụ giải phóng sức lao động, hỗ trợ tối đa trong sản xuất mà còn là phương tiện học tập, giải trí bổ ích trong đời sống của mọi người Sự phát triển của máy tính cũng như công nghệ thông tin là phương tiện tiếp cận nhanh nhất đến các thành tựu của khoa học kỹ thuật Điều đó sẽ mang lại những thành tựu to lớn cho sự phát triển của kinh tế đất nước.

Sức mạnh của máy tính được tăng lên nhiều lần khi các máy tính được kết nối thành một mạng máy tính Là cơ sở hạ tầng cho phép truyền dữ liệu, trao đổi thông tin với tạo nên một môi trường giao tiếp Khi dữ liệu được truyền đi từ máy gửi đến máy nhận để biết được những gói tin nào tới đích, gói tin nào chưa tới hay gói tin tới mà bị hỏng thì với giao thức RDT2.1 sẽ giải quyết được những vấn đề này để việc truyền dữ liệu được một cách tin cậy.

Trang 4

CHƯƠNG I: TỔNG QUAN ĐỀ TÀI 1.1 Lý do chọn đề tài

 Lý Do Khách Quan Ngày nay, trên thế giới,với sự phát triển đến chóng mặt của công nghệ thông tin thì những tiện ích như trao đổi, tìm kiếm thông tin, giải trí ( nghe nhạc, xem fim, chơi game…) dần trở nên phổ biến và có mặt trong hầu hết các lĩnh vực của đời sống.

Câu hỏi đặt ra là làm thế nào để trao đổi được những dữ liệu, thông tin một cách nhanh chóng, đảm bảo độ tin cậy, chính xác và hiệu quả cho người sử dụng Để giải quyết vấn đề trên, nhóm em đã chọn đề tài này.

 Lý Do Chủ Quan Nhóm thực hiện đề tài này nhằm mục đích tìm hiểu rõ hơn và có thể hiện thực

được cách truyền dữ liệu tin cậy như thế nào.

1.2 Phạm vi đề tài

 Điều khiển ACK/NAK

- Khi máy nhận nhận được gói tin thì sẽ báo về cho máy gửi ACK là đã nhận.

- Khi máy nhận nhận được gói tin nhưng gói tin bị hỏng sẽ báo về cho máy gửi NAK để máy gửi gửi lại gói tin hỏng.

1.3 Yêu cầu của đề tài

 Hiện thực RDT2.1

1.4 Kết quả dự kiến đạt được

 Triển khai thành công RDT2.1 trên C#

Trang 5

CHƯƠNG II: CƠ SỞ LÝ THUYẾT 2.1 Tổng quan RDT

2.1.1 Nguyên tắc truyền dữ liệu đáng tin cậy

2.1.2 Ưu điểm so với các phiên bản trước

RDT1.0: truyền dữ liệu trên một kênh tin cậy.

- Không có bít lỗi

- Không mất mát gói

RDT2.0: kênh với các lỗi.

- Sử dụng checksum để kiểm tra lỗi.

- Sử dung ACKs/NAKs thong báo bên nhận những gói đã nhận mà gói lỗi.

- Khó khăn: khi ack/nak bị hỏng thì giải quyết như thế nào.

RDT2.1: với có khả xữ lý các ack/nak bị hỏng mà RDT2.0 không xử

lý được Như vậy với RDT2.1 tối ưu và tin cậy hơn so vói các phiên bản trên.

2.2 Mô hình RDT2.1

 RDT2.1 bên gửi xử lí lỗi ACK/NAK

Giải quyết lỗi

bit

Gởi kèm theo thông tin kiểm tra lỗi

Kiểm tra có xảy ra lỗi bit

Sử dụng các phương pháp kiểm tra lỗi

Hành động khi xảy ra lỗi bit

Checksum, parity checkbit, CRC, …

Báo về bên gởi

Giải quyết

mất gói

Định nghĩa trường hợp mất gói

Gởi tín hiệu báo

Chờ nhận tín hiệu báo Gởi gói tin báo hiệu ACK,

NAK Hành động khi phát hiện

mất gói

Trang 6

 RDT2.1 bên nhận xử lí lỗi ACK/NAK

Trang 7

2.3 Hiện thực code bang c#

Rdt rerver:

namespace RDT_Server

{

publicpartialclassForm1 : Form

{

privatesegment[] segments = newsegment[10];//mảng 10 phần tử cho segment

privateint index = -1; //Index

public Form1()

{

InitializeComponent();

}

privatevoid Serve()

{

try

{

int recv;//Number

int packet_number;//Packet Number

bool work = true;//Biến Boolean cho vòng lặp while

IPEndPoint ipep = newIPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);

Socket newsock = newSocket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

newsock.Bind(ipep);

newsock.Listen(10);

Trang 8

byte[] data;

foreach (Control var inthis.Controls)//Check Controls trong Form

{

for (int i = 1; i < 11; i++)

{

if (var isLabel && (var.Name == "label" + i.ToString()))

{

var.BackColor = Color.Silver;

}

}

}

while (work)

{

Socket client = newsock.Accept();

data = newbyte[4];

recv = client.Receive(data);

byte[] packet_tag = newbyte[3];

packet_tag[0] = data[1];

packet_tag[1] = data[2];

packet_tag[2] = data[3];

packet_number = Convert.ToInt16(Encoding.ASCII.GetString(packet_tag, 0, 2));

int corrupted = Convert.ToInt16(Encoding.ASCII.GetString(packet_tag, 2, 1));

index = packet_number;

if (packet_number >= 15)

{

work = false;

}

segments[packet_number - 1].data[0] = data[0];

if (corrupted == 0)//0 :không lỗi 1:lỗi

{

segments[packet_number - 1].reached_dest = true;//nhận segment

segments[packet_number - 1].packet_pos = packet_number;

//không lỗi :gửi ACK

data = newbyte[3];

data = Encoding.ASCII.GetBytes("ACK");

client.Send(data, data.Length, SocketFlags.None);

foreach (Control var inthis.Controls)//Checks tất cả controls trong Form

{

if (var isLabel && (var.Name == "label" + segments[packet_number -

1].packet_pos.ToString()))

Trang 9

{

var.BackColor = Color.RoyalBlue; }

}

}

else {

segments[packet_number - 1].reached_dest = false; segments[packet_number - 1].packet_pos = packet_number; data = newbyte[4]; data = Encoding.ASCII.GetBytes("NACK"); client.Send(data, data.Length, SocketFlags.None); foreach (Control var inthis.Controls)//Checks tất cả controls trong Form {

if (var isLabel && (var.Name == "label" + segments[packet_number - 1].packet_pos.ToString())) {

var.BackColor = Color.Crimson; }

}

}

client.Close(); }

}

catch (Exception ex) {

MessageBox.Show(ex.Message,"Exception",MessageBoxButtons.OK,MessageBoxIcon.Error);//Exceptio n Message is shown }

}

privatevoid btnServe_Click(object sender, EventArgs e) {

Thread ta = newThread(newThreadStart(Serve)); ta.Start(); lblSrvState.Text = "Server ĐANG hoạt động!"; }

privatevoid btnDownload_Click(object sender, EventArgs e) {

try {

bool DownloadEnable = false; for (int i = 0; i < 10; i++) {

if (segments[i].reached_dest == false)//Check segments {

DownloadEnable = false; break; }

else {

Trang 10

DownloadEnable = true;

}

}

if (index >= 10 && DownloadEnable)

{

SaveFileDialog sfd = newSaveFileDialog();

sfd.Title = "Select a text file";

sfd.Filter = "Text Files (*.txt)|*.txt";

if (sfd.ShowDialog(this) == DialogResult.OK)//check đã ghi tên file chưa

{

FileStream fs = newFileStream(sfd.FileName, FileMode.Create);

StreamWriter swtr = newStreamWriter(fs, Encoding.GetEncoding(

"ISO-8859-9"));//Stream Writer sử dụng Turkish Encoding

byte[] receivedData = newbyte[10];

for (int i = 0; i < 10; i++)

{

receivedData[i] = segments[i].data[0];

}

string words = Encoding.ASCII.GetString(receivedData, 0, 10);

swtr.WriteLine(words);

swtr.Flush();

fs.Close();

Process process = newProcess();

process.StartInfo.FileName = sfd.FileName;

process.StartInfo.Verb = "Open";

process.StartInfo.CreateNoWindow = true;

process.Start();

}

}

else

{

MessageBox.Show("No File Received or File is Corrupted! ", "Failure");

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

privatevoid Form1_Load(object sender, EventArgs e)

{

for (int i = 0; i < 10; i++)

{

segments[i] = newsegment();

segments[i].data = newbyte[1];

}

foreach (Control var inthis.Controls)

{

if (var isLabel && var.Name.StartsWith("label"))

{

var.Text = var.Text.Replace("label", "Segment#");

Trang 11

}

}

ToolTip tipServe = newToolTip();

tipServe.IsBalloon = true;

tipServe.ToolTipTitle = "RDT Simulation";

tipServe.ToolTipIcon = ToolTipIcon.Info;

tipServe.SetToolTip(btnServe, "Click to Start Simulation");

ToolTip tipDownload = newToolTip();

tipDownload.IsBalloon = true;

tipDownload.ToolTipTitle = "RDT Simulation";

tipDownload.ToolTipIcon = ToolTipIcon.Info;

Random random = newRandom();

}

privatevoid numProbability_ValueChanged(object sender, EventArgs e)

{

Random random = newRandom();

}

}

classsegment

{

privatebyte[] Data;

publicbyte[] data

{

get { return Data; }

set { Data = value; }

}

privatebool Reached_dest;

publicbool reached_dest

{

get { return Reached_dest; }

set { Reached_dest = value; }

}

privateint Packet_pos;

publicint packet_pos

{

get { return Packet_pos; }

set { Packet_pos = value; }

}

public segment()

{

packet_pos = 0;

data = newbyte[1];

}

Trang 12

}

classProbability {

privateint index; privatebool used; public Probability() {

used = false; index = -1; }

publicbool Used {

get { return used; } set { used = value; } }

publicint Index {

get { return index; } set { index = value; } }

}

}  Rdt client: Hàm tải file lên: privatevoid btnFileUpload_Click(object sender, EventArgs e) {

index = 0; for (int i = 0; i < 10; i++) {

segments[i] = newsegment(); segments[i].data = newbyte[1]; }

OpenFileDialog ofd = newOpenFileDialog(); ofd.Title = "Select a text file to Send"; ofd.Filter = "Text Files (*.txt)|*.txt"; if (ofd.ShowDialog(this) == DialogResult.OK) {

FileStream fs = newFileStream(ofd.FileName, FileMode.Open); file = ReadFully(fs, 10); for (int i = 0; i < 10; i++) {

segments[i].data[0] = file[i];

}

btnConnect.Enabled = true; foreach (Control var inthis.Controls) {

if (var isLabel && var.Name.StartsWith("label")) {

var.BackColor = Color.PaleGreen; }

}

Trang 13

fs.Close();

}

}

Hàm gửi file:

privatevoid btnConnect_Click(object sender, EventArgs e)

{

bool firstSend = true;

if (index > 0 && index <= 10)

{

if (index == 1)

{

for (int i = 0; i < index; i++)

{

if (segments[i].packet_ack == false)

{

for (int j = 0; j < index; j++)

{

SendSegments(j + 1);//gửi lại Segments

}

firstSend = false;

break;

}

}

}

else

{

for (int i = index - 1; i < index; i++)

{

if (segments[i].packet_ack == false)

{

for (int j = index - 1; j < index; j++)

{

SendSegments(j + 1);//gửi Segments

}

firstSend = false;

break;

}

}

}

if (firstSend)

{

Thread[] threads = newThread[1];

threads[0] = newThread(newThreadStart(SendSegment));

threads[0].Start();

Thread.Sleep(0);

}

}

if (index == 0 && firstSend)

{

Thread[] threads = newThread[1];

threads[0] = newThread(newThreadStart(SendSegment));

threads[0].Start();

Thread.Sleep(0);

Trang 14

}

}

Trang 15

CHƯƠNG III: KẾT LUẬN

 Kết quả đạt được:

Đồ án hoàn thành giúp người đọc có cái nhìn khái quát hơn về quá trình truyền dữ liệu trên mạng và hiểu rõ quá trình truyền tin tin cậy như thế nào.

 Kết luận:

Với RDT2.1 có thể giúp người lập trình lập trình những ứng dụng mạng có thể truyền tin tin cậy và đảm bảo hiệu quả.

TÀI LIỆU THAM KHẢO

1 Slide môn nhập môn mạng máy tinh (uit)_chương 3

Trang 16

2 http://data.tailieuhoctap.vn/books/cong-nghe-thong-tin/quan-tri-mang/file_goc_775131.pdf

3 https://www.youtube.com/watch?v=9z-BSRnxjHU

Ngày đăng: 19/03/2018, 11:30

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w