Luận văn Xây dựng chương trình truyền tệp

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

 

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

 

I. Giao thức truyền thông 11

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 16

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. Bộ Giao thức TCP/IP

 

I. Bộ 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

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

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 47

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 (WWW) 56

 

 

 

 

 

Chương IV. Xây dựng chương trình truyền tệp

 

I. Giao diện lập trình 57

I.1. Giao diện lập trình 57

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 66

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 69

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 76

III.2.1. Vấn đề chuyển đổi tệp giữa hai hệ điều hành. 76

III.2.2. Vấn đề về một số lệnh tương tác 78

 

 

Phụ lục a. Một số mạng cục bộ

 

I. Mạng Ethernet và IEEE 802.3 81

II. Mạng Token-Pasing Rings (IEEE 802.5) 81

III. Mạng Token-Passing Busses (IEEE 802.4) 82

 

 

Phụ lục B. Một số kỹ thuật chọn đường đi ngắn nhất

 

I. Giải thuật Dijkstra cho việc chọn đường tập trung 84

II. Giải thuật Ford& Fulkerson cho việc chọn đường phân tán 85

 

 

Phụ lục C. Văn bản chương trình (Phần client)

 

I. Chương trình chính (main.c) 87

II. Thư viện sử dụng (Socket.c) 93

 

doc107 trang | Chia sẻ: maiphuongdc | Ngày: 14/01/2014 | Lượt xem: 1138 | Lượt tải: 4download
Bạn đang xem nội dung tài liệu Luận văn Xây dựng chương trình truyền tệp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
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 ... Tách địa chỉ mạng đích (IN) từ địa chỉ đích (ID) 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 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ó. 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. Gói thông tin UDP 0 31 Source port Destination port Message length checksum Data Destination Address Source Address Type field IP header UDP data CRC 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 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. Port 1 Port 2 Port 3 UDP: Demultiplexing Based on Port IP Layer UDP Datagram arrives 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). 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 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. 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 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 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. Thông tin trên mạng Tạ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 Gói tin TCP 0 4 8 12 20 24 28 31 Source Port Desstination Port Sequence Number Acknowledgment Number Offset Reserved Flags Window Checksum Urgent Pointer Opions Padding Data Destination Address Source Address Type field IP header 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 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 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 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. 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. 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 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 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. vn fpt vdc com edu gov mil org nic hut vnuh fit Phân cấp domain name 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. Đă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 đó. TCP/IP Internet 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ừ client Client gửi thông báo đến server Client đọc từ trạm cuối Để đăng nhập vào một máy tính ta đánh lệnh: telnet [domain name | IP address] 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. Đặ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 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. 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. $ 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 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. 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. 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. 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. CHƯƠNG IV. XÂY DỰNG ỨNG DỤNG TRUYỀN TỆP GIAO DIỆN LẬP TRÌNH 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. Tiến trình ứng dụng Thư viện 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 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. 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. 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). 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. 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. Application Socket Library User Kernel Stream Head SHOCKMOD Transport Provider TPI 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 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. Đị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-1 Address bytes 2-5 Address 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. Protocol family Description PF_UNSPEC Unspecified family PF_UNIX UNIX domain PF_INET Internet protocols PF_IMPLINK Arpanet IMP address PF_PUP Old Xerox protocols PF_CHAOS M.I.T. CHAOS protocols PF_NS Xerox Network system protocols PF_NBS NBS protocols PF_ECMA European Computer Manual PF_DATAKIT DATAKIT protocols PF_CCITT CCITT protocols PF_SNA IBM System Network Architeture PF_DECnet DECnet protocols PF_DLI DEC direct data link interface P

Các file đính kèm theo tài liệu này:

  • docXây dựng chương trình truyền tệp.doc