Thursday, December 13, 2007

Tìm hiểu về TCP/IP

Tìm hiểu về TCP/IP (11/08/2007)


TCP/IP gồm 4 lớp giao thức, tương ứng với 7 lớp giao thức của chuẩn ISO OSI. Bốn lớp đó gồm (kể theo thứ tự từ trên xuống dưới): Application layer, Host-to-host layer, Internet layer, cuối cùng là Physical layer. TCP nằm ở lớp thứ 3 (Host-to-host layer), IP nằm ở lớp thứ 2 (Internet layer).


Tên Số thứ tự
Application layer 4
Host-to-host layer 3
Internet layer 2
Physical layer 1

Đi từ trên xuống dưới, lớp ứng dụng sẽ xử lý thông tin và ra lệnh gửi/nhận đến lớp TCP để truyền và nhận dữ liệu.

TCP là viết tắt của Transmission Control Protocol tạm dịch là Cách thức điều khiển truyền. TCP phụ trách việc truyền và nhận dữ liệu. TCP giúp cho lớp ứng dụng (Application layer) sử dụng lớp IP (lớp IP là vì lớp Internet chỉ có IP) (Internet Protocol, tạm dịch Giao thức liên mạng) một cách trong suốt. Điều này có nghĩa là lớp ứng dụng không cần biết đến phần cứng sẽ làm việc gì, ra sao, mà chỉ cần quan tâm đến việc xử lý dữ liệu của riêng mình. TCP cũng đảm trách việc nhận đúng dữ liệu và gửi dữ liệu đó đến đúng chương trình cần nhận. TCP còn có chức năng kiểm tra và sửa lỗi thông qua việc đồng bộ hoá (synchronize) thông tin 2 đầu truyền dữ liệu và lời nhận biết (acknowledgement) từ phía nhận dữ liệu.

Lớp IP đảm trách việc tìm đường tối ưu để gửi dữ liệu qua mạng và đưa dữ liệu xuống cho lớp vật lý (Physical layer).

Lớp vật lý chính thức chuyển dữ liệu thành các bit và truyền dữ liệu vào cáp (cable).
Khi dữ liệu đến thì lớp vật lý nhận dữ liệu, gộp lại thành các bit, byte và chuyển lại cho lớp IP. Đến lượt lớp IP sau khi đã kiểm tra dữ liệu là thuộc về giao thức TCP sẽ trả dữ liệu đó cho lớp TCP (lưu ý, tôi dùng từ "lớp TCP" để chỉ đến giao thức TCP, TCP/IP không có "lớp TCP" mà là "Host-to-host layer", bao gồm TCP và UDP. UDP sẽ được nói ở phần cuối bài).

Nguyên tắc hoạt động:
Mục này giới thiệu cách thức hoạt động của lớp TCP và lớp IP.

Các tính chất của TCP:

- Có tính kết nối (connection oriented) với giao tiếp 3 lượt (3-way handshake).
- Phát hiện và sửa lỗi (error detection & recovery).

TCP là một giao thức có tính kết nối. Điều này có nghĩa là mọi kết nối đều có sự thông tin trước. Ví dụ A muốn kết nối tới B thì A phải thong báo cho B biết trước và đợi trả lời đồng ý từ B. Sự thông tin này diễn ra theo 3 bước (3-way handshake) như sau:

1. A gửi thông điệp muốn kết nối tới B. (SYN)
2. B gửi thông điệp đồng ý kết nối lại cho A. (ACK, SYN)
3. A gửi thông điệp đã nhận được sự đồng ý lại cho B. (ACK)

SYN: synchronize, đồng bộ hoá kết nối.
ACK: acknowledgement, sự nhận biết.

Diễn giải quá trình:

Bước 1: A gửi một SYN message tới B, thông báo cổng (port) cần kết nối tới, dung lượng đường truyền của A, khả năng gửi bao nhiêu thông điệp không cần nhận biết (windowing, giải thích sau), và các thông tin khác.

Bước 2: B nhận được thông tin từ A, nếu chấp nhận kết nối sẽ gửi trả thông báo đã nhận được yêu cầu kết nối từ A và chấp nhận sự kết nối, đồng thời cũng gửi thêm thông tin về B như khả năng gửi bao nhiêu thông điệp không cần nhận biết v.v...

Bước 3: A gửi trả ACK message cho B thông báo rằng A đã nhận được. Kết nối thành công.
Ngoài ra, khi muốn chấm dứt kết nối, bốn bước sau sẽ được thực hiện:

