Tìm hiểu về giao thức mạng tcp ip

100
Luận văn tốt nghiệp Phan Thăng CHƯƠNG I. MẠNG MÁY TÍNH CHƯ Ơ N G I. MẠNG MÁY TÍNH .........................5 .I MẠNG MÁY TÍNH ................................. 5 .II PHÂN LOẠI MẠNG MÁY TÍNH ........................5 .II.1. Phân loạitheo kiến trúc (topology)của m ạ ng ......5 .II.1.1. Mạng điểm-điểm (point-to-pointnetwork) ......6 .II.1.2. Mạng quảng bá (broadcastnetwork) ..........6 .II.2. Phân loạitheo phương thức chuyển mạch (Swiched Method) .........................................7 .II.2.1. Chuyển m ạch kênh (Circuit Swiched Network). .7 .II.2.2. Chuyển m ạch tinbáo (Message Swiched Network) ...................................... 7 .II.2.3. Chuyển m ạch gói (Packed Swiched Network). . .7 .II.3. Phân loạitheo phạ m vihoạt động ...............7 .II.3.1. Mạng LAN (LocalArea Network) ..............7 .II.3.2. Mạng MAN (Metropolian Area Network) ........7 .II.3.3. Mạng WAN (Wide Area Network) .............8 .II.3.4. Liên m ạ ng (internet) .......................8 CHƯ Ơ N G II .GIAO TH Ứ C TRUYỀN THÔNG VÀ CÁC HÌNH THAM CHIẾU .......................................10 .I GIAO THỨC TRUYỀN THÔNG .......................10 .II HÌNH THAM CHIẾU OSI ........................11 .II.1. Giớithiệu m ô hình OSI ........................11 .II.2. Các tầng của mô hình OSI .....................13 .II.2.1. Tầng vật lý(Physicallayer) .................13 .II.2.2. Tầng liênkết dữ liệu(Data linklayer) ........13 .II.2.3. Tầng m ạ ng (Network layer) ................14 .II.2.4. Tầng giao vận (Transportlayer) .............14 .II.2.5. Tầng phiên (Session layer) .................15 .II.2.6. Tầng trình diễn (Presentation layer) .........15 .II.2.7. Tầng ứng dụng (Applicationlayer) ...........15 .II.3. Những vấn đề về OSI .........................15 .III KIẾN TRÚC GIAO THỨC IPX/SPX....................16 .III.1. Kiến trúc giao thức IPX/SPX...................16 .III.2. Gói tinIPX .................................17 .III.3. Cơ chế hoạt động của NovellNetware..........18 CHƯ Ơ N G III.GIAO THỨC TCP/IP .......................19 .I GIAO THỨC TCP/IP ...............................19 .II KIẾN TRÚC CỦA BỘ GIAO THỨC TCP/IP ..............20 .II.1. Kiến trúc phân tầng của TCP/IP ................20 .II.2. Cơ chế địa chỉInternet .......................23 .II.2.1. Địa chỉlớp A ............................24 1

Transcript of Tìm hiểu về giao thức mạng tcp ip

Page 1: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

CHƯƠNG I. MẠNG MÁY TÍNH

CHƯƠNG I . MẠNG MÁY TÍNH .........................5.I MẠNG MÁY TÍNH .................................5.II PHÂN LOẠI MẠNG MÁY TÍNH........................5.II.1. Phân loại theo kiến trúc (topology) của mạng ......5.II.1.1. Mạng điểm-điểm (point-to-point network)......6.II.1.2. Mạng quảng bá (broadcast network)..........6

.II.2. Phân loại theo phương thức chuyển mạch (Swiched Method).........................................7.II.2.1. Chuyển mạch kênh (Circuit Swiched Network). .7.II.2.2. Chuyển mạch tin báo (Message Swiched Network)......................................7.II.2.3. Chuyển mạch gói (Packed Swiched Network)...7

.II.3. Phân loại theo phạm vi hoạt động...............7.II.3.1. Mạng LAN (Local Area Network)..............7.II.3.2. Mạng MAN (Metropolian Area Network)........7.II.3.3. Mạng WAN (Wide Area Network).............8.II.3.4. Liên mạng (internet).......................8

CHƯƠNG II . GIAO THỨC TRUYỀN THÔNG VÀ CÁC MÔ HÌNH THAM CHIẾU .......................................10.I GIAO THỨC TRUYỀN THÔNG .......................10.II MÔ HÌNH THAM CHIẾU OSI........................11.II.1. Giới thiệu mô hình OSI........................11.II.2. Các tầng của mô hình OSI.....................13.II.2.1. Tầng vật lý (Physical layer).................13.II.2.2. Tầng liên kết dữ liệu (Data link layer)........13.II.2.3. Tầng mạng (Network layer)................14.II.2.4. Tầng giao vận (Transport layer).............14.II.2.5. Tầng phiên (Session layer).................15.II.2.6. Tầng trình diễn (Presentation layer).........15.II.2.7. Tầng ứng dụng (Application layer)...........15

.II.3. Những vấn đề về OSI.........................15.III KIẾN TRÚC GIAO THỨC IPX/SPX....................16.III.1. Kiến trúc giao thức IPX/SPX...................16.III.2. Gói tin IPX .................................17.III.3. Cơ chế hoạt động của Novell Netware..........18

CHƯƠNG III. GIAO THỨC TCP/IP.......................19.I GIAO THỨC TCP/IP ...............................19.II KIẾN TRÚC CỦA BỘ GIAO THỨC TCP/IP ..............20.II.1. Kiến trúc phân tầng của TCP/IP ................20.II.2. Cơ chế địa chỉ Internet .......................23.II.2.1. Địa chỉ lớp A ............................24

1

Page 2: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.II.2.2. Địa chỉ lớp B ............................24.II.2.3. Địa chỉ lớp C.............................25

.II.3. Mạng con và Subnet mask....................25.III TẦNG MẠNG (NETWORK LAYER)...................27.IV TẦNG INTERNET (INTERNET LAYER)................28.IV.1. Gói tin IP..................................29.IV.2. Giao thức chuyển địa chỉ ARP (Address Resolution Protocol) và cơ giao thức chuyển ngược địa chỉ RARP (Reverse Address Resolution Protocol)...............32.IV.2.1. Chuyển giao trực tiếp....................32.IV.2.2. Chuyển giao địa chỉ động.................32.IV.2.3. Gói tin ARP.............................33

.IV.3. Giao thức điều khiển truyền tin (Internet Control Message Protocol - ICMP).........................35.IV.3.1. Gói tin ICMP............................35.IV.3.2. Điều khiển dòng dữ liệu ..................36.IV.3.3. Thông báo lỗi ...........................36.IV.3.4. Định hướng lại..........................36.IV.3.5. Kiểm tra trạm làm việc...................37

.IV.4. Thuật toán dẫn đường .......................37.V TẦNG GIAO VẬN ................................41.V.1. Giao thức không kết nối (User Datagram Protocol - UDP)..........................................41.V.1.1. Gói thông tin UDP........................41.V.1.2. Phân kênh, hợp kênh và Ports..............42

.V.2. Giao thức điều khiển truyền tin (Transmission Control Protocol - TCP) ..................................44.V.2.1. Gói tin TCP .............................46.V.2.2. Cổng, kết nối và điểm kết nối..............47

.VI TẦNG ỨNG DỤNG CỦA TCP/IP.....................49.VI.1. Dịch vụ tên miền (Domain Name Service - DNS). .49.VI.2. Đăng nhập từ xa (Telnet).....................51.VI.3. Thư điện tử (Electronic Mail)..................52.VI.4. Giao thức truyền tệp (File Transfer Protocol - FTP) 54.VI.5. Nhóm tin (News groups)......................55.VI.6. Tìm kiếm tệp (Archie)........................55.VI.7. Tra cứu thông tin theo thực đơn (Gopher).......55.VI.8. Tìm kiếm thông tin theo chỉ số (WAIS)..........55.VI.9. Siêu văn bản (WW W) ........................56

CHƯƠNG IV. XÂY DỰNG ỨNG DỤNG TRUYỀN TỆP.........57.I GIAO DIỆN LẬP TRÌNH.............................57.I.1. Giao diện lập trình...........................57

2

Page 3: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.I.2. Network I/O và file I/O.........................58.I.3. Làm việc với Socket..........................59.I.3.1. Socket..................................59.I.3.2. Địa chỉ Socket............................60.I.3.3. Một số lời gọi tạo lập socket................62.I.3.4. Một số lời gọi gửi dữ liệu qua socket..........65.I.3.5. Một số lời gọi nhận dữ liệu từ socket..........67

.II MÔ HÌNH CLIENT-SERVER.........................67.II.1. Mô hình Client-Server sử dụng dịch vụ không kết nối ..............................................68.II.2. Mô hình Client-Server sử dụng dịch vụ hướng kết nối ..............................................70

.III XÂY DỰNG CHƯƠNG TRÌNH TRUYỀN TỆP............71.III.1. Thiết kế và cài đặt chương trình...............71.III.1.1. Giao thức ứng dụng được xây dựng và sử dụng trong chương trình.............................71.III.1.2. Cài đặt chương trình .....................73

.III.2. Một số vấn đề nảy sinh trong quá trình thực hiện và cách giải quyết..................................75.III.2.1. Vấn đề chuyển đổi tệp giữa hai hệ điều hành..75.III.2.2. Vấn đề về một số lệnh tương tác...........77

K ẾT LUẬN .........................................78TÀI LIỆU THAM KHẢO ................................79Phụ lục A MỘT SỐ KỸ THUẬT MẠNG CỤC BỘ ............80.I MẠNG ETHERNET VÀ IEEE 802.3....................80.II MẠNG TOKEN-PASING RINGS (IEEE 802.5)...........80.III MẠNG TOKEN-PASSING BUSSES (IEEE 802.4).........81

Phụ lục B MỘT SỐ KỸ THUẬT CHỌN ĐƯỜNG ĐI TỐI ƯU .....83.I GIẢI THUẬT DIJKSTRA CHO VIỆC CHỌN ĐƯỜNG TẬP TRUNG................................................83.II GIẢI THUẬT FORD& FULKERSON CHO VIỆC CHỌN ĐƯỜNG PHÂN TÁN........................................84

Phụ lục C VĂN BẢN CHƯƠNG TRÌNH (PHẦN CLIENT).......86.I CHƯƠNG TRÌNH CHÍNH (MAIN.C)...................86.II THƯ VIỆN SỬ DỤNG (SOCKET.C)...................93

3

Page 4: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

4

Page 5: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

CHƯƠNG I . MẠNG MÁY TÍNH

.I MẠNG MÁY TÍNH

Mạng máy tính là hệ thống các máy tính độc lập (autonomous) được kết nối

với nhau. Khái niệm độc lập ở đây có nghĩa là chúng không có mối quan hệ

chủ/tớ (master/slave) rõ ràng. Hai máy tính được gọi là được kết nối với nhau

nếu chúng có khả năng trao đổi thông tin. Sự kết nối có thể thông qua dây dẫn,

tia laser, sóng điện từ hay vệ tinh viễn thông... Việc kết nối các máy tính có

những ưu điểm sau

• Sử dụng chung tài nguyên (resource sharing): Chương trình, dữ liệu, thiết

bị có thể được dùng chung bởi người dùng từ các máy tính trên mạng.

• Tăng độ tin cậy của hệ thống thông tin (reliability): Nếu một máy tính hay

một đơn vị dữ liệu nào đó bị hỏng thì luôn có thể sử dụng một máy tính

khác hay một bản sao khác của dữ liệu, nhờ đó, khả năng mạng bị ngừng sử

dụng được giảm thiểu.

• Tạo ra môi trường truyền thông mạnh giữa nhiều người sử dụng trên

phạm vi địa lý rộng: Mục tiêu này ngày càng trở nên quan trọng nhất là

khi mạng máy tính đã phát triển trên phạm vi toàn cầu như ngày nay.

• Tiết kiệm chi phí: Do tài nguyên được dùng chung, hệ thống tin cậy hơn

nên chi phí thiết bị và bảo dưỡng của mạng máy tính thấp hơn so với trường

hợp máy tính riêng lẻ.

.II PHÂN LOẠI MẠNG MÁY TÍNH

.II.1. Phân loại theo kiến trúc (topology) của mạng

Phân loại theo kiến trúc là cách phân loại mạng máy tính theo cách kết nối các

máy tính trong mạng

5

Page 6: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.II.1.1. Mạng điểm-điểm (point-to-point network)

Các đường truyền nối các cặp nút với nhau, mỗi nút có trách nhiệm lưu trữ tạm

thời sau đó chuyển tiếp dữ liệu tới đích. Cách làm việc này còn gọi là lưu và

chuyển tiếp (store-and-forward). Mạng điểm-điểm cần sử dụng lượng cáp nối

lớn hoặc nhiều đường điện thoại thuê riêng (leased telephone lines), mỗi đường

nối một cặp điểm làm việc. Nếu 2 điểm làm việc muốn gửi thông tin cho nhau

mà không có đường truyền trực tiếp, dữ liệu của chúng cần được truyền qua

một số nút khác do đó, thuật toán dẫn đường có vai trò rất quan trọng trong

kiến trúc mạng điểm-điểm.

.II.1.2. Mạng quảng bá (broadcast network)

Tất cả các nút cùng dùng chung một đường truyền vật lý. Dữ liệu được tiếp

nhận bởi tất cả các máy tính, nếu máy tính nào kiểm tra thấy gói tin được gửi

cho mình, nó sẽ giữ lại và xử lý. Các mạng quảng bá thường cho phép sử dụng

địa chỉ broadcasting để gửi thông báo tới toàn mạng.

6

Star TreeRing

SatelliteBus Ring

Page 7: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.II.2. Phân loại theo phương thức chuyển mạch (Swiched Method)

.II.2.1. Chuyển mạch kênh (Circuit Swiched Network)

Thông tin truyền qua một kênh vật lý cố định, tốc độ và độ tin cậy cao nhưng

lãng phí đường truyền do không sử dụng hết.

.II.2.2. Chuyển mạch tin báo (Message Swiched Network)

Liên lạc được thiết lập khi có thông tin cần truyền, thông tin được định dạng

gồm header và data và có độ dài không cố định: Mối liên lạc được thiết lập và

chỉ giải phóng khi truyền xong dữ liệu do đó không quản lý được thời gian

chiếm đường truyền

.II.2.3. Chuyển mạch gói (Packed Swiched Network)

Thông tin được cắt ra thành các gói có độ dài quy định Ví dụ Erthenet IEEE

802.3 chia message thành các gói 1500 bytes. Mỗi gói đều có header và data.

Các gói của các message khác nhau có thể truyền xen kẽ trên đường truyền do

đó thời gian chờ đợi chung của hệ thống giảm.

.II.3. Phân loại theo phạm vi hoạt động

Theo phạm vi hoạt động, người ta chia mạng máy tính thành những loại sau

.II.3.1. Mạng LAN (Local Area Network)

Thường là mạng được sử dụng cho một công ty, trường học hay trong một toà

nhà, khoảng cách tương đối nhỏ (cỡ vài trăm m tới vài Km) tốc độ truyền lớn,

độ trễ nhỏ.

(Phụ lục A trình bày một số mạng cục bộ thường được sử dụng)

.II.3.2. Mạng MAN (Metropolian Area Network)

Mạng được cài đặt trong phạm vi một đô thị hay trung tâm kinh tế - xã hội (có

bán kính khoảng 100 Km)

7

Page 8: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.II.3.3. Mạng WAN (Wide Area Network)

Mạng diện rộng có thể bao trùm một vùng rộng lớn cỡ quốc gia hay lục địa.

.II.3.4. Liên mạng (internet)

Phần lớn các mạng cục bộ đều độc lập với nhau về phần cứng cũng như phần

mềm, chúng được thiết lập nhằm mục đích phục vụ những nhóm người cụ thể

nào đó. Trong mỗi mạng đó, người dùng tự lựa chọn một công nghệ phần cứng

phù hợp với công việc của họ. Một điều quan trọng nữa là không thể xây dựng

một mạng chung dựa trên một công nghệ sử dụng trên một mạng đơn lẻ nào đó

bởi vì không có công nghệ mạng nào có thể thoả mãn nhu cầu cho tất cả mọi

người. Một số người có nhu cầu sử dụng đường nối cao tốc để truyền dữ liệu

của mình trong khi các mạng LAN không thể mở rộng phạm vi hoạt động quá

xa. Một số mạng tốc độ chậm lại có thể kết nối máy tính tới hàng ngàn dặm...

Liên mạng máy tính (internetworking hay internet) là một công nghệ được đưa

ra nhằm kết nối các mạng thành một thể thống nhất. Công nghệ internet che

dấu đi kiến trúc vật lý của mạng và cho phép máy tính truyền thông một cách

độc lập với liên kết vật lý của mạng. Một liên mạng đã khá quen thuộc với

chúng ta là mạng Internet

Giới thiệu mạng Internet

Internet là một tổ hợp hàng triệu máy được kết nối với nhau thông qua các thiết

bị ghép nối thường gọi là gateway để có thể chia sẻ thông tin với nhau, trong

đó có đủ loại máy tính, và chúng sử dụng nhiều hệ điều hành khác nhau.

Thông tin trên Internet gồm đủ loại từ thư điệu tử, các file đồ hoạ đến video và

còn nhiều thứ khác được cung cấp bởi những người sử dụng Internet bằng

nhiều phương thức, với nhiều tư tưởng khác nhau.

Quy mô của Internet

Có bao nhiêu máy được kết nối vào Internet? Con số cụ thể luôn luôn thay đổi,

những địa chỉ mới luôn luôn được cập nhật từng giây chúng ta có thể truy nhập

địa chỉ Web site của tổ chức Network Wizards

http://www.nw.com/zone/WWW/top.html

8

Page 9: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

để biết những số liệu mới nhất

Thời gian Số lượng máy Tháng 1 năm 1996 14,252,000Tháng 1 năm 1997 21,819,000Tháng 1 năm 1998 29,670,000

Những máy chủ (host) mạnh thường sử dụng những hệ điều hành đa nhiệm, ví

dụ như UNIX, để người sử dụng kết nối vào, như thế có nghĩa là số máy của

người sử dụng mạng nhiều hơn những con số trên. Những máy chủ được định

vị tại các điểm như thư viện, các trường đại học, các tổ chức chính phủ, các đại

lý, các công ty, các trường trung học, tiểu học trên toàn thế giới. Những máy

chủ này được kết nối với nhau qua đường điện thoại và chỉ mất khoảng

640/1000 giây để bắt đầu nhận thông báo từ Bắc Mỹ tới Nam cực.

Các dịch vụ mà Internet cung cấp

Phần lớn người sử dụng Internet không cần biết đến của công nghệ sử dụng

trên Internet, đối với họ Internet chỉ đơn giản là một bộ chương trình phần

mềm mang lại cho họ những khả năng truyền thông có ích. Chính điều này

mang lại cho Internet số người dùng đông đảo tới như vậy.

Các dịch vụ mức ứng dụng ban đầu trên Internet

• Thư điện tử (Electronic mail) Cho phép người dùng ngồi trước máy tính tại

nhà mình gửi E-mail tới bất cứ ai ở đâu trên thế giới nếu họ có địa chỉ E-

mail. Họ có thể tham gia các nhóm thảo luận (discussion group) về những

đề tài khác nhau hay bắt đầu một nhóm mới về những chủ đề mà họ ưa

thích.

• Truyền file (File Transfer) Nếu cần một chương trình phần mềm mới như

các tiện ích nén file, các chương trình diệt virus, một phần mềm trò chơi,

hình ảnh hay âm thanh, người dùng có thể tải xuống bất cứ lúc nào với File

Transfer.

9

Page 10: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Truy nhập từ xa (Remote login) Có lẽ điều thú vị nhất trong các ứng dụng

của Internet là Remote login, nó cho phép người dùng kết nối vào một máy

tính ở xa như một trạm cuối để sử dụng máy tính đó.

Dịch vụ mức mạng của Internet

Một lập trình viên viết chương trình ứng dụng trên Internet cần có một cái nhìn

khác với người chỉ đơn giản sử dụng dịch vụ Internet. Ở tầng mạng, Internet

cung cấp 2 kiểu dịch vụ mà các ứng dụng của Internet thường dùng đó là

• Dịch vụ truyền không kết nối (Connectionless Paket Delivery Service) là

một phương thức truyền dữ liệu mà các mạng chuyển mạch gói cung cấp.

Điều này chỉ đơn giản là mạng Internet chuyển các gói tin từ máy này sang

