Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

3-way hand shake của TCP

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Thế thì bó tay

    Comment


    • #17
      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


      • #18
        Đã 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)
        Cá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
        Last edited by Im_Sam; 21-10-2008, 09:57 PM.

        Comment


        • #19
          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?????
          Tui đã nói trước là tui đang giải thích phương pháp 3-way handshake, mà 3-way không phải sinh ra là dành riêng cho TCP, nhiều giao thức khác có sử dụng 3-way như Radius hay PPPoE.
          Originally posted by Im_Sam View Post
          Cá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
          Modem nó không xài ARP với DHCP. Nó dùng giao thức PPPoE, đầu tiên nó gửi broadcast tìm ISP.

          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


          • #20
            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.
            (link đầy đủ: http://en.wikipedia.org/wiki/Transmi...ntrol_Protocol)
            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


            • #21
              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


              • #22
                Originally posted by invalid-password View Post
                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.
                bác thông cảm nhé, trình em chỉ mới học đến đây thôi, đã bảo đang nói là bắt tay 3 bước với TCP mà, sao bác cứ gán nó sang UDP làm gì cho mệt
                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


                • #23
                  Originally posted by invalid-password View Post
                  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.
                  ...
                  - trong quá trính bắt tay 3 bước đã mô tả cụ thể là dùng ACK, và SYN :

                  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.com
                  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


                  • #24
                    Ờ, 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


                    • #25
                      Originally posted by invalid-password View Post
                      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.
                      Cái dở nhất của người VN là không có tinh thần dân tộc, người VN mà lúc nào cũng khen người Mỹ, người Nhật... giỏi, rồi tự bêu xấu mình :( Bảo sao mà VN mãi nghèo :( Đúng là nên cải cách lại hệ thống giáo dục tư tưởng.
                      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


                      • #26
                        Originally posted by invalid-password View Post
                        Mì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.
                        Mì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?
                        Click image for larger version

Name:	3-ways.jpg
Views:	1
Size:	9.1 KB
ID:	205453


                        Originally posted by invalid-password View Post
                        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.
                        Mình lại thấy nó rất liên quan đến tính reliable của TCP :))

                        Comment


                        • #27
                          Đơ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


                          • #28
                            Originally posted by stylish_man View Post
                            Mì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?
                            Nếu Bob đã xác định muốn nói chuyện với Alice thì vẫn phải qua 3-way. Như 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.

                            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


                            • #29
                              Cảm ơn bạn về 2 ví dụ cụ thể về MSS và Windows size.
                              Originally posted by nguyendiep View Post
                              Nếu Bob đã xác định muốn nói chuyện với Alice thì vẫn phải qua 3-way.
                              Mình đồng ý 100%.
                              Originally posted by nguyendiep View Post
                              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.
                              Vậy theo bạn 3-ways sẽ không SYN flood được sao?
                              Originally posted by nguyendiep View Post
                              Như 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.
                              Mình thấy nghi ngờ nên xem lại bài của invaild-password
                              Originally posted by invalid-password View Post
                              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


                              • #30
                                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 Post
                                Vậy theo bạn 3-ways sẽ không SYN flood được sao?
                                3-way vẫn syn flood đuợc nhưng không giả ip source đuợc vì vậy nếu firewall có thiết lập maximum session per source = 100 chẳng hạn thì không thể flood quá 100 session. Tuy nhiên giả sử nếu 2-way tạo đuợc 1 session thì sẽ flood chết luôn cả con firewall vì nguời ta tạo session từ nhiều ip source giả khác nhau. 3-way không thể giả ip source vì bản tin syn-ack không trả về đuợc thì không thể gửi ack để hoàn thiện 1 session.
                                Diệp Thanh Nguyên - Viettel Networks
                                Certificates : Chứng chỉ A Vi tính 1995 (DOS, NC, Vietres, Foxpro, Quattro) :))

                                Comment

                                Working...
                                X