Thế thì bó tay
Announcement
Collapse
No announcement yet.
3-way hand shake của TCP
Collapse
X
-
Mình xin nêu 1 lý do như vầy :
Đầu tiên mình xin nhấn mạnh rằng 3-way handshake không phải là kỹ thuật riêng của TCP, mà nó là một kỹ thuật được thiết kế để bắt tay giữa 2 side. Nhiều giao thức khi tạo kết nối có sử dụng cách thức bắt tay 3 chiều này.
3-way handshake giúp một client kết nối đến một server chưa xác định trước, trong trường hợp có nhiều server cùng đáp ứng yêu cầu.
VD : Hiện tại ở VN mỗi nhà cung cấp ADSL có đường cáp riêng, bạn gắn modem vào cáp VNN thì chỉ kết nối được đến VNN. Điều này gây lãng phí cáp. Ở nước ngoài dân cư tập trung trong các khu riêng, những nhà cung cấp đường cáp thì khác với các ISP. Bạn chỉ cần kéo 1 sợi cáp duy nhất nhưng lúc nào bạn cũng có thể chọn kết nối với ISP nào bạn muốn, vì nhà cung cấp đường cáp có kết nối với các ISP. Khi bật modem ADSL thì nó sẽ gửi broadcast để tìm ISP (vì nó chưa có MAC của ISP), lúc này có nhiều ISP cùng trả lời, tuy nhiên modem được cấu hình chỉ kết nối với ISP nào nó muốn, và nó gửi xác nhận kết nối đến đúng ISP đó.
Có thể minh họa như sau :
+ Tôi đứng giữa đám đông la lên : "Tui muốn nói chuyện, có ai muốn nói không ?" (pha 1, broadcast tìm server)
+ Có nhiều người cùng đáp "Tôi có thể nói chuyện đây" (pha 2, nhiều server trả lời)
+ Tôi chọn lấy 1 người tôi thích, và nói với anh ta "OK, tôi sẽ nói chuyện với anh" (pha 3, xác nhận kết nối)
Nếu không có pha thứ 3, mà trong trường hợp có nhiều server trả lời, và client chỉ kết nối đến 1 server thì các server kia không biết nó có được nối hay không. Còn nếu dùng 3-way, khi các server khác không nhận được pha 3 thì nó biết rằng client không muốn kết nối và free tiến trình SYN đó. Tuy nhiên, 3-way lại tạo ra một cơ hội cho kiểu tấn công SYN Flood.
Comment
-
Đã là TCP thì ko có broadcast!!! Ko hiểu bạn dùng app nào của tcp mà có broadcast?????
Khi bật modem ADSL thì nó sẽ gửi broadcast để tìm ISP (vì nó chưa có MAC của ISP), lúc này có nhiều ISP cùng trả lời, tuy nhiên modem được cấu hình chỉ kết nối với ISP nào nó muốn, và nó gửi xác nhận kết nối đến đúng ISP đó.
Có thể minh họa như sau :
+ Tôi đứng giữa đám đông la lên : "Tui muốn nói chuyện, có ai muốn nói không ?" (pha 1, broadcast tìm server)
+ Có nhiều người cùng đáp "Tôi có thể nói chuyện đây" (pha 2, nhiều server trả lời)
+ Tôi chọn lấy 1 người tôi thích, và nói với anh ta "OK, tôi sẽ nói chuyện với anh" (pha 3, xác nhận kết nối)Last edited by Im_Sam; 21-10-2008, 09:57 PM.
Comment
-
Originally posted by Im_Sam View PostĐã là TCP thì ko có broadcast!!! Ko hiểu bạn dùng app nào của tcp mà có broadcast?????
Originally posted by Im_Sam View PostCái j đây. Chưa có MAC thì nó sẽ gửi ARP. Đầu liên quan j đến TCP. Mà ARP cũng chỉ có 2 bước. Với lại lúc bật modem lên modem chưa có IP nó sẽ xin IP = DHCP. Mà DHCP chạy trên nền UDP. Cái này còn lệch pha hơn so với ví dụ trên
3-way là kỹ thuật chung cho quá trình tạo kết nối, chứ không giới hạn trong cái giao thức TCP nhỏ bé đâu. Ngoài ra bắt tay 4-way vẫn có trong các kết nối cần chứng thực bằng khóa công khai
Comment
-
Oops,
- tóm lại ở đây chỉ hỏi về quá trình bắt tay 3 bước với TCP :D, có thể có ở những giao thức khác, hay quá trình khác (vd con người còn bắt tay 4 bước : cả đến và về đều chào và bắt tay :) ), quá trình kết nối của modem ADSL ko phải quá trình truyền dữ liệu tin cậy, chỉ là xác thực kết nối : cho dù có thể là bắt tay 3 bước.
- nói đến TCP, tức là chỉ nói quá trình xảy ra từ layer 4 trở đi thôi, ko nói đên quá trình từ layer 3 trở lại nữa, chỉ nói về quá trình truyền dữ liệu, 3 ways - hand shake giúp truyền dữ liệu tin cậy, nhưng tại sao chỉ cần có 3 bước, mà lại ko thể ít hơn là 2 bước và có thể nhiều hơn là 4 bước ?, có thể chỉ 3 bước là đã đủ tin cậy, đủ để 2 máy truyền và nhận đêu báo nhận được, nếu thêm bước thứ tư là ko cân thiết và làm chậm quá trình thiết lập cầu nối TCP để truyền dữ liệu ???
- quá trình bắt tay 3 bước thì bác nào cũng biết, post lại để minh họa:
Connection establishment
To establish a connection, TCP uses a three-way handshake. Before a client attempts to connect with a server, the server must first bind to a port to open it up for connections: this is called a passive open. Once the passive open is established, a client may initiate an active open. To establish a connection, the three-way (or 3-step) handshake occurs:
1. The active open is performed by the client sending a SYN to the server.
2. In response, the server replies with a SYN-ACK.
3. Finally the client sends an ACK back to the server.
At this point, both the client and server have received an acknowledgment of the connection.
Example:
The initiating host (client) sends a synchronization packet (SYN flag set to 1) to initiate a connection. It sets the packet's sequence number to a random value x.
The other host receives the packet, records the sequence number x from the client, and replies with an acknowledgment and synchronization (SYN-ACK). The Acknowledgment is a 32-bit field in TCP segment header. It contains the next sequence number that this host is expecting to receive (x + 1). The host also initiates a return session. This includes a TCP segment with its own initial Sequence Number of value y.
The initiating host responds with the next Sequence Number (x + 1) and a simple Acknowledgment Number value of y + 1, which is the Sequence Number value of the other host + 1.no car...no house...no money, but have only a sharing and friendly heart. What's the most important thing in this life "Heart or Money ?". Anything else can stead money ?
:32::53::X:106:
Nothing last forever...
Comment
-
Vụ bắt tay mấy bước thì không liên quan đến việc truyền tin cậy hay không tin cậy. Tin cậy hay không là do sequnce number, windows size, ACK, và check sum đảm bảo.
Tại sao TFTP bắt tay có 2 bước ? Nó chỉ cần bắt tay 2 bước là truyền được dữ liệu :
+ Máy A Gửi request
+ Máy B gửi ACK.
và bắt đầu truyền data ...
Đừng nói là TFTP không tin cậy, nếu có lỗi thì nó cũng truyền lại.
Mà tin cậy hay không là ở giai đoạn truyền dữ liệu, chứ không phải ở giai đoạn bắt tay.
Comment
-
Originally posted by invalid-password View PostVụ bắt tay mấy bước thì không liên quan đến việc truyền tin cậy hay không tin cậy. Tin cậy hay không là do sequnce number, windows size, ACK, và check sum đảm bảo.
Tại sao TFTP bắt tay có 2 bước ? Nó chỉ cần bắt tay 2 bước là truyền được dữ liệu :
+ Máy A Gửi request
+ Máy B gửi ACK.
và bắt đầu truyền data ...
Đừng nói là TFTP không tin cậy, nếu có lỗi thì nó cũng truyền lại.
Mà tin cậy hay không là ở giai đoạn truyền dữ liệu, chứ không phải ở giai đoạn bắt tay.
UDP là truyền ko tin cậy vì vậy nó ko cần thiết lập cầu nối, do đó chỉ có 2 bước. Còn nếu TCP có 2 bước thì trở thành UDP, nếu nhiều hơn 3 bước thì là một cái gì đó mà chưa biết :106:no car...no house...no money, but have only a sharing and friendly heart. What's the most important thing in this life "Heart or Money ?". Anything else can stead money ?
:32::53::X:106:
Nothing last forever...
Comment
-
Originally posted by invalid-password View PostVụ bắt tay mấy bước thì không liên quan đến việc truyền tin cậy hay không tin cậy. Tin cậy hay không là do sequnce number, windows size, ACK, và check sum đảm bảo.
...
1. host A send SYN
2. host B receive and reply SYN-ACK
3. host A send SYN-ACK-ACK again, back to the receiver
bác xem thêm ở đây nhé :D
www.3wayhandshake.comno car...no house...no money, but have only a sharing and friendly heart. What's the most important thing in this life "Heart or Money ?". Anything else can stead money ?
:32::53::X:106:
Nothing last forever...
Comment
-
Ờ, nếu chỉ nói về 3-way của TCP thôi thì khó có thể hiểu được 3-way handshake. Khổ quá người VN chỉ học theo cái người ta nói (nhất là mấy tín đồ của Cisco, chưa bao giờ dùng sản phẩm của hãng khác), người ta nói hay thì nó hay, nói dở thì nó dở. Tư tưởng của bao nhiêu thế hệ đã là như vậy. Người Mỹ thì khác, bởi vậy khoa học nó mới phát triển. Vấn đề cải cách tư tưởng là trách nhiệm của hệ thống giáo dục.
Thôi tui mở ra cái topic khác, mời mọi người lại cãi nhau tiếp :
Vấn đề khó : Ưu điểm của TFTP là gì so với FTP ?http://vnpro.org/forum/showthread.php?p=96006#post96006
Comment
-
Originally posted by invalid-password View PostKhổ quá người VN chỉ học theo cái người ta nói (nhất là mấy tín đồ của Cisco, chưa bao giờ dùng sản phẩm của hãng khác), người ta nói hay thì nó hay, nói dở thì nó dở. Tư tưởng của bao nhiêu thế hệ đã là như vậy. Người Mỹ thì khác, bởi vậy khoa học nó mới phát triển. Vấn đề cải cách tư tưởng là trách nhiệm của hệ thống giáo dục.
Nói thêm về niềm tự hào dân tộc, hôm vừa rồi em có nói chuyện với một người bạn TQ mới quen, ngay sau khi giới thiệu tên tuổi... thì câu đầu tiên mà bạn đó nói là "chỉ trong 5 năm nữa TQ sẽ trở thành quốc gia mạnh nhất TG". Điều đó có thành sự thật hay ko thì ko biết, chỉ biết rằng người dân của họ có lòng tin :X Còn gần 100 triệu ng VN kia, chắc chưa từng ai nói những câu tương tự như thế...
Hơi lạc đề ^__^
Comment
-
Originally posted by invalid-password View PostMình xin nêu 1 lý do như vầy :
3-way handshake giúp một client kết nối đến một server chưa xác định trước, trong trường hợp có nhiều server cùng đáp ứng yêu cầu.
VD : Hiện tại ở VN mỗi nhà cung cấp ADSL có đường cáp riêng, bạn gắn modem vào cáp VNN thì chỉ kết nối được đến VNN. Điều này gây lãng phí cáp. Ở nước ngoài dân cư tập trung trong các khu riêng, những nhà cung cấp đường cáp thì khác với các ISP. Bạn chỉ cần kéo 1 sợi cáp duy nhất nhưng lúc nào bạn cũng có thể chọn kết nối với ISP nào bạn muốn, vì nhà cung cấp đường cáp có kết nối với các ISP. Khi bật modem ADSL thì nó sẽ gửi broadcast để tìm ISP (vì nó chưa có MAC của ISP), lúc này có nhiều ISP cùng trả lời, tuy nhiên modem được cấu hình chỉ kết nối với ISP nào nó muốn, và nó gửi xác nhận kết nối đến đúng ISP đó.
Có thể minh họa như sau :
+ Tôi đứng giữa đám đông la lên : "Tui muốn nói chuyện, có ai muốn nói không ?" (pha 1, broadcast tìm server)
+ Có nhiều người cùng đáp "Tôi có thể nói chuyện đây" (pha 2, nhiều server trả lời)
+ Tôi chọn lấy 1 người tôi thích, và nói với anh ta "OK, tôi sẽ nói chuyện với anh" (pha 3, xác nhận kết nối)
Nếu không có pha thứ 3, mà trong trường hợp có nhiều server trả lời, và client chỉ kết nối đến 1 server thì các server kia không biết nó có được nối hay không. Còn nếu dùng 3-way, khi các server khác không nhận được pha 3 thì nó biết rằng client không muốn kết nối và free tiến trình SYN đó. Tuy nhiên, 3-way lại tạo ra một cơ hội cho kiểu tấn công SYN Flood.
Originally posted by invalid-password View PostVụ bắt tay mấy bước thì không liên quan đến việc truyền tin cậy hay không tin cậy. Tin cậy hay không là do sequnce number, windows size, ACK, và check sum đảm bảo.
Tại sao TFTP bắt tay có 2 bước ? Nó chỉ cần bắt tay 2 bước là truyền được dữ liệu :
+ Máy A Gửi request
+ Máy B gửi ACK.
và bắt đầu truyền data ...
Đừng nói là TFTP không tin cậy, nếu có lỗi thì nó cũng truyền lại.
Mà tin cậy hay không là ở giai đoạn truyền dữ liệu, chứ không phải ở giai đoạn bắt tay.
Comment
-
Đơn giản là vì quá trình này hoàn chỉnh là có 3 bước , TCP là giao thức hướng kết nối do đó nó cần phải thiết lập kết nối trước khi truyền dữ liệu và việc thiết lập này cần có 3 bước mỗi phiên . Khi kết thúc kết nối cũng sẽ có 3 bước chấm dứt kết nối . Chúc vui !Welcome To The Human Network
Comment
-
Originally posted by stylish_man View PostMình thấy bạn đưa ra trường hợp hơi đặc biệt. Thế nếu Bob đã xác định muốn nói chuyện với Alice thì sao?
Cụ thể hơn : bạn có thể giả Ip source để gửi SYN đến đích vì các router chỉ check ip dest chứ không check ip source. Tuy nhiên chiều ngược lại sẽ không thông, vì khi router route ngược trở lại nó sẽ route theo ip source giả và gói tin sẽ chạy đi chỗ khác chứ không đến được nguồn tấn công. Nếu chỉ 2-way thì tấn công syn bằng cách giả thật nhiều ip source sẽ rất dễ dàng tiêu diệt bất kỳ hệ thống nào kể cả firewall, vì chỉ cần gửi syn một cái là yên tâm xong 1 session. Nếu 3-way thì phải gửi syn, chờ syn-ack và gửi tiếp ack nữa thì mới xong 1 session. Nếu dùng 3-way mà giả ip source thì sẽ không thể nhận được bản tin syn-ack (vì nó bị route đi chỗ khác), nếu không nhận được syn-ack thì không thể gửi ack được vì trong ack bắt buộc phải có sequence number bằng với acknowledgement number nhận được từ syn-ack.
3-way ngoài đặc tính có thể chống giả srcIp thì còn có tác dụng quan trọng là thỏa thuận option giữa 2 bên, 2 bên muốn kết nối với nhau thì phải cùng support các option như nhau.
. Pha 1 (A > B): Tôi muốn kết nối với anh. Đây là những option của tôi, anh OK không ?
. Pha 2 (B > A): OK, và đây là những option của tôi, anh cũng OK không ?
. Pha 3 (A > B): OK luôn !
Ta thấy 3-way là số bước tối thiểu để 2 bên thỏa thuận option với nhau. Nếu B không support các option của A thì B sẽ từ chối tại pha 2, nếu B đồng ý nhưng A lại không support các option của B thì A sẽ từ chối tại pha 3. Từ chối bằng cách gửi bản tin RST.
Ví dụ 1 : thỏa thuận Maximum segment size
. A gửi SYN cho B, trong SYN có option MSS = 1500
. B gửi lại SYN_ACK, MSS = 1492
. Nếu A OK dùng MSS=1492 để tương thích B thì nó sẽ gửi ACK, không thì RST.
Ví dụ 2 : thỏa thuận Windows size
. A gửi SYN cho B, trong SYN có windows size = 65535.
. B gửi SYN_ACK cho A, trong SYN_ACK có windows size = 32768, windows scale option = 3, do đó windows size thực sự sẽ là 262144.
. Nếu A không support windows size lớn hơn 65535 thì sẽ gửi RST, kết thúc kết nối. Ngược lại A sẽ gửi ACK.Diệp Thanh Nguyên - Viettel Networks
Certificates : Chứng chỉ A Vi tính 1995 (DOS, NC, Vietres, Foxpro, Quattro) :))
Comment
-
Cảm ơn bạn về 2 ví dụ cụ thể về MSS và Windows size.
Originally posted by nguyendiep View PostNếu Bob đã xác định muốn nói chuyện với Alice thì vẫn phải qua 3-way.
Originally posted by nguyendiep View PostCụ thể hơn : bạn có thể giả Ip source để gửi SYN đến đích vì các router chỉ check ip dest chứ không check ip source. Tuy nhiên chiều ngược lại sẽ không thông, vì khi router route ngược trở lại nó sẽ route theo ip source giả và gói tin sẽ chạy đi chỗ khác chứ không đến được nguồn tấn công. Nếu chỉ 2-way thì tấn công syn bằng cách giả thật nhiều ip source sẽ rất dễ dàng tiêu diệt bất kỳ hệ thống nào kể cả firewall, vì chỉ cần gửi syn một cái là yên tâm xong 1 session. Nếu 3-way thì phải gửi syn, chờ syn-ack và gửi tiếp ack nữa thì mới xong 1 session. Nếu dùng 3-way mà giả ip source thì sẽ không thể nhận được bản tin syn-ack (vì nó bị route đi chỗ khác), nếu không nhận được syn-ack thì không thể gửi ack được vì trong ack bắt buộc phải có sequence number bằng với acknowledgement number nhận được từ syn-ack.
Originally posted by nguyendiep View PostNhư invalid-password đã nói, nếu 2-way thì sẽ mở cửa cho tấn công SYN flood bằng cách giả IP source, 3-way thì không thể. Vì vậy đây là 1 trong những lý do thiết kế 3-way.
Originally posted by invalid-password View PostNếu không có pha thứ 3, mà trong trường hợp có nhiều server trả lời, và client chỉ kết nối đến 1 server thì các server kia không biết nó có được nối hay không. Còn nếu dùng 3-way, khi các server khác không nhận được pha 3 thì nó biết rằng client không muốn kết nối và free tiến trình SYN đó. Tuy nhiên, 3-way lại tạo ra một cơ hội cho kiểu tấn công SYN Flood.
Comment
-
Mình cũng vửa xem kỹ lại thì thấy chắc invalid-password ghi nhầm, 2-way mới là tạo cơ hội cho syn flood chứ không phải 3-way.
Originally posted by stylish_man View PostVậy theo bạn 3-ways sẽ không SYN flood được sao?Diệp Thanh Nguyên - Viettel Networks
Certificates : Chứng chỉ A Vi tính 1995 (DOS, NC, Vietres, Foxpro, Quattro) :))
Comment
Comment