máy khác dựa vào thông tin địa chỉ của gói đến đích của nó. Việc chia nhỏ

gói tin truyền này có một lợi điểm là nếu một đường đi bị bận hoặc bị đứt,

thì các gói có thể được truyền theo một đường khác.

• Dịch vụ truyền tin cậy (Reliable Stream Transport Service) Phần lớn các

ứng dụng đòi hỏi nhiều dịch vụ hơn chỉ truyền thông không kết nối bởi vì

chúng cần tự động sửa lỗi, kiểm tra tính toàn vẹn của thông tin truyền đi

trên mạng. Reliable Stream Transport Service giải quyết vấn đề này cho ta.

CHƯƠNG II . GIAO THỨC TRUYỀN THÔNG VÀ CÁC

MÔ HÌNH THAM CHIẾU

.I GIAO THỨC TRUYỀN THÔNG

Để các máy tính trên mạng có thể trao đổi thông tin với nhau, chúng cần có

một bộ những phần mềm cùng làm việc theo một chuẩn nào đó. Giao thức

10

Page 11: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

truyền thông (protocol) là tập quy tắc quy định phương thức truyền nhận thông

tin giữa các máy tính trên mạng.

Các mạng máy tính hiện đại được thiết kế bằng cách phân chia cấu trúc ở mức

độ cao nhằm làm giảm sự phức tạp khi thiết kế. Các giao thức mạng thường

được chia làm các tầng (layer), mỗi tầng được xây để dựng dựa trên dịch vụ

của tầng dưới nó và cung cấp dịch vụ cho tầng cao hơn.

.II MÔ HÌNH THAM CHIẾU OSI

.II.1. Giới thiệu mô hình OSI

Mô hình mạng máy tính do tổ chức tiêu chuẩn hoá quốc tế (International

Standard Organization - ISO) đưa ra năm 1983 được gọi là mô hình tham chiếu

các hệ thống mở (Open Systems Interconect referent model - OSI). Các điều

khoản mô tả trong mô hình được sử dụng rộng rãi trong lý thuyết truyền thông,

do đó, trong thực tế khó có thể nói về truyền thông mà không sử dụng thuật

ngữ của OSI.

Mô hình tham chiếu OSI chứa 7 tầng mô tả chức năng của giao thức truyền

thông. Mỗi tầng của mô hình OSI miêu tả một chức năng được thực hiện khi

dữ liệu di chuyển giữa các ứng dụng giữa các mạng.

• Tầng ứng dụng bao gồm các trình ứng dụng sử dụng mạng.

• Tầng trình diễn tiêu chuẩn hoá dữ liệu cung cấp cho tầng ứng dụng.

• Tầng phiên quản trị các phiên làm việc giữa các ứng dụng.

• Tầng giao vận cung cấp kết nối trạm-trạm, xử lý lỗi.

• Tầng mạng quản trị việc kết nối qua mạng cho các tầng trên.

• Tầng liên kết dữ liệu cung cấp phân phát dữ liệu tin cậy qua đường truyền

vật lý.

• Tầng vật lý định rõ các đặc thù của thiết bị mạng.

11

Page 12: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Các lớp giao thức được xếp chồng lớp nọ trên lớp kia. Chính sự xuất hiện của

nó, cấu trúc thường được gọi là stack hoặc giao thức xếp chồng.

Việc phân tầng của OSI tuân theo một số nguyên tắc sau

• Một lớp được tạo ra khi cần đến mức trừu tượng hoá tương ứng.

• Mỗi lớp cần thực hiện các chức năng được định nghĩa rõ ràng.

• Việc chọn chức năng cho mỗi lớp cần chú ý tới việc định nghĩa các quy

tắc chuẩn hoá quốc tế.

• Ranh giới các mức cần chọn sao cho thông tin đi qua là ít nhất (tham số

cho chương trình con là ít).

• Số mức phải đủ lớn để các chức năng tách biệt không nằm trong cùng một

lớp và đủ nhỏ để mô hình không quá phức tạp. Một mức có thể được phân

thành các lớp nhỏ nếu cần thiết. Các mức con có thể lại bị loại bỏ.

Hai hệ thống khác nhau có thể truyền thông với nhau nếu chúng bảo đảm

những nguyên tắc chung (cài đặt cùng một giao thức truyền thông). Các chức

năng được tổ chức thành một tập các tầng đồng mức cung cấp chức năng như

nhau. Các tầng đồng mức phải sử dụng một giao thức chung.

Một tầng không định nghĩa một giao thức đơn, nó định nghĩa một chức năng

truyền thông có thể được thi hành bởi một số giao thức. Do vậy, mỗi tầng có

thể chứa nhiều giao thức, mỗi giao thức cung cấp một dịch vụ phù hợp cho

chức năng của tầng. Ví dụ cả giao thức truyền file (File Transfer Protocol -

FTP) và giao thức thư điện tử (Simple Mail Transfer Protocol - SMTP) đều

cung cấp dịch vụ cho người dùng và cả hai đều thuộc tầng ứng dụng. Mỗi mức

ngang hàng giao thức truyền thông (sự bổ xung của các giao thức cùng mức

tương đương trên hệ thống khác). Mỗi mức phải được chuẩn hoá để giao tiếp

với mức tương đương với nó. Trên lý thuyết, giao thức chỉ biết đến những gì

liên quan tới lớp của nó mà không quan tâm tới mức trên hoặc dưới của nó.

12

Page 13: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Tuy nhiên phải có sự thoả thuận để chuyển dữ liệu giữa các tầng trên một máy

tính, bởi mỗi tầng lại liên quan tới việc gửi dữ liệu từ ứng dụng tới một ứng

dụng tương đương trên một máy khác. Tầng cao hơn dựa vào tầng thấp hơn để

chuyển dữ liệu qua mạng phía dưới. Dữ liệu chuyển xuống ngăn xếp từ tầng

này xuống tầng thấp hơn cho tới khi được truyền qua mạng nhờ giao thức của

tầng vật lý. Ở đầu nhận, dữ liệu đi lên ngăn xếp tới ứng dụng nhận. Những tầng

riêng lẻ không cần biết các tầng trên và dưới nó xử lý ra sao, nó chỉ cần biết

cách chuyển nhận thông tin từ các tầng đó. Sự cô lập các hàm truyền thông

trên các tầng khác nhau giảm thiểu sự tích hợp công nghệ của đầu vào mỗi bộ

giao thức. Các ứng dụng mới có thể thêm vào mà không cần thay đổi tầng vật

lý của mạng, phần cứng có thể được bổ sung mà không cần viết lại các phần

mềm ứng dụng.

.II.2. Các tầng của mô hình OSI

.II.2.1. Tầng vật lý (Physical layer)

• Tầng vật lý liên quan tới việc truyền dòng bit giữa các máy bằng kênh

truyền thông vật lý, ở đây, cấu trúc của dữ liệu không được quan tâm đến.

• Việc thiết kế tầng vật lý cần quan tâm đến các vấn đề về ghép nối cơ khí,

điện tử, thủ tục và môi trường truyền tin bên dưới nó ví dụ mức điện áp

tương ứng với bit 0 - 1, thời gian tồn tại của xung...

.II.2.2. Tầng liên kết dữ liệu (Data link layer)

• Liên kết, thiết lập, duy trì, huỷ bỏ các liên kết dữ liệu là nhiệm vụ của tầng

data link.

• Ngoài ra tầng data link còn kiểm soát lỗi đường truyền, thông lượng.

Tầng này thực hiện việc đóng gói thông tin gửi thành các frame, gửi các frame

một cách tuần tự đi trên mạng, xử lý các thông báo xác nhận

(Acknowledgement frame) do bên nhận gửi về. Xác định ranh giới giữa các

13

Page 14: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

frame bằng cách ghi một số byte đặc biệt vào đầu và cuối frame. Giải quyết

vấn đề thông lượng truyền giữa bên gửi và bên nhận (Vấn đề này có thể được

giải quyết bởi một số lớp trên).

.II.2.3. Tầng mạng (Network layer)

• Vấn đề chủ chốt của tầng mạng là dẫn đường, định rõ các gói tin (packet)

được truyền theo những con đường nào từ nguồn đến đích. Các con đường

này có thể cố định, ít bị thay đổi, được thiết lập khi bắt đầu liên kết hay

động (dynamic) thay đổi tuỳ theo trạng thái tải của mạng.

• Nếu có nhiều gói tin truyền trên mạng có thể xảy ra tình trạng tắc nghẽn,

tầng mạng phải giải quyết vấn đề này.

• Thực hiện chức năng giao tiếp với các mạng bao gồm việc đánh lại địa chỉ,

cắt hợp gói tin cho phù hợp với các mạng.

Ngoài ra tầng mạng còn thực hiện một số chức năng kế toán, ví dụ, một số

Firewall (packet filtering) được cài đặt trên tầng này để thống kê số lượng các

gói tin truyền qua mạng hay ngăn cấm hoặc cho phép các gói tin của giao thức

nào đó.

.II.2.4. Tầng giao vận (Transport layer)

• Kiểm soát việc truyền tin từ nút tới nut (end-to-end): Bắt đầu từ tầng này,

các thực thể đã có thể nói chuyện một cách logic với nhau.

• Thực hiên việc ghép kênh và phân kênh: Mỗi ứng dụng có thể gửi dữ liệu đi

theo nhiều con đường, một đường truyền lại có thể được nhiều ứng dụng sử

dụng, phân kênh/hợp kênh giải quyết vấn đề phân chia dữ liệu cho các ứng

dụng.

• Khắc phục sai sót trong quá trình truyền tin: Việc khắc phục sai sót được

thực hiện trên nhiều tầng khác nhau, nhưng hiệu quả nhất là ở các tầng cao,

việc khắc phục sai sót làm ở tầng giao vận là hợp lý nhất.

14

Page 15: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.II.2.5. Tầng phiên (Session layer)

• Tầng này cho phép người sử dụng trên các máy khác nhau thiết lập, duy trì,

huỷ bỏ, đồng bộ phiên truyền thông giữa họ. Cung cấp một số dịch vụ hữu

ích cho người sử dụng như cho phép người dùng logon vào hệ thống chia sẻ

thời gian, truyền tệp giữa các máy tính.

• Quản lý token: cơ chế thẻ bài được tầng phiên cung cấp để tránh hiện tượng

tranh chấp đường truyền trên mạng.

• Thực hiện đồng bộ (Synchronization): thực hiện đối với những dữ liệu lớn

bằng cách thêm vào các thông tin kiểm tra, sửa lỗi.

.II.2.6. Tầng trình diễn (Presentation layer)

• Giải quyết vấn đề liên quan tới cú pháp và ngữ nghĩa của thông tin như

chuyển đổi thông tin theo một chuẩn nào đó được cả hai bên sử dụng (mã

ASCII - EDBCDIC).

• Nén/giãn dữ liệu để giảm số lượng bit truyền trên mạng.

• Mã hoá dữ liệu để thực hiện quyền truy cập.

.II.2.7. Tầng ứng dụng (Application layer)

• Tầng ứng dụng cung cấp giao diện sử dụng cho người dùng và môi trường

truyền tin.

• Thực hiện chức năng chuyển file trong đó có giải quyết vấn đề không tương

thích như cách đặt tên file hay các mã điều khiển trong một tệp văn bản...

• Cung cấp các dịch vụ Electronic mail, Remote login, Directory lookup...

.II.3. Những vấn đề về OSI

Bản thân OSI không phải là một kiến trúc mạng bởi vì nó không chỉ ra chính

xác các dịch vụ và các nghi thức được sử dụng trong mỗi tầng. Mô hình này

chỉ ra mỗi tầng cần thực hiện nhiệm vụ gì. ISO đã đưa ra các tiêu chuẩn cho

từng tầng, nhưng các tiêu chuẩn này không phải là một bộ phận của mô hình

tham chiếu.

15

Page 16: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Mô hình OSI ra đời sau khi các giao thức TCP/IP (TCP/IP sẽ được trình bày ở

phần sau) đã được sử dụng rộng rãi, nhiều công ty đã đưa ra các sản phẩm

TCP/IP, vì vậy, mô hình OSI chỉ được sử dụng trong thực tế như một chuẩn về

lý thuyết.

Trong mô hình OSI, một số chức năng như điều khiển thông lượng, kiểm tra lỗi

xuất hiện lặp lại trong một số tầng. Điều này có nguyên nhân do mô hình OSI

được chia làm các tầng khác nhau, mỗi tầng tương ứng với một đối tượng độc

lập (có dữ liệu và các phương thức riêng của nó, độc lập với các đối tượng

khác).

Mô hình OSI không có các dịch vụ và giao thức không hướng kết nối mặc dù

hầu hết các mạng đều có sử dụng. Mô hình quá phức tạp cho việc cài đặt làm

cho OSI khó có thể ứng dụng rộng rãi trên thực tế.

.III KIẾN TRÚC GIAO THỨC IPX/SPX

Một hệ thống mạng máy PC được sử dụng phổ biến nhất trên thế giới trong

thời gian vừa qua là mạng Novell Netware. Nó được thiết kế cho các công ty,

để chuyển từ việc sử dụng máy tính lớn (Mainframe) sang sử dụng PC. Mỗi PC

làm chức năng khách hàng (client), một số máy mạnh hoạt động như máy phục

vụ (Server), chúng cung cấp các dịch vụ file, các dịch vụ CSDL và các dịch vụ

khác cho một nhóm khách hàng. Nói cách khác, Novell Netware hoạt động

theo mô hình file-server.

.III.1. Kiến trúc giao thức IPX/SPX

Application SAP File serverTransport NCP SPXNetwork IPXDatalink Ethernet Token ring ARCnetPhysical Ethernet Token ring ARCnet

16

Page 17: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Novell Netware sử dụng chồng giao thức IPX/SPX dựa trên một hệ thống

mạng cũ của hãng Xerox-XNSTM nhưng có một số thay đổi. Novell Netware ra

đời trước OSI và không dựa trên mô hình này.

• Tầng vật lý và tầng Data link có thể được chọn trong số nhiều chuẩn công

nghiệp khác nhau bao gồm Ethernet, IBM token ring và ARCnet.

• Tầng mạng không định hướng nối kết, không bảo đảm (unreliable

connectionless) có tên là IPX (Internet Packet eXchange). Nó chuyển các

packet từ nguồn tới đích một cách trong suốt với người dùng ngay cả khi

nguồn và đích nằm ở các mạng khác nhau. IPX sử dụng địa chỉ 12 byte.

• Tầng giao vận:

◊ Giao thức NCP (Network Core Protocol) cung cấp nhiều dịch vụ

khác ngoài việc vận chuyển dữ liệu của người sử dụng, nó chính là

trái tim của Novell Netware.

◊ Giao thức thứ hai của tầng này là SPX (Sequenced Packet

eXchange). Nó chỉ thực hiện việc vận chuyển.

Các ứng dụng có thể lựa chọn sử dụng một trong các giao thức của tầng này

ví dụ hệ thống file sử dụng NCP, Lotus Note sử dụng SPX.

• Tầng Application nằm trên cùng, có nhiều giao thức khác nhau cung cấp

cho người sử dụng các dịch vụ như đã trình bày ở trên.

.III.2. Gói tin IPX

Điểm mấu chốt của kiến trúc IPX/SPX là gói tin IPX có cấu trúc như sau

Offset Field Length (byte)

0 Checksum 22 Packet length 24 Transport control 15 Packet type 16 Destination Address 1218 Source Address 1230 ?

17

Page 18: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Checksum: ít khi sử dụng vì tầng Data link bên dưới đã cung cấp checksum

• Packet length: chứa chiều dài của packet tính cả header và data

• Packet type: đánh dấu các packet điều khiển khác nhau.

• Destination Address: địa chỉ đích của gói tin.

• Source Address: địa chỉ nguồn của gói tin.

• Data: Chiếm phần cuối của gói, có độ dài phụ thuộc vào trường paket

length trên.

.III.3. Cơ chế hoạt động của Novell Netware

Cứ khoảng mỗi phút một lần, mỗi server lại phát đi (broadcast) một packet,

cho biết địa chỉ của chính nó và các dịch vụ mà nó cung cấp. Việc này sử dụng

giao thức SAP (Service Advertising Protocol). Các packet này được tiến trình

dịch vụ (special agent process) chạy trên các máy router nhận và thu thập. Các

agent sử dụng thông tin chứa trong đó để xây dựng CSDL về các server.

Khi một máy client khởi động, nó phát một request để hỏi xem server gần nhất

ở đâu. Agent trên máy router địa phương tiếp nhận yêu cầu này, kiểm tra

CSDL về server, lựa chọn server phù hợp gửi lại thông tin cho client. Từ thời

điểm đó, Client có thể thiết lập kết nối NCP với server và sử dụng các dịch vụ

của server. Trong quá trình kết nối, client và server thoả thuận với nhau về

chiều dài cực đại của dữ liệu, trong quá trình sử dụng, client có thể tra cứu

CSDL của server để biết thông tin của các server khác.

18

Page 19: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

CHƯƠNG III. GIAO THỨC TCP/IP

.I GIAO THỨC TCP/IP

Vào cuối những năm 1960 và đầu 1970, Trung tâm nghiên cứu cấp cao

(Advanced Research Projects Agency - ARPA) thuộc bộ quốc phòng Mĩ

(Department of Defense - DoD) được giao trách nhiệm phát triển mạng

ARPANET. Mạng ARPANET bao gồm mạng của những tổ chức quân đội, các

trường đại học và các tổ chức nghiên cứu và được dùng để hỗ trợ cho những

dự án nghiên cứu khoa học và quân đội (Ngày nay, ARPA được gọi là

DARPA). Năm 1984, DoD chia ARPANET ra thành 2 phần: ARPANET sử

dụng cho nghiên cứu khoa học và MILNET sử dụng cho quân đội. Đầu những

năm 1980, một bộ giao thức mới được đưa ra làm giao thức chuẩn cho mạng

ARPANET và các mạng của DoD mang tên DARPA Internet protocol suit,

thường được gọi là bộ giao thức TCP/IP hay còn gọi tắt là TCP/IP.

Năm 1987 tổ chức nghiên cứu quốc gia Hoa Kỳ (National Science Foundation

- NSF) tài trợ cho việc kết nối 6 trung tâm siêu tính trên toàn liên bang lại với

nhau thành một mạng với tên gọi NSFNET. Về mặt vật lý, mạng này kết nối 13

điểm làm việc bằng đường điện thoại cao tốc được gọi là NSFNET backbone.

Khoảng 8 đường backbone đã được xây dựng. NSFNET được mở rộng với

hàng chục mạng địa phương kết nối vào nó và kết nối vào mạng Internet của

DARPA. Cả NSFNET và các mạng con của nó đều sử dụng bộ giao thức

TCP/IP.

TCP/IP có một số ưu điểm như sau:

• Giao thức chuẩn mở sẵn sàng phát triển độc lập với phần cứng và hệ điều

hành. TCP/IP là giao thức lý tưởng cho việc hợp nhất phần cứng và phần

mềm khác nhau, ngay cả khi truyền thông trên Internet. Sự độc lập rành

mạch với phần cứng vật lý của mạng cho phép TCP/IP hợp nhất các mạng

khác nhau. TCP/IP có thể chạy trên mạng Ethernet, mạng Token ring, mạng

19

Page 20: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

quay số (Dial-up line), mạng X.25, mạng ảo và mọi loại môi trường vật lý

truyền thông.

• Một sơ đồ địa chỉ dùng chung cho phép mỗi thiết bị TCP/IP có duy nhất

một địa chỉ trên mạng ngay cả khi đó là mạng toàn cầu Internet.

• Tiêu chuẩn hoá mức cao của giao thức phù hợp với ích lợi của dịch vụ

người dùng. Được tích hợp vào hệ điều hành UNIX, Hỗ trợ mô hình client-

server, mô hình mạng bình đẳng, Hỗ trợ kỹ thuật dẫn đường động.

DARPA hỗ trợ việc nghiên cứu kết nối nhiều loại mạng khác nhau lại thành

một mạng toàn cầu Internet. Ngoài việc sử dụng cho tất cả các máy trên

Internet, TCP/IP còn được sử dụng trong mạng nội bộ của một số tổ chức

chính phủ hoặc thương mại, những mạng này gọi là Intranet. TCP/IP vừa có thể

kết nối một số lượng lớn các máy tính (150.000 máy trên nước Mĩ, Châu Âu,

Châu Á) lại có thể chỉ kết nối hai máy tính trong phòng làm việc.

Dưới đây, chúng ta xem xét một số nội dung về bộ giao thức truyền thông

TCP/IP.

.II KIẾN TRÚC CỦA BỘ GIAO THỨC TCP/IP

.II.1. Kiến trúc phân tầng của TCP/IP

Application LayerPresentation Layer Application Layer

Session LayerTransport Layer Transport LayerNetwork Layer Internet LayerData link LayerPhysical Layer Network access Layer

Các lớp tương ứng giữa OSI và TCP/IP

Có nhiều giao thức trong bộ giao thức truyền thông TCP/IP, nhưng hai giao

thức quan trọng nhất được lấy tên đặt cho bộ giao thức này là TCP

(Transmission Control Protocol) và IP (Internet Protocol).

Bộ giao thức TCP/IP được phân làm 4 tầng

20

Page 21: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Tầng mạng (Network Layer)

• Tầng Internet (Internet Layer)

• Tầng giao vận (Transport Layer)

• Tầng ứng dụng (Application Layer)

• FTP (File transfer Protocol): Giao thức truyền tệp cho phép người dùng lấy

hoặc gửi tệp tới một máy khác.

• Telnet: Chương trình mô phỏng thiết bị đầu cuối cho phép người dùng login

vào một máy chủ từ một máy tính nào đó trên mạng.

• SMTP (Simple Mail Transfer Protocol): Một giao thức thư tín điện tử.

• DNS (Domain Name server): Dịch vụ tên miền cho phép nhận ra máy tính

từ một tên miền thay cho chuỗi địa chỉ Internet khó nhớ.

• SNMP (Simple Network Management Protocol): Giao thức quản trị mạng

cung cấp những công cụ quản trị mạng.

• RIP (Routing Internet Protocol): Giao thức dẫn đường động.

21

Application Layer

Transport Layer(Host Layer)

Internet Layer(Getway Layer)

Network Interface Layer

RIP

SNMPSMTP

Transsmission Control Protocol

User Datagram Protocol

TELNETFTP

Internet ProtocolICMP

ARP

Token Ring FiberToken BusEthernet

DNS

Các tầng của bộ giao thức TCP/IP

Page 22: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• ICMP (Internet Control Message Protocol): Nghi thức thông báo lỗi.

• UDP (User Datagram Protocol): Giao thức truyền không kết nối cung cấp

dịch vụ truyền không tin cậy nhưng tiết kiệm chi phí truyền.

• TCP (Transmission Control Protocol): Giao thức hướng kết nối cung cấp

dịch vụ truyền thông tin tưởng.

• IP (Internet Protocol): Giao thức Internet chuyển giao các gói tin qua các

máy tính đến đích.

• ARP (Address Resolution Protocol): Cơ chế chuyển địa chỉ TCP/IP thành

địa chỉ vật lý của các thiết bị mạng.

Cũng giống như trong mô hình tham chiếu OSI, dữ liệu gửi từ tầng Application

đi xuống ngăn xếp, mỗi tầng có những định nghĩa riêng về dữ liệu mà nó sử

dụng. Tại nơi gửi, mỗi tầng coi gói tin của tầng trên gửi xuống là dữ liệu của nó

và thêm vào gói tin các thông tin điều khiển của mình sau đó chuyển tiếp

22

Application

Transport

Internet

Network Interface

Application

Transport

Internet

Network Interface

Identical Datagram

Identical Frame

Identical Packet

Identical Message

Physical Net

Host BHost A

Page 23: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

xuống tầng dưới. Tại nơi nhận, quá trình diễn ra ngược lại, mỗi tầng lại tách

thông tin điều khiển của mình ra và chuyển dữ liệu lên tầng trên.

Application Data

Transport TCP

Header

Data

Internet IP

Header

TCP

Header

Data

Network Ethernet

Header

IP

Header

TCP

Header

Data Ethernet

trailer

.II.2. Cơ chế địa chỉ Internet

Mạng Internet dùng hệ thống địa chỉ IP (32 bit) để "định vị" các máy tính liên

kết với nó. Có hai cách đánh địa chỉ phụ thuộc vào cách liên kết của từng máy

tính cụ thể:

• Nếu các máy tính được kết nối trực tiếp với mạng Internet thì trung tâm

thông tin Internet (Network Information Centre-NIC) sẽ cấp cho các máy

tính đó một địa chỉ IP (IP Address).

• Nếu các máy tính không kết nối trực tiếp với mạng Internet mà thông qua

một mạng cục bộ thì người quản trị mạng sẽ cấp cho các máy tính đó một

địa chỉ IP (tuy nhiên cũng dưới sự cho phép của NIC)

Hệ thống địa chỉ này được thiết kế mềm dẻo qua một sự phân lớp, có 5 lớp địa

chỉ IP là : A, B, C, D, E. Sự khác nhau cơ bản giữa các lớp địa chỉ này là ở khả

năng tổ chức các cấu trúc con của nó.

0 1 2 3 4 8 16 24Class A 0 Netid HostidClass B 1 0 Netid HostidClass C 1 1 0 Netid Hostid

23

Page 24: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Class D 1 1 1 0 Multicast addressClass E 1 1 1 1 0 Reverved for future use

Sau đây chúng ta sẽ nghiên cứu về 3 lớp địa chỉ chính của TCP/IP đó là các

lớp A,B,C là các lớp được sử dụng rộng rãi trên mạng Internet.

.II.2.1. Địa chỉ lớp A

Lớp A sử dụng byte đầu tiên của 4 byte để đánh địa chỉ mạng. Như hình trên,

nó được nhận ra bởi bit đầu tiên trong byte đầu tiên của địa chỉ có giá trị 0. 3

bytes còn lại được sử dụng để đánh địa chỉ máy trong mạng.

Có 126 địa chỉ lớp A (được đánh địa chỉ trong byte thứ nhất) với số máy tính

trong mạng là 2563 - 2 = 16.777.214 máy cho mỗi một địa chỉ lớp A (do sử

dụng 3 bytes để đánh địa chỉ máy). Địa chỉ lớp A thường được cấp cho những

tổ chức có số lượng máy tính lớn.

Nguyên nhân chỉ có 126 networks trong khi dùng 8 bit vì bit đầu tiên mang giá

trị 0 dùng để định nghĩa lớp A vậy con lại 7 bit đánh số từ 0-127 tuy nhiên

người ta không sử dụng một địa chỉ chứa toàn các con số 1 hoặc 0 do vậy, chỉ

còn lại 126 mạng lớp A được sử dụng. Do vậy giá trị byte đầu tiên của địa chỉ

lớp A sẽ luôn luôn nằm trong khoảng từ 1 tới 126, mỗi một byte trong 3 bytes

còn lại sẽ có giá trị trong khoảng 1 đến 254.

Đối với việc chỉ có 16.777.214 máy trong khi sử dụng 24 bit đánh địa chỉ máy

trong mạng cũng được giải thích tương tự.

Địa chỉ lớp A có dạng: <Network.Host.Host.Host>

với con số thập phân đầu tiên nhỏ hơn 128

Ví dụ: 9. 6. 7. 8 : Nút được gán Host ID là 6. 7. 8, nằm trong mạng lớp A có

địa chỉ là 9. 0. 0. 0

.II.2.2. Địa chỉ lớp B

Một địa chỉ lớp B được nhận ra bởi 2 bit đầu tiên của byte thứ nhất mang giá

trị 10. Lớp B sử dụng 2 byte đầu tiên của 4 byte để đánh địa chỉ mạng và 2

byte cuối đánh địa chỉ máy trong mạng.

24

Page 25: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Có 64*256 - 2 = 16.128 địa chỉ mạng lớp B với 65.534 máy cho mỗi một địa

chỉ lớp B.

Địa chỉ lớp B có dạng: <Network.Network.Host.Host>

Byte đầu tiên của một địa chỉ lớp B nằm trong khoảng 128 tới 191.

Ví dụ: 190. 2. 2 . 1 : Nút được gán Host ID là 2. 1, nằm trong mạng lớp B có

địa chỉ là 190. 2. 0. 0

.II.2.3. Địa chỉ lớp C

Một số tổ chức có quy mô nhỏ có thể xin cấp phát địa chỉ lớp C. Một địa chỉ

lớp C được nhận ra với 3 bit đầu mang giá trị 110. Mạng lớp C sử dụng 3 byte

đầu để đánh địa chỉ mạng và 1 byte cuối đánh địa chỉ máy trong mạng. Có

2.097.150 địa chỉ lớp C, mỗi địa chỉ lớp C có 254 máy.

Địa chỉ lớp C có dạng: <Networkr.Network.Network.Host>

Địa chỉ lớp C được nhận ra với byte đầu tiên trong khoảng 192 tới 223

Ví dụ: 200. 6. 5. 4 : Nút được gán Host ID là 4, nằm trong mạng lớp C có địa

chỉ là 200. 6. 5. 0

.II.3. Mạng con và Subnet mask

Mạng Internet sử dụng địa chỉ IP 32 bit và phân chia ra các lớp rất mềm dẻo,

tuy nhiên, với một hệ thống địa chỉ như vậy việc quản lý vẫn rất khó khăn. Nếu

như một mạng được cấp một địa chỉ lớp A thì có nghĩa nó chứa tới

16*1.048.576 máy tính, do vậy người ta dùng mặt nạ bit để phân chia mạng ra

thành những mạng con gọi là Subnet. Subnet mask là một con số 32 bit bao

gồm n bit 1 (thường là các bit cao nhất) dùng để đánh địa chỉ mạng con và m

bit 0 dùng để đánh địa chỉ máy trong mạng con với n+m=32

0 16Network Number Host NumberNetwork Number Subnet Number Host Number

1111111 11111111 11111111 00000000

25

Page 26: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Mặt nạ subnet phải được cấu hình cho mỗi máy tính trong mạng và phải được

định nghĩa cho mỗi router. Như vậy, ta phải dùng cùng một Subnet mask cho

toàn bộ mạng vật lý cùng chung một địa chỉ Internet.

Ví dụ:

Ta có một địa chỉ lớp B 128.001.000.000 và cần chia nó thành 254 mạng con

với 254 máy trong mỗi mạng, ta giải quyết vấn đề này bằng Subnet mask như

sau

Network num 10000000 00000001 00000000 00000000 = 128.001.000.000Subnet mask 11111111 11111111 11111111 00000000 = 255.255.255.000

Mặt nạ trên định nghĩa 254 mạng con với địa chỉ như sau:

Subnet #1 10000000 00000001 00000001 00000000 = 128.001.001.000Subnet #2 10000000 00000001 00000010 00000000 = 128.001.002.000Subnet #3 10000000 00000001 00000011 00000000 = 128.001.003.000

.

.Subnet #254 10000000 00000001 11111110 00000000 = 128.001.254.000

Số máy trong mạng con thứ nhất sẽ nằm trong khoảng sau:

Subnet #1 10000000 00000001 00000001 00000000 = 128.001.001.000Low Address 10000000 00000001 00000001 00000001 = 128.001.001.001High Address 10000000 00000001 00000001 11111110 = 128.001.001.254

26

Page 27: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Chú ý rằng một địa chỉ chứa toàn số 1 dùng cho boardcasting, chứa toàn số 0

dành cho Subnet mask do vậy, địa chỉ máy của Internet không bao giờ chứa

toàn các con số 1 hoặc 0.

.III TẦNG MẠNG (NETWORK LAYER)

Tầng mạng là tầng thấp nhất của kiến trúc giao thức TCP/IP. Các giao thức

trong tầng này cung cấp biện pháp cho hệ thống chuyển giao dữ liệu giữa các

thiết bị được kết nối trực tiếp. Nó mô tả cách sử dụng mạng để truyền một gói

thông tin IP. Không giống những giao thức của tầng cao hơn là sử dụng dịch vụ

của tầng dưới nó và cung cấp dịch vụ cho tầng trên, giao thức của tầng mạng

cần phải biết chi tiết của mạng vật lý phía dưới (cấu trúc của gói, địa chỉ, vv...)

để định dạng đúng thông tin sẽ được truyền tuân theo những ràng buộc của

mạng. Tầng mạng của TCP/IP chứa các chức năng tương ứng của 3 tầng thấp

nhất của mô hình tham chiếu OSI (tầng mạng, tầng liên kết dữ liệu, tầng vật

lý). Tầng mạng thường không được người dùng để ý tới vì thiết kế của TCP/IP

che dấu những chức năng của tầng thấp nhất này và những điều cần biết cho

người sử dụng cũng như người lập trình chỉ là những giao thức của các tầng

cao hơn (IP, TCP, UDP, vv...). Mỗi khi có công nghệ phần cứng xuất hiện,

những giao thức tầng mạng phải được phát triển để TCP/IP có thể sử dụng

phần cứng mới (thông thường đó chính là các trình điều khiển của chính nhà

cung cấp phần cứng đó). Các chức năng trình diễn trong tầng này bao gồm

đóng gói gói thông tin IP thành các "Frame" được truyền dẫn trên mạng và

chuyển địa chỉ IP thành địa chỉ vật lý sử dụng bởi mạng máy tính. Một trong số

các điểm mạnh của TCP/IP là địa chỉ của nó được phối hợp sao cho trên mạng

Internet không có một thiết bị mạng nào cùng tên. Địa chỉ này phải được

chuyển đổi thích hợp với địa chỉ mạng vật lý nơi mà dữ liệu được truyền đi.

Hai ví dụ RFCs mô tả giao thức sử dụng cho tầng mạng là:

• RFC 826: Giao thức chuyển đổi địa chỉ chuyển đổi địa chỉ IP thành địa chỉ

Ethernet

27

Page 28: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• RFC 894: Một chuẩn cho việc truyền gói tin IP qua mạng Ethernet mô tả

cách thức đóng gói để truyền thông tin qua mạng Ethernet.

Khi cài đặt trong UNIX, giao thức của tầng này được xem như sự phối hợp của

chương trình điều khiển thiết bị và các chương trình liên quan. Những đơn

vị tương ứng với những thiết bị mạng làm nhiệm vụ đóng gói dữ liệu và

chuyển giao cho mạng.

.IV TẦNG INTERNET (INTERNET LAYER)

Tầng Internet cung cấp một hệ thống chuyển giao không kết nối và đôi khi

người ta còn gọi là không tin cậy. Không kết nối bởi mỗi gói tin được truyền đi

trên mạng một cách độc lập, sự kết hợp dữ liệu của các gói tin được cung cấp

bởi các dịch vụ lớp trên. Mỗi gói tin IP chứa địa chỉ nơi gửi và địa chỉ nơi nhận

và dựa vào đó nó có thể được truyền trên mạng tới đích. Nhưng chính việc dữ

liệu có thể đi tới đích trên nhiều đường khác nhau tạo nên sự mềm dẻo cho

Internet khi một đường bị đứt hay một nút nào đó bị quá tải, các gói tin có thể

được truyền đi theo những con đường khác, nếu một gói tin nào có lỗi thì chỉ

phải truyền lại gói tin đó thay vào việc phải truyền lại toàn bộ thông báo.

Không tin cậy bởi vì IP không có cơ chế kiểm tra tính đúng đắn của dữ liệu

được truyền nhận, dịch vụ tin tưởng phải được cung cấp bởi các giao thức lớp

trên.

Vấn đề chủ chốt trên tầng Internet là việc chọn lựa con đường tối ưu để truyền

các gói tin từ trạm nguồn tới trạm đích. Chúng ta sẽ xem xét các kỹ thuật chọn

đường và thuật toán dẫn đường sử dụng đối với tầng này sau đây.

28

Page 29: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.IV.1. Gói tin IP

0 31Vers Hlen Service type Total length

Identification Flag Fragment offsetTime to live Protocol Header cheksum

Source IP addressDestination IP address

IP options PaddingIP datagram data (Max 65535 bytes)

Destination

Address

Source

Address

Type

field

IP data CRC

Gói thông tin IP trong một frame Ethernet

• Vers : Dài 4 bits, mô tả chính xác version của IP

• Hlen : Dài 4 bits, mô tả độ dài của IP header (tính bằng từ

32 bit).

• Service type: dài 8 bits mô tả thứ tự ưu tiên của data.

• Total length: Dài 16 bits (2 bytes), đây là độ dài của datagram (in bytes-có

nghĩa là độ dài vùng data của IP datagram có thể lên tới 65535 bytes).

• Identification, flags, fragment offset: Không phải bất kỳ size nào của

datagram cũng được truyền trên mạng (ví dụ Ethernet LAN chỉ hỗ trợ cho

size lớn nhất của datagram là 1518 bytes). Do vậy khi size của datagram

vượt quá kích thước cho phép, nó sẽ bị chia nhỏ ra và các trường này sẽ

đảm bảo rằng các datagram đã bị phân chia này là từ một datagram ban

đầu.

29

Page 30: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Time to live: Dùng để xác định xem datagram này có bị truyền lặp lại hay

không (thông thường nó được gán là 1, nếu bị lặp lại nó sẽ bị gán là 0)

• Protocol: Trường này cho biết lớp giao thức cao hơn nào sẽ được sử dụng

(UDP hay là TCP).

• CRC: Trường này được dùng để kiểm tra sự toàn vẹn của header.

• IP option: Chứa các thông tin như: "dò" đường, bảo mật, xác nhận thời

gian.

• Padding: Trường điền thêm các số 0 để đảm bảo header kết thúc tại một

địa chỉ bội của 32

• Source IP address, destination IP address: chứa địa chỉ của station gửi

và địa chỉ của station đích.

Gói tin IP chứa một trường checksum để kiểm tra tính toàn vẹn của IP header,

nếu IP header lỗi, gói tin IP bị loại bỏ và giao thức lớp trên sẽ truyền một gói

tin khác.

Tầng IP làm công việc dẫn đường các gói tin qua mạng Internet từ máy tính

này tới máy tính khác, qua các mạng khác nhau cho tới khi nó đến được trạm

đích hoặc bị lỗi. Việc truyền gói tin qua các mạng được thực hiện thông qua

một thiết bị kết nối giữa hai mạng gọi là gateway. Khi một thông tin truyền qua

các mạng khác nhau, nó có thể bị chia ra thành nhiều gói nhỏ hơn. Thông tin

truyền có thể quá lớn để có thể truyền trên một gói tin trên một mạng khác.

Vấn đề này chỉ gặp phải khi gateway được nối giữa các mạng vật lý khác nhau.

Mỗi kiểu mạng có một độ dài tối đa gói tin có thể truyền (Maximum

Transmission Unit-MTU) nếu thông tin nhận được từ mạng này dài hơn MTU

của mạng kia, nó cần phải được chia nhỏ ra thành nhiều mảnh để truyền.

30

Page 31: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Việc xử lý như vậy được gọi là sự phân mảnh. Để trực quan, ta so sánh với

việc chuyên chở hàng bằng tàu hoả, mỗi toa tàu có thể chở nhiều hàng hơn

một chiếc xe tải sẽ trở hàng trên đường, hàng hoá sẽ được chia vào nhiều xe

tải. Ta có thể so sánh việc đường ray khác về vật lý với đường ôtô, Ethernet

khác X.25 về vật lý, IP phải cắt gói tin Ethernet thành những gói thông tin

nhỏ hơn để truyền qua mạng X.25. Định dạng của mỗi gói tin chia cắt giống

như với từng bản tin. Từ thứ hai của header chứa thông tin sử dụng cho quá

trình tập hợp lại bản tin bao gồm: gói tin thuộc bản tin nào, vị trí của nó trong

toàn bộ dòng dữ liệu truyền, gói tin đã được kết nối chưa.

Khi những gói tin truyền đến một gateway quá nhanh, chúng có thể bị loại bỏ

và IP trả lại một thông báo lỗi (ICMP).

31

Application

Transport

Internet

Network Interface

Internet

Network InterfaceNetwork Interface

Identical Datagram

Identical Frame

Identical Packet

Identical Message

Physical Net

Host A Host B

Application

Transport

Internet

Physical Net

Identical Datagram

Identical Frame

Gateway G

Page 32: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.IV.2. Giao thức chuyển địa chỉ ARP (Address Resolution Protocol) và cơ

giao thức chuyển ngược địa chỉ RARP (Reverse Address Resolution

Protocol)

Mọi máy tính cùng nằm trên một mạng có cùng một net id và các máy tính

cùng trên một mạng vật lý có thể gửi frame vật lý trực tiếp cho nhau nên việc

truyền thông tin giữa hai máy tính trong cùng một mạng vật lý không cần sử

dụng gateway. Việc dẫn đường trực tiếp chỉ sử dụng phần địa chỉ máy host id