1. A gửi tín hiệu chấm dứt kết nối. (SYN)
2. B nhận tín hiệu và gửi trả tín hiệu cho biết đã nhận. (ACK)
3. B gửi tín hiệu cho Application layer thông báo kết nối sẽ bị chấm dứt đồng thời gửi trả cho A tín hiệu thông báo đồng ý chấm dứt. (SYN)
4. A gửi lại cho B tín hiệu cho biết A đã nhận được thông điệp từ B. (ACK)
Nói tóm lại, TCP có tính kết nối.

TCP có tính phát hiện lỗi vì mọi thông điệp gửi theo TCP đều được kiểm tra thông qua một số nguyên 32 bit cho biết giá trị CRC (Cyclic Redundant Check) của thông điệp được gửi. Bên gửi sẽ tính giá trị CRC và gửi kèm trong thông điệp. Bên nhận sẽ tính lại giá trị đó và so sánh với giá trị do bên gửi gửi đi. Nếu không đúng có nghĩa là đã có sự sai sót xảy ra. TCP có tính sửa lỗi vì khi phát hiện ra sai sót, bên nhận sẽ gửi thông điệp báo sai tới bên gửi, đề nghị gửi lại thông điệp bị sai.

Không phải sau mỗi một thông điệp được gửi đi thì đều có một thông điệp thông báo đã nhận được từ bên nhận gửi trả về. Có thể sau 10 thông điệp được gửi đi thì mới có một thông điệp thông báo nhận được gửi trả. Đó gọi là khả năng gửi không cần nhận biết.
Ví dụ: A gửi cho B 6 lượt, mỗi lượt 1000 bytes, khả năng gửi không cần nhận biết của A là 3, B nhận được thông điệp đầu hoàn chỉnh, thông điệp thứ 2 bị sai, các thông điệp sau bình thường. Quá trình đó sẽ diễn ra như sau:
1. A gửi cho B 3 thông điệp lần lượt.
2. B gửi lại cho A ACK message với giá trị 2000. Nếu B nhận được tất cả các thông điệp hoàn chỉnh, B sẽ gửi lại cho A một ACK message với giá trị 4000 (là giá trị kế tiếp mà A có thể gửi).
3. A gửi lại cho B message thứ 2 (từ vị trí 2000 đến vị trí 2999) và chờ. Lúc này A hy vọng rằng B nhận được thông điệp thứ nhất và thông điệp thứ ba hoàn chỉnh, A sẽ không phải gửi lại toàn bộ các thông điệp từ chỗ bị sai mà chỉ gửi thông điệp bị sai.
4. B gửi lại cho A ACK message với giá trị 4000 cho biết B nhận được 3 thông điệp đầu hoàn chỉnh và A có thể gửi tiếp các thông điệp sau, bắt đầu từ vị trí 4000.
5. A gửi cho B thông điệp thứ 4, 5 và 6.
6. B gửi trả ACK message với giá trị 7000.
Giả sử trong khi gửi thông điệp 4, 5, 6, A chưa kịp gửi thông điệp thứ 5 thì đã nhận được ACK message từ B với giá trị 5000 thì lúc đó window của A sẽ được sửa thành giá trị 3. Nếu A đã gửi thông điệp 4, 5 và nhận được ACK message của B với giá trị 5000 thì window của A được sửa thành 2, A có thể gửi tiếp 2 thông điệp 6 và 7. Có nghĩa là tối đa A có thể gửi ‘window’ lần số thông điệp. Mỗi lần gửi, giá trị window giảm cho đến khi bằng 0. Khi nhận được ACK message, giá trị đó sẽ thay đổi, tăng lên cho đến khi số thông điệp đã gửi đi mà chưa nhận được ACK message bằng giá trị window chính).

Trong quá trình truyền tín hiệu như vậy, nếu bên B cảm thấy có thể nhận được tín hiệu nhanh hơn thì bên B sẽ gửi SYN message lại cho A, thông báo muốn tăng giá trị window lên (giảm thời gian và số ACK message được gửi đi). Bên A sẽ gửi trả ACK message và tự tăng giá trị window lên theo yêu cầu của bên B. Ngược lại, B sẽ đề nghị A giảm giá trị window xuống. Ngoài ra, số lượng thông tin được gửi đi trong mỗi thông điệp cũng có thể thay đổi tuỳ vào đường truyền. Với TCP, lượng thông tin này được đo bằng đơn vị byte. MTU (maximum transmission unit) là số transmission unit (đơn vị truyền) (với TCP được tính là byte) tối đa mỗi thông điệp có thể chứa. Nói tóm lại, sự liên lạc bằng TCP có tính phát hiện và sửa lỗi, cũng như có sự can thiệp một cách tự động của lớp TCP phụ thuộc vào điều kiện đường truyền.

