Thứ Sáu, 12 tháng 4, 2013

Trình bày về thủ tục Bắt tay 3 bước(three way - handshake) trong TCP

Bắt tay 3 bước trong TCP 

Mô tả cơ bản:
1 gói dữ liệu TCP ( TCP packet ) chứa flag bits ( cờ ) để mô tả nội dung và mục đích của gói dữ liệu . 
Vd: gói dữ liệu với cờ SYN ( synchoronize ) dùng để bắt đầu 1 connection. ACK ( acknowledgement ) . FIN (finish ) dùng để cắt 1 connection...

Cách thức hoạt động:

1> SYN: Các chương trình máy con ( như web browser, ftp, ...) bắt đầu connection với máy chủ bằng cách gửi 1 packet với cờ "SYN" đến máy chủ :

SYN packet này thường được gửi từ các cổng cao ( 1024 -65535 ) của máy con đến những cổng trong vùng thấp ( 1 -1023 ) của máy chủ . Chương trình trên máy con sẽ hỏi hệ điều hành cho 1 cổng để mở connection với máy chủ . Những cổng trong vùng này được gọi là "cổng máy con" ( client port range). Tương tự như vậy, máy chủ sẽ hỏi HĐH để nhận được quyền chờ tín hiệu trong máy chủ , vùng cổng 1 - 1023 . Vùng cổng này được gọi là "vùng cổng dịch vụ" ( service port ) . Ví dụ Web Server sẽ luôn chờ tín hiệu ở cổng 80 và IE sẽ connect vào cổng 80 của máy chủ .

Ngoài ra trong gói dữ liệu còn có thêm địa chỉ IP của máy con và máy chủ ( cả 2 )

2> SYN/ACK : khi yêu cầu mở connection được máy chủ nhận được tại cổng đang mở , server sẽ gửi lại packet chấp nhận với 2 bit SYN và ACK :

SYN/ACK packet được gửi ngược lại bằng cách đổi 2 IP của server và client, client IP sẽ thành IP đích và server IP sẽ thành IP bắt đầu . Tương tự như vậy, cổng cũng sẽ thay đổi , server nhận được packet ở cổng nào thì cũng sẽ dùng cổng đó để gủi lại packet vào cổng mà client đã gửi .

Server gửi lại packet này để thông báo là server đã nhận được tín hiệu và chấp nhận connection, trong trường hợp server không chấp nhận connection, thay vì SYN/ACK bits được bật, server sẽ bật bit RST/ACK ( Reset Acknowledgement ) và gởi ngược lại RST/ACK packet . Hoặc ICMP cổng khÔng chấp nhận để thông báo cho client rằng yêu cầu đã bị từ chối .

Server bắt buộc phải gửi thông báo lại bởi vì TCP là chuẩn tin cậy nên nếu client không nhận được thông báo thì sẽ nghĩ rằng packet đã bị lạc và gửi lại thÔng báo mới .

3> ACK Khi client nhận được SYN/ACK packet thì sẽ trả lời bằng ACK packet :

packet này được gởi với mục đích duy nhất báo cho máy chủ biết rằng client đã nhận được SYN/ACK packet và lúc này connection đã được thiết lập và dữ liệu sẽ bắt đầu lưu thông tự do giữa connection.
Phân tích tiến trình Three-way Handshake
chúng ta sẽ xem xét các quá trình bắt tay của 2 máy tính trước khi truyền thông còn được gọi là Tree-way Handshake. Trước khi bắt đầu hãy xem bảng so sánh một số khác biệt giữa 2 giao thức của tầng vận chuyển là TCP và UDP

Qua bảng phân tích trên chúng ta nhận thấy giao thức TCP là một giao thức có độ tin cậy cao hơn và trước khi truyền thông các máy nguồn và đích cần khởi tạo các liên kết, tuy nhiên UDP lại có thuận lợi về mặt tốc độ, cho nên đối với các ứng dụng ưu tiên về mặt thời gian thì UDP là lựa chọn tốt nhất, ngược lại nếu sự an toàn và bảo đảm dữ liệu truyền đến được nơi cần đến thì TCP là lựa chọn tối ưu. Đây cũng là điểm khác biệt chính mà các bạn cần ghi nhớ khi xử lý các câu hỏi của kỳ thi chứng chỉ quốc tế SCNP. 

TCP Flag: trong qua trình truyền thông của mình, giao thức TCP sử dụng các cờ gọi là những TCP Flag là SYN, ACK, FIN, RESET, PUSH và URGENT. Các cờ này thường được xác định bằng những kí tự đầu của chúng như S, A, F, R, P và urg. 

SYN được sửng dụng trong giai đoạn đầu của quá trình khởi tạp liên kết nhằm đồng bộ hóa hai máy tính trước khi dữ liệu được truyền. 