trong địa chỉ IP. Trạm gửi chỉ việc kết khối dữ liệu vào frame, chuyển địa chỉ

IP của trạm đích thành địa chỉ vật lý và gửi trực tiếp frame tới máy nhận.

Một cơ chế sử dụng để chuyển địa chỉ IP thành địa chỉ vật lý là ARP (Address

Resolusion Protocol). Khi hai máy tính cùng nối vào một mạng vật lý, chúng

biết được địa chỉ IP của nhau nhưng để truyền thông giữa hai máy, chúng phải

biết được địa chỉ vật lý của nhau. ARP giải quyết vấn đề chuyển từ địa chỉ IP

32 bit sang địa chỉ Ethernet 48 bit. Người ta sử dụng hai cơ chế chuyển địa chỉ

là:

• Chuyển giao trực tiếp

• Chuyển giao gián tiếp

.IV.2.1. Chuyển giao trực tiếp

Địa chỉ vật lý là một hàm của địa chỉ IP ví dụ sử dụng trên mạng token ring

proNET-10 là mạng cho phép đặt địa chỉ IP và địa chỉ vật lý thoải mái. Người

ta có thể đặt địa chỉ IP là 192.5.48.3 và địa chỉ vật lý là 3, khi đó ta có

PA=f(IA). Với PA là địa chỉ vật lý, IA là địa chỉ Internet và f là hàm chuyển đổi.

.IV.2.2. Chuyển giao địa chỉ động

Chuyển giao địa chỉ động được thực hiện bằng cách máy tính gửi thông tin gửi

một thông báo tới toàn bộ các máy tính trên mạng, trong thông báo đó có chứa

địa chỉ IP của máy tính nó cần liên lạc, mọi máy sẽ nhận được thông báo và

32

Page 33: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

máy nào thấy địa chỉ IP của mình thì trả lại một thông báo chứa địa chỉ vật lý,

khi đó, hai máy tính có thể “nói chuyện” với nhau.

Ngoài ra, người ta còn sử dụng bảng chỉ đường để lưu trữ tạm thời các địa chỉ

sử dụng mới nhất (Address Reslution Cache) để tăng tốc độ của việc chuyển

giao địa chỉ.

.IV.2.3. Gói tin ARP

Một gói thông tin ARP là một Ethernet Frame được truyền trực tiếp từ máy này

tới máy khác. Vì không phải sử dụng IP, gói tin này không có địa chỉ IP cũng

như không cần được dẫn đường, nó phải được gửi broadcasts tới tất cả các

máy trên mạng Ethernet (với địa chỉ FF-FF-FF-FF-FF-FF).

Gói thông tin ARP được mô tả như sau:

33

Host A Host DHost CHost B

ARP Request

Host A Host DHost CHost B

ARP Reply

Page 34: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

0 31Hardware Address SpaceProtocol Address Space

Hardware Address Length Protocol Address LengthOperation Code

Source Hardware Address(Ethernet Address)

(Internet Address)

Source Protocol Address

Target Hardware Address(Ethernet Address)

Destination

Address

Source

Address

Type or

Length

(ARP) Data CRC

Không giống phần lớn các giao thức khác, dữ liệu trong ARP không có một

định dạng chuẩn cho header. Để ARP có thể làm việc với nhiều công nghệ

khác nhau, người ta dùng một trường để chứa độ dài của những trường đi sau

nó.

Trong trường hợp máy trạm không có thiết bị nhớ phụ, và vì vậy nó không biết

địa chỉ IP của chính mình khi khởi động, người ta sử dụng cơ chế chuyển

ngược địa chỉ (Reverse Address Resolution Protocol - RARP) hoạt động tương

tự ARP để giải quyết vấn đề này. Theo cơ chế đó, có một máy chủ chứa bảng

địa chỉ IP của các máy trạm, khi máy trạm khởi động, nó gửi một request tới tất

cả các máy và máy chủ gửi trả lại một gói tin chứa địa chỉ IP của máy trạm yêu

cầu.

34

Page 35: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.IV.3. Giao thức điều khiển truyền tin (Internet Control Message Protocol

- ICMP)

Việc dẫn đường qua các mạng sử dụng giao thức điều khiển truyền tin (Internet

Control Message Protocol - ICMP) được định nghĩa trong RFC 792. ICMP sử

dụng gói tin IP để chuyển thông báo của nó. ICMP gửi các thông báo làm các

công việc: Điều khiển, thông báo lỗi và chức năng thông tin cho TCP/IP..

Thông thường ICMP được gửi khi một gói tin không thể đi tới đích, một

gateway không còn đủ chỗ nhớ để nhận thêm gói tin hay một gateway hướng

dẫn máy tính sử dụng gateway khác để truyền thông tin theo một con đường tối

ưu hơn..

.IV.3.1. Gói tin ICMP

Mặc dầu mỗi thông báo ICMP có một kiểu định dạng riêng của nó, song các

thông báo đều chứa 3 trường đầu tiên giống nhau:

• TYPE: Định nghĩa thông báo đi sau.

• CODE: Cung cấp thông tin thêm về thông báo.

• CHECKSUM: Chứa checksum của thông báo.

Type Field ICMP Message Type

0 Echo Reply

3 Destination Unreachable

4 Source Quench

5 Redirect (Change a router)

8 Echo Request

11 Time Exceeded for a Datagram

12 Parameter Problem on a Datagram

13 Timestamp Request

14 Timestamp Reply

35

Page 36: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

15 Information Request

16 Information Reply

17 Address Mask Request

18 Address Mask Reply

.IV.3.2. Điều khiển dòng dữ liệu

Khi trạm nguồn gửi dữ liệu tới quá nhanh, trạm đích không kịp xử lý, trạm đích

- hay một thiết bị dẫn đường gửi trả trạm nguồn một thông báo để nó tạm

ngừng việc truyền thông tin.

.IV.3.3. Thông báo lỗi

Khi không tìm thấy trạm đích, một thông báo lỗi Destination Unreachable được

gateway gửi trả lại trạm nguồn. Nếu một số hiệu cổng không phù hợp, trạm

đích gửi thông báo lỗi lại cho trạm nguồn (cổng sẽ được trình bày trong phần

giao thức tầng giao vận).

.IV.3.4. Định hướng lại

Một gateway gửi thông báo định hướng lại để trạm gửi sử dụng một gateway

khác bởi vì gateway đó là một lựa chọn thích hợp hơn. Trường hợp này chỉ xảy

ra khi trạm gửi nối vào mạng có trên 2 gateway.

Ví dụ máy tính B muốn gửi thông tin đến máy C, nếu thông báo đó đến

gateway 1, thì gateway 1 phải gửi thông báo redirect máy tính đó qua gateway

2. Ngược lại, mỗi máy tính trên mạng X.25 muốn gửi thông báo tới máy tính

nằm trên mạng Token Ring thì việc này không cần thiết vì gateway 1 được nối

trực tiếp với mạng Token Ring.

36

X.25

Ethernet

Gateway 1

Gateway 2

Host B

Host C

Host A

Token Ring

Page 37: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.IV.3.5. Kiểm tra trạm làm việc

Khi một máy tính muốn kiểm tra một máy khác có tồn tại và đang hoạt động

hay không, nó gửi một thông báo Echo Request. Khi trạm đích nhận được

thông báo đó, nó gửi lại một Echo Reply. Lệnh ping của UNIX sử dụng các

thông báo này.

.IV.4. Thuật toán dẫn đường

Internet là một mạng chuyển mạch gói và để chuyển các gói tin IP trên mạng,

người ta sử dụng thuật toán dẫn đường. Thuật toán dẫn đường được thực hiện

bởi tiến trình lựa chọn một đường để truyền gói tin và việc dẫn đường cho các

gói tin được thực hiện bởi mọi máy tính trên đường đi của nó.

Người ta chia việc dẫn đường trên mạng Internet ra làm 2 kiểu:

• Dẫn đường trực tiếp (direct routing): Dẫn đường trực tiếp từ máy tính này

sang máy tính kia chỉ thực hiện được khi cả hai máy tính đều kết nối vào

một mạng vật lý. Dẫn đường trực tiếp chỉ sử dụng phần hostid của địa chỉ

Internet và sử dụng 2 giao thức chuyển địa chỉ ARP và RARP.

37

Page 38: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Tới máy trên mạng Dẫn đường tới Thông qua cổng

10.0.0.0 Direct 211.0.0.0 Direct 112.0.0.0 11.0.0.2 113.0.0.0 Direct 314.0.0.0 13.0.0.2 315.0.0.0 10.0.0.2 216.0.0.0 10.0.0.2 2

Bảng dẫn đường trên gateway 8

• Dẫn đường gián tiếp (indirect routing): Khi trạm đích không cùng nằm trên

một mạng với trạm gửi cần thông qua gateway để truyền đi. Trạm gửi phải

38

Network12.0.0.0

Network15.0.0.0

15.0.0.1

Network14.0.0.0

Gateway 5 Gateway 6

Gateway 7

Gateway 4

Gateway 8

Gateway 3 Gateway 2

Gateway 1

Network13.0.0.0

Network11.0.0.0

Network10.0.0.0

Network16.0.0.0Port 3

23Port1

Port 2 23

14.0.0.112.0.0.3

14.0.0.212.0.0.2

13.0.0.213.0.0.1

12.0.0.1

11.0.0.2 13.0.0.3

15.0.0.2

13.0.0.416.0.0.1

16.0.0.216.0.0.3

11.0.0.110.0.0.1

10.0.0.2

Page 39: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

đóng gói thông tin và gửi tới một gateway để chuyển tới đích. Dẫn đường

gián tiếp chỉ sử dụng net id trong địa chỉ IP.

Dữ liệu sẽ chuyển từ gateway này tới gateway khác đến khi nó có thể được

truyền trực tiếp tới máy nhận. Thuật toán dẫn đường thường sử dụng bảng dẫn

đường (Internet routing table - IP routing table) trên mỗi máy tính để chứa

thông tin về các máy tính và cách đi đến chúng. Vì việc dẫn đường được thực

hiện bởi cả host và gateway, mỗi thiết bị đều chứa một bảng dẫn đường. Bảng

dẫn đường chứa thông tin về các mạng và gateway để kết nối đến đó.

Người ta sử dụng một kỹ thuật để che dấu thông tin và giảm thiểu kích thước

của bảng dẫn đường là sử dụng kỹ thuật dùng gateway ngầm định (default

gateway). Nếu máy tính không tìm thấy địa chỉ đích trong bảng dẫn đường của

nó thì gói tin được chuyển tới một thiết bị là default gateway. Kỹ thuật này đặc

biệt thích hợp với trường hợp mạng máy tính được nối vào Internet thông qua

một máy tính duy nhất.

Thuật toán dẫn đường cụ thể cài đặt cho TCP/IP

Mỗi nút mạng có một cơ sở dữ liệu mô tả trạng thái tổng thể của mạng (topo,

độ trễ truyền dẫn..) gọi là bảng dẫn đường. Các thông tin này dùng cho việc

tính tính các con đường tối ưu để chuyển các gói tin đến đích. Chúng được cập

nhật thường xuyên sau một khoảng thời gian nào đó hoặc cập nhật mỗi khi có

một thay đổi xảy ra.

(Một số thuật toán sử dụng cho việc tìm đường đi tối ưu được trình bày trong

phần phụ lục B)

Khi có một gói thông tin đến một máy tính hay gateway, thuật toán dẫn đường

chạy trên máy tính đó sẽ phân tích địa chỉ đích của gói thông tin và quyết định

truyền nó theo đường tốt nhất tới đích (dựa vào thông tin trong bảng dẫn

đường). Việc này bao gồm cả cởi gói, chọn đường, cập nhật bảng dẫn đường,

đóng gói ...

39

Page 40: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

40

Tách địa chỉ mạng đích (I

N) từ địa chỉ đích (I

D)

IN nối trực

tiếp vào mạng

ID là tên một

máy tính trong bảng

Có tồn tại default

gateway

IN là tên một

mạng trong bảng

-

+

-

-

-

+

+

+

Chuyển trực tiếp qua mạng

Chuyển theo thông tin trong bảng

Gửi thông báo lỗi Cập nhật bảng dẫn đường

Kết thúc thuật toán dẫn đường

Chuyển tới default gateway

Page 41: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.V TẦNG GIAO VẬN

Tầng giao thức ngay trên tầng Internet là Tầng giao vận (Host-to-Host

Transport Layer hay thường gọi là Transport Layer). Hai giao thức quan trọng

nhất của tầng này là Transmission Control Protocol (TCP) và User Datagram

Protocol (UDP). TCP cung cấp dịch vụ chuyển giao thông tin có kết nối

(connection-oriented), nó bao gồm cả việc kiểm tra và sửa lỗi. UDP cung cấp

dịch vụ kém tin cậy hơn (unreliable) và không thiết lập liên kết trước

(connectionless). Cả hai giao thức đều chuyển giao thông tin giữa tầng ứng

dụng và tầng Internet. Chương trình ứng dụng có thể lựa chọn dịch vụ nào

thích hợp với nó.

.V.1. Giao thức không kết nối (User Datagram Protocol - UDP)

UDP cho phép chương trình ứng dụng truy cập trực tiếp đến gói tin của dịch

vụ chuyển giao giống như dịch vụ mà giao thức IP cung cấp. Nó cho phép ứng

dụng trao đổi thông tin qua mạng với ít thông tin điều khiển nhất. UDP là giao

thức không kết nối, kém tin cậy vì nó không có cơ chế kiểm tra tính đúng đắn

của dữ liệu truyền.

.V.1.1.Gói thông tin UDP

0 31Source port Destination port

Message length checksumData

Destination

Address

Source

Address

Type

field

IP

header

UDP data CRC

41

Page 42: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Mỗi gói thông tin UDP gọi là một Datagram được phân làm 2 phần header và

data trong đó header chứa thông tin về địa chỉ cổng nguồn, địa chỉ cổng đích,

độ dài của gói và checksum

.V.1.2.Phân kênh, hợp kênh và Ports

Phân kênh, hợp kênh chính là việc lựa chọn những tiến trình ứng dụng trong

một số lớn các tiến trình sử dụng giao thức UDP, và cần chọn ra những ứng

dụng tương ứng với gói thông tin chuyển đến.

Việc này được giải quyết bằng cơ chế cổng (Port mechanism) cơ chế này gắn

mỗi ứng dụng với một con số gọi là số hiệu cổng (Port number) và mỗi gói

thông tin mà ứng dụng gửi đi đều mang một trường SOURCE PORT.

Tại nơi nhận, dựa vào thông tin trong trường DESTINATION PORT mà gói

tin đó được truyền đến cổng tương ứng với ứng dụng. Ví dụ mọi bản TCP/IP

đều có dịch vụ FTP (File Transfer Protocol) gắn với cổng 21 và TFTP (Trivial

File Transfer Protocol) gắn với cổng 69 của UDP.

Việc sử dụng các port number cũng có nhiều cách

• Dùng những cổng dành riêng cho từng ứng dụng đã được đăng ký trước

(Well-known port assignment).

• Một port number sẽ được sinh ra khi có một ứng dụng đòi hỏi (Dynamic

binding).

42

Port 1 Port 2 Port 3

UDP: Demultiplexing Based on Port

IP Layer

UDP Datagram arrives

Page 43: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Cách tiếp cận kết hợp các kiểu trên (Hybird) vừa sử dụng Well-known port

assignment cho một số port number vừa có thể định nghĩa các port number

khác khi cần thiết. Các port number thông dụng của UDP thường được

dành chỗ từ 1 tới 255. Một số hệ điều hành (như 4.3 BSD UNIX) còn dành

chỗ tới port number 1023, các port number có thể sử dụng được là từ số

1024 trở lên.

Một số cổng UDP dành riêng

0 Reserved

7 Echo

9 Discard

11 Active users

13 Daytime

15 Who is up or NETSTAT

17 Quote of the day

19 Character generator

37 Time

42 Name server

43 Who is

53 Domain name server

67 Boottrap protocol server

68 Boottrap protocol client

69 Trivial File Tranfer Protocol ( TFTP)

111 Sun RPC

123 Network time protocol

161 SNMP net monitor

162 SNMP traps

512 UNIX comsat

513 UNIX rwho process

43

Page 44: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

514 System log

525 Timed

Có một số lý do để người lập trình ứng dụng lựa chọn UDP như một dịch

vụ giao vận:

• Nếu một số lượng lớn các gói tin nhỏ được truyền, thông tin cho việc kết

nối và sửa lỗi có thể lớn hơn nhiều so với thông tin cần truyền. Trong

trường hợp này, UDP là giải pháp hiệu quả nhất.

• Những ứng dụng kiểu "Query-Response" cũng rất phù hợp với UDP, câu

trả lời có thể dùng làm sự xác nhận của một câu hỏi. Nếu không nhận

được sự trả lời sau một thời gian nào đó, ứng dụng chỉ cần gửi đi một câu

hỏi khác.

• Một số ứng dụng đã tự nó cung cấp công nghệ riêng để chuyển giao thông

tin tin cậy, và không đòi hỏi dịch vụ này của transport layer.

.V.2. Giao thức điều khiển truyền tin (Transmission Control Protocol -

TCP)

Một số ứng dụng đòi hỏi giao thức giao vận cung cấp dịch vụ chuyển giao

thông tin tin cậy sử dụng TCP bởi nó cung cấp dịch vụ kiểm tra đúng đắn và

dữ liệu được truyền với một sự phối hợp thích hợp. Một số đặc điểm của dịch

vụ tin cậy mà TCP cung cấp là:

• Hướng dòng (Stream Orientation): TCP coi dữ liệu nó gửi đi là một dòng

byte không phải là gói tin. Do đó, TCP đảm bảo số thứ tự của các byte

gửi nhận. Trường Sequence number và Acknowledgment number trong

header của TCP giữ dấu của các byte trong toàn bộ dòng dữ liệu truyền.

TCP chuẩn không bắt hệ thống phải sử dụng một số đặc biệt nào để đánh

số dòng byte, mỗi hệ thống tự chọn một số mà nó sẽ dùng làm điểm bắt

đầu. Mỗi trạm cuối phải biết số thứ tự mà trạm kia dùng. Chúng phải trao

đổi một segment để đồng bộ hệ thống số sẽ được sử dụng (Synchronize

sequenence number - SYN) trong quá trình bắt tay. Trường Sequent number

44

Page 45: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

trong SYN segment chứa số bắt đầu (ISN) của dòng số đánh thứ tự, số này

được chọn ngẫu nhiên. Mỗi byte trong dữ liệu được giữ dấu bởi số ISN do

đó byte đầu tiên của dữ liệu mang số ISN+1. Sequent number chứa vị trí

của dòng byte trong gói tin nếu ISN=0 và 4000 byte đã được chuyển giao

thì con số tiếp theo sẽ là 4001.

• Chuyển giao bộ đệm (Buffered Transfer): Để giảm số lượng truyền thông,

giao thức cố gắng sử dụng số lượng tối thiểu các segment để truyền tải

thông tin, do vậy, giao thức sử dụng tối đa độ dài có thể của segment.

Trường window trong TCP header cho biết số byte tối đa mà trạm đích có

thể nhận được, nếu trạm đích có khả năng chấp nhận 6000 byte thì trường

window sẽ là 6000, trạm gửi có thể điều chỉnh lại dữ liệu cho phù hợp. Nếu

trường window mang giá trị 0 có nghĩa là trạm gửi phải chờ tới khi nhận

được một số khác 0.

• Kết nối hai chiều (Full Duplex Connection): TCP/IP cung cấp kết nối cho

cả hai đầu của liên kết. Điều này có nghĩa là tầng phía dưới cung cấp khả

năng gửi trả thông báo từ trạm đích trở lại trạm nguồn. TCP là giao thức

hướng kết nối. Nó thiết lập quan hệ logic giữa 2 trạm tham gia liên kết.

Thông tin điều khiển gọi là handshake được trao đổi giữa 2 trạm để thiết

lập hội thoại trước khi thông tin được truyền. TCP chỉ dẫn chương trình

điều khiển của một segment bằng cách đặt một bit dành riêng của cờ tại

word thứ 4 của segment header. Kiều bắt tay của TCP gọi là three way

handshake bởi vì 3 segment được trao đổi. Trạm A bắt đầu kết nối bằng

cách gửi một segment với bit Synchronize sequenence number (SYN).

Segment này báo cho trạm B thứ tự trạm A sẽ sử dụng cho những segment

của nó gửi, số thứ tự này đảm bảo cho dữ liệu một trật tự thích hợp. Trạm