TCP phân biệt các thông điệp gửi cho chương trình này và thông điệp gửi cho chương trình khác thông qua socket. Socket là một khái niệm để chỉ 2 giá trị cần thiết khi khởi tạo kết nối. Đó là địa chỉ IP (IP address) của máy và cổng (port). Giả sử B chạy một server, nhận kết nối ở cổng 80, có địa chỉ IP là 1.1.1.1. A là máy khách, chạy 2 chương trình client để kết nối tới B, A có địa chỉ là 1.1.1.2. Client đầu tiên dùng port 1024, client thứ 2 dùng port 1025. Khi B nhận tín hiệu kết nối từ client thứ 1, B hiểu rằng tín hiệu đó từ địa chỉ IP 1.1.1.2 và từ port 1024. Tương tự, B hiểu client thứ 2 từ socket khác. Như vậy, khi B trả lời A, B sẽ gửi thông tin tới socket tương ứng với client 1 hay 2 của A. Khi A gửi cho B, B cũng biết thông tin đó từ client 1 hay 2 gửi cho mình thông qua việc nhận biết thông tin đó xuất phát từ socket của client 1 hay 2. Quá trình chuyển thông tin cho lớp ứng dụng này được gọi là multiplexing.

Nói thêm về UDP. UDP là một giao thức truyền khác, cũng nằm ở lớp thứ 3 (Host-to-host layer), cũng làm nhiệm vụ như TCP. UDP khác TCP ở chỗ là một giao thức không có tính kết nối, không có sự kiểm tra và sửa lỗi. UDP dựa vào lớp trên (lớp ứng dụng) để làm việc này. UDP viết tắt của Unreliable Datagram Protocol (tạm dịch giao thức truyền không đáng tin). Chương trình sử dụng UDP phải tự cài đặt phần kiểm tra dữ liệu. Tuy nhiên, điểm mạnh của UDP là ở chỗ vì không có nhiều tính toán và các thông tin kiểm tra khác nên UDP nhanh hơn TCP, sử dụng ít bộ nhớ cũng như thời gian của CPU hơn. UDP cũng dùng địa chỉ IP và port để nhận biết và chuyển thông tin cho lớp trên.

IP có chức năng chuyển thông tin đi qua mạng đến nơi cuối. IP làm được việc này nhờ vào một bảng chỉ đường (routing table) dựa trên địa chỉ mạng (network address), không phải dựa trên địa chỉ máy tới) và chuyển thông tin đó tới máy cuối. Trên đường đi, thông tin có thể qua nhiều trạm trung gian (tài liệu cũ dùng từ gateway, tài liệu mới dùng từ router), cũng sử dụng lớp IP để chuyển tiếp (forward) các tín hiệu đó tới các trạm khác gần máy đích hơn.

Cách tính địa chỉ mạng, địa chỉ máy (host address), địa chỉ mạng con (subnet address) và các vấn đề liên quan đến việc đánh địa chỉ sẽ được trình bày trong bài khác.

Tài liệu tham khảo:
- Internetworking with TCP/IP volume I
- TCP/IP illustrated volume I
- Sybex CCNA Study Guide v2.0

IP ĐỘNG LÀ GÌ ?


Mỗi ISP đều có một Server lŕm nhiệm vụ phân phát số IP khi có một máy o­nline và thu hồi lại số IP đó khi máy đó Disconnect.

Một máy tính có thuê bao đường truyền tốc độ cao (nghĩa lŕ luôn luôn o­nline) thì được các ISP gán cho một số IP cố định (gọi lŕ IP tĩnh), còn máy tính dùng Modem để kết nối Internet được ISP gán cho một số IP tạm thời khi o­nline để được nhận biếtt tręn Internet, khi máy tính này Disconnect thì số IP đó được lấy về để cấp phát cho máy tính khác o­nline ( số IP nŕy gọi là IP động).

Nói tóm lai, máy tính dùng Modem mỗi lần o­nline là có số IP khác nhau.

Dùng Scan Ip để Scan các địa chỉ Ip!

Sau khi có kết quả bạn dùng Telnet để Login vào Computer đó với IP đó, kčm theo Port của Victim' s Computer, thông thường là Port 80, 8000, 8001 TCP.

