You are on page 1of 4

Bài tập lớn môn Mạng nâng cao Dành cho sinh viên khóa K52 Quy định

chung: sinh viên tự chọn một trong các bài được cho sau đây. Trong một nhóm sinh viên, mỗi sinh viên chọn một bài tập riêng không trùng với các bạn khác. Riêng các bài tập từ 6 – 9 SV được phép lập nhóm gồm 2 bạn. Bài 1: (cần phải sử dụng 2 tiến trình độc lập (không phải cha - con), sử dụng các cơ chế như semaphores để đồng bộ đọc ghi) Tạo ra 2 tiến trình, một tiến tr ình nhận dữ liệu gõ vào từ bàn phím và ghi vào bộ nhớ dùng chung (shared memory) khi nhận được ký tự xuống dòng. Tiến trình thứ hai đọc dữ liệu trong bộ nhớ dùng chung và ghi vào file. Chú ý khi tiến trình thứ nhất ghi thì tiến trình thứ 2 không được phép đọc, khi tiến tr ình thứ hai đọc thì tiến trình thứ nhất không được phép ghi. Bài 2: (hai tiến trình phải độc lập, không phải tiến trình cha - con) Cũng đề bài như trên, tuy nhiên hai tiến trình đọc và ghi không giao tiếp với nhau thông qua bộ nhớ dùng chung mà giao tiếp với nhau thông qua UDP socket. Bài 3: (client và server có thể vừa gửi vừa nhận dữ liệu đồng thời, sử dụng hàm select()) Tạo ra một chương trình trao đổi các bản tin text giữa hai máy tính thông qua TCP socket: khi người sử dụng tại một trong hai máy tính gõ một bản tin text thì người sử dụng phía bên kia sẽ nhận được bản tin đó và hiển thị lên một cửa sổ trên màn hình. Bài 4: (2 tiến trình P1 và P2 phải là 2 tiến trình độc lập) Một hệ thống tính toán bao gồm 3 tiến trình.  Tiến trình thứ nhất (P1) tính toán chuỗi sau: n 1 xn   i  0 4i  1  Tiến trình thứ hai (P2) tính toán chuỗi sau: n 1 yn   với n ≠0 và y 0  0 i 1 4i  1  Tiến trình thứ ba (P3) in ra màn hình chuỗi z n  x n  y n , với n=0, 1, 2, … Sử dụng 01 FIFO (với cơ chế đồng bộ chỉ số n) để truyền các tham số x n và y n từ P1 và P2 cho P3. Có nhận xét gì về kết quả zn? Bài 5: Tạo ra một tiến trình để tính số Pi theo công thức sau:  4    (1) i ; 2i  1 i 0 Khi bấm Ctr-C thì sẽ in giá trị của Pi, i ra màn hình đồng thời tiến trình sẽ đợi người sử dụng gõ phím. Nếu nhận được phím Q, tiến trình kết thúc, nếu không tiến tr ình tiếp tục tính toán.