B đáp lại trạm B với một segment với bit Acknowledgment (ACK) và

SYN được đặt. Segment của B thông báo rằng nó đã nhận được thông

báo của A và báo cho A biết số thứ tự mà nó sẽ sử dụng. Cuối cùng, A

gửi một segment báo cho B nó đã nhận được thông báo và truyền gói dữ

liệu đầu tiên. Chú ý rằng, gói tin thứ nhất chứa bit SYN và các gói tiếp

45

Page 46: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

theo chứa bit ACK. Sau khi trao đổi, trạm A xác định hiển nhiên trạm đích

tồn tại và đã sẵn sàng nhận dữ liệu. Ngay sau khi kết nối được thiết lập, dữ

liệu có thể truyền. Khi kết thúc hợp tác truyền giao dữ liệu, chúng sẽ trao

đổi three way hanshake chứa bit thông báo hết dữ liệu truyền No more

data from sender gọi là (FIN) để kết thúc kết nối. Đó là sự trao đổi giữa

hai trạm cung cấp một kết nối logic giữa hai hệ thống.

TCP cung cấp dịch vụ tin cậy với một cơ chế gọi là "Positive Ackowledgment

with Retransmission" (PAR). Đơn giản là trạm nguồn tiếp tục gửi thông tin đi

cho tới khi nó nhận được thông báo dữ liệu đã được nhận chính xác tại trạm

đích. Đơn vị thông tin chuyển giao giữa các ứng dụng gọi là segment, mỗi

segment chứa checksum để đảm bảo rằng segment không bị phá huỷ trên

đường truyền, nếu segment không bị phá huỷ, trạm nhận gửi thông báo xác

nhận lại trạm gửi, nếu segment bị phá huỷ, trạm nhận huỷ bỏ nó và sau một

thời gian nào đó, trạm gửi sẽ gửi lại gói tin mà nó không nhận được thông

báo xác nhận.

.V.2.1.Gói tin TCP

0 4 8 12 20 24 28 31

46

Thông tin trên mạngTại trạm gửi Tại trạm nhận

Receive ACK 1

Receive ACK 2

Send Paket 1

Send ACK 1

Send ACK 2

Send Paket 2

Receive Paket 1

Receive Paket 2

Page 47: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Source Port Desstination PortSequence Number

Acknowledgment NumberOffset Reserved Flags Window

Checksum Urgent PointerOpions Padding

Data

DestinationAddress

SourceAddress

Typefield

IPheader

TCP Segment CRC

Gói tin TCP chứa trong một Ethernet frame

• Source Port Cổng nguồn• Destination Port Cổng đích• Sequence Number Số thứ tự của gói tin• Offset Số thứ tự của byte đầu tiên • Reserved Để dành• Flags Cờ chỉ dẫn• Window Số byte tối đa trạm đích có thể nhận• Checksum Checksum kiểm tra tính toàn vẹn• Urgent Pointer Độ dài dữ liệu khẩn đi sau• Option Tuỳ chọn• Padding Phần điền thêm vào các con số 0• Data Dữ liệu bắt đầu tại đây

.V.2.2.Cổng, kết nối và điểm kết nối

TCP cũng dùng các port number để gán cho các ứng dụng và cho phép truy

cập tới các ứng dụng này thông qua các port number đó.

Cổng TCP dành riêng

0 Reserved

1 TCP multiplexor

5 RJE

47

Page 48: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

7 Echo

9 Discard

11 Active users

13 Daytime

15 Network status program

17 Quote of the day

19 Character generator

20 FTP - data connection

21 FTP - command connection

23 TELNET

25 Simple mail transport protocol

37 Time

42 Name server

43 Who is

53 Domain name server

77 Any private RJE server

79 Finger - find a active user

93 Device control protocol

95 SUPDUP protocol

101 Network info.center host name server

102 OSI - transport service access point

103 X.400 mail service

104 X.400 mail sending

111 Sun microsystems remote procedural call

113 Authentication service

117 UNIX to UNIX copy(UUCP)path service

119 Usenet news tranfer protocol

129 Password generater protocol

139 NetBIOS session service

160-223 Reserved

48

Page 49: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Tuy cũng dùng các port number để định danh cho các ứng dụng nhưng một

cổng không đủ để định danh cho một thực thể duy nhất trên mạng, TCP là một

giao thức hướng kết nối do đó nó cần phải định danh cho cả hai đầu của liên

kết. TCP đưa ra định nghĩa endpoint là một cặp số nguyên (host, port) trong

đó, host là địa chỉ IP của một máy tính còn port là port number mà máy tính đó

sử dụng. Ví dụ: (190.2.2.1,23) định nghĩa cổng 23 cho máy tính có địa chỉ IP là

190.2.2.1. Chúng ta sẽ quay lại với khái niệm endpoint trong chương sau.

.VI TẦNG ỨNG DỤNG CỦA TCP/IP

Phần lớn người sử dụng chỉ quan tâm tới các dịch vụ thông tin được cung cấp

trên Internet. Các ứng dụng có sớm nhất của Internet là Telnet, FTP, SMTP,

DNS ngoài ra ngày nay có hàng ngàn ứng dụng khác đang phát triển và ngày

một nhiều. Sau đây chúng ta tìm hiểu và phân tích một số ứng dụng của

Internet.

.VI.1. Dịch vụ tên miền (Domain Name Service - DNS)

Việc định vị các máy tính trên mạng bằng các địa chỉ IP có nhiều lợi điểm như

đã trình bày ở phần trên, tuy nhiên với người sử dụng, việc nhớ các con số đó

là một việc tẻ nhạt khó chịu. Hơn nữa, địa chỉ IP không mang thông tin về địa

lý, tổ chức hay người dùng. Vì thế, người ta xây dựng hệ thống đặt tên gọi là

Domain Name Server để cung cấp cho người dùng cách đặt tên cho các máy

tính với cách đặt tên thông thường quen thuộc.

Một domainame thông thường có dạng:

Tên_người_dùng@Tên_miền

với tên miền được phân làm các cấp nối với nhau bởi dấu “.”. Tên miền được

NIC cung cấp.

Tên miền cao nhất là cấp quốc gia được đặt bởi 2 chữ cái:

• ar: Argentina

• at: Austria

49

Page 50: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• au: Australia

• be: Belgium

• ca: Canada

• cn: China

• de: Germany

• es: Spain

• fr: France

• gb: Great britain

• hk: Honkong

• il: Israel

• it: Italy

• jp: Japan

• kr: Korea

• lu: Luxembourg

• my: Malaysia

• no: Norway

• vn: Việt nam

• .......

nếu không có gì thì được hiểu như thuộc USA

Mức tiếp theo chỉ lãnh vực hoạt động:

• edu: giáo dục

• gov: chính phủ

• com: thương mại

• mil: quân sự

• org: các tổ chức phi lợi nhuận

50

Page 51: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• net: các tổ chức phát triển mạng

Sau đó có thể là tên công ty và tên máy tính.

Một máy tính có thể có nhiều tên nhưng trên mạng, mỗi tên là duy nhất. Việc

ánh xạ địa chỉ IP vào tên miền được thực hiện bởi các Name Server cài đặt tại

máy Server và Name Resolver cài đặt trên máy trạm.

.VI.2. Đăng nhập từ xa (Telnet)

Telnet cho phép người sử dụng từ một trạm làm việc của mình có thể đăng

nhập (login) vào một trạm xa như là một đầu cuối (teminal) nối trực tiếp với

trạm xa đó.

51

vn

fptvdc

comedugov mil org nic

hutvnuh

fit

Phân cấp domain name

Page 52: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Để đăng nhập vào một máy tính ta đánh lệnh:

telnet [domain name | IP address]

.VI.3. Thư điện tử (Electronic Mail)

Đây là một dịch vụ phổ biến nhất trên Internet trước khi World Wide Web ra

đời, thông qua dịch vụ này, người sử dụng trên mạng có thể trao đổi các thông

báo cho nhau trên phạm vi thế giới. Đây là một dịch vụ mà hầu hết các mạng

diên rộng đều cài đặt và cũng là dịch vụ cơ bản nhất của một mạng khi gia

nhập Internet. Nhiều người sử dụng máy tính tham gia mạng chỉ dùng duy nhất

dịch vụ này. Dịch vụ này sử dụng giao thức SMTP (Simple Mail Transfer

Protocol) trong họ giao thức TCP/IP.

Thư điện tử là phương thức trao đổi thông tin nhanh chóng và thuận tiện.

Người sử dụng có thể trao đổi những bản tin ngắn hay dài chỉ bằng một

phương thức duy nhất. Rất nhiều người sử dụng thường truyền tập tin thông

qua thư điện tử chứ không phải bằng các chương trình truyền tập tin thông

thường.

52

TCP/IPInternet

User’s Terminal

Hệ điều hành

Telnet Client

Hệ điều hành

Telnet Server Server

gửi thông báo tới

máy tính thực hiện pseudo

terminal

Server nhận thông báo từ

clientClient gửi thông báo đến server

Client đọc từ trạm cuối

Page 53: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Đặc điểm của dịch vụ thư điện tử là không tức thời (off-line) - tất cả các yêu

cầu gửi đi không đòi hỏi phải được xử lý ngay lập tức.

Khi người sử dụng gửi một bức thư, hệ thống sẽ chuyển thư này vào một vùng

riêng (gọi là spool) cùng với các thông tin về người gửi, người nhận, địa chỉ

máy nhận... Hệ thống sẽ chuyển thư đi bằng một chương trình chạy nền

(background). Chương trình gửi thư này sẽ xác định địa chỉ IP máy cần gửi tới,

tạo một liên kết với máy đó. Nếu liên kết thành công, chương trình gửi thư sẽ

chuyển thư tới vùng spool của máy nhận. Nếu không thể kết nối với máy nhận

thì chương trình gửi thư sẽ ghi lại những thư chưa được chuyển và sau đó sẽ

thử gửi lại một lần nó hoạt động. Khi chương trình gửi thư thấy một thư không

gửi được sau một thời gian quá lâu (ví dụ 3 ngày) thì nó sẽ trả lại bức thư này

cho người gửi.

Mọi thư trên Internet đều tuân theo một dạng chuẩn. Bao gồm phần header

chứa địa chỉ người gửi, địa chỉ người nhận dạng domain name và sau đó là

phần nội dung thư. Cả hai phần đều là các ký tự ASCII chuẩn. Thư chuyển

trên mạng và đến được đích là nhờ vào thông tin chứa trong phần header của

thư.

Ban đầu thư điện tử chỉ nhằm mục đích trao đổi các thông báo (thực chất là các

tệp văn bản) giữa người sử dụng với nhau. Dần dần người ta đã phát triển thêm

các biến thể trên nó để phục vụ người sử dụng tốt hơn hoặc dùng cho những

mục đích riêng biệt. Đó là các dịch vụ thông tin dựa trên thư điện tử. Thực chất

của các dịch vụ này là sử dụng thư có nội dung tuân theo một cú pháp đặc biệt

thể hiện yêu cầu của người sử dụng. Các thư này được gửi tới một người sử

dụng đặc biệt là các server, các server này phân tích nội dung thư, thực hiện

các yêu cầu rồi gửi trả lại kết quả cho người yêu cầu cũng dưới dạng thư điện

tử.

Có hai server phổ biến trong hoạt động này là

• name server cung cấp dịch vụ tra cứu địa chỉ trên mạng

53

Page 54: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• archive server cho phép người sử dụng tìm kiếm và lấy về những tệp tin

dùng chung.

.VI.4. Giao thức truyền tệp (File Transfer Protocol - FTP)

Đây là một phương pháp sao chép tệp từ một máy tính ở xa về máy tính của

người dùng ta có thể ngồi tại máy tính của mình truyền hoặc lấy file trên một

máy chủ nào đó

Ví dụ lấy tệp nettcp.c trên máy chủ sco5 về máy tính của mình:

$ ftp sco5

Connected to sco5.

220-

220 sco5.cse.com.vn FTP server (Version 2.1WU(1)) ready.

Name(none): binhnn

331 Password required for binhnn.

Password:

230 User binhnn logged in.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> get nettcp.c

local: nettcp.c remote: nettcp.c

200 PORT command successful.

150 Opening BINARY mode data connection for nettcp.c (46 bytes).

226 Transfer complete.

46 bytes received in 0 seconds (0.04 Kbytes/s)

ftp> bye

221 Goodbye.

$

54

Page 55: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.VI.5. Nhóm tin (News groups)

News groups là những nhóm người dùng thảo luận trực tuyến. Mỗi người gửi

những bài bình luận về một vấn đề nào đó, tạo thành một nhóm thảo luận,

những nhóm tin cho phép người dùng tiếp xúc với hàng triệu người trên thế

giới có cùng mối quan tâm. Internet có gần 20.000 nhóm tin như vậy

.VI.6. Tìm kiếm tệp (Archie)

Do trên Internet hiện nay có khoảng trên 3 triệu tệp và hàng nghìn ftp server và

số lượng đó ngày càng tăng nhanh. Archie là một dịch vụ giúp đỡ tìm kiếm các

tệp tin khác nhau theo một số các thông tin nào đó. Thông thường dịch vụ này

cho phép tìm kiếm tệp theo tên hoặc một xâu con của tên tệp. Nó chưa cho

phép tìm kiếm theo chủ đề hay nội dung. Tuy vậy nó trợ giúp cho ftp rất nhiều

để có thể lấy tệp dễ dàng hơn.

.VI.7. Tra cứu thông tin theo thực đơn (Gopher)

Sử dụng giao thức Gopher protocol để tìm kiếm tài nguyên của mạng. Dịch vụ

này cho phép tìm kiếm và tra cứu thông tin theo chủ đề của thông tin. Việc tra

cứu này được thực hiện qua hệ thống thực đơn thân thiện hơn với người sử

dụng. Nó có ưu điểm là có thể tra cứu trên nhiều máy chủ cùng một lúc. Hạn

chế của Gopher là hiển thị thông tin quá tóm tắt, các chức năng cung cấp trong

thực đơn còn chưa nhiều.

.VI.8. Tìm kiếm thông tin theo chỉ số (WAIS)

Khác với Gopher tìm kiếm thông tin qua các đề mục định sẵn, WAIS cho phép

nguời dùng tìm kiếm các tệp dữ liệu có chứa các xâu định trước. Ngoài các

ứng dụng client, server WAIS còn có một phần đặc biệt là indexer làm nhiệm

vụ cập nhật các tài liệu mới, sắp xếp chúng dưới dạng thích hợp để thuận tiện

cho việc tìm kiếm. WAIS server khi nhận được câu hỏi của client sẽ tìm kiếm

trong cơ sở dữ liệu tạo ra bởi indexer và trả lời cho client.

55

Page 56: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.VI.9. Siêu văn bản (WWW)

Người ta nói rằng WWW là linh hồn của Internet vì nó cung cấp cho người

dùng một giao diện lý tưởng khi làm việc với Internet. Người dùng máy tính

không cần có hiểu biết sâu về máy tính cũng có thể sử dụng nó như một công

cụ đắc lực để ngồi tại nhà xem toàn bộ thế giới với số lượng thông tin đồ sộ

được cập nhật từng giây.

WWW dựa trên ý tưởng siêu văn bản Hypertext trong đó chứa các Hyperlink

đến các văn bản khác và như vậy, ta có thể mở rộng mãi mãi trang văn bản của

mình.

WWW ngày nay được mở rộng với khái niệm siêu phương tiện Hypermedia

bao gồm cả hình ảnh, âm thanh..

Ngày nay, phần lớn ứng dụng trên Internet từ giải trí đến truy cập cơ sở dữ liệu

đều được thực hiện trên WWW.

56

Page 57: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

CHƯƠNG IV. XÂY DỰNG ỨNG DỤNG TRUYỀN TỆP

.I GIAO DIỆN LẬP TRÌNH

.I.1. Giao diện lập trình

Bộ giao thức TCP/IP đã định nghĩa đầy đủ các giao thức truyền thông để các

máy tính trên mạng có thể giao tiếp với nhau, che đi cấu trúc vật lý của mạng.

Tuy nhiên, để xây dựng các ứng dụng thì sử dụng TCP/IP là không đủ, bởi vì

người lập trình sẽ phải tự mình xây dựng những thủ tục giải quyết từng sự

kiện, một giao diện (Application Program Interface) lập trình là cần thiết để

cung cấp cho người lập trình một cách tiếp cận đơn giản, dễ hiểu hơn.

UNIX cung cấp cho người lập trình hai giao diện chính cho lập trình C:

• Sockets lần đầu tiên xuất hiện trong bản BSD UNIX năm 1982 và nhanh

chóng phát triển rộng rãi trong một khoảng thời gian ngắn. Được phát triển

thêm vào năm 1990 để hỗ trợ giao thức ISO. Socket được gắn với khả năng

truyền thông dễ dàng giữa các tiến trình cả trên mạng và trên một máy tính.

Mục tiêu của nó là che dấu càng nhiều càng tốt những gì xảy ra ở tầng

truyền thông phía dưới.

57

Tiến trình ứng dụng

Giao diện với nhân hệ điều hành

Giao diện với phần cứng

Phần cứng

Thư viện

Page 58: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• TLI (Transport Layer Interface) Phát triển đầu tiên cho UNIX System V 3.0

có những hàm và thủ tục tương đương với Socket nhưng mô hình phức tạp

hơn để đạt được tính mềm dẻo hơn.

.I.2. Network I/O và file I/O

Hệ điều hành UNIX, có 6 lời gọi hệ thống vào ra file đó là:

• open: Mở file.

• creat: Tạo file.

• close: Đóng file.

• read: Đọc từ file.

• write: Ghi file.

• lseek: Chuyển con trỏ file.

Và UNIX coi mỗi thiết bị đều như một file, có thể được truy cập như một file.

Tuy nhiên việc vào ra trên mạng với giao diện lập trình ứng dụng phức tạp hơn

vì:

• Mô hình Client-Server là không đối xứng, ta phải xác định chương trình nào

đóng vai trò Client, chương trình nào đóng vai trò Server.

• Một đối thoại trên mạng có thể là hướng kết nối hoặc không kết nối.

• Một tiến trình con có thể sử dụng file descriptor của chương trình cha

truyền cho để làm việc với file mà không cần biết đến tên file thực sự. Các

ứng dụng trên mạng cần biết được đầu kia của kết nối để chắc chắn rằng nó

được phép đòi hỏi dịch vụ.

• Trong phần nói về giao thức TCP/IP chúng ta đã biết để thiết lập kết nối

cần nhiều tham số hơn đối với file I/O, đó là giao thức (protocol), địa chỉ IP

đích (Destination IP Address), địa chỉ IP nguồn (Source IP Address), số

hiệu cổng đích (Destination port number), số hiệu cổng nguồn (Source port

number).

58

Page 59: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Giao diện mạng phải hỗ trợ nhiều giao thức truyền thông ví dụ các chuẩn

của tầng cao với tầng thấp hơn.

.I.3. Làm việc với Socket

Như đã giới thiệu ở trên, Socket được gắn với khả năng truyền thông dễ dàng

giữa các tiến trình cả trên mạng và trên một máy tính. Và nó là che dấu càng

nhiều càng tốt những gì xảy ra ở tầng truyền thông phía dưới. Chúng ta sẽ lựa

chọn Socket để phát triển ứng dụng của mình trên mạng dựa trên mô hình

Client-Server.

.I.3.1. Socket

Nói chung cơ chế socket tương tự với cơ chế truy nhập tệp trong UNIX. Khi

cần thiết tiến trình có thể tạo ra một socket, hệ thống trả lại kết quả là một

socket descriptor. Sự khác biệt giữa file descriptor và socket descriptor ở chỗ

file descriptor được gắn liền với một tệp hay thiết bị cố định còn socket

descriptor không bị gắn với một địa chỉ nào. Chương trình có thể cung cấp địa

chỉ tại mỗi lần truy nhập tới socket hay cũng có thể gắn socket descriptor với

59

Application

Socket Library

User

Kernel

Stream Head

SHOCKMOD

Transport Provider

TPI

Page 60: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

một địa chỉ nhất định. Do nó tương thích với cơ chế truy nhập tệp, nên vẫn có

thể dùng các lệnh thông dụng như read, write đối với socket.

Một Socket được dùng như một endpoint. Mỗi Socket gắn với một nhóm

• SHOCK_STREAM sử dụng cho dịch vụ hướng kết nối .

• SHOCK_DGRAM sử dụng cho dịch vụ không kết nối.

• SHOCK_RAW cung cấp truy cập trực tiếp vào giao thức để xây dựng công

cụ quản trị ở mức user.

• SHOCK_SEQPACKET Giống như SHOCK_STREAM nhưng cung cấp

biên giới các mesage.

• SHOCK_RDM Cung cấp dịch vụ không kết nối đơn giản.

.I.3.2. Địa chỉ Socket

Có hai loại địa chỉ được gán với một socket: Địa chỉ local và địa chỉ TCP/IP.

Địa chỉ này được khai báo là những bản ghi và được dùng làm tham số cho

những lệnh hệ thống và thủ tục truy nhập socket. Địa chỉ local là địa chỉ để xác

định socket trong nội bộ máy.

Cấu trúc địa chỉ cục bộ được mô tả như sau

Address family Address bytes 0-1Address bytes 2-5Address bytes 6-9

Address bytes 10-13

struct sock_addr {

u_short sa_family; /* address family */char sa_data[14]; /* up to 14 bytes address */

};

Trường address family sẽ quyết định cấu trúc địa chỉ của trường Address bytes

phía sau vì socket hỗ trợ cho nhiều giao thức khác nhau nên ứng với mỗi giao

thức trường địa chỉ sẽ có cấu trúc khác nhau.

60

Page 61: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Protocol family Description

PF_UNSPEC Unspecified familyPF_UNIX UNIX domainPF_INET Internet protocolsPF_IMPLINK Arpanet IMP addressPF_PUP Old Xerox protocolsPF_CHAOS M.I.T. CHAOS protocolsPF_NS Xerox Network system protocolsPF_NBS NBS protocolsPF_ECMA European Computer ManualPF_DATAKIT DATAKIT protocolsPF_CCITT CCITT protocolsPF_SNA IBM System Network ArchiteturePF_DECnet DECnet protocolsPF_DLI DEC direct data link interfacePF_LAT LAN terminal interfacePF_HYLINK NSC HyperchannelPF_APPLETALK Apple Talk protocolsPF_NIT Network interface tapPF_802 IEEE 802.2PF_OSI OSI protocolsPF_X25 CCITT X.25PF_OSINET OSI protocolsPF_GOSIP U.S.government OSI protocols

Protocol Families

Địa chỉ TCP/IP được khai báo với tên sockaddr_in. Nó chứa số hiệu port và

địa chỉ IP 32-bit.

Address family Protocol portIP AddressUnused (0)Unused (0)

struct in_addr /* 32-bit IP Addresss */{

u_long s_addr; /* network byte order */};

struct sockaddr_in {

short sin_family; /* = AF_INET */

61

Page 62: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

u_short sin_port; /* 16-bit port number */struct in_addr sin_addr; /* 32-bit IP Addresss */char sa_zero[14]; /*unused*/

};

.I.3.3. Một số lời gọi tạo lập socket

Lời gọi socket():

Muốn làm việc với socket thì việc đầu tiên là phải tạo socket đó. Để làm việc

đó cần gọi lệnh socket() với các tham số cần thiết. Hàm trả lại một socket

descriptor nếu thành công, -1 nếu có lỗi.

int socket (int family, int type, int protcol)

• Tham số family xác định họ giao thức được sử dụng với socket như đã nói

đến ở trện.

AF_UNIX Giao thức nội bộ UNIX

AF_INER Giao thức Internet(TCP/IP)AF_NS Giao thức Xeror NSAF_IMPLINK Giao thức lớp IMP

• Tham số type xác định kiểu của liên kết. Những kiểu có thể sử dụng là

dạng stream có độ tin cậy cao (SOCK_STREAM), dạng datagram

(SOCK_DGRAM) hay dạng thô (SOCK_RAW) cho phép truy nhập tới

mức thấp của mạng.

Ví dụ:

AF_UNIX AF_INET AF_NSSOCK_STREAM Có TCP CóSOCK_DGRAM Có UDP CóSOCK_RAW IP Có

Do đó tham số thứ ba xác định chính xác giao thức nào được sử dụng cho

socket. Tuy vậy trong rất nhiều ứng dụng tham số này không được sử dụng.

Lời gọi bind()

Khi mới được tạo ra, socket không được gắn với bất cứ địa chỉ nào. Nói riêng

với TCP/IP là nó chưa được gán với số hiệu port của tiến trình gửi, số hiệu port

62

Page 63: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

của tiến trình nhận cũng như địa chỉ IP. Nhiều chương trình không quan tâm

đến số hiệu port và địa chỉ của nó, và dành cho phần mềm giao thức tự gán.

Tuy nhiên các chương trình khác vẫn cần biết đến địa chỉ của mình. Lệnh bind

gán thiết lập một địa chỉ local cho socket và đăng ký nó với hệ thống.

int bind(int sock, struct sockaddr * localaddr, int addrlen)

Lời gọi bind() được sử dụng trong các trường hợp sau:

• Chương trình server đăng ký một địa chỉ thông dụng với hệ thống. Mọi dữ

liệu đến địa chỉ này sẽ được chuyển cho nó.

• Một chương trình client đăng ký một địa chỉ đặc biệt.

• Một chương trình client có kiểu không kết nối (connectionless) muốn kiểm

tra xem địa chỉ của nó có hợp lệ hay không.

Lời gọi connect

Để thiết lập được một liên kết giữa client với server, tiến trình cần phải gọi

lệnh connect.

int connect(int sock, struct sockaddr * seraddr, int addrlen)

Tham số lệnh này tương tự đối với lệnh bind() nhưng seraddr trỏ tới địa chỉ của

server (tức là đầu kia của liên kết).

• Đối với các giao thức có liên kết (connection-oriented), connect() sẽ tạo lập

một liên kết thực sự giữa hai máy. Các thông tin được trao đổi nhằm thống

nhất mọi tham số liên quan. Nó sẽ chưa thoát ra nếu như chưa thiết lập

được liên kết hoặc chưa nhận được thông báo lỗi.

• Đối với các giao thức không liên kết (connectionless) lệnh connect() đơn

giản chỉ cất giữ địa chỉ server (biến seraddr) để tiến trình sau này sử dụng

khi trao đổi dữ liệu. Với giao thức này việc gọi lệnh connect() có thể bỏ qua

nhưng việc sử dụng nó sẽ tạo ra sự thuận tiện đối với người lập trình. Sau

khi đăng ký địa chỉ với hệ thống thì sẽ không cần phải xác định lại địa chỉ

mỗi khi gửi đi các datagram. Người sử dụng có thể dùng các lệnh read,

write, recv, send tương tự như các socket có kết nối.

63

Page 64: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Ngoài ra, connect còn kiểm tra xem có thực sự một tiến trình nào nhận thông

tin mình sẽ gửi hay không. Nếu địa chỉ gửi không tồn tại connect sẽ trả lại lỗi

cho tiến trình gọi. Việc này làm cho tiến trình có thể xử lý lỗi tốt hơn so với

các giao thức không kết nối (ví dụ UDP). Một datagram có thể chứa một địa

chỉ sai và hoàn toàn không có người nhận.

Lời gọi listen()

Ta sẽ xem xét một tiến trình server, tiến trình này đầu tiên tạo ra một socket,

gắn nó với một port thông dụng rồi chờ cho đến khi có một yêu cầu được gửi

tới. Nếu nó là một liên kết kết nối thực sự, hoặc nó phải xử lý quá lâu đối với

mỗi yêu cầu, sẽ xảy ra trường hợp là một yêu cầu mới sẽ tới trong khi yêu cầu

cũ chưa được xử lý xong. Để tránh việc các yêu cầu mới bị từ chối, server phải

khai báo với phần mềm của giao thức tạo ra cho nó một hàng đợi các yêu cầu.

Lệnh listen() sẽ khai báo hàng đợi này.

int listen(int sock, int qlen)

• Tham số sock là socket descriptor được dùng bởi server.

• Tham số qlen quyết định chiều dài hàng đợi các yêu cầu. Giá trị tối đa của

tham số này là 5.

Khi hàng đợi này đã đầy, hệ thống sẽ không chấp nhận thêm một yêu cầu nào

khác. Mọi yêu cầu tới sau đó sẽ bị huỷ bỏ. listen() chỉ áp dụng với socket kiểu

STREAM.

Lời gọi accept()

Sau khi tiến trình server gọi các lệnh socket(), bind(), listen() để tạo ra một

socket, gắn nó với một port thông dụng, xác định chiều dài hàng đợi, server sẽ

gọi lệnh accept() để tạo ra một kết nối hoàn thiện.

int accept(int sock, struct sockaddr * addr, int addrlen)

Tham số addr dùng để trả lại địa chỉ của tiến trình gửi yêu cầu (client).

accept() sẽ lấy yêu cầu đầu tiên trong hàng đợi và tạo ra một socket mới có

64

Page 65: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

cùng thuộc tính với sock. Nếu trong hàng đợi không có một yêu cầu nào thì nó

sẽ chờ cho đến khi có một yêu cầu được gửi tới. Socket sock vẫn được giữ

nguyên do vậy server vẫn tiếp tục chấp nhận các yêu cầu khác gửi tới socket

này.

Với cách tiếp cận tương tác, server tự xử lý giải quyết yêu cầu sau đó đóng

socket này lại và quay về xử lý tiếp các yêu cầu sau đó.

Còn đối với phương pháp đồng thời, sau khi lệnh accept() trả lại kết quả server

sẽ sinh ra một tiến trình con để giải quyết yêu cầu. Tiến trình con sẽ nhận được

một bản sao của socket mới. Trong khi đó tiến trình server sẽ lập tức đóng

socket mới của nó sau khi tạo ra tiến trình con và trở lại gọi accept() để nhận

một yêu cầu mới.

Lời gọi close()

Khi một tiến trình thôi không sử dụng socket thì nó gọi lệnh close()

int close(int sock)

sock là socket cần huỷ bỏ. Khi một tiến trình kết thúc với mọi lý do, hệ thống

sẽ đóng tất cả các socket còn mở. Đối với các giao thức tin cậy, mặc dù socket

đã bị đóng nhưng kernel vẫn cố gắng gửi đi các dữ liệu còn lại trong hàng đợi

dữ liệu.

.I.3.4. Một số lời gọi gửi dữ liệu qua socket

Có 5 lời gọi được dùng để gửi dữ liệu qua socket. Các lệnh write, writev, send

làm việc với các socket đã kết nối vì chúng không cho phép khai báo địa chỉ

người nhận.

Lời gọi send()

Lời gọi send có 4 tham số :

int send(int sock, char * buff, int len, int flag)

• sock chỉ định socket được sử dụng,

65

Page 66: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• buff trỏ tới vùng dữ liệu được gửi đi,

• len xác định số byte trong buff được gửi đi.

• flag cho phép ngưòi gửi chọn một số cách thức để gửi dữ liệu ví dụ như gửi

dữ liệu out-of-band...

Các tham số này khác nhau đối với mỗi loại socket. send() trả lại mã lỗi cho

chương trình gọi để chương trình biết được thao tác có thành công hay không.

Lời gọi write()

Do cách thức truy nhập tới socket tương tự truy nhập đến file nên có thể dùng

lệnh hệ thống write để gửi dữ liệu qua socket.

int write(int fd, char * buff, int len)

Tham số fd có thể là một socket descriptor hoặc file descriptor.

Lời gọi writev()

Để gửi đi một danh sách các khối dữ liệu ta dùng

int writev(int fd, struct iovec iovector[], int vectorlen)

Các lời gọi sendto(), sendmsg()

Được dùng cho các socket không kết nối. Hai lệnh này yêu cầu phải cung cấp

địa chỉ người nhận.

int sendto(int sock, char * buff, int len, int flag, struct sockaddr * destaddr,

int addrlen)

• Bốn tham số đầu giống như bốn tham số của send().

• Hai tham số sau là địa chỉ của người nhận và độ dài của địa chỉ.

Do sendto() có quá nhiều tham số, lập trình viên có thể sử dụng lời gọi

sendmsg()

66

Page 67: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

int sendmsg(int sock, struct msghdr msg[], int flag)

Với tham số msg là một cấu trúc có chứa địa chỉ và danh sách nhiều đoạn dữ

liệu cần gửi đi.

.I.3.5. Một số lời gọi nhận dữ liệu từ socket

Tương ứng với 5 lệnh để gửi dữ liệu có 5 lệnh dùng để nhận dữ liệu với tham

số và cơ chế hoàn toàn giống nhau.

◊ int recv(int sock, char * buff, int len, int flag)

◊ int read(int fd, char * buff, int len)

◊ int readv(int fd, struct iovec iovector[], int * vectorlen)

◊ int recvfrom(int sock, char * buff, int len, int flag, struct sockaddr *

destaddr, int *addrlen)

◊ int recvmsg(int sock, struct msghdr msg[], int flag)

.II MÔ HÌNH CLIENT-SERVER

Theo cách nhìn của người lập trình, TCP/IP giống như hầu hết các giao thức

truyền thông khác cung cấp cơ chế cơ bản để truyền dữ liệu. Đặc biệt, TCP/IP

cho phép người lập trình thiết lập truyền thông giữa hai chương trình ứng dụng

và truyền dữ liệu qua lại. TCP/IP cung cấp kết nối bình đẳng giữa các ứng

dụng kể cả các ứng dụng chạy trên cùng một máy.

Một phát triển của mô hình peer-to-peer là mô hình Client-Server đã trở thành

mô hình cơ bản được sử dụng trên mạng máy tính. Chương trình Server là một

chương trình chờ đợi kết nối từ chương trình Client và cung cấp dịch vụ cho

Client.

Mô hình được mô tả như sau:

• Tiến trình Server được khởi động trên một hệ thống nào đó sau đó chờ đợi

một tiến trình Client kết nối đến yêu cầu dịch vụ.

67

Page 68: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Tiến trình Client được khởi động trên cùng hệ thống máy với chương trình

Server hoặc từ một hệ thống khác kết nối với hệ thống chủ thông qua mạng.

Client gửi yêu cầu qua mạng tới tiến trình Server đòi hỏi một số dịch vụ

như:

◊ Trả lại ngày giờ cho Client

◊ In một file cho Client

◊ Đọc hoặc ghi file vào hệ thống file của Server

◊ Cho phép Client login vào hệ thống Server

◊ Chạy chương trình của Client trên hệ thống Server

• Sau khi cung cấp dịch vụ cho Client, Server tiếp tục nghỉ và chờ đợi kết nối

khác.

Chúng ta có thể chia tiến trình Server làm 2 kiểu:

• Tương tác (Interative Server): Khi Client đòi hỏi những dịch vụ đã đăng ký

trước với khoảng thời gian thực hiện nhỏ, Server tự làm công việc đó ví dụ

dịch vụ trả lại ngày giờ.

• Đồng thời (Concurrent Server): Với những yêu cầu đòi hỏi thời gian thực

hiện lớn, tiến trình Server sinh một tiến trình con để thực hiện yêu cầu còn

nó tiếp tục chờ đợi yêu cầu khác. Dịch vụ in file, đọc-ghi file được thực

hiện theo kiểu này.

.II.1. Mô hình Client-Server sử dụng dịch vụ không kết nối

Với mô hình không kết nối, client không kết nối với server mà chỉ gửi dữ liệu

đến sử dụng lời gọi sento(), ngược lại, server sử dụng lời gọi recvfrom() chờ

đợi dữ liệu từ client chuyển đến. Lời gọi recvfrom() trả lại địa chỉ của client,

nhờ đó server có thể gửi kết quả lại cho client.

68

Page 69: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

69

recvfrom()

recvfrom()

bind()

bind()

socket()

sendto()

Server(connectionless protocol)

block until data received from client

process request

sendto()

socket()

Client

data (reply)

data (request)

Lời gọi socket cho mô hình client-server không kết nối

Page 70: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.II.2. Mô hình Client-Server sử dụng dịch vụ hướng kết nối

Với mô hình Client-Server sử dụng dịch vụ hướng kết nối, đầu tiên Server

được khởi động và chờ đợi một kết nối từ client.

Sau khi kết nối được thiết lập, hai bên luân phiên nhau gửi nhận dữ liệu thông

qua đường truyền.

70

accept()

listen()

bind()

socket()

write()

write()

Server(connection-oriented protocol)

Connect()

read()

read()

socket()block until connection from client

Process request

Connection establishment

data (reply)

data (request)

Client

Lời gọi socket cho mô hình client-server hướng kết nối

Page 71: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

.III XÂY DỰNG CHƯƠNG TRÌNH TRUYỀN TỆP

.III.1. Thiết kế và cài đặt chương trình

.III.1.1. Giao thức ứng dụng được xây dựng và sử dụng trong chương

trình

Bản thân giao thức TCP là một giao thức hướng kết nối và đáng tin cậy, giao

thức này đảm bảo dữ liệu truyền vào socket đầy đủ, nhưng để tăng cường tính

tin cậy của chương trình ứng dụng và để kiểm soát việc truyền dữ liệu nhất là

trên các mạng có độ trễ lớn hay những mạng thường xuyên xảy ra hiện tượng

quá tải, một giao thức ứng dụng riêng được xây dựng cho chương trình.

Gói tin của giao thức ứng dụng được mô tả như sau:

0 1 2 Dữ liệu tối đa 4094 byteSize Data

• Size dài 2 byte chứa độ dài của phần dữ liệu của gói tin.

• Data chứa dữ liệu, trường này có độ dài tối đa là 4094 byte vì giao thức sử

dụng gói tin dài tối đa 4096 byte.

Việc sử dụng các kết nối:

Chương trình sử dụng hai kết nối, một để truyền lệnh và một để truyền dữ liệu

giữa client và server.

• Kênh truyền điều khiển dùng để truyền các lệnh và các thông báo có tính

chất điều khiển, điều này làm giảm tính phức tạp trong việc phân tích và xử

lý các lệnh của chương trình.

• Kênh truyền dữ liệu được thiết lập ngay trong quá trình tạo kết nối giữa tiến

trình client và tiến trình server và được dùng đến mỗi khi có dữ liệu cần

truyền nhận giữa client và server. Các khối dữ liệu có thể được chia nhỏ

thành các gói tin và truyền trên kênh dữ liệu, kết thúc một khối dữ liệu là

một gói tin có độ dài bằng 0.

71

Page 72: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Việc sử dụng hai kênh truyền

Có 3 loại lệnh trong chương trình sử dụng các kênh truyền như sau:

• Client gửi lệnh đến server và nhận về một thông báo trên kênh điều khiển ví

dụ thông báo lỗi hoặc hoàn thành lệnh.

• Client gửi lệnh đến server và nhận về một thông báo có dữ liệu truyền

“Openning data port”. Khi đó, client bắt đầu nhận dữ liệu trên kênh dữ liệu

cho tới khi nhận được một gói tin có độ dài là 0.

72

ServerClient

Gửi lệnh Nhận lệnh và thi hành

Nhận thông báo

Gửi thông báo hoàn thành lệnh hoặc báo lỗi

ServerClient

Gửi lệnh Nhận lệnh và thi hành

Nhận thông báo

Nhận dữ liệu ở kênh dữ liệu tới khi gói tin có độ

dài là 0

Gửi thông báo có dữ liệu cần truyền

Gửi lần lượt các gói tin kết thúc bởi một gói có

độ dài là 0

Page 73: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Client gửi lệnh yêu cầu truyền tệp lên server, server gửi lại thông báo chấp

nhận. Client ghi dữ liệu cần truyền vào kênh dữ liệu, sau khi ghi xong,

client chờ đợi một thông báo của server trên kênh điều khiển truyền lại số

lượng byte đã nhận và thông báo trên màn hình của người sử dụng. Quá

trình truyền nhận thông tin trên kênh dữ liệu cũng có thể được điều khiển

trực tiếp trên kênh điều khiển ví dụ dừng truyền.

.III.1.2. Cài đặt chương trình

Chương trình truyền tệp được xây dựng dựa trên mô hình client-server sử dụng

thư viện socket, giao thức lớp dưới là giao thức hướng kết nối TCP. Tiến trình

server hoạt động theo kiểu đồng thời (concurrent), server “nghe” ở cổng 1998,

khi có một tiến trình client kết nối đến, server nhận số hiệu cổng của client,

sinh tiến trình con để phục vụ còn bản thân tiến trình cha tiếp tục quay lại nghe.

Tiến trình server phục vụ tạo một kết nối lệnh để truyền lệnh và một kết nối dữ

liệu để truyền các khối dữ liệu giữa client và server.

73

ServerClient

Gửi yêu cầu truyền dữ liệu Nhận lệnh

Nhận và thông báo với người sử dụng số byte

truyền