Che dấu IP khi lên mạng :
- Chào các bạn! gần đây có một số bạn hỏi tôi về vấn đề che IP khi lên mạng. Sau khi đi dạo bơi trên Internet một thời gian thì tôi thấy một số tài liệu có đề cập đến các chương trình như : DC_JS, Genius, Stealth Anonymizer, Multiproxy.... Theo tôi thì chẳng cần đến những chương trình này. Tất cả những gì mà bạn cần là Browser, Telnet và một chút kỹ năng về mạng. Tôi xin mạn phép đem chút ít hiểu biết nông cạn của mình ra chia sẻ với bạn. Dưới đây là cách che IP khi hành sự (Web, E-mail, FTP, Telnet). Chắc nhiều bạn sẽ nghĩ là bài đơn giản như vậy mà cũng send lên, mong bạn thông cảm.... Tôi send lên cho các bạn Beganner.

- Che IP khi duyệt Web : Quá đơn giản, khỏi nói bạn cũng biết... Chỉ cần dùng Proxy là Ok liền. Kiếm các trang Web Proxy đã được Config sẵn, bạn chỉ việc lên đó gõ địa chỉ trang Web mà bạn muốn Visit ẩn danh vào-Ok. Nếu bạn lên Internet kiến được một cái Proxy đại loại như sau : 208.57.0.100:80...Port 80, ồ đúng đây là Proxy cho Web rồi. bạn khởi động Inernet Explorer. Vào Tools/Internet Options/ Connection/Lan Setting. Nhấn vào Use a Proxy Setting/Advance....Ở đây có các Form để cấu hình Proxy cho Web, FTP.... bạn Copy 208.57.0.100 vào Address và = 80 vào Port. FTP bạn xem kiếm được cái Proxy nào thì copy vào notepad (FTP co Port mac dinh la 21). Để cho chắc bạn cứ chọn xài các Anonymous Proxy.

- Che IP send Mail : bạn có thể dùng chương trình Dnd... Nó có thể tạo IP giả cũng như giả mạo luôn được cả Host nữa. Bạn nào ngại Download nó thì cứ xài Webmail. Rồi dùng Proxy để truy cập vào Webmail để Send mail. IP của bạn khi truy cập vào Webmail cũng như trên Header của cái Mail send đi sẽ là IP của cái Proxy mà bạn dùng.

- Che IP khi Telnet và FTP : Đến đây thì bạn có thể làm theo như cách mà bạn camaptrang@ đã đề cập đến hôm nọ. Kiếm cái Wingate Sever, Telnet vào nó....Tiếp đó Telnet, hoặc FTP vào mục tiêu mà bạn muốn che IP. Ip mà Server nó log được chính là Ip của Wingate Server. Các lệnh của Telnet thì tùy, nếu Server xài Winnt thì các dòng lệnh của nó giống như các dòng lệnh DOS, nếu Sever xài Unix/Linux thì các dòng lệnh của nó giống như Unix/Linux. Còn FTP thì có các dòng lệnh chuẩn sau (bất cứ Server xài OS nào)

- Đầu tiên bạn gõ : ftp host để connect vào Server FTP, nếu là Server Anonymous thì User/Pass bạn có thể nhập Guest, Anonymous hoặc cái gì cũng OK hết (đối với các Server loại này bạn chỉ có thể Download, dir, cd thôi... nói chung là không có quyền sửa đổi các File trên Server), nếu là Server Normal thì nó sẽ đổi User/Pass.... bạn phải có User/Pass trước khi Connect (với Server loại này bạn có toàn quyền sửa đổi, di chuyển, del.... không giới hạn các file trên Server). Sau khi thành công bạn sẽ thấy dạng.
ftp>
- OK! bạn đã connect được vào FTP Server rồi đó. Dưới đây là các lệnh FTP. Nếu quen có khi bạn khỏi cần dùng các chương trình FTP như Cute FTP, WS FTP pro... nữa. Bạn type lệnh là xong.

dir-hiển thị thư mục và file trên Server.
cd-chuyển đổi giữa các thư mục trên Server.
get-Download 1 file từ Server.
mget-Download nhiều file từ Server.
put-upload 1 file lên Server.
mput-upload nhiều file lên Server.
pwd-hiển thị thư mục hiện hành trên Server.
mkdir-tạo thư mục.
rmdir-xoá thư mục
chmod-thiết lập tùy chọn cho thư mục/file
hash-hiển thị chi tiết thông tin về việc truyền nhau dữ liệu.
ascii-chuyển sang chế độ ascii.
binary-chuyển sang chế độ nhị phân.
close-chấm dứt kết nối.
quit-thoát khỏi môi trường FTP.

No comments: