Sự khác biệt cơ bản giữa WebSockets và TCP thuần túy là gì?


167

Tôi đã đọc về WebSockets và tôi tự hỏi tại sao trình duyệt không thể mở kết nối TCP tầm thường và giao tiếp với máy chủ như bất kỳ ứng dụng máy tính để bàn nào khác. Và tại sao giao tiếp này có thể thông qua websockets?


8
Nhưng vấn đề là gì? Hãy để họ sử dụng TCP.
xap4o


2
"WebSocket là một giao thức cung cấp các kênh liên lạc song công hoàn toàn qua một kết nối TCP". Bạn có thể tạo kết nối TCP cũng là song công hoàn toàn? WebSockets có gì đặc biệt?
Abhishek Jain

12
Vấn đề là thông thường các máy chủ web chỉ có một cổng mở vì lý do bảo mật, đó là cổng 80. Theo định nghĩa một cổng có thể gắn vào một ứng dụng CHỈ . Vậy điều gì sẽ xảy ra nếu khách hàng muốn sử dụng một dịch vụ, ngoài web (HTTP) nhưng chỉ có một cổng khả dụng? Voila! Websockets!
Pithikos

3
@Pithikos đập vào mắt con bò về lý do tại sao chúng ta cần sự phức tạp của các websockets và không chỉ đối phó với các socket TCP thẳng để liên lạc với máy chủ trình duyệt.
Nắng

Câu trả lời:


260

Việc giao tiếp qua các ổ cắm TCP trở nên dễ dàng hơn khi bạn làm việc trong một ranh giới mạng nội bộ, vì bạn có thể có quyền kiểm soát các máy trên mạng đó và có thể mở các cổng phù hợp để tạo kết nối TCP.

Qua internet, bạn đang liên lạc với máy chủ của người khác ở đầu bên kia. Họ rất khó có thể có bất kỳ ổ cắm cũ nào mở cho các kết nối. Thông thường, họ sẽ chỉ có một vài tiêu chuẩn như cổng 80 cho HTTP hoặc 443 cho HTTPS. Vì vậy, để liên lạc với máy chủ, bạn bắt buộc phải kết nối bằng một trong những cổng đó.

Vì đây là các cổng tiêu chuẩn cho các máy chủ web thường nói HTTP, do đó bạn bắt buộc phải tuân thủ giao thức HTTP, nếu không máy chủ sẽ không nói chuyện với bạn. Mục đích của các socket web là cho phép bạn bắt đầu kết nối qua HTTP, nhưng sau đó đàm phán để sử dụng giao thức socket web (giả sử máy chủ có khả năng làm như vậy) để cho phép luồng truyền thông giống như "socket TCP" hơn.


2
Cảm ơn vì lời giải thích dễ dàng, Ash.
xap4o

Vậy về cơ bản, WebSocket chỉ đơn giản là một trình bao bọc cho TCP theo nghĩa UDP chỉ đơn giản là một trình bao bọc cho IP?
Pacerier

3
@Pacerier: WebSocket yêu cầu một số loại giao thức vận chuyển để hoạt động, nhưng lớp vận chuyển đó không phải là TCP (mặc dù gần như luôn luôn là TCP trong thực tế). Bạn có thể nghĩ về WebSockets như một loại trình bao bọc xung quanh TCP, nhưng tôi không tin có bất kỳ liên kết giả định nào giữa hai.
Tro

4
"Qua internet, bạn đang liên lạc với máy chủ của người khác ở đầu bên kia." "Cho rằng đây là các cổng tiêu chuẩn (80 & 443) cho các máy chủ web nói chung HTTP, do đó bạn bắt buộc phải tuân thủ giao thức HTTP , nếu không thì máy chủ sẽ không nói chuyện với bạn. " Thông thường, máy chủ websocket mà chúng tôi truy cập sẽ là của riêng chúng tôi. Vì vậy, chúng ta có thể có một ứng dụng với một giao thức mà chúng ta xác định nghe một cổng. Vậy thì, tại sao chúng ta lại cần bắt tay HTTP và chuyển đổi giao thức? Thay vào đó, tại sao chúng ta không thể trực tiếp theo dõi một websocket như giao thức?
chuột

2
Bởi RFC6455, WebSocket cần bắt tay vào HTTP trước và sau đó là giao thức nâng cấp lên WebSocket. Hầu hết các trình duyệt làm theo điều này. Tôi không biết phía khách hàng của bạn (trình duyệt) sẽ hỗ trợ như thế nào, nếu bạn đang sử dụng bất kỳ giao thức nào trong máy chủ. Nó giống như chúng ta có thể giao tiếp bằng tiếng Pháp, chỉ có cả hai chúng ta biết tiếng Pháp. Và bắt tay cũng giống như, tôi hỏi bạn, 'Chúng ta có thể giao tiếp bằng tiếng Pháp không?' Bằng tiếng Anh (ở đây là HTTP). Ở đây các trình duyệt (như chrome) biết tiếng Pháp nhưng chúng tôi phải dạy máy chủ tiếng Pháp. Câu hỏi của tôi là tại sao RFC6455 (WebSocketProtocol) muốn bắt tay vào HTTP và làm phức tạp mọi thứ, tại sao họ không thể làm theo cách của họ?
chuột

31

Các trình duyệt web hoạt động ở lớp Ứng dụng, trong khi TCP hoạt động ở Tầng vận chuyển. Là một nhà phát triển ứng dụng web, việc gửi tin nhắn qua mạng thông qua Lớp ứng dụng thay vì các byte thô tại Tầng vận chuyển sẽ dễ dàng hơn.

Hiểu biết về WebSockets TCP, nó chỉ đơn giản là trừu tượng hóa.


2

Websocket là một giao thức lớp ứng dụng trong khi TCP là giao thức lớp vận chuyển. Ở lớp vận chuyển, chúng ta thường có giao thức TCP và UDP. Bất kỳ thông báo nào từ lớp ứng dụng cần phải đi qua lớp vận chuyển để được truyền đến máy khác. Do đó, websocket và tcp có mối quan hệ với nhau và không thể so sánh được.


2

Để đơn giản hóa, giao tiếp websocket được thực hiện qua cổng TCP số 80 (hoặc 443 trong trường hợp kết nối được mã hóa TLS), có lợi cho những môi trường chặn kết nối Internet không phải web bằng tường lửa .

Bạn có muốn sử dụng cổng TCP tồn tại hoặc mở một cổng TCP mới có thể bị chặn bởi tường lửa không?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.