Nhận dữ liệu ở kênh dữ liệu tới khi gói tin có độ

dài là 0

Gửi thông báo chấp nhận

Thông báo số byte đã nhận

Gửi lần lượt các gói tin kết thúc bởi một gói có

độ dài là 0

Page 74: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Phần server chạy trên các máy chủ Unix, Windows NT phục vụ cho phần

client chạy trên các máy Dos, Windows và Unix. Chương trình hoạt động gần

giống FTP nhưng có một số tính năng nâng cao:

• Thực hiện lệnh từ xa với EXEC: Chương trình server nhận lệnh gửi tới từ

client, thực hiện lệnh đó và gửi trả kết quả vào kênh truyền, chương trình

client đọc và hiển thị kết quả đó trên màn hình của người sử dụng.

• Thực hiện lệnh của hệ điêu hành trên máy trạm !CMD: Một số lệnh của hệ

điều hành có thể được thực hiện trên máy trạm, chúng được tiến trình client

giải quyết bằng cách gọi chương trình thông dịch của hệ điều hành.

• Khả năng thay đổi kích thước bộ đệm với BUFSIZ kích thước của bộ đệm

có thể được thay đổi bằng cách thay đổi biến môi trường chứa kích thước

bộ đệm. Việc này làm tăng năng suất của việc truyền thông tin trên mạng.

• Một số thao tác với thư mục trên máy chủ như tạo thư mục, xoá thư mục

được thực hiện bằng cách gọi các lệnh của hệ điều hành Unix hoặc những

hàm mức thấp trong thư viện của C.

• Chương trình còn cung cấp một số lệnh làm việc trực tiếp với tệp như

OPEN, LSEEK, READ, WRITE... những lệnh này sử dụng thư những lời

gọi mức thấp của hệ thống.

Sau đây là những lệnh đã cài đặt trên server

Lệnh Mô tảEXEC command [option] Chạy một lệnh UnixUSER username [PASS password] Đăng nhập hệ thốngPASSWD password Nhập passwordCHPWD newpassword Đổi passwordPORT portnumber Đăng ký một cổng truyền dữ liệuABORT Loại bỏ quá trình truyền PWD Lệnh đổi thư mụcLIST [option] [directory] Lệnh xem thư mụcCHDIR [directory] Lệnh đổi thư mụcMKDIR directory [mode] Tạo thư mục mớiRMDIR directory Xoá thư mụcUNLINK filename Xoá tệpOPEN path openflag [mode] Mở tệp

74

Page 75: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

LSEEK fildes offset whence Chuyển con trỏ tệpREAD fildes nbytes Đọc từ tệpWRITE fildes nbytes Ghi tệpLOCKF fildes mode size Khoá tệpCLOSE filedes Đóng tệpTMPNAM [path[prefix]] Tạo một tệp tạm thờiPUT filename Truyền tệp lên máy chủAPPEND filename Mở tệp để appendGET filename Lấy tệp từ máy chủHELP Trợ giúpUNIX Hoạt động ở mode UnixTNET Hoạt động ở mode TnetQUIT ThoátUMASK [mode] Đặt mặt nạ mode cho file truyềnFMODE filename Xem mode của fileFSIZE filename Xem độ dài của fileBUFSIZ size_of_buffer Đặt lại kích thước cho bộ đệmREXEC host user passwd command Chạy một lệnh từ xa

Phần client giao tiếp với người sử dụng, nhận lệnh, phân tích lệnh, xử lý hoặc

gửi cho server, nhận và trả kết quả lại cho người sử dụng.

(Văn bản chương trình client được in trong phần phụ lục C)

.III.2. Một số vấn đề nảy sinh trong quá trình thực hiện và cách giải quyết

.III.2.1. Vấn đề chuyển đổi tệp giữa hai hệ điều hành.

Do khái niệm về tệp và sự quản lý truy nhập ở hai hệ điều hành DOS và UNIX

có nhiều điểm khác nhau nên sự chuyển đổi tệp giữa hai hệ điều hành gặp phải

một số vấn đề.

Các tệp tin trên DOS hoàn toàn không có các thông tin về quyền sở hữu hay

quyền truy nhập nên thông tin này sẽ bị mất khi sao chép một tệp từ máy

UNIX sang một máy DOS.

Ngoài ra một vấn đề hết sức quan trọng và cũng khó có cách giải quyết tối ưu

là vấn đề tên tệp. Tên tệp trên UNIX có thể dài tới 14 ký tự (đối với UNIX

System V) hoặc hơn nữa, các ký tự có thể là chữ in hoa, chữ thường hay các

75

Page 76: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

ký tự đặc biệt đều được chấp nhận. Các thư mục trong đường dẫn của UNIX

được phân cách bởi dấu '/'. Trong khi đó tên tệp của DOS chỉ được phép dài tối

đa 8 ký tự cộng với 3 ký tự của phần mở rộng và bị hạn chế toàn bộ là chữ in

hoa không sử dụng chữ thường cùng với hàng loạt dấu và ký tự đặc biệt. Các

thư mục trong đường dẫn được phân cách bởi dấu '\'. Cho nên một ánh xạ 1-1

giữa hai loại tên tệp là không thể tồn tại. Nếu có một hàm nào đó thực hiện

được ánh xạ này thì sau khi chuyển một tệp từ máy UNIX tới máy DOS, tên

tệp đích sẽ hoàn toàn xa lạ với tên tệp nguồn gây ra khó khăn cho người sử

dụng.

Ví dụ, ta muốn có một tiện ích thực hiện việc backup một số tệp trên máy

UNIX sang máy DOS. Ta sẽ đơn giản chuyển các tệp đó sang máy DOS

nhưng khi cần chuyển các tệp này về vị trí cũ thì ta không thể xác định chính

xác vị trí cũ của tệp và không thể phục hồi lại đầy đủ tên của tệp. Nếu dùng

một hàm nào đó để tạo ra ánh xạ 1-1 thì khi sao chép sang máy DOS sẽ tạo ra

những tên tệp đặc biệt rất khó cho việc quản lý.

• Với bài toán này UNIX có tiện ích tar giải quyết bằng cách gom tất cả các

tệp vào thành một tệp kèm theo thông tin chi tiết về tệp đó, khi cần, có thể

phục hồi lại tệp một cách chính xác. Nhưng tiện ích này không thể áp dụng

cho mọi bài toán ví dụ cần đọc và xử lý tệp dưới môi trường DOS...

• Có một giải pháp tạm thời cho vấn đề này là phải cắt bỏ phần đằng sau của

tên tệp trên UNIX. Đây cũng chính là giải pháp đối với tên tệp dài của

Windows 95 khi các tệp này được truy nhập bởi DOS 6.x (hoặc các phiên

bản DOS trước). Với cách làm này chúng ta phải chú ý tới sự trùng tên sau

khi cắt bỏ phần đuôi và xử lý một số ký tự đặc biệt còn lại.

Ví dụ : Hai tệp

testdata001.dat và testdata002.dat

Có thể sẽ bị cắt thành testdata.dat và hai tệp sẽ bị trùng tên nhau, một trong hai

tệp sẽ không thể tồn tại.

76

Page 77: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

• Một giải pháp tương tự như trong Windows 95 sẽ được sử dụng đó là

chuyển hai tệp trên thành

testda~1.dat và testda~2.dat

• Giải pháp đặt tên cho các tệp trên máy UNIX tương tự như trên máy DOS

là một giải pháp tồi. Nó không tận dụng tối đa khả năng của hệ điều hành là

tên tệp linh động hơn. Nhưng ta nhận thấy rằng phương pháp này đôi khi

cũng tỏ ra có hiệu quả đối với các ứng dụng đặc biệt. Ví dụ : phần mở rộng

3 ký tự của tên tệp được dùng để xác định nội dung tệp được dùng khá rộng

rãi trên cả các hệ điều hành có tên tệp dài như UNIX, Windows 95...

• Một giải pháp khác là việc thay thế hệ điều hành DOS bằng hệ điều hành

Windows 95. Trong Windows 95 tên tệp có thể dài hơn (tới 255 ký tự) và

có thể chứa một số ký tự mà DOS không cho phép như dấu trống, dấu

chấm... Việc chuyển đổi tên tệp sẽ đơn giản chỉ là xử lý một số trường hợp

các ký tự đặc biệt. Với sự phát triển hiện nay hệ điều hành DOS đang dần

bị thay thế bởi Windows 95 (không chỉ bởi đặc tính tên tệp mà bởi nhiều

tính năng vượt trội của Windows 95) thì việc thay thế này hoàn toàn thích

hợp.

.III.2.2. Vấn đề về một số lệnh tương tác

Vì chương trình được xây dựng với mục đích truyền file, các giao thức được

xây dựng nhằm hướng tới sự bảo đảm tính toàn vẹn cho tệp tin. Việc chạy ứng

dụng được giao cho hệ điều hành, chương trình chỉ làm nhiệm vụ truyền tham

số dòng lệnh và nhận kết quả trả về. Vì lý do đó, một số lệnh tương tác với

người dùng (cần nhận thông tin từ bàn phím) không thể chạy được với lệnh

EXEC.

77

Page 78: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

K ẾT LUẬN

Mạng máy tính đang là xu hướng phát triển trong tương lai của ngành công

nghệ thông tin, việc nghiên cứu về các vấn đề liên quan và phát triển các phần

mềm trên mạng đòi hỏi nhiều thời gian và công sức.

Trong bản luận văn này, em đã trình bày những khái niệm cơ bản nhất về mạng

máy tính, nghiên cứu kỹ lưỡng về một giao thức đang được sử dụng nhiều nhất

hiện nay trên mạng đó là bộ giao thức TCP/IP và từ những kết quả nghiên cứu

đó, xây dựng một giao thức ứng dụng riêng để sử dụng trong chương trình

truyền tệp của mình.

Trong bước đầu thử nghiệm, chương trình đã hoạt động cho kết quả khả quan,

một số vấn đề như chuyển đổi tệp giữa các hệ điều hành đã thực hiện tốt. Tuy

nhiên trong chương trình còn một số vấn đề tồn tại cần giải quết đó là thực hiện

những lệnh tương tác, sử dụng hai đường truyền và một số lệnh điều khiển. Xu

hướng phát triển tiếp theo sẽ là phát triển giao thức để sử dụng một đường

truyền và tăng tính đồng bộ của chương trình.

Trong khoảng thời gian ngắn làm luận văn, em không tránh khỏi những sai sót,

em xin chân thành cảm ơn các thầy cô giáo và bạn bè đã góp ý, giúp đỡ em

trong suốt quá trình làm luận văn.

Nguyễn Nhật Bình

78

Page 79: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

TÀI LIỆU THAM KHẢO

Tác giả Tên sách Nhà xuất bản Năm xuất bảnDouglas E.Comer

Internetworking with TCP/IP

Prentice-Hall International 1991

Andrew S.Tanenbaum

Computer Network Prentice-Hall International 1988

W.Richard Stevens

Unix Network Programming

Prentice-Hall International 1991

Bill Rieken and Lyle Weiman

Unix Network Application Programming

John Wiley & Sons 1992

Nguyễn Thúc Hải

Mạng máy tính và các hệ thống mở

Nhà xuất bản Giáo Dục 1997

Một số tài liệu kỹ thuật của CSE

79

Page 80: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Phụ lục A MỘT SỐ KỸ THUẬT MẠNG CỤC BỘ

.I MẠNG ETHERNET VÀ IEEE 802.3

Ethernet và IEEE 802.3 là hai chuẩn phổ biến nhất trong kiến trúc mạng cục

bộ. Chúng sử dụng công nghệ gọi là CSMA/CD (Carrier Sense Multiple

Access/Collision Detect). Multiple Access có nghĩa là mọi máy tính và thiết bị

mạng có thể truy cập đường truyền cùng một lúc. Công nghệ Carrier Sense cho

phép các thiết bị nhận biết khi nào đường truyền đang bận. Trước khi thiết bị

truyền thông tin, nó kiểm tra đường truyền, nếu đường truyền bận, nó đợi một

khoảng thời gian ngẫu nhiên nào đó và tiếp tục. Nếu đường truyền không bận,

nó bắt đầu truyền dữ liệu của mình. Nếu 2 trạm cùng truyền thông tin một lúc,

dữ liệu có thể bị phá huỷ (collision), Collision Detection điều khiển thiết bị

collision controller gửi tín hiệu “jam signal” để báo cho mọi thiết bị trên mạng

biết điều gì đang sảy ra. Nếu gặp collision, thiết bị đợi một khoảng thời gian

ngẫu nhiên nào đó tính theo chu kỳ đồng hồ của nó ví dụ một số thiết bị đợi

trong khoảng 1 - 255 nhịp. Nếu gặp collision lần thứ hai, nó đợi một khoảng

trong 1 - 511. Nếu tiếp tục gặp collision, thiết bị cố gắng thêm 6 lần. Thời gian

truyền thông tin trên mạng Ethernet không thể xác định được chính xác vì

không ai có thể chắc rằng gói thông tin không bị collision. Do vậy, thường

người ta không dùng Ethernet với các ứng dụng thời gian thực. Một đặc tính

của mạng Ethernet nữa là nó không có cơ chế báo nhận, khi sử dụng với

TCP/IP dịch vụ này được tầng transport (TCP) cung cấp.

.II MẠNG TOKEN-PASING RINGS (IEEE 802.5)

Tolen-Pasing Rings cũng là một công nghệ mạng cục bộ phổ biến, việc điều

khiển lưu thông trên mạng này được sử dụng bởi một cơ chế gọi là thẻ bài

“token”. Token là một gói tin được chuyển vòng quanh mạng, mỗi thiết bị chỉ

được quyền truyền dữ liệu khi nó nhận được token.

80

Page 81: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Một đặc tính chủ yếu của Mạng Token-Pasing Rings là nó phải được nối thành

vòng, nếu một nút mạng bị lỗi, toàn bộ mạng sẽ ngừng hoạt động (đối với

mạng Ethernet chỉ một ngừng hoạt động khi nó bị lỗi). Nếu một máy bị tắt,

mạng Mạng Token-Pasing Rings vẫn cần giao diện của nó để truyền thông,

Token-ring Interface board lấy năng lượng từ cáp mạng để hoạt động. Khi thẻ

bài bị mất, sau một thời gian nào đó, một thiết bị điều khiển sẽ sinh một thẻ bài

mới.

.III MẠNG TOKEN-PASSING BUSSES (IEEE 802.4)

Token-Passing còn làm việc trên topo bus. Một chuẩn định nghĩa cho mạng

này là IEEE 802.4, là một phần của chuẩn MAP (Manufacturing Automation

Protocol). Chuẩn này sử dụng thiết bị Broadband khác với Baseband sử dụng

trong Ethernet và Token-ring. Baseband chỉ sử dụng một tín hiệu trên đường

truyền trong khi broadband sử dụng nhiều kênh truyền với các tần số tín hiệu

khác nhau trên đường truyền.

Một số mạng Broadband sử dụng hai dây dẫn, một để truyền, một để nhận dữ

liệu. Hệ thống khác lại chỉ sử dụng một dây nhưng dùng 2 tần số khác nhau để

truyền và nhận. Thông thường tần số truyên và nhận tạo thành một cặp tần số

(tính bằng MHz) để dễ chuyển đổi giữa tần số gửi và tần số nhận. Tuy sử dụng

81

Token

WS

WS WS

WS

Page 82: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Broadband đắt và phức tạp nhưng nó làm việc rất tốt với hình ảnh analog và

âm thanh.

82

BroadbandBaseband

Page 83: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Phụ lục B MỘT SỐ KỸ THUẬT CHỌN ĐƯỜNG ĐI TỐI

ƯU

Việc chọn con đường tối ưu để truyền các gói tin đi trên mạng phải thực hiện

một số công việc sau:

• Quyết định chọn đường theo những tiêu chuẩn tối ưu nào đó.

• Cập nhật thông tin chọn đường.

Có một số kỹ thuật chọn đường tối ưu thường được sử dụng khi xây dựng tầng

mạng

• Chọn đường tập trung đặc trưng bởi sự tồn tại của một số trung tâm điều

khiển mạng thực hiện việc chọn đường sau đó gửi các bảng chọn đường tới

các nút mạng. Các nút mạng đều đặn gửi thông tin của chúng tới các chung

tâm theo một khoảng thời gian hoặc khi có một sự kiện nào đó.

• Chọn đương phân tán được thực hiện tại mỗi nút của mạng. Việc này đòi

hỏi sự trao đổi thông tin thường xuyên giữa các nút.

.I GIẢI THUẬT DIJKSTRA CHO VIỆC CHỌN ĐƯỜNG TẬP

TRUNG

Giải thuật này tìm con đường có “độ dài” (chi phí) cực tiểu từ một nút nguồn

tới mỗi nút còn lại của mạng

Gọi l(i,j) là “độ dài” của đường nối trực tiếp 2 nút i và j

l(i,j) =∞ nếu không tồn tại đường nối

Nk là tập hợp tạo thành bởi k+1 phần tử (nguồn và k nút gần nguồn nhất

sau k bước thực hiện giai thuật).

Dk là “độ dài” từ nguồn tới nút n theo con đường “ngắn” nhất bao hàm

trong Nk

Thuật toán sử dụng các bước đệ quy sau:

Bước 0 (khởi động)

83

Page 84: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

N0={1}

D0(v)=l(1,v) v ∉ N0

Bước k (tính và cập nhật)

Nk = Nk-1 ∪ {w}

trong đó w thoả mãn biểu thức

Dk-1(w) = min Dk-1(v), v ∉ Nk-1

Dk(v) = min [Dk-1(v), Dk-1(w) + l(w,v)], v ∉ Nk

Thuật toán dừng khi tất cả các nút đã nằm trong N

.II GIẢI THUẬT FORD& FULKERSON CHO VIỆC CHỌN

ĐƯỜNG PHÂN TÁN

Giải thuật này cho phép tìm tất cả các con đường “ngắn” nhất từ tất cả các nut

tới một đích chung. Sau k bước lặp, mỗi nút được đánh dấu bởi cặp giá trị

(nk(v), Dk(v))

Dk(v) là “độ dài” cực tiểu (hiện tại) từ nút v tới đích

nk(v) là nút tiếp theo (hiện tại) trên con đường “tối ưu” từ nút v tới đích, được

tính ở bước k.

Bước 0 (khởi động)

D0(1) = 0 và tất cả các nút được đánh dấu (•,∞)

Bước k (tính và cập nhật)

Với mọi v ≠ 1 (đích), cập nhật Dk(v) như sau:

Dk(v) = min [Dk-1(w) + l(v,w)]

w∈Nv

trong đó Nv là tập các nút láng giềng của v.

Cập nhật nk(v) như sau:

nk(v) = w1, với w1 thoả mãn biểu thức :

Dk-1(w1) + l(v,w1) = min [Dk-1(w) + l(v,w)]

w∈Nv

84

Page 85: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Thuật toán dừng khi tất cặp giá trị đánh dấu của mỗi nút giữ nguyên không thay đổi nữa.

85

Page 86: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

Phụ lục C VĂN BẢN CHƯƠNG TRÌNH (PHẦN

CLIENT)

.I CHƯƠNG TRÌNH CHÍNH (MAIN.C)

#include <windows.h>#include <io.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h>#include <winsock.h>#include <direct.h>#include <memory.h>#include "socket.h"

int FAR PASCAL mInitTcpIp(void);int FAR PASCAL mMakeConnect(LPSTR host,int port);int mMakeDataConnect(SOCKET cmd_sock);BOOL NEAR PASCAL mReadMsg(SOCKET sock, char *recv);BOOL NEAR PASCAL mWriteMsg(SOCKET sock, char *buf);BOOL NEAR PASCAL mReadData(SOCKET sock, char *name);BOOL NEAR PASCAL mWriteData(SOCKET sock, char *name);char * GetWord(char * source, char * dest);int CmdAnalys(char * cmd);BOOL DoCmd(char *cmd);BOOL GetPass(char *cmd);BOOL GetUser(char *cmd);BOOL Login();BOOL PutFile(char *cmd);BOOL GetFile(char *cmd);BOOL DoDisconnect();BOOL DoConnect();

struct cmd_rec {short code;char cmd[16];short data_expect;BOOL (*func)(char *cmd);

};

#define CMD_ABORT 1#define CMD_APPEND 2#define CMD_BUFSIZE 33#define CMD_CHDIR 3#define CMD_CHPWD 4#define CMD_CLOSE 5#define CMD_EXEC 6#define CMD_FMODE 7#define CMD_FSIZE 8#define CMD_FSTAT 9#define CMD_GET 10#define CMD_HELP 11#define CMD_LIST 12#define CMD_LOCKF 13#define CMD_LSEEK 14

