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

  • Nguyên văn bởi nacdanh90 Xem bài viết
    Vâng ạ! hi! Thầy giải thích giúp em một lỗi sau mà em chưa hiểu nguyên nhận: đầu tiên gửi bản tin SYN đến server ở trên internet (seqNum=x,window=700,mss=700,SYN set). em đã nhận đc một bản tin(seqNum=y, window=8192,SYN,ACK set,ACK number=x+1)->bản tin xác nhận của server sau khi server đã nhận đc bản tin đầu tiên em gửi. Em lại gửi tiếp bản tin thứ 2 đến server(seqNum=x+1,window=700,ACK set(SYN=0),ACK number=y+1). Em tưởng sau bước này nếu server nhận đc bản tin thứ 2 nó sẽ mở kết nối TCP nhưng sao nó lại gửi trả lại một bản tin (RST set,window=0 ) ả ! Thầy giải thích giúp em lỗi này với ạ! Và Khi nào server sẽ gửi bản tin RESET tcp ả
    Em phát hiện ra lỗi này là do sau khi gửi bản tin thứ 2 thì TCP server sau khi nhận đc sẽ thực hiện kết nối và sau bước này client phải gửi tiếp một bản tin tcp khác (chẳng hạn GET HTTP). Trong giao thức http thầy giải thích rồi nhưng em đọc và khi thực hiện gặp phải một số vấn đề sau mong thầy giải đáp giúp em:

    Thứ nhất: Trường Host: điền IP của server muốn load http vệ theo em biết thì ở đây điền IP của server vào cũng đc. Nhưng chẳng hạn cùng 1 server: 123.210.131.129 lại có nhiều tên miền con là : a .123 .com hoặc b .123 .com thì trong trường hợp này điền IP vào có được hay ko ả và nếu điền tên miền thì webserver có hiểu ko ạ ?

    Thứ 2: User Agent, Trường Accept Text, language có quan trọng ko ạ ? Nếu load web về avr thì user Agent điền là trình duyệt gì ả

    Em cảm ơn thầy trước!

    Comment


    • Nguyên văn bởi nacdanh90 Xem bài viết
      Em phát hiện ra lỗi này là do sau khi gửi bản tin thứ 2 thì TCP server sau khi nhận đc sẽ thực hiện kết nối và sau bước này client phải gửi tiếp một bản tin tcp khác (chẳng hạn GET HTTP). Trong giao thức http thầy giải thích rồi nhưng em đọc và khi thực hiện gặp phải một số vấn đề sau mong thầy giải đáp giúp em:

      Thứ nhất: Trường Host: điền IP của server muốn load http vệ theo em biết thì ở đây điền IP của server vào cũng đc. Nhưng chẳng hạn cùng 1 server: 123.210.131.129 lại có nhiều tên miền con là : a .123 .com hoặc b .123 .com thì trong trường hợp này điền IP vào có được hay ko ả và nếu điền tên miền thì webserver có hiểu ko ạ ?

      Thứ 2: User Agent, Trường Accept Text, language có quan trọng ko ạ ? Nếu load web về avr thì user Agent điền là trình duyệt gì ả

      Em cảm ơn thầy trước!
      Host: Điền domain name hay địa chỉ IP đều được. Mỗi tên miền chỉ tương ứng với 1 địa chỉ IP thôi.
      User Agent: cung cấp thông tin cho Web sever biết client đang duyệt web bằng browser gì,... để từ đó Web server sẽ điều chỉnh nội dung trang web trả lại cho phù hợp, ví dụ duyệt bằng smartphone thì trang web sẽ được lượt bỏ bớt và layout lại cho phù hợp (tính năng này phụ thuộc vào web server)
      Accept-Charset, Accept-Text, ... cho biết tập ký tự, bảng mã,... mà client có thể nhận. Ví dụ bạn dùng vi điều khiển làm client và không muốn nhận ký tự mã unicode thì có thể để: Accept-Charset: iso-8859-5, đừng cho UTF-8 hay unicode vào.
      Tương tự vậy Accept-Language cho biết client muốn nhận nội dung trang web bằng ngôn ngữ nào.
      Load về AVR thì User Agent điền gì tùy bạn thôi.
      Tham khảo thêm: HTTP/1.1: Request

      Comment


      • Vâng thưa thầy! Em đã điền thử điền trường Host là tên miền thì đươc. còn IP thì nó không tìm thấy a.vì theo như trên em nói chắc có lẽ tại cùng 1 IP đó có nhiều tên miền con nên chỗ Host đó phải điền là tên miền con .hì còn User Agent em điền bất kì được a.
        Thầy cho em hỏi thêm một chút về phần TCP. Đoạn số 700 của thầy mỗi lần truyền dữ liệu TCP thì tối đa là 700 byte phải không ạ ? còn window là giới hạn mà khi bên nhận nhận được x gói tin có tổng bằng window thì phải gửi trả lại bên gửi một bản tin xác nhận đã nhận đủ để bên gửi gửi tiếp các gói tiếp theo phải ko ạ ? Nhưng nếu số gói x =window /MSS mà là một số ko chẵn thì nó sẽ xử lý thế nào ạ ?
        Last edited by nacdanh90; 19-04-2012, 23:09.

        Comment


        • Thầy Tâm giải thích giúp em đoạn này với ạ ? Trong một phiên kết nối TCP. một trong 2 bên có thể gửi yêu cầu đóng kết nối ngay sau khi thiết nối 2 bên được thiết lập (chưa truyền dữ liệu) ko ạ ?
          Nếu một bên muốn đóng kết nối thì nó chỉ gửi bản tin với cờ FIN đc set hay là cả cờ FIN và cờ ACK ạ ? và bên kia khi nhận được yêu cầu đóng kết nối sẽ gửi lại bản tin với các cờ như thế nào ạ ?

          Comment


          • Nguyên văn bởi nacdanh90 Xem bài viết
            Vâng thưa thầy! Em đã điền thử điền trường Host là tên miền thì đươc. còn IP thì nó không tìm thấy a.vì theo như trên em nói chắc có lẽ tại cùng 1 IP đó có nhiều tên miền con nên chỗ Host đó phải điền là tên miền con .hì còn User Agent em điền bất kì được a.
            Thầy cho em hỏi thêm một chút về phần TCP. Đoạn số 700 của thầy mỗi lần truyền dữ liệu TCP thì tối đa là 700 byte phải không ạ ? còn window là giới hạn mà khi bên nhận nhận được x gói tin có tổng bằng window thì phải gửi trả lại bên gửi một bản tin xác nhận đã nhận đủ để bên gửi gửi tiếp các gói tiếp theo phải ko ạ ? Nhưng nếu số gói x =window /MSS mà là một số ko chẵn thì nó sẽ xử lý thế nào ạ ?
            Chỗ 700 đã nói là MSS. Còn window có ý nghĩa cho phía phát biết kích thức buffer dữ liệu mà phía thu có thể nhận đồng thời (chứa trong buffer trước khi truyền lên lớp ứng dụng). Như vậy phía phát sẽ không phát số byte (tính từ last ack) vượt quá window size, mà nó phải dừng lại để đợi ack mới. Với cơ chế đó thì window size/MSS chẵn hay không cũng vậy thôi mà.
            Cờ FIN không phải là cờ yêu cầu đóng kết nối ngay lập tức, nó chỉ báo rằng phía gửi cờ FIN đã hoàn tất việc gửi dữ liệu và sẵn sàng để đóng kết nối, kết nối chỉ thực sự được đóng nếu phía bên kia cũng sẵn sàng đóng kết nối và gửi đi cờ FIN.
            Nếu 1 trong 2 phía muốn đóng ngay lập tức kết nối khi chưa gửi dữ liệu (ví dụ server không đủ tài nguyên để mở thêm kết nối với client,...) thì nó sẽ gửi cờ RST (như trường hợp bạn gặp hôm trước). Cờ này đóng lập tức kết nối.

            Comment


            • Vâng ạ! EM cảm ơn thầy! Hi! thầy thức muộn vậy ạ ? Vậy thì khi client load xong dữ liệu em sẽ đóng kết nối bằng cách gửi gói tin với cờ RESET đc set cho nhanh đỡ phải thực hiện các bước sau!hi

              Comment


              • thầy ạ ! giờ em để ý kĩ đoạn thầy bảo em "đóng ngay lập tức kết nối khi chưa gửi dữ liệu"? vậy khi đã gửi xong rồi và gửi Reset thì có đóng được kết nối TCP ngay không thưa thầy ?

                Comment


                • Nguyên văn bởi nacdanh90 Xem bài viết
                  thầy ạ ! giờ em để ý kĩ đoạn thầy bảo em "đóng ngay lập tức kết nối khi chưa gửi dữ liệu"? vậy khi đã gửi xong rồi và gửi Reset thì có đóng được kết nối TCP ngay không thưa thầy ?
                  Không được, một kết nối TCP thành công phải kết thúc bằng cờ FIN, đóng theo cách thông thường. Gửi RST chỉ trong trường hợp kết nối bị lỗi (không được chấp nhận, phía nhận không xử lý được dữ liệu,...) vì kết nối đóng bằng RST có thể khiến cho phía bên kia hủy bỏ dữ liệu đã nhận được mà không chuyển lên lớp ứng dụng.

                  Comment


                  • Vâng ạ! vậy em sẽ làm theo đúng luật. hi.

                    Comment


                    • Thầy giải thích giúp em 2 trường trong http get với ạ!
                      + Keep-Alive: 300
                      + Connection: keep-alive có ý nghĩa là gì ko ạ?
                      Em hiểu nó là thời gian để giữ kết nối TCP liệu có phải vậy ko ạ? và số 300 kia chắc là thời gian nhưng em chưa biết đơn vị của nó là gì? Thầy giải thích thêm giúp em với ạ!

                      Comment


                      • Nguyên văn bởi nacdanh90 Xem bài viết
                        Thầy giải thích giúp em 2 trường trong http get với ạ!
                        + Keep-Alive: 300
                        + Connection: keep-alive có ý nghĩa là gì ko ạ?
                        Em hiểu nó là thời gian để giữ kết nối TCP liệu có phải vậy ko ạ? và số 300 kia chắc là thời gian nhưng em chưa biết đơn vị của nó là gì? Thầy giải thích thêm giúp em với ạ!
                        Connection: keep-alive : cho phép dùng 1 kết nối TCP cho nhiều cặp http request/response (thông thường 1 phiên TCP dùng cho 1 request/response, sau đó đóng và mở 1 phiên TCP mới cho request/response mới).
                        Keep-alive: 300: max timeout, đơn vị s.

                        Comment


                        • Vâng ạ! em cảm ơn thầy! Vậy nếu ko muốn dùng 1 kết nối TCP cho nhiều request/response thì ta bỏ 2 trường này đi đc ạ! E thấy máy tính hình như vẫn dùng 1 phiên tcp cho nhiều cặp request và response.

                          Comment


                          • Thầy cho em xin ý kiến của thầy về vấn đề sau ạ! Em thấy thông thường máy tính muốn load web về thì tạo kết nối TCP đến webserver và sau khi đã kết nối thành công nó sẽ gửi bản tin GET http đến webserver và giữ nguyên trạng thái kết nối đó. Một khoảng thời gian sau muốn load lại web(người dùng nhấn F5) thì client ko phải tạo kết nối TCP mới mà chỉ gửi tiếp bản tin Get http. Em đang thắc mắc là giữa 2 cách làm: 1 là 1 kết nối chỉ dùng cho 1 cặp request/response và 2 là một kết nối dùng cho nhiều cặp request/response thì cách nào sẽ làm cho máy server đỡ tốn tài nguyên?
                            Và một vấn đề nữa là: khi client đã load xong hết dữ liệu rồi nó gửi thẳng một bản tin RESET thì lúc này server nó sẽ ngắt kết nối ngay lập tức với client hay là nó vẫn giữ kết nối đó trong một khoảng thời gian time out?

                            Comment


                            • Click image for larger version

Name:	Noname.jpg
Views:	1
Size:	96.0 KB
ID:	1360445
                              mọi người xem hình chỉ dùm em cách khắc phục lỗi này với. em biên dịch ra chỉ dc vậy thôi, đang làm mạch mà không biết sao nữa nhờ mọi người giúp đỡ

                              Điện tử viễn thông - Hutech

                              Comment


                              • Hay quá nhĩ tiếp tục phát huy

                                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