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

  • nacdanh90
    replied
    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.

    Leave a comment:


  • nttam79
    replied
    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.

    Leave a comment:


  • nacdanh90
    replied
    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 ạ!

    Leave a comment:


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

    Leave a comment:


  • nttam79
    replied
    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.

    Leave a comment:


  • nacdanh90
    replied
    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 ?

    Leave a comment:


  • nacdanh90
    replied
    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

    Leave a comment:


  • nttam79
    replied
    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.

    Leave a comment:


  • nacdanh90
    replied
    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 ạ ?

    Leave a comment:


  • nacdanh90
    replied
    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.

    Leave a comment:


  • nttam79
    replied
    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

    Leave a comment:


  • nacdanh90
    replied
    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!

    Leave a comment:


  • chikichita
    replied
    thầy tâm ơi giúp em với nếu mình dùng máy tính từ xa điều khiển về thì chương trình như thế nào ạ. Em đang làm đồ án " thiết kế và thi công mạch điều khiển thiết bị qua internet" vậy nên từ nãy tới giờ em thấy mình toàn phải đi ngược vấn đề ko à, vì ở đây toàn thấy máy tính nhận dữ liệu

    Leave a comment:


  • nacdanh90
    replied
    Nguyên văn bởi nttam79 Xem bài viết
    Trường Option trong TCP Header không qui định chiều dài bắt buộc, miễn là phải chẵn 32 bit (nếu không phải chèn thêm Padding vào). Trường data offset sẽ cho ta biết chính xác chiều dài của Header, từ đó ta biết được option dài bao nhiêu. Vì vậy trường Option có thể là 8, 12 byte,... Nội dung chứa trong trường option thì tùy thuộc vào dịch vụ. Tương tự vậy Header TCP của gói syn có thể dài 32 byte (12 byte option).
    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 ả
    Last edited by nacdanh90; 18-04-2012, 19:38.

    Leave a comment:


  • nttam79
    replied
    Nguyên văn bởi BMD2008 Xem bài viết
    Anh Tâm ơi cho em hỏi. Phần này anh dùng địa chỉ IP để điều khiển là IP động hay IP tĩnh vậy
    IP động hay tĩnh đều được. Trong file AVRnet.h có phần cấu hình địa chỉ IP, nếu muốn set IP tĩnh, bạn khai báo IP, subnet mask, gateway,... ở đây. Nếu địa chỉ IP set ở đây là 0.0.0.0 thì board sẽ nhận IP động từ DHCP server khi vừa boot lên (chưa hỗ trợ nhận IP động khi cắm cable mạng vào).

    Leave a comment:

Về tác giả

Collapse

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

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

Collapse

  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
  • nguyendinhvan
    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
    bởi nguyendinhvan
    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
    05-12-2025, 19:59
  • afrendly
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi afrendly
    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
    04-12-2025, 01:27
Đang tải...
X