Bài giảng Lập trình mạng - Nguyễn Hoài Sơn - Tổng quan về giao thức mạng
Khái niệm và các yêu cầu của giao thức mạng
Nguyên tắc thiết kế giao thức Internet
Nguyên tắc cuối cuối (End-to-end arguments)
Nguyên tắc phân tầng
Mô hình mạng OSI
Mô hình mạng TCP/IP
Giao thức tầng mạng
Giao thức tầng giao vận
Giao thức tầng ung dung
programming Mô hình mạng TCP/IP(1) Lịch sử phát triển Được phát triển vào những năm 1970 bởi các kỹ sư thuộc dự án ARPANET Được chuẩn hóa vào năm 1982 và được thực thi trên hệ điều hành BSD Unix Đang tiếp tục được chuẩn hóa bới IETF (Internet Engineering Task Force ) Network programming Mô hình mạng TCP/IP(2) TCP UDP IP (ICMP) Ethernet or other physical medium FTP Telnet Ping H.323 RTP HTTP Application Transport Internet Network interface Hardware Network programming OSI vs. TCP/IP OSI: Định nghĩa khái niệm rõ ràng: dịch vụ, giao diện, giao thức TCP/IP: Được thực thi thành công Application program Opperating system Device driver and hardware Hardware OSI TCP/IP Network programming Ví dụ về giao thức TCP/IP “Xin chào” TCP Header “Xin chào” TCP Header “Xin chào” IP Header TCP Header “Xin chào” IP Header Ethernet Header “Xin chào” TCP Header “Xin chào” TCP Header “Xin chào” IP Header TCP Header “Xin chào” IP Header Ethernet Header Sending host Receiving host Router Network programming Ví dụ về giao thức TCP/IP(2) Dst MAC addr Src MAC addr Protcl Type =0800 Src IP Addr Dst IP Addr Protcl Type = 6 Data = “Xin chào” charset=UTF-8 FCS Ethernet header IP header TCP/UDP header Ethernet’s Frame Check Sequence Give the type of upper protocol Give the type of upper protocol Header & data of application protocol Give the type of upper protocol The order to creating data The order of processing data Data link Network Transport Session Presentation Application Network programming Giao thức tầng mạng Vận chuyển thông báo điểm cuối-cuối dựa trên địa chỉ IP Không kết nối: Các gói tin được xử lý tách biệt Không tin cậy: Việc vận chuyển gói tin không được đảm bảo Phân mảnh/ ghép mảnh Phát hiện lỗi Network programming Địa chỉ IP Xác định một máy tính trên Internet là duy nhất độ dài 32 bit trong trường hợp của IPv4 Bao gồm ID mạng (network ID) và ID máy (host ID) được phân biệt bởi subnet mask (netmask) E.g. 132.168.1.100/255.255.255.0 Trên thực tế địa chỉ IP gán cho một card mạng chứ không phải gán cho một máy Các lớp địa chỉ A: 1.0.0.0 tới 127.255.255.255 (8 bit network address) B: 128.0.0.0 tới 191.255.255.255 (16 bit network address) C: 192.0.0.0 tới 223.255.255.255 (24 bit network address) D,E: 224.0.0.0 and higher (multicast and reserved) Địa chỉ quảng bá : 255.255.255.255 Subnet mask Chia một địa chỉ mạng thành nhiều phần mạng nhỏ hơn Network programming Địa chỉ IP riêng Chỉ dùng cho các mạng riêng, không dùng cho mạng chung Có thể truyền tin với các máy trên Internet thông qua Network Address Translator (NAT) Bao gồm 3 subnets 10.0.0.0 ~ 10.255.255.255 (10/8) 172.16.0.0 ~ 172.31.255.255 (172.16/12) 192.168.0.0 ~ 192.168.255.255 (192.168/16) Network programming Tiêu đề của gói tin IP Network programming Khai báo tiêu đề của gói tin IP struct ip{ #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned int ip_hl:4; /* header length */ unsigned int ip_v:4; /* version */ #endif #if __BYTE_ORDER == __BIG_ENDIAN unsigned int ip_v:4; /* version */ unsigned int ip_hl:4; /* header length */ #endif u_int8_t ip_tos; /* type of service */ u_short ip_len; /* total length */ u_short ip_id; /* identification */ u_short ip_off; /* fragment offset field */ u_int8_t ip_ttl; /* time to live */ u_int8_t ip_p; /* protocol */ u_short ip_sum; /* checksum */ struct in_addr ip_src, ip_dst; /* source and dest address */ }; #include char packetBuffer[1500]; struct ip *ipPkt; ipPkt = (struct ip *)packetBuffer; Network programming Giao thức tầng giao vận - Giao thức TCP Hướng kết nối: Thiết lập kết nối ảo bằng Bắt tay 3-bước trước khi dữ liêu được truyền đi Một kết nối TCP được định danh bởi (srcIP, dstIP, src Port, dst Port) Tin cậy: Bên nhận sẽ xác nhận việc nhận gói tin Bên gửi sẽ gửi lại gói tin nếu không nhận được xác nhận của bên gửi Full-duplex: Truyền và nhận gói tin cùng lúc Truyền theo dòng: Đảm bảo việc truyền thông tin theo thứ tự của dòng bytes Điều khiển luồng: Điều khiển chống tắc nghẽn Network programming Thiết lập kết nối TCP Bắt tay 3 bước Số thứ tự J,K Kiểu thông báo Synchronize (SYN) Acknowledge (ACK) Mở thụ động Máy chủ chờ kết nối đến từ máy khách Mở chủ động Máy khách bắt đầu một kết nối đến máy chủ Passive open Active open Network programming Khái niệm số hiệu cổng Số hiệu cổng dùng để định danh tiến trình trên mỗi máy Số hiệu cổng có thể là Well-known (port 0-1023) Registered (port 1024-49151) Dynamic or private (port 49152-65535) Máy chủ thường sử dụng well-known ports Mọi máy khách có thể xác định được máy chủ/ dịch vụ cung cấp HTTP = 80, FTP = 21, Telnet = 23, ... /etc/service định nghĩa well-known ports Máy khách thường sử dụng dynamic ports được gán bởi hệ thống khi khởi tạo TCP/UDP IP Ethernet Adapter NTP daemon Web server port 123 port 80 Network programming Well-known port numbers CLOSED BEGIN LISTEN Server Passive Open SYN SENT Active Open send SYN Client Active Open send SYN SYN RCVD rcv SYN send SYN,ACK rcv SYN send SYN,ACK rcv RST ESTABLISHED rcv ACK of SYN rcv SYN,ACK send ACK FIN WAIT-1 FIN WAIT-2 CLOSE_WAIT CLOSING TIME_WAIT LAST_ACK send FIN rcv ACK rcv FIN send ACK timer ~ 1 min rcv FIN,ACK send ACK rcv FIN send ACK rcv ACK send FIN rcv FIN send ACK send FIN rcv ACK Trạng thái kết nối TCP Network programming Tiêu đề TCP Network programming Khai báo tiêu đề TCP struct tcphdr{ u_int16_t th_sport; /* source port */ u_int16_t th_dport; /* destination port */ tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgement number */ # if __BYTE_ORDER == __LITTLE_ENDIAN u_int8_t th_x2:4; /* (unused) */ u_int8_t th_off:4; /* data offset */ # endif # if __BYTE_ORDER == __BIG_ENDIAN u_int8_t th_off:4; /* data offset */ u_int8_t th_x2:4; /* (unused) */ # endif u_int8_t th_flags; u_int16_t th_win; /* window */ u_int16_t th_sum; /* checksum */ u_int16_t th_urp; /* urgent pointer */ }; Network programming Giao thức UDP Viết tắt của User Datagram Protocol Cung cấp dịch vụ truyền tin không kết nối cho các chương trình tầng ứng dụng Truyền tin không tin cậy Không đảm bảo việc truyền tin đến đúng địa chỉ và không bị trùng lặp Truyền không giới hạn Không có điều khiển luồng Yêu cầu xử lý nhỏ Network programming Tiêu đề UDP Network programming Khai báo tiêu đề UDP struct udphdr { u_int16_t uh_sport; /* source port */ u_int16_t uh_dport; /* destination port */ u_int16_t uh_ulen; /* udp length */ u_int16_t uh_sum; /* udp checksum */ }; Network programming Giao thức tầng ứng dụng: Mô hình truyền tin khách/chủ Truyền tin bất đối xứng Máy khách gửi yêu cầu Máy chủ gửi trả lời Máy chủ Sử dụng định dạng đã biết (e.g., IP address + port) Đợi kết nối đến Xử lý yêu cầu, gửi trả lời Máy khách Bắt đầu mộtkết nối Đợi trả lời từ máy chủ Client Server Client Client Client Network programming Giao thức tầng ứng dụng: Mô hình truyền tin khách chủ(2) Mô hình dịch vụ Xử lý tuần tự: Máy chủ chỉ xử lý yêu cầu của một máy khách tại mỗi thời điểm E.g. Voice communication Xử lý đồng thời: Máy chủ xử lý nhiều yêu cầu của các máy khách khác nhau cùng một lúc E.g. Web server Lai: Máy chủ tạo ra nhiều kết nối với nhiều máy khách, nhưng xử lý yêu cầu của các máy khách một cách tuần tự Không có ranh giới rõ ràng giữa hai khái niệm máy khách và máy chủ Một máy chủ có thể là máy khách của một máy chủ khác Một máy chủ có thể là máy khách của chính máy khách của nó Giao thức tầng ứng dụng: Mô hình truyền tin ngang hàng Các node trong mạng đóng cả hai vai trò máy chủ/máy khách Cung cấp và sử dụng tài nguyên Bất cử node nào cũng có thể khởi tạo kết nối Không có máy chủ dữ liệu trung tâm “The ultimate form of democracy on the Internet” “The ultimate threat to copy-right protection on the Internet” Network programming Giao thức tầng ứng dụng Sử dụng các dịch vụ truyền tin cung cấp bởi tầng dưới Thông qua giao diện socket (= “bit pipe”) Network programming controlled by application developer controlled by operating system host or server controlled by application developer controlled by operating system host or server internet Các yêu cầu về dịch vụ giao vận của các ứng dụng phổ biến Network programming Application file transfer e-mail Web documents real-time audio/video stored audio/video interactive games financial apps Data loss no loss no loss loss-tolerant loss-tolerant loss-tolerant loss-tolerant no loss Bandwidth elastic elastic elastic audio: 5Kb-1Mb video:10Kb-5Mb same as above few Kbps up elastic Time Sensitive no no no yes, 100’s msec yes, few secs yes, 100’s msec yes and no Một số giao thức tầng ứng dụng Network programming Application e-mail remote terminal access Web file transfer streaming multimedia remote file server Internet telephony Application layer protocol smtp [RFC 821] telnet [RFC 854] http [RFC 2068] ftp [RFC 959] proprietary (e.g. RealNetworks) NSF proprietary (e.g., Vocaltec) Underlying transport protocol TCP TCP TCP TCP TCP or UDP TCP or UDP typically UDP Ví dụ về giao thức tầng ứng dụng HTTP Network programming http: hypertext transfer protocol Giao thức tầng ứng dụng của Web Mô hình khách chủ máy khách: Trình duyệt gửi yêu cầu, nhận kết quả và hiển thị trang Web Máy khách: Máy chủ Web gửi trang Web khi nhận được yêu cầu của máy khách http1.0: RFC 1945 http1.1: RFC 2068 PC running Explorer Server running NCSA Web server Mac running Navigator http request http request http response http response Định dạng thông báo yêu cầu Network programming Ví dụ về thông báo yêu cầu GET /hello.html Host: www.abc.xyz.edu User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; … Accept: text/xml,application/xml,application/xhtml+xml,… Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: SignOnDefault=ATWOLF Network programming Định dạng thông báo trả lời Network programming HTTP/1.0 200 OK Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998 …... Content-Length: 6821 Content-Type: text/html data data data data data ... status line (protocol status code status phrase) header lines data, e.g., requested html file
File đính kèm:
- Bài giảng Lập trình mạng - Nguyễn Hoài Sơn - Tổng quan về giao thức mạng.ppt