ACK dùng để gởi thông báo xác nhận sau khi nhận được dữ liệu từ máy gởi. Thường được sử dụng trong giai đoạn 2 của quá trình khởi tạo liên kết. 

FIN gởi bởi máy truyền yêu cầu chấm dứt liên kết. 

- RESET: dùng để reset lại phiên truyền. 

PUSH được áp dụng khi bên truyền yêu cầu dữ liệu được gởi trực tiếp đến ứng dụng mà không cần thông qua vùng đệm. 

URGENT được sử dụng để truyền dữ liệu khẩn có mức ưu tiên cao nhất. 

Sequence và Acknowledgement Number 

Ngoài các TCP Flag thì Sequence và Acknowledgement Number được áp dụng để tăng cường độ tin cậy cho dữ liệu khi truyền cũng như dùng để hợp nhất các dữ liệu được chia thành nhiều gói tin nhỏ trong quá trình gởi, đây là các giá trị 32 bit được chỉ định trong header của gói tin. 

Connection (Liên kết) 

Dữ liệu chỉ được truyền khi connection đã thiết lập, có 2 loại connection là passive open (khi ứng dụng lắng nghe kết nối: ví dụ ứng dụng netcat lắng nghe kết nối trên một cổng nào đó) và active open (ứng dụng yêu cầu giao thức TCP truyền thông với một remote host đang ở chế độ passove open). 

Thiết lập liên kết 

Trước khi dữ liệu được truyền cũng như các senquence và ack number hoạt động thì liên kết phải được khởi tạo, quá trình này gọi là three-way handshake, quá tình này gồm 3 bước sau đây: 

1. Host A gởi một segment đến Host C với thông tin: 
SYN = 1 (Session được đồng bộ hoá) 
ACK = 0 (Không có giá trị trong trường ACK , vì vậy cờ này có giá trị là 0.) 
Sequence Number = x, với x là một giá trị. (x là ISN của Host A) 
Acknowledgement Number = 0 

2. Host C nhận segment này và phản hồi lại Host A các thông báo sau: 
SYN = 1 (Session vẫn được đồng bộ hoá) 
ACK = 1 (Cờ xác nhận đã được thiết lập) 
Sequence Number = y, với y là một giá trị. (y là ISN của Host C) 
Acknowledgement Number = x + 1 (Số Sequence Number từ Host A được cộng thêm 1.) 

3. Host A nhận segment từ Host C và phản hồi đến Host C các thông tin: 
SYN = 0 (Session đã được đồng bộ hoá; hơn nữa các yêu cầu không cần thiết.) 
ACK = 1 (Cờ ack thiết lập response tới SYN từ segment trước) 
Sequence Number = x + 1 (Đây là thứ tự trình tự tiếp theo trong chuỗi.) 
Acknowledgement Number = y + 1 (Số sequence number từ Host C được cộng thêm 1.)


Kết thúc liên kết

Tương tự như khi khởi tạo liên kết, quá trình kết thúc liên kết cũng gồm nhiều bước. Có 2 loại kết thúc liên kết trong TCP đó là graceful (sử dụng cờ FIN) và bao gồm 4 bước vì lý do quá trình truyền thông trong TCP là full-duplex communication và non-graceful (sử dụng cờ RESET). Và giống như quá trình khởi tạo chúng ta có 2 loại Passive Close và Active Close. Sau đây là các bước trong quá trình graceful connection termination: 

1. Host A gửi một session termination tới Host C với thông tin: 
FIN = 1 (Session sẽ được giới hạn.) 
ACK = 1 (Đây là một số ack, dựa trên thông tin hiện tại) 
Sequence Number (FIN number) = s (s là một giá trị dựa trên thông tin hiện tại) 
Acknowledgement Number = p (p là một giá trị dựa trên thông tin hiện tại) 

2. Host C nhận segment của Host A và đáp trả thông tin: 
FIN = 0 (Segment này không yêu cầu termination của session.) 
ACK = 1 (Segment bao gồm một số ack) 
Sequence Number = Not Present (Do không có FIN, nên không có sequence number được yêu cầu) 
Acknowledgement Number = s + 1 (Đây là response tới FIN của Host A FIN) 

3. Host C gửi một session termination hướng ngược lại với thông tin: 
FIN = 1 (Session sẽ được giới hạn) 
ACK = 1 (Đây là một số ack) 
Sequence Number = p (p là một giá trị dựa trên thông tin hiện tại) 
Acknowledgement Number = s + 1 (Tương tự như trong segment trước) 

4. Host A nhận các segment từ Host C và đáp trả thông tin: 
FIN = 0 (Segment không yêu cầu một termination, không có SYN) 
ACK = 1 (Segment bao gồm một số ack) 
Sequence Number = Not Present 
Acknowledgement Number = p + 1 (Đây là số sequence number của Host C được công thêm 1) 

Lúc này liên kết truyền thông giữa 2 host đã kết thúc.

1 nhận xét: