- bây giờ trả lời cho câu hỏi giao thức là gì: 
giao thức là bộ quy tắc được xác định trước giữa những người tham gia giao tiếp, các quy tắc này thường được tổ chức theo lớp
- ví dụ: mạng có dây
+có 4 cặp cáp bên trong mạng lan. thì 1 giao thức xác định mỗi dây sẽ làm gì, tín hiệu sử dụng điện áp nào, sự thay đổi điện áp trong dây có nghĩa là gì... cả hai bên đều phải tuân thủ những quy tắc này. đó là lớp vật lí xác định cách điện chạy qua dây cáp
+ trên hết có quy tắc xác định cách truyền bắt đầu, dữ liệu nào được chứa trong đó và ý nghĩa của nó và cách truyền kết thúc, đó là lớp liên kết dữ liệu
+có 1 lớp khác và 1 giao thức khác ở trên này, làm thế nào các thiết bị khác nhau tự nhận dạng và phân biệt với nhau, họ cần có tên duy nhất để xác định điểm tới điểm, đó là lớp mạng
-đây chỉ là 3 lớp trong số 7 lớp thiết lớp quy tắc giữa ứng dụng. đó là cách 1 phần mềm giao tiếp với 1 phần mềm khác mà không cần quan tâm các lớp bên dưới
- các bạn cứ tượng như bộ quy tắc ứng xử biển đông cho dễ hiểu
-các nguyên tắc chung của ứng dụng mạng

phát triển 1 ứng dụng mạng có nghĩa là lập trình 1 chương trình ứng dụng có thể chạy được trên nhiều máy tính khác nhau và có khả năng truyền thông với nhau qua mạng
- trước khi viết mã phần mềm, lập trình viên cần có bản thiết kế kiến trúc ứng dụng. kiến trúc ứng dụng khác với kiến trúc mạng
- kiến trúc ứng dụng được người phát triển ứng dụng thiết kế nhằm mô tả ứng dụng có cấu trúc như thế nào trên nhiều hệ cuối khác nhau. trong việc chọn kiến trúc ứng dụng người lập trình viên thường chọn 1 trong hai kiến trúc chính là kiến trúc khách chủ [client-server] hoặc kiến trúc ngang hàng peer to peer
- trong 1 kiến trúc khách chủ, có 1 máy tính luôn hoạt động được gọi là máy chủ server, cung cấp các dịch vụ cho các máy tính khác, được gọi là máy khách client. máy khách có thể hoạt động không thường xuyên, chú ý rằng kiến trúc client server truyền thông với nhau mà không cần thông qua trực tiếp với nhau mà phải dựa vào máy chủ, máy chủ có 1 địa chỉ IP được biết trước cố định. máy khách có thể gửi gói tin đến địa chỉ của máy chủ
-thông thường trong kiến trúc khách- chủ, 1 máy chủ không đáp ứng đồng thời các yêu cầu từ nhiều máy khách, ví dụ 1 mạng xã hội có thể trở nên quá tải nếu hệ thống chỉ có 1 máy chủ xử lý tất cả các yêu cầu. vì vậy 1 cụm máy chủ thường được biết đến là trung tâm dữ liệu dùng để tạo ra 1 máy chủ ảo mạnh trong kiến trúc khách chủ. các ứng dụng dựa trên kiến trúc khách chủ đòi hỏi 1 cơ sở hạ tầng mạnh, đòi hỏi các nhà cung cấp dịch vụ phải trang bị, cài đặt, bảo trì các trung tâm dữ liệu, thêm vào đó các nhà cung cấp phải trả chi phí băng thông dựa vào việc gửi và nhận dữ liệu từ mạng internet
-kiến trúc ngang hàng peer to peer không cần kiến trúc máy chủ. thay vào đó ứng dụng khai thác truyền thông giữa các cặp máy tính kết nối với nhau được gọi là máy ngang hàng, các máy ngang hàng không bỉ sở hữu bởi nhà cung cấp dịch vụ. các máy ngang hàng truyền thông trực tiếp với nhau mà không thông qua máy chủ
- 1 trong các đặc trưng của kiến trúc peer to peer là khả năng tự mở rộng. ví dụ trong ứng dụng chia sẻ tập tin dùng kiến trúc peer to peer, mặc dù mỗi máy ngang hàng phát sinh tải công việc do yêu cầu tập tin từ máy ngang hàng khác. nó cũng tham gia vào công việc chia sẻ tập tin với các máy ngang hàng khác, và khi 1 máy ngang hàng chia sẻ tập tin thì mạng ngang hàng được mở rộng, các kiến trúc peer to peer cũng tiết kiệm chi phí, do không yêu cầu tài nguyên máy chủ và băng thông máy chủ, để giảm chi phí các nhà cung cấp dịch vụ đang tập trung vào các kiến trúc peer to peer cho các ứng dụng của họ, tuy nhiên ứng dụng peer to peer gặp phải 3 thách thức chính
1) tương thích với nhà cung cấp dịch vụ internet:
- đa số nhà cung cấp dịch vụ internet địa phương(gồm cả nhà cung cấp dịch vụ sử dụng DSL và cáp) đều cung cấp dịch vụ băng thông "bất đối xứng"(nghĩa là băng thông tải xuống cao hơn băng thông tải lên" nhưng các dịch vụ peer to peer lại khai thác băng thông tải lên điều này tạo nên 1 áp lực đáng kể về băng thông dồn lên các nhà cung cấp dịch vụ internet. do đó các ứng dụng peer to peer tương lai cần được thiết kế sao cho dễ dàng tương thích với các ISP(internet service provider)
-bảo mật :do bản chất mở và phân tán, các ứng dụng peer to peer có thể đặt ra nhiều mục tiêu cần bảo mật
-khuyến nghị sử dụng: sự thành công của các ứng dụng peer to peer tương lai cũng phụ thuộc vào việc quyết định người dùng tự nguyện chia sẻ băng thông khả năng lưu trữ và tính toán do đó thiết lập 1 hệ thông khuyến khích sử dụng cũng là 1 thách thức lớn cho kiến trúc peer to peer
truyền thông giữa các tiến trình

trước khi xây dựng 1 kiến trúc mạng cần  thiết lập cách lập trình, thực thi ứng dụng và truyền thông giữa các ứng dụng như thế nào. theo thuật ngữ hệ điều hành không phải chương trình mà là tiến trình truyền thông với nhau.
-1 tiến trình(process) là 1 chương trình đang chạy trên máy tính. các tiến trình đang chạy trên 1 máy tính có thể truyền thông với nhau, sử dụng các quy tắc do hệ điều hành trên máy tính quy định
tiến trình khách và tiến trình chủ
1 ứng dụng mạng bao gồm các cặp tiến trình gửi thông điệp với nhau thông qua mạng. với mỗi cặp tiến trình truyền thông, 1 tiến trình được đánh dấu là tiến trình khách và 1 tiến trình được đánh dấu là tiến trình chủ, với ứng dụng chia sẻ tin peer to peer. với ứng dụng web tiến trình đang chạy là tiến trình khách và tiến trình đang cung cấp thông tin là tiến trình chủ
trong 1 vài ứng dụng như ứng dụng chia sẻ tập tin nói trên 1 tiến trình có thể vừa là tiến trình khách vừa là tiến trình chủ, tiến trình có thể thực hiện cả việc gửi đi và truyền tải tập tin. tuy nhiên khi mô tả việc truyền thông giữa hai tiến trình, phần còn lại ta luôn phân biệt tiến trình khách và tiến trình chủ
-tiến trình khách và tiến trình chủ luôn được định nghĩa như sau: trong 1 phiên truyền thông giữa 1 cặp tiến trình, tiến trình khởi động truyền thông(liên lạc với tiến trình khác lúc đầu phiên) được gọi là tiến trình khách. tiến trình được chờ liên lạc để bắt đầu phiên truyền thông là tiến trình chủ
giao diện giữa tiến trình và mạng máy tính
như đã đề cập ở trên đa số các ứng dụng mạng đều bao gồm các tiến trình truyền thông, trong đó 2 tiến trình trong 1 cặp có thể gửi qua lại các thông điệp cho nhau. bất kì tiến trình nào được gửi từ tiến trình này đến tiến trình khác đều phải đi qua hạ tầng mạng. 1 tiến trình gửi các thông điệp đi và nhận các thông điệp về từ mạng thông qua 1 giao diện phần mềm gọi là socket
các dịch vụ tầng vận chuyển cung cấp cho tầng ứng dụng
nhắc lại socket là giao diện giữa tiến trình ứng dụng và giao thức tầng vận chuyển(cũng giống như màn hình là giao diện giữa máy tính và con người). ứng dụng thuộc bên gửi sẽ gửi các thông điệp thông qua socket. ở phía nhận giao thức tầng vận chuyển có nhiệm vụ nhận thông điệp và đưa thông điệp đến cách cửa socket thuộc bên nhận
các dịch vụ tầng vận chuyển có thể chia thành 4 tiêu chuẩn xét chọn: truyền dữ liệu tin cậy, thông lượng, mức độ kịp thời và bảo mật
truyền dữ liệu tin cậy
các gói tin có thể bị mất khi chuyển trên mạng. vị dụ 1 gói tin có thể làm tràn bộ đệm của bộ định tuyến, hay có thể bị bên nhận hay bộ định tuyến bỏ đi sau khi phát hiện gói tin nhận được có lỗi, đối với nhiều ứng dụng như thư điện tử, truyền tập tin, truy cập từ xa, truyền dữ liệu qua web và các ứng dụng tài chính thì việc mất dữ liệu có thể gây ra nhiều hậu quả nghiêm trọng(với ví dụ ứng dụng tài chính thì hậu quả nghiêm trọng cho bên ngân hàng và khách hàng). do đó để hỗ trợ các ứng dụng này thì 1 số công đoạn phải được thực hiện để thêm vào nhằm đảm bảo dữ liệu ứng dụng bên này sẽ được truyền chính xác và đầy đủ đến đầu ứng dụng bên kia. nếu 1 giao thức đảm bảo được việc truyền dữ liệu như vậy thì được cho là giao thức truyền dữ liệu tin cậy
- khi giao thức tầng vận chuyển không cung cấp dịch vụ truyền dữ liệu tin cậy, dữ liệu được gửi đi không bao giờ đến tiến trình nhận, vấn đề này được chấp nhận với các ứng dụng chịu lỗi, đa số các ứng dụng đa phương tiện như ứng dụng âm thanh/ phim có tính thời gian thực có thể bỏ qua mất chút ít dữ liệu, việc mất dữ liệu có thể gây ra phiền phức trong 1 chút, song đó không phải là sự sụt giảm chất lượng nghiêm trọng
thông lượng
trong bối cảnh phiên truyền thông giữa hai tiến trình trên 1 đường mạng, là lượng dữ liệu (bits) mà tiến trình gửi truyền đến tiến trình nhận trong 1 đơn vị thời gian. do còn có các phiên truyền thông khác cũng dùng chung 1 đường mạng  và có thể các phiên truyền thông đó đang truyền dữ liệu hoặc tạm dừng việc truyền, nên thông lượng của 1 phương truyền thường biến động theo thời gian, nhận định này dẫn đến 1 dịch vụ tầng vận chuyển có thể cung cấp 1 mức thông lượng tối thiểu nào đó
-trong thực tế các ứng dụng nhạy băng thông có các nhu cầu thông lượng thực tế, thì các ứng dụng thích nghi có thể thích nghi với các ứng dụng còn lại
mức độ kịp thời
giao thức tầng vận chuyển có thể cung cấp dịch vụ bảo đảm mức độ kịp thời. cũng như đảm bảo thông lượng, đảm bảo mức độ kịp thời cũng có nhiều dạng
bảo mật
cuối cùng giao thức tầng vận chuyển có thể cung cấp 1 ứng dụng 1 hay nhiều dịch vụ bảo mật. ví dụ bên gửi tầng vận chuyển mã hóa tất cả dữ liệu trước khi gửi đi, và phía nhận giao thức vận chuyển giải mã dữ liệu trước khi gửi đến tiến trình nhận, dịch vụ này cung cấp sự tin cậy giữa hai tiến trình, giúp dữ liệu giữa hai tiến trình không bị nghe hay xem lén. giao thức tầng vận chuyển cũng có thể cung cấp các dịch vụ bảo mật khác nhằm đảm bảo tính tin cậy, bao gồm tính đảm bảo tính toàn vẹn dữ liệu và xác thực
các dịch vụ tầng vận chuyển do internet cung cấp
trong các phần trên, các dịch vụ tầng vận chuyển được mô tả 1 cách tổng quát. trong phần này chúng ta sẽ được xem xét 1 cách chi tiết. internet(tổng quát hơn là mạng TCP/IP) có sẵn 2 giao thức vận chuyển cho ứng dụng mạng là UDP và TCP
dịch vụ TCP
mô hình dịch vụ TCP bao gồm 1 dịch vụ hướng kết nối và 1 dịch vụ truyền dữ liệu đáng tin cậy. khi 1 ứng dụng dùng giao thức TCP như 1 giao thức vận chuyển, ứng dụng đó sẽ dùng cả hai dịch vụ này của giao thức TCP
dịch vụ hướng kết nối(connection-oriented service)
TCP yêu cầu cả phía khách và phía chủ trao đổi thông tin điều khiển cho nhau trước khi các thông điệp tầng ứng dụng bắt đầu được trao đổi. quá trình này gọi là thủ tục bắt tay, đánh động hai phía khách chủ và cho phép chúng chuẩn bị gửi nhận các gói tin sau đó. sau giai đoạn bắt tay, kết nối TCP được hình thành giữa hai socket của hai tiến trình. kết nối này có đặc tính là kết nối hai chiều, nghĩa là hai tiến trình đồng thời có thể gửi thông điệp cho nhau trên cùng kết nối.
dịch vụ truyền dữ liệu tin cậy 
các tiến trình có thể dựa vào TCP để truyền các gói dữ liệu chính xác và theo đúng thứ tự. nghĩa là khi tiến trình bên gửi truyền 1 chuỗi byte vào socket. TCP sẽ truyền chuỗi byte đó đến socket bên nhận, đảm bảo dữ liệu không bị sai khác
ngoài ra TCP cũng có kỹ thuật kiểm soát tắc nghẽn chung trên toàn mạng internet chứ không phải chỉ vì lợi ích trực tiếp của cặp tiến trình truyền thông
dịch vụ UDP
UDP là giao thức vận chuyển đơn giản, gọn nhẹ, chỉ cung cấp các dịch vụ tối cần thiết. do UDP là giao thức phi kết nối, nó không được thực hiện giao thức bắt tay trước khi hai tiến trình bắt đầu truyền thông. UDP không cung cấp dịch vụ truyền dữ liệu đáng tin cậy, nghĩa là khi 1 tiến trình gửi thông điệp thông qua socket bên gửi. UDP không đảm bảo thông điệp sẽ đến tiến trình nhận. ngoài ra các thông điệp khi đến tiến trình nhận có thể không theo thứ tự như lúc gửi
UDP không sử dụng cơ chế kiểm soát tắc nghẽn, do đó bên gửi có thể đẩy dữ liệu xuống tầng dưới (tầng mạng) với 1 tốc độ tùy ý.(tuy nhiên thông lượng thật giữa hai bên có thể nhỏ hơn tốc độ này, do đó đường truyền có sự giới hạn về băng thông hoặc do sự tắc nghẽn mạng). trên một phương diên khác, do nhiều tường lữa thường được cấu hình để ngăn chặn các gói tin UDP, nên ngày càng nhiều nhà thiết kế chọn triển khai các ứng dụng loại này trên TCP
bảo mật TCP 
TCP và UDP không cung cấp dịch vụ mã hóa dữ liệu. do đó nếu tiến trình gửi truyền 1 mật khẩu ở dạng bản rõ(tức là không được mã hóa) vào socket của nó, mật khẩu bản rõ sẽ đi qua tất cả liên kết giữa tiến trình gửi và tiến trình nhận. Vì tính riêng tư(privacy) và các vấn đề bảo mật khác rất cần thiết cho các ứng dụng mạng, nên các nhà thiết kế giao thức phát triển 1 phần mở rộng cho TCP được gọi là secure socket layer(SSL). TCP mở rộng với SSL không chỉ có đủ các chức năng của 1 TCP truyền thông mà còn cung cấp thêm các dịch vụ bảo mật quan trọng cho giao tiếp giữa tiến trình tiến trình bao gồm mã hóa, toàn vẹn dữ liệu và chứng thực đầu cuối. SSL có bộ thư viện socket của riêng nó, tương tự như bộ socket của TCP, tiến trình gửi chuyển dữ liệu gốc đến SSL socket, SSL bên máy gửi mã hóa dữ liệu  và truyền dữ liệu đã mã hóa đến socket của TCP, tiếp đó dữ liệu đã mã hóa di chuyển từ socket của TCP bên tiến trình gửi lên internet và từ internet đến socket TCP bên tiến trình nhận. Socket nhận dữ liệu đã mã hóa đến SSL để giải mã, cuối cùng SSL chuyển dữ liệu bản rõ sau khi đã giải mã đến tiến trình nhận
các dịch vụ tầng vận chuyển không cung cấp
phần trên đã xét đến 4 dịch vụ mà giao thức tầng vận chuyển có thể cung cấp:
-truyền dữ liệu tin cậy
-thông lượng
-mức độ kịp thời
- bảo mật
rõ ràng TCP có cung cấp dịch vụ truyền dữ liệu tin cậy. ngoài ra TCP có thể kết hợp với SSL nhằm cung cấp 1 dịch vụ bảo mật. trong đó mô tả ngắn gọn về TCP và UDP,  các dịch vụ về bảo đảm thông lượng tối thiểu và mức độ kịp thời đã không được đề cập đến, thật ra các dịch vụ này không có trong các giao thức tầng vận chuyển trên internet. như vậy các ứng dụng cần bảo đảm dịch vụ kịp thời như điện thoại internet sẽ không triển khai được trên internet? thực tế không phải vậy bằng chứng là internet đã có các ứng dụng loại này trong nhiều năm qua. các ứng dụng này hoạt động khá tốt do chúng được thiết kế để thích nghi với tình trạng thiếu sự bảo đảm này . tóm lại internet có thể cung cấp dịch vụ thích hợp cho các ứng dụng trên điện thoại internet nhưng nó không có 1 sự bảo đảm nào về thông lượng tối thiểu hay mức độ kịp thời
định danh tiến trình
phần trên đã trình bày về dịch vụ vận chuyển giữa hai tiến trình truyền thông . nhưng 1 tiến trình làm sao có thể nhận biết với 1 tiến trình khác mà nó muốn truyền thông, chỉ bằng việc dùng các dịch vụ này, để xác định tiến trình nhận, để xác định tiến trình nhận hai thông tin cần được làm rõ tên hoặc địa chỉ của máy nhận và định danh tiến trình nhận trên máy đó
trong internet, hệ cuối được xác định nhờ địa chỉ IP, khái niệm địa chỉ IP được đề cập, ngoài địa chỉ của hệ cuối bên nhận , hệ cuối bên gửi phải xác định tiến trình nào đang chạy trên hệ cuối bên nhận thông điệp, thông tin này cần thiết vì 1 hệ cuối có nhiều ứng dụng mạng đang chạy đồng thời, khái niệm số hiệu cổng đưa ra mục đích xác định tiến trình, mỗi ứng dụng phổ biến đều được gán 1 vài số hiệu cổng mặc định, ví dụ ứng dụng web trên máy chủ được chỉ định số hiệu cổng là 80, thư điện tử ở máy chủ(dùng giao thức SMTP) được chỉ định ở cổng 25
các giao thức ở tầng ứng dụng
1 giao thức ứng dụng định nghĩa cách thức mà tiến ứng dụng vận hành trên các hệ cuối khác nhau, trao đổi thông điệp cho nhau, cụ thể là giao thức tầng ứng dụng định nghĩa
- các kiểu thông điệp được trao đổi, chẳng hạn như thông điệp yêu cầu  và thông điệp phản hồi
- cú phấp của các thông điệp khác nhau, chẳng hạn như các trường trong thông điệp mô tả của môi trường
- ngữ nghĩa các trường nghĩa là ý nghĩa của các thông tin trong trường
- quy tắc nhằm xác định thời điểm và các thức 1 tiến trình gửi thông điệp và phản hồi khi nhận được 1 thông điệp
một số giao thức ứng dụng dùng để mô tả chi tiết trong các RFC. chẳng hạn giao thức HTTP được công bố trong RFC 2616. có nhiều giao thức tầng ứng dụng là giao thức tư hữu và không có ý định trở thành công hữu, như các ứng dụng chia sẻ tập tin theo kiến trúc P2P hiện hành, sử dụng các giao thức tư hữu
cần phân biệt sự khác nhau giữa ứng dụng mạng và giao thức tầng ứng dụng. 1 giao thức tầng ứng dụng chỉ là 1 mảnh ghép của 1 ứng dụng mạng
web và giao thức HTTP
trước những năm đầu năm 1990 giới nghiên cứu, giáo dục, và sinh viên chủ yếu sử dụng dịch vụ internet để truy cập vào các thiết bị từ xa truyền tập tin, nhận và gửi tin tức hoặc thư điện tử. mặc dù các ứng dụng này khá đắc dụng nhưng internet vẫn được ít người biết đến. từ năm 1991 một ứng dụng mới xuất hiện, gọi là world wide web. web là ứng dụng internet đầu tiên thu hút được sự quan tâm của công chúng. nó đã thay đổi nhận thức sâu sắc và vẫn đang tiếp tục thay đổi, cách thức nó thay đổi bên trong và bên ngoài moi trường làm việc của họ. nó đã nâng internet trở thành mạng máy tính quan trọng nhất trong tất cả các mạng máy tính đang tồn tại
có lẽ điểm hấp dẫn nhất của web là đáp ứng theo yêu cầu. người dùng nhận được cái họ cần, vào thời điểm họ muốn, điểm này không giống như vô tuyến truyền thanh hay vô tuyến truyền hình, vốn bắt người ta muốn nghe hoặc xem thì phải mở vào lúc chương trình đang phát. mọi người đều có thể xuất bản thông tin lên web với chi phí rất thấp
tổng quan về HTTP
hypertext tranfer protocol, giao thức tầng ứng dụng của web, là thành phần trung tâm của web, được mô tả trong RFC1945 và RFC 2616, HTTP được triển khai ở hai chương trình: chương trình khách và chương trình chủ, HTTP định nghĩa cấu trúc của các thông điệp và cách thức máy khách và máy chủ trao đổi thông điệp với nhau. trước khi giải thích chi tiết về HTTP, chúng ta cần xem qua các thuật ngữ khác.
trang web bao gồm nhiều đối tượng, đơn giản 1 đối tượng được chứa trong 1 tập tin, như tập tin định dạng html, tập tin hình ảnh JPEG, tập tin này có chứa Applet, hay tập tin chứa 1 đoạn phim, tập tin này có thể được định vị bằng 1 URL(universal resource locator). đa số các trang web bao gồm 1 tập tin HTML cơ sở và tham chiếu đến đối tượng. nếu 1 văn bản chứa 1 định dạng HTML cơ sở tham chiếu đến các đối tượng khác bằng địa chỉ URL đến các đối tượng 
mỗi địa chỉ URL có 2 thành phần:
-tên của máy tính chứa đối tượng
- đường dẫn của đối tượng
giao thức HTTP sử dụng TCP như 1 giao thức truyền thông nền, trước tiên, chương trình khác khởi tạo 1 kết nối TCP đến chương trình chủ WEB, khi kết nối TCP được thiết lập tiến trình của chương trình chủ khách và tiến trình của tiến trình chủ web gửi nhận dữ liệu nhờ kết nối TCP thông qua socket tương ứng ở mỗi tiến trình, nhắc lại đặc tính TCP là cung cấp 1 dịch vụ truyền dữ liệu đáng tin cậy cho HTTP. rõ ràng ưu điểm của kiến trúc  phân tầng được thể hiện ở đây là HTTP không cần quan tâm đến việc mất dữ liệu hay cách TCP phục hồi dữ liệu đã mất hay sắp xếp lại thứ tự các gói tin, đó là việc của TCP và các giao thức ở tầng thấp hơn trong chồng giao thức
Tiến trình chủ gửi các tập tin được yêu cầu đến các tiến trình khách, mà không cần lưu lại bất kì thông tin trạng thái nào của tiến trình khách. nếu như 1 tiến trình khách nào đó nhận cùng 1 đối tượng lần thứ 2  trong vòng vài giâu, thù tiến trình chủ vẫn gửi lại các đối tượng đó, bởi vì nó trước đây không biết trước đây nó đã từng làm những gì, vì tiến trình chủ không quan tâm bất cức thông tin nào về tiến trình khách, giao thức HTTP gọi là giao thức phi trạng thái
kết nối thường trực và kết nối phi thường trực
trong các ứng dụng internet, tiến trình khách và tiến trình chủ truyền thông với nhau theo từng chập, trong đó tiến trính khách phát ra 1 chuỗi các yêu cầu và tiến trình chủ đáp ứng lại các yêu cầu này, chuỗi yêu cầu tiến trình khách có thể được thực hiện liên tiếp nhau, định kỳ hoặc không liên tục. khi tương tác khách chủ diễn ra trên giao thức TCP. người phát triển ứng dụng cần đưa ra 1 số quyết định quan trọng, mỗi cặp yêu cầu phản hồi sẽ yêu cầu 1 kết nối TCP riêng, hay tất cả yêu cầu và phản hồi sẽ sử dụng chung 1 kết nối TCP. theo cách đầu, ứng dụng được cho là dùng kết nối thông thường trực còn cách sau được cho là sử dụng kết nối thường trực. để hiểu sâu về điểm thiết kế này, phần sau sẽ khảo sát về những thuận lợi và bất lợi của cách kết nối trong giao thức HTTP, mặc dù HTTP sử dụng cách kết nối thường trực như cách mặc định, nhưng các chương trình khách và chủ có thể lựa chọn cách kết nối không thường trực để thay thế
HTTP với  các kết nối không thường trực
phần này xem xét việc truyền 1 trang web từ máy chủ đến máy khách, sử dụng kết nối không thường trực. giả sử có 1 trang web cần được truyền từ máy chủ đến máy khách, và trang web này chứa 1 tập tin HTML và 10 ảnh JPEC, cả 11 đối tượng này cùng được lưu trên cùng 1 server
sau đây là quá trình hiện thực từng bước
1. tiến trình khách khởi tạo 1 kết nối TCP đến máy chủ đang chờ tại cổng 80, liên kết với kết nối TCP này là 1 socket ở phía tiến trình chủ và 1 socket ở phía tiến trình khách
2.tiến trình khách gửi 1 thông điệp yêu cầu đến tiến trình chủ qua socket của nó. thông điệp yêu cầu chứa đường dẫn
3. tiến trình chủ nhận được thông điệp yêu cầu từ socket của nó, lấy tập tin đang được lưu trữ trong không gian lưu trữ(trên ram hoặc trên đĩa cứng) đóng gói tập tin này vào thông điệp phản hồi. và gửi thông điệp phản hồi đến tiến trình khách thông qua socket của tiến trình chủ
4. tiến trình chủ yêu cầu TCP đóng kết nối TCP
5 tiến trình khách xác nhận thông điệp phản hồi. kết nối TCP được hủy bỏ thông điệp xác định đối tượng đóng gói kèm theo nó là một tập tin HTML, tiến trình khách tách nội dung HTML từ thông điệp phản hồi thành tập tin HTML. kiểm tra các tập tin HTML này rồi tìm các kết quả tham chiếu
6. bốn bước đầu được lặp lại cho mỗi đối tượng ảnh JPEG
HTTP không liên quan đến 1 trang web được hiển thị như thế nào
đặc tả HTTP định nghĩa giao thức làm việc giữa trình chủ và trình khách
trước khi tiếp tục hãy ước lượng thời gian tiêu tốn từ khi tiến trình khách gửi yêu cầu cho đến khi nó nhận được toàn bộ tập tin HTML cơ sở. thời gian gói tin nhỏ đi từ chương trình khách đến tiến trình chủ và đi ngược lại đến tiến trình khách. trình duyệt sẽ tạo 1 kết nối TCP giữa nó và máy chủ web, quá trình này thực hiện 1 thủ tục bắt tay 3 bước. đó là tiến trình khách gửi gói tin TCP đến cho tiến trình chủ để xin thiết lập kết nối, sau đó tiến trình chủ xác nhận lại bằng 1 gói tin TCP khác gửi ngược lại về tiến trình khách, cuối cùng tiến trình khách xác nhận lại với tiến trình chủ, sau khi hai bước này hoàn tất tiến trình trình duyệt thực hiện kết nối kết hợp với việc gửi 1 thông điệp yêu cầu của HTTP. khi thông điệp yêu cầu đến tiến trình chủ, tiến trình chủ gửi tập tin HTML vào kết nối TCP lần yêu cầu này chiếm thêm khoảng thời gian như thế nữa tổng thời gian là 2
HTTP với các kết nối thường trực
các kết nối không thường trực có điểm bất tiện. bất tiện đầu tiên là phải duy trì kết nối mới cho mỗi đối tượng được yêu cầu với mỗi kết nối, hệ điều hành phải cấp phát bộ nhớ làm vùng đệm cho kết nối TCP và bộ nhớ cho các biến của TCP ở cả tiến trình khách và tiến trình chủ. khi có hàng trăm tiến trình khách đồng thời kết nối đến tiến trình chủ. lượng bộ nhớ này là 1 khối lượng đáng kể đối với máy chủ web, bất tiện thứ hai là thời gian mà nó nhân lên, với cách kết nối thường trực, tiến trình chủ vẫn giữ lại kết nối TCP sau khi gửi xong thông điệp phản hồi, các yêu cầu phản hồi tiếp đến của cùng cặp tiến trình khách và chủ này sẽ cùng được gửi trên chính kết nối này
dạng thức thông điệp HTTP
đặc tả HTTP bao gồm dạng định nghĩa của quy định dạng thông điệp HTTP, có hai loại thông điệp HTTP, thông điệp yêu cầu và thông điệp phản hồi
thông điệp yêu cầu
trước tiên thông điệp nên viết dưới dạng mã ASCII, nhờ những ai có kiến thức thông thường về máy tính đều có thể hiểu được, kế đến thông điệp trên gồm 5 dòng, mỗi dòng kết thúc bằng tín hiệu xuống dòng và về dòng đầu
phần lớn các thông điệp đều yêu cầu phương thức get, phương thức get được dùng khi trình duyệt yêu cầu đối tượng và đối tượng được chỉ định rõ trong trường hợp URL
chương trình khách thường sử dụng phương thức post trong trường hợp muốn người dùng nhập dữ liệu tham số vào 1 mẫu form, trong trường hợp người dùng đưa vào từ khóa cho 1 trang tìm kiếm. cũng như thông điệp post thông điệp get cũng yêu cầu trang web từ máy chủ nhưng nội dung cụ thể của trang web phụ thuộc vào những  gì người dùng nhập vào mẫu, khi đó phần thân thông điệp post chứa nội dung người dùng đã nhập
phương thức head tương tự như phương thức get. khi một máy chủ nhận 1 yêu cầu với loại phương thức head để dò lỗi chương trình.
phương thức put dùng trong các ứng dụng xuất bản nội dung web. phương thức này cho phép những người dùng tải lên 1 đối tượng đến 1 nơi cụ thể
thông điệp phản hồi mà máy chủ web gửi về trình duyệt
mỗi giá trị của status là 1 mã trạng thái, được liên kết với 1 cụm từ thông báo tình trạng phản hồi về phía tiến trình chủ
200 là thông điệp trả về hợp lệ và thông tin yêu cầu được trả về trong thông điệp phản hồi
301: đối tượng được yêu cầu đã được chuyển đi nơi khác, URL mới sẽ được chỉ định trong dòng location của thông điệp phản hồi, chương trình khách tự động chuyển hướng URL mới
400: đây là mã lỗi trong trường hợp tiến trình chủ không hiểu được yêu cầu
404: tài liệu không được tìm thấy trên máy chủ
505: phiên bản giao thức HTTP trong thông điệp yêu cầu không được máy chủ hỗ trợ
trình duyệt quyết định những dòng tham số nào cần được đưa vào thông điệp yêu cầu, máy chủ web quyết định những dòng mô tả nào đưa vào thông điệp phản hồi
cookies
trình chủ trong HTTP không quản lý trạng thái của trình duyệt, điều này giúp đơn giản hóa việc thiết kế máy chủ, điều này cho phép các kĩ sư phát triển các trình chủ web năng suất cao, có thể xử lý hàng ngàn kết nối TCP cùng lúc, đôi khi các trang web muốn nhận ra  người dùng là ai nhằm kiểm soát việc truy cập trang web của người đó, hoặc có thể cung cấp nội dung cho người dùng như 1 chức năng liên quan đến định danh người dùng, vì mục đích này giao thức HTTP đặt ra kĩ thuật cookies,nhằm cho phép các trang web quản lý hoạt động của người dùng trên trang web đó, ngày nay hầu hết các trang web thương mại đều sử dụng kĩ thuật cookie
kĩ thuật cookie đưa vào 4 thành phần, các dòng mô tả trong thông điệp phản hồi, dòng thông số trong thông điệp yêu cầu, tập tin cookie được lưu trữ tại máy tính của người dùng và được trình duyệt của người dùng quản lý, 1 cơ sở dữ liệu cookie đặt tại trình phục vụ web
giả sử san luôn truy cập web bằng cách dùng trình duyệt explorer. san muốn truy cập vào trang web amazon.com lần đầu tiên và trước đó san cũng muốn truy cập vào 1 khác là ebay. khi yêu cầu từ san đến trình chủ web của amazon, trình chủ sinh ra 1 định danh duy nhất(ID) cho san và ghi nhớ vào cơ sở dữ liệu cookie. dữ liệu cookie tại cơ sở dữ liệu này có thể truy xuất được qua chỉ mục ID. sau đó trình chủ WEb của amazon gửi thông điệp phản hồi đến trình duyệt của san kèm theo dòng mô tả set cookie, dòng này mang trị ID đã sinh ra, chẳng hạn dòng mô tả có thể là: set cookie 1678
khi trình duyệt của san nhận được thông điệp phản hồi. nó sẽ nhận ra dòng mô tả set cookie, khi đó trình duyệt thêm 1 dòng mới vào  tập tin set cookie mà nó quản lý, dòng này có tên của máy chủ web chứa trang web amazon và ID mà amazon đã cấp phát cho san. lưu ý rằng tập tin cookie này cũng có 1 dòng cho tập tin ebay vì san đã từng truy cập ebay trước đây. khi san tiếp tục duyệt web ở trang amazon, mỗi lần cô ấy yêu cầu 1 trang web, trình duyệt tìm trong tập tin cookie của máy san, trích ra ID với trang web này và đặt dòng thông số set-cookie, chứa ID này trong thông điệp yêu cầu. cụ thể mỗi thông điệp yêu cầu gửi đến máy chủ amazon sẽ gồm dòng thông số này
bằng theo cách này trình chủ web  của amazon có thể lần theo dấu vết các hành động của san, mặc dù trang web amazon không biết tên của san, nó biết chính xác những trang web nào mà người dùng có ID đó đã từng ghé thăm, theo thứ tự và vào khi nào  Amazon dùng kĩ thuật cookie để cung cấp dịch vụ giỏ hàng. dịch vụ này cho phép amazon lưu trữ 1 danh sách tất cả các sản phẩm mà san có thể mua, để cô ấy có thể trả tiền vào cuối phiên mua bán giả sử san chưa trả tiền và rời khỏi trang web amazon 1 tuần sau san quay trở lại, trình duyệt của san tiếp tục đặt dòng tham số cookie 1678 vào trong các thông điệp yêu cầu trước khi gửi cho trình chủ web của amazon, nhờ vậy mà trình chủ biết được nhật ký truy cập của san tại amazon và khôi phục lại giỏ hàng chứa các sản phẩm mà san đã từng chọn mua . nếu san đăng ký tài khoản với amazon tức cung cấp cho amazon họ tên, địa chỉ email, địa chỉ nhà và thông tin thẻ tín dụng, thì amazon sẻ đưa thông tin này vào cơ sở dữ liệu của amazon, và liên kết tài khoản của san với ID của cô ấy(và tất cả các trang mà san đã truy cập trước đây) đây là cách mà amazon và các trang web thương mại điện tử khác cung cấp cái gọi là mua hàng với duy nhất 1 lần click. sau này nếu san chọn mua một món hàng tại amazon, san không cần điền lại tên của mình, cũng như thông tin ứng dụng hay địa chỉ nữa
web catching
1 web cache còn được gọi là 1 proxy server là 1 thực thể mạng có nhiệm vụ đáp ứng các thông điệp yêu cầu thay cho máy chủ web nguyên thủy, web cache có bộ nhớ riêng và giữ các bản sao của các đối tượng yêu cầu gần nhất trong bộ nhớ này
các bước
1, trình duyệt thiết lập 1 kết nối TCP đến web cache và gửi thông điệp yêu cầu đến web cache
2.web cache kiểm tra xem có bản sao nào của đối tượng đang được lưu giữ tại web cache hay không, nếu có thì web cache sẽ gửi về trình duyệt
3. nếu web cache không có đối tượng được yêu cầu, nó sẽ mở 1 kết nối TCP đến trình chủ web tại www..., kế đến web cache gửi thông điệp yêu cầu đến đối tượng
4 khi web cache nhận được đối tượng nó sẻ gửi 1 bản sao đối tượng vào bộ nhớ tại web cache, và gửi bản sao đến trình duyệt
web cache có nhiệm vụ vừa là trình chủ vừa là trình khách, thông thường các nhà cung cấp dịch vụ internet và triển khai web cache, chẳng hạn 1 trường đại học có thể thiết lập web cache trong nội bộ mạng và thiết lập cấu hình cho các trình duyệt trong trường hướng đến cache. hoặc 1 nhà cung cấp dịch vụ internet như AOL cũng có thể cài đặt 1 hoặc nhiều cache trong nội bộ mạng và thiết lập cấu hình cho các trình duyệt khách hàng hướng đến các cache đó
có hai lý do trong việc triển khai dịch vụ web cache:
1. web cache có thể giảm thời gian đáp ứng cho 1 thông điệp yêu cầu đến từ máy khách điều này càng có  ý nghĩa nếu băng thông thực tế giữa máy chủ và máy khách ít hơn nhiều băng thông thực tế giữa máy khách và cache, nếu kết nối giữa máy khách và cache có cùng tốc độ cao như thường thấy, và cache có sẵn đối tượng được yêu cầu
2.web cache có thể giảm lưu lượng trên 1 liên kết truy cập từ tổ chức(như công ty trường học) đến internet vì nó tạo bản sao
cập nhật trang web có điều kiện
mặc dù dùng cache có thể giảm thời gian phản hồi người dùng, nhưng bản sao đối với 1 đối tượng bên trong cache có thể đã cũ. mặc khác đối tượng lưu trong máy chủ web có thể được bổ sung sau khi lưu bản sao trên cache, vì vậy HTTP có 1 kĩ thuật cho phép cache xác nhận đối tượng của nó đã được cập nhật, kỹ thuật này được gọi là GET có điều kiện
giao thức truyền tập tin(FPT)
giao thức FPT cho phép người dùng gửi nhận các tập tin đến từ 1 máy tính khác. để 1 người dùng truy cập vào 1 tài khoản từ xa, người dùng phải cung cấp định danh người dùng và mật khẩu. sau khi cung cấp các thông tin chứng thực, người dùng truyền tập tin từ hệ thống tập tin cục bộ đến hệ thống tập tin ở xa và ngược lại
HTTP và FTP là hai giao thức truyền tập tin có nhiều đặc điểm chung, cả hai đều chạy trên nền của giao thức TCP. tuy nhiên hai giao thức tầng ứng dụng này tuy nhiên hai ứng dụng này cũng có 1 số điểm khác biệt rõ rệt. điểm khác biệt duy nhất FTP dùng hai kết nối TCP song song để truyền tập tin, 1 kết nối điều khiển và 1 kết nối dữ liệu
kết nối điều khiển dùng để gửi thông tin điều khiển giữa hai máy tính mạng thông tin như định danh người dùng, mật khẩu và các lệnh để chuyển thư từ xa và các lệnh chép tập tin lên(lệnh put) và lệnh để lấy tập tin về(lệnh get) kết nối dữ liệu thường được dùng để gửi tập tin
khi người dùng bắt đầu 1 phiên FPT với 1 máy tính từ xa, FPT khách tạo 1 kết nối TCP đến FPT chủ. FPT khách gửi định danh người dùng và mật khẩu trên kênh dữ liệu điều khiển này. FPT khách cũng gửi trên kênh truyền điều khiển  các lệnh đổi thư mục từ xa. khi máy chủ nhận 1 lệnh truyền tập tin trên kênh truyền điều khiển(với 1 máy tính từ xa) máy chủ khởi tạo 1 kênh truyền dữ liệu TCP đến máy khách. FTP gửi chính xác 1 tập tin trên kênh truyền dữ liệu  và sau đó đóng kênh truyền dữ liệu này. trong suốt phiên truyền nếu người dùng  muốn truyền 1 tập tin khác. FTP mở 1 kênh truyền dữ liệu khác. do đó đối với FPT kênh truyền điều khiển vẫn mở trong suốt phiên truyền của người dùng, nhưng kênh truyền dữ liệu mới. được tạo cho mỗi tập tin được truyền trong 1 phiên truyền
các lệnh và phản hồi FPT
các lệnh từ máy khách đến máy chủ và các phản hồi từ máy chủ đến máy khách được gửi thông qua kênh điều khiển dưới định dạng mã ASCII 7 bit. cũng như lệnh của HTTP con người cũng có thể đọc được mã của FPT
thư điện tử và internet
thư điện tử là ứng dụng phổ biến nhất trong thời kì đầu tiên của internet. và càng trở nên hoàn thiện và mạnh mẽ hơn qua nhiều năm,
SMTP là 1 giao thức tầng ứng dụng đối với thư điện tử internet nó dùng dịch vụ truyền dữ liệu đáng tin cậy của TCP để truyền thư từ máy chủ của người gửi đến máy chủ của người nhận
giao thức SMTP
SMTP là trung tâm của thư điện tử, như đã đề cập ở trên, SMTP truyền các thư điện tử từ các máy chủ của người gửi đến các máy chủ của người nhận. SMTP lâu đời hơn HTTP rất nhiều. mặc dù SMTP có nhiều ưu điểm được thấy qua việc SMTP là duy nhất  và phổ biến trên internet, nhưng đó vẫn là 1 kỹ thuật đã lâu đời  với 1 số tính năng cũ kỹ như hạn chế trong phần thân thư của tất cả các thư là dạng mã ASCII 7 bit. giới hạn này được biết vào đầu năm 1980 khi dung lượng truyền rất ít và không ai có thể đính kèm các tập tin lơn hay tập tin hình ảnh âm thanh hay phim lớn, trong kỹ nguyên truyền thông giới hạn các mã ASCII 7 bit là 1 khuyết điểm lớn. yêu cầu dữ liệu nhị phân chuyển thành mã ASCII trước khi gửi bằng giao thức SMTP, và yêu cầu phải giải mã sau khi truyền
các giao thức truy cập thư điện tử
khi SMTP phát thư từ máy chủ của an đến máy chủ của bình, thư đặt trong hộp thư của bình. bình đọc thư bằng cách đăng nhập vào máy chủ và kích hoạt công cụ đọc thư trên máy chủ đó, đến đầu thập niên 90 thì đây vẫn là các bước chuẩn cho việc đọc 1 lá thư điện tử. nhưng ngày nay việc truy cập thư điện tử dùng kiến trúc khách chủ đã giúp người đọc , đọc thư điện tử với chương trình khách ở hệ cuối bằng cách kích hoạt trình duyệt trên máy cục bộ người dùng có thể dùng nhiều tính năng  gồm cả việc xem thư và các tính năng đính kèm
POP3
POP3 là 1 giao thức truy cập thư đơn giản, vì giao thức đơn giản nên các chức năng của nó cũng khá giới hạn
dịch vụ DNS
con người có thể được định danh qua nhiều cách như các máy tính trên internet cũng cần được định danh như con người
các dịch vụ DNS cung cấp
DNS là 1 cơ sở dữ liệu phân tán được cài đặt với hệ thống phân cấp của máy tính chủ DNS
DNS được dùng bởi các giao thức tầng ứng dụng khác gồm HTTP, SMTP và FTP
lập trình socket TCP
các tiến trình chạy trên các máy tính khác nhau truyền thông với nhau bằng cách gửi thông điệp lên socket mỗi tiến trình được xem như là 1 ngôi nhà còn  socket được xem như là cách cửa của ngôi nhà, socket là tiến trình ứng dụng và TCP. người dùng ứng dụng điều khiển mọi thứ phía socket và client ở tầng ứng dụng, tuy nhiên chỉ có thể điều khiển 1 ít ở tầng vận chuyển
về phía tương tác giữa chương trình khách và chương trình chủ, máy khách khởi tạo liên lạc với máy chủ, để máy chủ có thể liên lạc với phản hồi ban đầu của máy khách thì máy chủ phải luôn sẵn sàng, việc này có hai nghĩa  thứ nhất là chương trình chủ phải chạy 1 tiến trình trước khi máy khách khởi tạo liên lạc, thứ hai chương trình phải có 1 loại cửa chính nào đó, chính xác hơn đó là 1 socket, socket sẽ nhận liên lạc từ tiến trình khách