Thông báo

Collapse
No announcement yet.

Giao thức TCP/IP và Web server với AVR

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Em cũng bị lỗi TCP không bắt tay được. Em dùng wireshark bắt gói thì thấy mạch nhận được bản tin nhưng không đáp lại.
    Em vẫn dùng file code thầy post rồi viết thêm giao thức tầng ứng dụng. Vấn đề là, từ trước em vẫn dùng file đó test vào web bình thường, nhưng hiện giờ lại bị như vậy mặc dù mô phỏng Proteus vẫn vào tốt (em nghĩ code rất ổn).
    Vậy bản chất lỗi này là gì ạ?
    Xin các thầy, các anh giúp đỡ chỉ bảo cho em. Chỉ cần có giả thiết nào đó, em sẽ tự nghiên cứu.
    Em cảm ơn các thầy, các anh ạ.

    PS: Huhu, em bí lắm rồi ...

    Comment


    • Chào anh Tâm và các bạn. Mình đang làm 1 project nhỏ về truyền dữ liệu từ fpga( mình đang dùng spartan 3e) sang PC dùng code VHDL tuy nhiên mình sẽ không bàn luận ở đây (vì sai thread). Tuy nhiên mình muốn hỏi rằng. Mình đã truyền sang PC nhưng PC không thấy nhận được mà biểu tượng mạng trên PC cứ connect rồi lại unplug liên tục, dùng wireshark cũng không thấy phát hiện được gói tin nào. Mình có các câu hỏi sau mong mọi người giải đáp giúp:
      1. Nếu mình chỉ truyền dữ liệu lớp MAC (ethernet) thì máy tính và wireshark có phát hiện được ko? Và nếu checksum của lớp này sai thì có nhận được không?
      2. Mình chỉ làm 2 giao thức lớp trên là IP và UDP (hoặc TCP) mà mạch chỉ thực hiện truyền dữ liệu sang PC (ko làm phần nhận dữ liệu) trong những khoảng thời gian nhất định thì có được không? Có nghĩa là mạch của mình chỉ cần truyền chứ không cần biết bên kia nhận được hay không (Cái này mình nghĩ là dùng UDP thì có thể giải quyết được bài toán này?)

      Comment


      • Nguyên văn bởi joystick Xem bài viết
        Chào anh Tâm và các bạn. Mình đang làm 1 project nhỏ về truyền dữ liệu từ fpga( mình đang dùng spartan 3e) sang PC dùng code VHDL tuy nhiên mình sẽ không bàn luận ở đây (vì sai thread). Tuy nhiên mình muốn hỏi rằng. Mình đã truyền sang PC nhưng PC không thấy nhận được mà biểu tượng mạng trên PC cứ connect rồi lại unplug liên tục, dùng wireshark cũng không thấy phát hiện được gói tin nào. Mình có các câu hỏi sau mong mọi người giải đáp giúp:
        1. Nếu mình chỉ truyền dữ liệu lớp MAC (ethernet) thì máy tính và wireshark có phát hiện được ko? Và nếu checksum của lớp này sai thì có nhận được không?
        2. Mình chỉ làm 2 giao thức lớp trên là IP và UDP (hoặc TCP) mà mạch chỉ thực hiện truyền dữ liệu sang PC (ko làm phần nhận dữ liệu) trong những khoảng thời gian nhất định thì có được không? Có nghĩa là mạch của mình chỉ cần truyền chứ không cần biết bên kia nhận được hay không (Cái này mình nghĩ là dùng UDP thì có thể giải quyết được bài toán này?)
        1-Được với điều kiện gửi đúng địa chỉ MAC. Nếu nối trực tiếp board với PC thì cần config IP tĩnh cho PC, PC nhận được nhưng không xử lý tiếp nếu ko được chỉ định giao thức lớp trên, wireshark bắt được.
        2-Được, dùng UDP (TCP không được vì cần bắt tay). Các thông số IP cho board cần cấu hình tĩnh.

        Comment


        • Cám ơn anh! e đọc các bài viết của anh và đang làm trên vhdl( e mới chỉ làm trên udp). còn 1 câu hỏi nữa ở trên là nếu e gửi lên PC mà phần checksum của lớp ethernet sai thì wireshark và PC có nhận được ko a?

          Comment


          • Anh cho e hỏi thêm là cách tính checksum cho lớp ethernet ntn? ở trên là chip enc28j60 thực hiện rồi!

            Comment


            • Nguyên văn bởi joystick Xem bài viết
              Anh cho e hỏi thêm là cách tính checksum cho lớp ethernet ntn? ở trên là chip enc28j60 thực hiện rồi!
              Sai checksum frame ethernet thì Network Access layer sẽ loại gói tin, nên khả năng là PC và wireshare không nhận. Checksum ethernet là mã CRC

              Comment


              • Cám ơn anh Tâm. Em đã tìm rất nhiều cách tính check sum cho phần ethernet nhưng cuối cùng vẫn không thể bắt tay được với PC.
                Em có đoạn dữ liệu này cần truyền qua PC với giao thức Ethernet->IP->UDP (cả phần header và phần data 18 byte ko tính phần Preamble va SOF) sau:
                Code:
                Ethernet header 1-->14 :
                   Host PC MAC Address : x"00", x"1d", x"72", x"09", x"f9", x"21"
                   Source MAC Address  : x"00", x"12", x"34", x"56", x"78", x"90"
                   Type                       : x"08", x"00"
                IPv4 Header 1-->20:
                   VerLen+DSF              : x"45",x"00"
                   Total Length		 : x"00", x"2e"	(18+28 bytes (for UDP))
                    Identification		 : x"b3", x"fe"
                    Flags + Frag offset    :x"00", x"00"
                    Time to live		 : x"80" 
                    Protocol		         : x"11" 			-- UDP (17)
                    checksum 		 : x"05", x"40"
                    IP Source		 : x"c0", x"a8", x"00", x"2c"		-- 192.168.0.44
                    IP Destination 		 : x"c0", x"a8", x"00", x"04"		-- 192.168.0.4
                UDP Header 1-->8:
                   Source port  		 : x"04", x"00",	--1024
                   Destination port	 : x"04", x"00",	--1024
                   Length		         : x"00", x"1a",	--26 bytes (data_packet + udp_header_len)
                   Checksum		 : x"2d", x"e8"
                Data 1->18 :
                   x"00",x"01",x"02",x"03",x"04",x"05",
                   x"06",x"07",x"08",x"09",x"0a",x"0b",
                   x"0c",x"0d",x"0e",x"0f",x"10",x"11"      
                Checksum: 1->4 ???
                Khi em dùng các phần tính CRC32 theo cách tính đa thức x32+x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + x0
                (cách này được các trang web dùng để tạo CRC32) thì đều tạo ra đúng 1 kết quả như nhau (E75C21A6). Tuy nhiên khi dùng đúng CRC này để truyền thì PC không nhận được mà e dùng một phần mềm khác tạo CRC32(data đã được fix như trên) thì kết quả là 704de32a. Và dùng CRC này truyền sang thì PC nhận được frame đúng như ban đầu.
                Em không hiểu cách tính CRC32 như thế nào???

                Comment


                • Nguyên văn bởi joystick Xem bài viết
                  Cám ơn anh Tâm. Em đã tìm rất nhiều cách tính check sum cho phần ethernet nhưng cuối cùng vẫn không thể bắt tay được với PC.
                  Em có đoạn dữ liệu này cần truyền qua PC với giao thức Ethernet->IP->UDP (cả phần header và phần data 18 byte ko tính phần Preamble va SOF) sau:
                  Code:
                  Ethernet header 1-->14 :
                     Host PC MAC Address : x"00", x"1d", x"72", x"09", x"f9", x"21"
                     Source MAC Address  : x"00", x"12", x"34", x"56", x"78", x"90"
                     Type                       : x"08", x"00"
                  IPv4 Header 1-->20:
                     VerLen+DSF              : x"45",x"00"
                     Total Length		 : x"00", x"2e"	(18+28 bytes (for UDP))
                      Identification		 : x"b3", x"fe"
                      Flags + Frag offset    :x"00", x"00"
                      Time to live		 : x"80" 
                      Protocol		         : x"11" 			-- UDP (17)
                      checksum 		 : x"05", x"40"
                      IP Source		 : x"c0", x"a8", x"00", x"2c"		-- 192.168.0.44
                      IP Destination 		 : x"c0", x"a8", x"00", x"04"		-- 192.168.0.4
                  UDP Header 1-->8:
                     Source port  		 : x"04", x"00",	--1024
                     Destination port	 : x"04", x"00",	--1024
                     Length		         : x"00", x"1a",	--26 bytes (data_packet + udp_header_len)
                     Checksum		 : x"2d", x"e8"
                  Data 1->18 :
                     x"00",x"01",x"02",x"03",x"04",x"05",
                     x"06",x"07",x"08",x"09",x"0a",x"0b",
                     x"0c",x"0d",x"0e",x"0f",x"10",x"11"      
                  Checksum: 1->4 ???
                  Khi em dùng các phần tính CRC32 theo cách tính đa thức x32+x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + x0
                  (cách này được các trang web dùng để tạo CRC32) thì đều tạo ra đúng 1 kết quả như nhau (E75C21A6). Tuy nhiên khi dùng đúng CRC này để truyền thì PC không nhận được mà e dùng một phần mềm khác tạo CRC32(data đã được fix như trên) thì kết quả là 704de32a. Và dùng CRC này truyền sang thì PC nhận được frame đúng như ban đầu.
                  Em không hiểu cách tính CRC32 như thế nào???
                  Đa thức của CRC-32 Ethernet: 0x04C11DB7.
                  Cẩn thận với thứ tự bit, byte.
                  Tham khảo thêm ở đây cho FPGA nè: CRC32 implementation in ETHERNET : exact way

                  Comment


                  • chào các bác.em mới tìm hiểu về đề tài này.
                    em có 1 thắc mắc là.Từ trước tới giờ thì em tạo 1 project thì chỉ có 1 file .c là của project và các file .h
                    nhưng trong project này thì lại có nhiều file .c nữa,nên em thắc mắc là file .c không được #include vào thế thì khi dịch thì code trong file .c sẽ được dịch như thế nào.
                    và em muốn dồn mỗi công đoạn vào 1 file.h thôi có được không?

                    Comment


                    • Nguyên văn bởi nttam79 Xem bài viết
                      Đa thức của CRC-32 Ethernet: 0x04C11DB7.
                      Cẩn thận với thứ tự bit, byte.
                      Tham khảo thêm ở đây cho FPGA nè: CRC32 implementation in ETHERNET : exact way
                      Cám ơn anh Tâm. Em đã truyền được rồi, mặc dù cách tính crc32 hơi "lại" 1 chút (vì e cũng chưa hiểu là nó tính như nào, e chỉ dựa vào cái crc_table rồi tính ra thôi). Em có câu hỏi là: Khi ta truyền lên PC thì hệ điều hành sẽ quản lý việc nhận các gói tin chứ không phải là do card mạng tự động làm, đúng không anh, vì em thấy khi dùng một số phần mềm đổi MAC thì chương trình ko chạy được, vậy có nghĩa là MAC vật lý của card mạng đã được thay dổi phải ko a?

                      Comment


                      • Anh Tâm cho em hỏi, tại sao Khi em truyền dữ liệu từ mạch của em lên máy tính(Giao thức UDP), ứng dụng trên máy tính đã nhận (Điều đó chứng tỏ em đã truyền đúng MAC và IP) nhưng tại sao bảng ARP Cache của PC lại không thấy MAC của mạch, mà chỉ có địa chỉ IP, MAC là 00:00:00:00:00:00 và Type là Invalid??
                        Anh cho em hỏi thêm là,hiện em đang truyền dữ liệu lớp UDP mà Lớp IP không phân đoạn nên cứ 1 frame ethernet nó lại ngắt 1 lần (event) trong lớp UDP. Vậy nếu như e truyền theo giao thức UDP mà segment của nó lớn hơn nhiều kích thứoc 1 frame bằng cách chia nó thành nhiều gói IP để gửi thì lúc nào lớp UDP sẽ thông báo(event) là nhận được dữ liệu lớp UDP??
                        Nhân tiện a có thể giới thiệu thêm cho em phần chia gói tin này được ko? hoặc a có tài liệu nào về phần này thì giới thiệu em với! Thanks!

                        Comment


                        • Nguyên văn bởi joystick Xem bài viết
                          Anh Tâm cho em hỏi, tại sao Khi em truyền dữ liệu từ mạch của em lên máy tính(Giao thức UDP), ứng dụng trên máy tính đã nhận (Điều đó chứng tỏ em đã truyền đúng MAC và IP) nhưng tại sao bảng ARP Cache của PC lại không thấy MAC của mạch, mà chỉ có địa chỉ IP, MAC là 00:00:00:00:00:00 và Type là Invalid??
                          Anh cho em hỏi thêm là,hiện em đang truyền dữ liệu lớp UDP mà Lớp IP không phân đoạn nên cứ 1 frame ethernet nó lại ngắt 1 lần (event) trong lớp UDP. Vậy nếu như e truyền theo giao thức UDP mà segment của nó lớn hơn nhiều kích thứoc 1 frame bằng cách chia nó thành nhiều gói IP để gửi thì lúc nào lớp UDP sẽ thông báo(event) là nhận được dữ liệu lớp UDP??
                          Nhân tiện a có thể giới thiệu thêm cho em phần chia gói tin này được ko? hoặc a có tài liệu nào về phần này thì giới thiệu em với! Thanks!
                          Khả năng là em chưa set địa chỉ MAC cho mạch hoặc set 1 địa chỉ MAC không hợp lệ. Việc PC nhận được có nghĩa là em truyền đúng địa chỉ IP và MAC của PC (destination address) thôi, chưa chắc là trong Ethernet frame em đã set đúng địa chỉ MAC cho mạch (source MAC address).

                          Comment


                          • Cảm ơn thầy rất nhiều nhờ những gợi ý của thầy e đã làm được như như sau:
                            https://www.dropbox.com/sh/xuqwv45dr7gunam/LafoOh-9n-
                            Các tính năng: điều khiển, cập nhật trạng thái , nhiệt độ, hẹn giờ thời gian thực

                            Comment


                            • Đề tài quá hay. Có bạn nào bán kit này không nhì? mình muốn mua một bộ về vọc. Rất vui làm quen với anh chị trong diễn đàn. học hỏi và giao lưu

                              Comment


                              • Nguyên văn bởi tueminh204 Xem bài viết
                                Đề tài quá hay. Có bạn nào bán kit này không nhì? mình muốn mua một bộ về vọc. Rất vui làm quen với anh chị trong diễn đàn. học hỏi và giao lưu
                                M32E (ATMEGA32 - Ethernet board) - www.tme.vn - Linh kien dien tu, Kit Phat trien, Mach nap, GSM, GPS, GPRS, RF,

                                Comment

                                Về tác giả

                                Collapse

                                nttam79 Tìm hiểu thêm về nttam79

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X