Các ổ cắm TCP và UDP có thể sử dụng cùng một cổng không?


104

Trước hết, có vấn đề gì khi sử dụng cả UDP và TCP trên cùng một máy chủ không?

Thứ hai, tôi có thể sử dụng cùng một số cổng không?

Câu trả lời:


110

Có, bạn có thể sử dụng cùng một số cổng cho cả TCP và UDP. Nhiều giao thức đã làm được điều này, ví dụ như DNS hoạt động trên udp / 53 tcp / 53.

Về mặt kỹ thuật, các nhóm cổng cho mỗi giao thức hoàn toàn độc lập, nhưng đối với các giao thức cấp cao hơn có thể sử dụng TCP hoặc UDP, quy ước rằng chúng mặc định là cùng một số cổng .

Khi viết máy chủ của bạn, hãy nhớ rằng chuỗi sự kiện đối với ổ cắm TCP khó hơn nhiều so với ổ cắm UDP, vì cũng như các lệnh gọi socketvà thông thường bindbạn cũng phải listenaccept.

Hơn nữa rằng acceptcuộc gọi sẽ trả về một socket mới và nó ổ cắm mà sau đó bạn sẽ phải cũng bình chọn cho nhận các sự kiện. Máy chủ của bạn nên được chuẩn bị để tiếp tục nhập các acceptkết nối trên ổ cắm ban đầu trong khi phục vụ đồng thời nhiều máy khách, mỗi máy khách sẽ kích hoạt các sự kiện nhận trên ổ cắm riêng của chúng.


2
@Eric Fortis RFC 1700 có đầy đủ các ví dụ, chúng ta hãy không liệt kê tất cả chúng phải không? ;-)
Hầu tước Lorne

2
@Eric Fortist tại sao chính xác nên 'mọi người đều biết về' số cổng NetBIOS?
Marquis of Lorne

4
Xin vui lòng gửi nó như là một câu hỏi, do đó bạn có thể cấp cho tôi những câu trả lời
Eric Fortis

6
Điều gì đó mà câu trả lời này không giải thích được: ngữ nghĩa 'cổng' dành riêng cho từng giao thức (nhưng một số có thể không có ngữ nghĩa này) của cấp độ truyền tải (mô hình OSI cấp độ 4). Vì vậy, TCP có các cổng riêng, được thông dịch bởi ngăn xếp TCP; UDP có các cổng riêng, được thông dịch bởi ngăn xếp UDP. Vì vậy, để nói rằng, các cổng không được chia sẻ giữa UDP và TCP; nó chỉ xảy ra rằng cả hai giao thức đều có cùng định nghĩa về "cổng" và để đơn giản hóa, chúng tôi sử dụng cùng một giá trị cổng cho nhiều kết nối thuộc các loại khác nhau với cùng một dịch vụ.
moala

2
@EricFortis Bởi vì một câu hỏi như vậy sẽ không quan tâm đến tôi hoặc bất kỳ ai khác, cũng như lý do bạn coi nó là thú vị, và phản đối sự phản đối của bạn khi trích dẫn một RFC ở đây vì mục đích chính xác mà chúng ta đang thảo luận.
Marquis of Lorne,

8

Thứ nhất, không có vấn đề gì khi sử dụng cả tcp và udp trên máy chủ.

Thứ hai, chúng ta có thể có cả yêu cầu UDP và TCP trên cùng một cổng, bởi vì mỗi yêu cầu được xác định bởi một nhóm phân vị chứa bởi IP nguồn, IP đích, Cổng nguồn, Cổng đích, PROTOCOL (vì giao thức có thể là TCP hoặc UDP).


3
Lý do bạn nêu ra thường được đưa ra nhưng nó thực sự vô nghĩa. Không có cái gọi là kết nối UDP và không có ngữ cảnh nào trong đó các kết nối được coi là bất kể giao thức liên quan. Thực tế là các cổng là đồ tạo tác của TCP và UDP riêng biệt, và do đó không có khả năng nhầm lẫn giữa chúng.
Marquis of Lorne,

Cảm ơn bạn đã chỉ ra lỗi của tôi. Đúng là không có kết nối nào bằng UDP.
aMooly
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.