86

Page 87: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

#define CMD_MKDIR 15#define CMD_OPEN 16#define CMD_PASS 17#define CMD_PORT 18#define CMD_PUT 19#define CMD_PWD 20#define CMD_QUIT 21#define CMD_READ 22#define CMD_REXE 23#define CMD_RMDIR 24#define CMD_TMPNAM 25#define CMD_TNET 26#define CMD_UMASK 27#define CMD_UNIX 28#define CMD_UNLINK 29#define CMD_USER 30#define CMD_WRITE 31

#define CMD_HASH 35#define CMD_DEL 36#define CMD_LCD 37#define CMD_LDIR 38#define CMD_HOST 39#define CMD_LHELP 40#define CMD_DISCON 41

#define cmd_num 48

struct cmd_rec cmd_list[cmd_num] = {1, "ABORT", 0, NULL,2, "APPEND", 0, NULL,33, "BUFSIZE", 0, NULL,33, "BUFSIZ", 0, NULL,3, "CHDIR", 0, NULL,3, "CD", 0, NULL,4, "CHPWD", 0, NULL,5, "CLOSE", 0, NULL,6, "EXEC", 1, NULL,7, "FMODE", 0, NULL,8, "FSIZE", 0, NULL,9, "FSTAT", 0, NULL,10, "GET", 1, NULL,11, "H", 0, NULL,11, "HELP", 0, NULL,11, "?", 0, NULL,12, "L", 1, NULL,12, "LIST", 1, NULL,12, "LS", 1, NULL,13, "LOCKF", 0, NULL,14, "LSEEK", 0, NULL,15, "MKDIR", 0, NULL,16, "OPEN", 0, NULL,17, "PASS", 0, NULL,17, "PASSWD", 0, NULL,18, "PORT", 0, NULL,19, "PUT", 2, NULL,20, "PWD", 0, NULL,21, "Q", 0, NULL,21, "QUIT", 0, NULL,22, "READ", 1, NULL,

87

Page 88: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

23, "REXE", 1, NULL,24, "RMDIR", 0, NULL,25, "TMPNAM", 0, NULL,26, "TNET", 0, NULL,27, "UMASK", 0, NULL,28, "UNIX", 0, NULL,29, "UNLINK", 0, NULL,30, "USER", 0, NULL,31, "WRITE", 2, NULL,35, "HASH", 0, NULL,36, "DEL", 0, NULL,37, "LCD", 0, NULL,38, "LDIR", 0, NULL,39, "HOST", 0, NULL,40, "LHELP", 0, NULL,41, "DIS", 0, NULL,41, "DISCONNECT",0, NULL};

int BUFF_SIZE = 1024;int HASH = 0;int connected = 0;SOCKET sock, data_sock;char cmd[DATA_LEN];char tmp[DATA_LEN];int port;char host[32];

int main( int argc, char *argv[ ]){

if ((argc < 2) | (argc > 3)){printf("Usage: %s remote_host [remote_port]", argv[0]);return 2;

}if (mInitTcpIp()) {

printf("Error on init\n");return 1;

}if (argc == 3) {

strcpy(host, argv[1]);port = atoi(argv[2]);

} else port = 1998;DoConnect();do {

printf(">");gets(cmd);CmdAnalys(cmd);

} while (strnicmp(cmd, "q", 1) != 0);return 0;

}

char * GetWord(char * source, char * dest){

int i;char * cmdPtr = source;

i = 0;while (*cmdPtr == ' ' && *cmdPtr != 0) cmdPtr++;while (*cmdPtr != ' ' && *cmdPtr != 0) {

dest[i++] = *cmdPtr; cmdPtr++;

88

Page 89: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

}dest[i] = 0;return cmdPtr;

}

int CmdAnalys(char * cmd){

int i = 0, ret = 1; char verb[8];char *obj;

obj = GetWord(cmd, verb);if (verb[0] == '#') {

char *p;p = strchr(cmd, '#') + 1;DoCmd(p);return 0;

}if (verb[0] == '!') {

char *p;p = strchr(cmd, '!') + 1;sprintf(tmp, "command /c %s", p);system(tmp);return 0;

}do {

ret = stricmp(verb, cmd_list[i++].cmd);} while (ret && (i <= cmd_num));if (i > cmd_num) {

printf("XXXX Unknown command\n");} else {

i--;switch (cmd_list[i].code) {

case CMD_PORT : printf("XXXX Unknown command\n");break;

case CMD_BUFSIZE : if (!connected) {

printf("Not connected\n"); return 1;}mWriteMsg(sock, cmd);mReadMsg(sock, tmp);if (strncmp(tmp, "0000", 4) == 0) BUFF_SIZE =

atoi(obj);break;

case CMD_USER : if (!connected) {

printf("Not connected\n"); return 1;} mWriteMsg(sock, cmd);mReadMsg(sock, tmp);if (strncmp(tmp, "1006", 4) == 0) Login();break;

case CMD_GET : if (!connected) {

printf("Not connected\n"); return 1;}GetFile(cmd);break;

case CMD_PUT :

89

Page 90: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

if (!connected) {printf("Not connected\n"); return 1;

}PutFile(cmd);break;

case CMD_HASH : if (HASH) {

HASH = 0;printf("Hash mark printing Off\n");

} else {HASH = 1;printf("Hash mark printing On (%i bytes/

hash mark)\n", BUFF_SIZE);}break;

case CMD_LCD : {char path[MAX_PATH];

GetWord(obj, path);if (path[0] != 0) ret = _chdir(path);else ret = 0;if (ret) {

printf("%s : File not found.\n", path);} else {

printf("Local directory now %s\n", _getcwd(NULL, MAX_PATH));

}break;

}case CMD_LDIR :

break;case CMD_HOST : case CMD_OPEN : {

char pc[8];char *p;

if (connected) {printf("Already connected to %s, use close

first\n", host);} else {

p = GetWord(obj, host);GetWord(p, pc);if (pc[0] != 0) {

port = atoi(pc);} else port = 1997;DoConnect();

}break;

}case CMD_LHELP :

break;case CMD_HELP :

printf("Not availble. Please type #help for more information.\n");

break;case CMD_DISCON :case CMD_CLOSE :

if (!connected) {printf("Not connected\n"); return 1;

90

Page 91: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

}DoDisconnect();break;

default: if (!connected) {

printf("Not connected\n"); return 1;}DoCmd(cmd);

}}return 0;

}

BOOL DoCmd(char *cmd){

mWriteMsg(sock, cmd);mReadMsg(sock, tmp);if (strncmp(tmp, "9001", 4) == 0) {

tmp[0] = 0;mReadData(data_sock, tmp);mReadMsg(sock, tmp);

}return 1;

}

BOOL GetPass(char *cmd){ char *p = cmd;

char clr[2];

printf("Password:");do {

*p++ = (char)_getch(); if (*(p-1) == '\b') p -= 2;

} while (*(p-1) != '\r');*p = 0;gets(clr);return 1;

}

BOOL GetUser(char *cmd){

printf("User:");gets(cmd);return 1;

}

BOOL Login(){

GetPass((char *)tmp);sprintf(cmd, "pass %s", tmp);mWriteMsg(sock, cmd);mReadMsg(sock, tmp);if (strncmp(tmp, "0000", 4) == 0) data_sock =

mMakeDataConnect(sock);return 1;

}

BOOL PutFile(char *cmd){

91

Page 92: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

char source[32], desti[32];char *p;

p = GetWord(cmd, source);p = GetWord(p, source);GetWord(p, desti);if (desti[0] == 0) strcpy(desti, source);sprintf(cmd, "PUT %s", desti);mWriteMsg(sock,cmd);mReadMsg(sock, tmp);if (strncmp(tmp, "9001 ", 5) == 0) {

mWriteData(data_sock, source);mReadMsg(sock, tmp);

} else {return 0;

}return 1;

}

BOOL GetFile(char *cmd){

HFILE handle;char source[32], desti[32];char *p;

p = GetWord(cmd, source);p = GetWord(p, source);GetWord(p, desti);if (desti[0] == 0)

strcpy(desti, source);if ((handle = _lcreat(desti, 0)) < 0) {

printf("Could not creat file %s", desti);return FALSE;

}_lclose(handle);sprintf(cmd,"GET %s", source);mWriteMsg(sock, cmd);mReadMsg(sock, tmp);if (memcmp(tmp, "9001", 4) != 0) {

mReadMsg(sock, tmp);return 0;

} else {mReadData(data_sock, desti);mReadMsg(sock, tmp);

}return 1;

}

BOOL DoDisconnect(){

sprintf(cmd, "QUIT");mWriteMsg(sock, cmd);mReadMsg(sock, tmp);if (strncmp(tmp, "9999", 4) == 0) {

data_sock = 0;sock = 0;connected = 0;

}return 1;

}

92

Page 93: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

BOOL DoConnect(){

sock = mMakeConnect(host, port);if (sock <= 0) printf("Could not make connect to %s\n", host);else {

mReadMsg(sock, tmp);}connected = 1;GetUser(tmp);sprintf(cmd, "user %s", tmp);mWriteMsg(sock, cmd);mReadMsg(sock, tmp);Login();return 1;

}

.II THƯ VIỆN SỬ DỤNG (SOCKET.C)

/************************************************************************//***** CM *****//***** Module : SOCKET.C *****//***** Purposes : Provide socket doing functions *****//***** Date : 14-03-1998 *****//************************************************************************/

#include <windows.h>#include <io.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h>#include <winsock.h>#include <memory.h>#include <time.h> #include "socket.h"

#define TempFileName "C:\temp\temp.txt"#define USER_CONNECT (WM_USER + 100)char remote_host[SERV_LEN];int remote_port = 1997;char user_log[USER_LEN];char pass_log[PASS_LEN];UINT mode_log;char lcTemp[DATA_LEN + 2];char lcCmd[CMD_LEN];struct sockaddr_in client_sockaddr;BOOL TCP_INIT = FALSE;struct timeval tv = {timeout, 0};

int FAR PASCAL mReadSocket(SOCKET sock,char *buffer,int len);int FAR PASCAL mWriteSocket(SOCKET sock,char *buffer,int len);int FAR PASCAL mInitTcpIp(void);

93

Page 94: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

int mMakeDataConnect();

int FAR PASCAL mReadSocket(SOCKET sock,char *buffer,int len){

int i;fd_set fds;

FD_ZERO(&fds);FD_SET(sock, &fds);if ((i = select(FD_SETSIZE, &fds, NULL, NULL, &tv)) < 0 && errno !=

WSAEINTR) return(i);if (!i) return(0);return (recv(sock, buffer, len, NO_FLAGS_SET));

}

int FAR PASCAL mWriteSocket(SOCKET sock, char *buffer, int len){

int i;fd_set fds;

FD_ZERO(&fds);FD_SET(sock, &fds);if ((i = select(FD_SETSIZE, NULL, &fds, NULL, &tv)) < 0 && (errno !

= WSAEINTR)) return(i);if (!i) return(i);return(send(sock, buffer, len, NO_FLAGS_SET));

}

/***********************************************************//*** CM Function : mReadMsg *//*** Purposes : Read a complete message from server with *//*** checking size of message *//***********************************************************/BOOL NEAR PASCAL mReadMsg(SOCKET sock, char *recv){

char tmp[DATA_LEN + 7];unsigned char tmp1[4];BOOL loop;int i, first;int total_read = 0, total_send = 0;

*recv = 0;loop = TRUE; first = 1;do{

if (first == 1) { i = mReadSocket(sock, tmp1, SIZE_LEN); if (i <= 0) loop = FALSE; first = 2; total_send = tmp1[0] + 256 * tmp1[1]; if (total_send == 0) loop = FALSE; total_read = 0;

}else {

i = mReadSocket(sock, tmp, min(DATA_LEN, total_send-total_read));

if (i < 0) {#ifdef EXPECT_RET

*tmp = (char) CAN;

94

Page 95: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

mWriteSocket(sock, tmp, 1);#endifreturn FALSE;

} if (i == 0) loop = FALSE; total_read += i; if (total_read >= total_send) loop = FALSE; tmp [i] = '\0'; strcat(recv, tmp); printf("%s", recv); if (first == 2) {

if (memcmp(tmp, "9998", 4) == 0) {loop = FALSE;exit(1);

} } else first = 0;

}} while (loop);

#ifdef EXPECT_RET*tmp = (char) ACK;mWriteSocket(sock, tmp, 1);

#endifreturn TRUE;

}

/***********************************************************//*** CM Function : mReadData *//*** Purposes : Read a huge amount of data from server *//*** and put it in a file *//***********************************************************/BOOL NEAR PASCAL mReadData(SOCKET sock, char *name){

char tmp[DATA_LEN + 7];unsigned char tmp1[4];BOOL loop;int i, first;int total_read, total_send, len;unsigned long rbyte = 0L;char ret[1];double mtime, av;time_t before, post;HFILE handle;

if (name[0] != 0) {if ((handle = _lcreat(name, 0)) < 0) return FALSE;

} else handle = 1;time(&before);loop = TRUE; first = 1;do {

if (first == 1) { do {

i = mReadSocket(sock, tmp1, SIZE_LEN);if (i <= 0) return FALSE;

} while (i != SIZE_LEN); first = 2; total_send = tmp1[0] + 256 * tmp1[1]; if (total_send == 0) {

#ifdef EXPECT_RET*ret = (char) ACK;

95

Page 96: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

mWriteSocket(sock, ret, 1);#endifloop = FALSE;

} total_read = 0;

}else {

len = min(BUFF_SIZE, total_send - total_read);do {

i = mReadSocket(sock, tmp, len);if (i < 0) {#ifdef EXPECT_RET

*ret = (char) CAN;mWriteSocket(sock, ret, 1);

#endifreturn FALSE;

}} while (i == 0);total_read += i;rbyte += i;if (total_read >= total_send) {#ifdef EXPECT_RET

*ret = (char) ACK;mWriteSocket(sock, ret, 1);

#endiffirst = 1;

}tmp[i] = 0;if (handle == 1) printf("%s", tmp);else {

_lwrite(handle, tmp, i);if (HASH) putchar('#');

}if (first == 2 || first == 1) {

if (memcmp(tmp,"9998",4) == 0) {loop = FALSE;return FALSE;

}} else first = 0;

}} while (loop);if (handle != 1) _lclose(handle);time(&post);mtime = difftime(post, before);av = rbyte/mtime;printf("\nTransfered %d bytes in %.2f second(s) (%.0f bytes/s)\n",

rbyte, mtime, av);return TRUE;

}

/***********************************************************//*** CM Function : mWriteMsg *//*** Purposes : Write a complete message to server with 2 *//*** bytes size of message *//***********************************************************/BOOL NEAR PASCAL mWriteMsg(SOCKET sock, char *buf){

char cmd_and_size[DATA_LEN];int l;l = strlen(buf);

96

Page 97: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

memcpy(cmd_and_size,(char *)&l, SIZE_LEN);memcpy(cmd_and_size + SIZE_LEN, buf, l);if (mWriteSocket(sock, cmd_and_size, l + SIZE_LEN) <= 0) {

exit(1);}

#ifdef EXPECT_RETif (mReadSocket(sock, cmd_and_size, 1) < 0) {

exit(1);}else if (*cmd_and_size != ACK) {

exit(1);}

#endifreturn TRUE;

}

BOOL NEAR PASCAL mWriteData(SOCKET sock, char *name){

char tmp[DATA_LEN+ SIZE_LEN];int len, ret;HFILE handle;char cmd_and_size[DATA_LEN + SIZE_LEN];unsigned long wbyte = 0L, count = 0L;double mtime, av;time_t before, post;

time(&before);handle = _lopen(name, OF_READ);if (handle < 0) return (FALSE);do {

len = _lread(handle, tmp, BUFF_SIZE - 2);if (len > 0){

wbyte += len;memcpy(cmd_and_size, (char *)&len, SIZE_LEN);memcpy(cmd_and_size + SIZE_LEN, tmp, len);if ((ret = mWriteSocket(sock, cmd_and_size, len +

SIZE_LEN)) <= 0) {if (WSAGetLastError() == WSAEWOULDBLOCK)

printf("Error number is %i errno WSAEWOULDBLOCK ", ret);

else printf("Error number is %i errno %i", ret, WSAGetLastError());

closesocket(sock);_lclose(handle);exit(1);

}#ifdef EXPECT_RET

if (mReadSocket(sock, cmd_and_size, 1) < 0) {_lclose(handle);return FALSE;

}else if (*cmd_and_size != ACK) {

_lclose(handle);return FALSE;

}#endif

if (HASH) printf("#");}

} while (len == BUFF_SIZE - 2);

97

Page 98: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

len = 0;memcpy(cmd_and_size,(char *)&len, SIZE_LEN + 2);mWriteSocket(sock, cmd_and_size, SIZE_LEN);

#ifdef EXPECT_RETif (mReadSocket(sock, cmd_and_size, 1) < 0) {

_lclose(handle);return FALSE;

}else if (*cmd_and_size != ACK) {

_lclose(handle);return FALSE;

}#endif

_lclose(handle);time(&post);mtime = difftime(post, before);av = wbyte/mtime;printf("\nTransfered %d bytes in %.2f second(s) (%.0f bytes/s)\n",

wbyte, mtime, av);return TRUE;

}

/* Inittialize tcp ip */int FAR PASCAL mInitTcpIp(void){

WSADATA WSAData;int status;

if ((status = WSAStartup(MAKEWORD(1,1), &WSAData)) != 0) {printf("TCP/IP Error: %d is the err", status);TCP_INIT = FALSE;

} else TCP_INIT = TRUE;return status;

}

int FAR PASCAL mMakeConnect(LPSTR host,int port){

struct hostent* h;struct sockaddr_in sin;int sock;unsigned long hostaddr;int ret;

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {return -1;

}hostaddr = inet_addr(host);memset(&sin,0, sizeof(sin));if ((long)hostaddr != -1L) {

memcpy(&sin.sin_addr,&hostaddr,sizeof(hostaddr));} else{

if ((h = gethostbyname(host)) == 0) {closesocket(sock);return -1;

}memcpy(&sin.sin_addr,h->h_addr,h->h_length);

}sin.sin_family = AF_INET;sin.sin_port = htons((unsigned short)port);

98

Page 99: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

if (connect(sock,(struct sockaddr FAR *)&sin, sizeof(sin)) < 0) {ret = errno;if (ret == -2){

struct timeval tv;fd_set fds;

tv.tv_sec = timeout;tv.tv_usec = 0;FD_ZERO(&fds);FD_SET(sock, &fds);if ((select(FD_SETSIZE, NULL, &fds, NULL, &tv)) <= 0) {

return -1;}return sock;

}closesocket(sock);return -1;

}return sock;

}

int mStopConnect(int sock){

shutdown(sock, 2);closesocket(sock);return 0;

}

int mMakeDataConnect(SOCKET cmd_sock){

struct sockaddr_in server_sockaddr;int server_socket, ret_socket;int i;

memset(&server_sockaddr,0,sizeof(server_sockaddr));server_sockaddr.sin_family = AF_INET;server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);server_socket = socket(AF_INET,SOCK_STREAM,0);if (server_socket < 0) {

return -1;}if (bind(server_socket,(struct sockaddr FAR

*)&server_sockaddr,sizeof(server_sockaddr)) < 0) {closesocket(server_socket);return -1;

}i = sizeof(client_sockaddr);if (getsockname(server_socket,(struct sockaddr FAR

*)&client_sockaddr,&i) < 0)return(-1);

listen(server_socket,5);sprintf(lcCmd, "PORT %d", ntohs(client_sockaddr.sin_port));mWriteMsg(cmd_sock, lcCmd);ret_socket = accept(server_socket,(struct sockaddr FAR

*)&client_sockaddr,&i);mReadMsg(cmd_sock, lcTemp);return ret_socket;

}

int mStopDataConnect(int data_sock)

99

Page 100: Tìm hiểu về giao thức mạng tcp ip

Luận văn tốt nghiệp Phan Thăng

{shutdown(data_sock, 2);closesocket(data_sock);return 0;

}

/***********************************************************//*** CM Function : mDoneTcpIp *//*** Purposes : Cleanup tcp ip will unload winsock.dll *//***********************************************************/int FAR PASCAL mDoneTcpIp(void){

if (TCP_INIT) {TCP_INIT = FALSE;return WSACleanup();

}return -1;

}

100