Khi bạn đang đi đến một nơi nào đó bằng trình duyệt và chỉ định một cổng, bạn đang cố gắng thực hiện kết nối (TCP) đến cổng đó.
Khi bạn chạy một dịch vụ (ví dụ như máy chủ web), nó sẽ chạy trên một cổng cụ thể. Nếu bạn thử và kết nối với một máy và không có chương trình nào được chạy cùng với cổng đó (thuật ngữ chính xác được liên kết với cổng) hoặc nó được tường lửa, thì nó sẽ hết thời gian.
Khi bạn truy cập Google trên cổng 8000, không có dịch vụ nào chạy trên đó, vì vậy nó đã hết thời gian. (Nó thực sự cố gắng kết nối một vài lần trong trường hợp có lỗi trong vài lần đầu tiên để làm cho mọi thứ mạnh mẽ hơn)
Khi bạn truy cập Google trên cổng 443, bạn đã thực hiện kết nối thành công, vì 443 thường được sử dụng cho HTTPS - tức là kết nối an toàn. Vì bạn không bắt đầu kết nối an toàn theo giao thức HTTPS, nên Chrome và Firefox hoạt động theo cách đó.
Trả lời nâng cao
Khi thực hiện kết nối trên TCP, có "bắt tay 3 chiều" - Máy khách sẽ gửi gói "SYN" đến máy chủ. Máy chủ nhận được điều này và họ cho rằng có một chương trình đang chạy, nó sẽ gửi lại một xác nhận "SYN-ACK", sau đó máy khách sẽ gửi một gói "ACK" đến máy chủ - lúc đó các hệ thống đã thiết lập kết nối.
Trong trường hợp kết nối với cổng 8000, máy khách không nhận được phản hồi cho gói SYN, do đó, nó sẽ thử một vài lần, sau đó bỏ cuộc và hết thời gian.
Trong trường hợp kết nối với cổng 443, kết nối được thiết lập ở cấp TCP. Tại thời điểm này, máy chủ dự kiến sẽ đàm phán kết nối SSL để bảo mật (vì cấu hình của nó được thực hiện trên cổng 443). Bạn không biết cách nói SSL, vì vậy nó đã thất bại.
Điểm thưởng
Nếu bạn đã cài đặt TELNET - hầu hết các hệ thống đều làm như vậy, bạn có thể giả vờ là một trình duyệt (hoặc ứng dụng thư khách hoặc bất cứ điều gì nếu bạn biết giao thức), bằng cách thực hiện như sau.
1. type "telnet www.google.com 80"
(wait for a few seconds)
2. Type GET / HTTP/1.1<enter>
host www.google.com<enter><enter>
Bước 1 yêu cầu Telnet tạo kết nối TCP đến máy chủ Googles trên cổng 80 và bước 2 Nói những gì cần nhận (GET / có nghĩa là lấy tệp gốc) và dòng "máy chủ" cho biết máy chủ nào bạn muốn kết nối với - bạn cần điều này bởi vì rất nhiều trang web chia sẻ một máy chủ - dòng thứ hai cho máy chủ biết trang web nào. Bạn nhấn enter hai lần để nói rằng bạn đã hoàn tất việc gửi tiêu đề của mình và sau đó nhận lại phản hồi HTTP. (Nếu bạn là một trình duyệt web, bạn sẽ gửi thêm nhiều thông tin, bao gồm các chi tiết về trình duyệt, cookie, v.v. - nhưng với mục đích giải thích, chúng tôi đã không làm điều này.)