client sẽ gửi trả server bản tin bye bao gồm 2 trường: o Trường nhận dạng: Tương tự bản tin hello. quy ước trong bản tin hello thì trường này có giá trị 0. Trường này chỉ thị độ dài của toàn bộ bản tin hello. Chú ý: cần sử dụng hàm select(). quy ước trong bản tin bye thì trường này có giá trị 2. client sẽ hiển thị nội dung của trường nhận dang client và trường trạng thái lên màn hình. server sẽ hiển thị email người gửi. nếu không trường trạng thái có nội dung là “failed”. o Trường kích thước bản tin: chứa một số nguyên 32bit. quy ước trong bản t in acknowledgement thì trường này có giá trị 1. sau đó trả lời client bằng bản tin acknowledgement với trường trạng thái là “success” nếu việc lưu email thành công. tuy nhiên client và server trao đổi thông tin với nhau thông qua UDP socket.com). o Trường nhận dạng bản tin: là một số nguyên 32 bit. Phía client sẽ gửi bản tin hello đến server khi chạy chương trình (có tên là client) theo cú pháp sau: client <host-name of server> (địa chỉ port tùy ý do sinh viên t ự chọn). Server nhận được bản tin bye thì hiển thị dòng chữ “remote client closes socket” sau đó cũng đóng socket tương ứng với client đó. gửi bản tin bye sau đó đóng socket. o Trường nhận dạng client: trường này trả lại email của sinh viên lập trình mà server nhận được trong bản tin hello. o Trường trạng thái: là một chuỗi ký tự thể hiện trạng thái server như “success” hoặc “failed”. Nếu chuỗi ký tự nhận được không giống với chuỗi ký tự kể trên thì cả bản tin sẽ bị bỏ qua. Khi nhận được bản tin acknowledgement. o Trường nhận dạng người gửi: trường này chứa email của sinh viên lập trình và ký tự NULL ở cuối (thí dụ tran_van_a@yahoo. o Trường kích thước bản tin: tương tự bản tin hello.  Bản tin acknowledgement (server  client): Khi nhận được bản tin hello. lưu email người gửi vào một danh sách email (một array có kiểu string). Bài 7: Tương tự bài 6. o Trường nhận dạng bản tin: là một số nguyên 32 bit. . khi nhận được hello. Có 3 loại bản tin khác nhau:  Bản tin hello (client  server): Bản tin hello sẽ gồm 4 trường theo thứ tự sau: o Trường nhận dạng: là 1 chuỗi gồm 11 ký tự (kể cả ký tự NULL ở cuối cùng): dientu-K50.  Bản tin bye (client  server): Khi nhận được bản tin acknowledgement. server sẽ trả lời client bằng bản tin acknowledgement bao gồm 5 trường: o Trường nhận dạng: Tương tự bản tin hello.Bài 6: (email người gửi phải nhập vào từ bàn phím) Thiết kế và lập trình một hệ thống client – server thực hiện các chức năng sau: Client và server trao đổi thông tin với nhau thông qua TCP socket. o Trường nhận dạng bản tin: là một số nguyên 32 bit.

Hệ thống gồm các phần: chat client và chat server. SỐ THỨ TỰ. (2) trường time stamp chứa 1 cấu trúc struct timeval. Trước khi gửi gói từ client đến ping server. Khi nhận được bản tin connection setup. server sẽ thiết lập một kết nối TCP với client bị gọi với địa chỉ IP và địa chỉ port đã được chỉ ra trong bản tin connection setup. chat server phải chuyển bản tin text đó đến client phía bên kia. Với bản tin data exchange thì trường này có giá trị 1. Với bản tin connection teardown thì trường này có giá trị 2. sau đó hiển thị ra màn hình. được gọi với cú pháp: ping-udp <địa chỉ IP máy ping server>:<địa chỉ port> hoặc ping-udp <tên máy ping server>:<địa chỉ port>. một kết nối TCP sẽ được thiết lập giữa client đó và chat server. o Trường địa chỉ: dài 6 bit bao gồm địa chỉ IP của client bị gọi (4 bit) và địa chỉ port của client bị gọi (2 bit).  Connection teardown: khi người sử dụng bấm Ctrl-C thì bản tin connection teardown sẽ được gửi trước khi chương trình ở phía client kết thúc. Ứng dụng gồm 2 phần:  Ping client: gửi các gó i UDP ngắn với 2 trường: (1) số thứ tự gói là một số nguyên (unsigned short). client lấy thời điểm nhận được gói và từ đó tính được trể Round-Trip-Time (RTT) bằng cách trừ đi time stamp. client gửi bản tin connection setup. Sau khi kết nối TCP được thiết lập.  Data exchange: được sử dụng để trao đổi dữ liệu giữa client và server. có cơ chế register) Thiết kế và lập trình một hệ thống client – server thực hiện các chức năng trao đổi các bản tin dưới dạng chuỗi ký tự thông qua TCP socket. cũng sử dụng bản tin data exchange. bao gồm các trường: o Trường nhận dạng bản tin: là một số nguyên 32 bit. Bài 9: Chat relay server (nên support nhiều đôi client. Connection teardown gồm 1 trường: o Trường nhận dạng bản tin: là một số nguyên 32 bit. Bao gồm các trường: o Trường nhận dạng bản tin: là một số nguyên 32 bit. . nó liền gửi gói đó ngay lập tức trở lại client vừa gửi gói. tuy nhiên sử dụng UDP thay vì ICMP. Chương trình có tên là ping-udp.Bài 8: ping-udp (PHẢI CÓ BIỂU ĐỒ TRẠNG THÁI CÁC BẢN TIN GỬI VÀ NHẬN: TIMEOUT. Với bản tin connection setup thì trường này có giá trị 0. PHẢI GỬI CÁC GÓI LIÊN TIẾP TRƯỚC KHI NHẬN ĐƯỢC REPLY TỪ SERVER) Tạo ra một chương trình tương tự như chương tr ình ping ở Linux/Unix/Windows. Khi nhận được dữ liệu được gửi từ một client. o Trường dữ liệu: chứa bản tin text cần trao đổi.  Ping server: khi nhận được gói từ client gửi tới. máy client sẽ gắn một nhãn thời gian chứa thời điểm gửi gói. Có 3 loại bản tin được trao đổi giữa client và server:  Connection setup: Khi một người sử dụng đánh dòng lệnh remote-chat <địa chỉ IP server>:<địa chỉ port> <địa chỉ IP của client bị gọi>:<địa chỉ port>. Khi nhận được các gói phản hồi từ server. o Trường độ dài dữ liệu: là một số nguyên chỉ ra độ dài của bản tin text.

Khi nhận được bản tin này. chat server sẽ gửi bản tin đến client tương ứng. . client sau khi nhận được connection teardown thì hủy bỏ kết nối TCP với server và kết thúc chương trình.