KIẾN THỨC MẠNG CƠ BẢN... Gói thông tin UDP ....[r]
(1)(2)CHƯƠNG I MẠNG MÁY TÍNH
I Mạng máy tính
II Phân loại mạng máy tính
II.1 Phân loại theo kiến trúc (topology) mạng
II.1.1 Mạng điểm-điểm (point-to-point network)
II.1.2 Mạng quảng bá (broadcast network)
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)
II.2.2 Chuyển mạch tin báo (Message Swiched Network)
II.2.3 Chuyển mạch gói (Packed Swiched Network)
II.3 Phân loại theo phạm vi hoạt động
II.3.1 Mạng LAN (Local Area Network)
II.3.2 Mạng MAN (Metropolian Area Network)
II.3.3 Mạng WAN (Wide Area Network)
II.3.4 Liên mạng (internet)
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 12
II.1 Giới thiệu mơ hình OSI 12
II.2 Các tầng mơ hình OSI 14
II.2.1 Tầng vật lý (Physical layer) 14
II.2.2 Tầng liên kết liệu (Data link layer) 14
II.2.3 Tầng mạng (Network layer) 15
II.2.4 Tầng giao vận (Transport layer) 15
II.2.5 Tầng phiên (Session layer) 16
II.2.6 Tầng trình diễn (Presentation layer) 16
II.2.7 Tầng ứng dụng (Application layer) 16
II.3 Những vấn đề OSI 16
III Kiến trúc giao thức IPX/SPX 17
III.1 Kiến trúc giao thức IPX/SPX 17
III.2 Gói tin IPX 18
III.3 Cơ chế hoạt động Novell Netware 19
(3)II.1 Kiến trúc phân tầng TCP/IP 21
II.2 Cơ chếđịa Internet 24
II.2.1 Địa lớp A 25
II.2.2 Địa lớp B 26
II.2.3 Địa lớp C 26
II.3 Mạng Subnet mask 26
III Tầng mạng (Network Layer) 29
IV Tầng Internet (Internet Layer) 30
IV.1 Gói tin IP 31
IV.2 Giao thức chuyển địa ARP (Address Resolution Protocol) giao thức chuyển ngược địa RARP (Reverse Address Resolution Protocol) 34
IV.2.1 Chuyển giao trực tiếp 34
IV.2.2 Chuyển giao địa động 34
IV.2.3 Gói tin ARP 35
IV.3 Giao thức điều khiển truyền tin (Internet Control Message Protocol - ICMP) 37
IV.3.1 Gói tin ICMP 37
IV.3.2 Điều khiển dòng liệu 38
IV.3.3 Thông báo lỗi 38
IV.3.4 Định hướng lại 38
IV.3.5 Kiểm tra trạm làm việc 39
IV.4 Thuật toán dẫn đường 39
V tầng giao vận 43
V.1 Giao thức không kết nối (User Datagram Protocol - UDP) 43
V.1.1 Gói thơng tin UDP 43
V.1.2 Phân kênh, hợp kênh Ports 44
V.2 Giao thức điều khiển truyền tin (Transmission Control Protocol - TCP) 46
V.2.1 Gói tin TCP 49
V.2.2 Cổng, kết nối điểm kết nối 49
VI Tầng ứng dụng TCP/IP 51
VI.1 Dịch vụ tên miền (Domain Name Service - DNS) 51
VI.2 Đăng nhập từ xa (Telnet) 53
VI.3 Thưđiện tử (Electronic Mail) 54
VI.4 Giao thức truyền tệp (File Transfer Protocol - FTP) 56
VI.5 Nhóm tin (News groups) 57
VI.6 Tìm kiếm tệp (Archie) 57
VI.7 Tra cứu thông tin theo thực đơn (Gopher) 57
VI.8 Tìm kiếm thông tin theo số (WAIS) 57
(4)CHƯƠNG IV XÂY DỰNG CHƯƠNG TRÌNH TRUYỀN TỆP
I Giao diện lập trình 59
I.1 Giao diện lập trình 59
I.2 Network I/O file I/O 60
I.3 Làm việc với Socket 61
I.3.1 Socket 61
I.3.2 Địa Socket 62
I.3.3 Một số lời gọi tạo lập socket 64
I.3.4 Một số lời gọi gửi liệu qua socket 68
I.3.5 Một số lời gọi nhận liệu từ socket 69
II Mơ hình Client-Server 70
II.1 Mơ hình Client-Server sử dụng dịch vụ khơng kết nối 71
II.2 Mơ hình Client-Server sử dụng dịch vụ hướng kết nối 72
III Xây dựng chương trình truyền tệp 73
III.1 Thiết kế cài đặt chương trình 73
III.1.1 Giao thức ứng dụng xây dựng sử dụng chương trình 73
III.1.2 Cài đặt chương trình 75
III.2 Một số vấn đề nảy sinh trình thực cách giải quyết78 III.2.1 Vấn đề chuyển đổi tệp hai hệđiều hành 78
III.2.2 Vấn đề số lệnh tương tác 80
Phụ lục A MỘT SỐ MẠNG CỤC BỘ I Mạng Ethernet IEEE 802.3 82
II Mạng Token-Pasing Rings (IEEE 802.5) 82
III Mạng Token-Passing Busses (IEEE 802.4) 84
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 86
II Giải thuật Ford& Fulkerson cho việc chọn đường phân tán 87
(5)(6)#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);
if (connect(sock,(struct sockaddr FAR *)&sin, sizeof(sin)) < 0) { ret = errno;
if (ret == -2){
struct timeval tv;
fd_set fds;
(7)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) { 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) {
(8)return WSACleanup(); }