Các cổng và giao thức thực sự là gì?


11

Tôi nghe mọi người nói về các cổng và giao thức (liên quan đến mạng máy tính) và họ thường cung cấp các tín hiệu tương tự cho họ (ví dụ: "một cổng giống như một cổng vận chuyển, nó gửi và nhận dữ liệu như một cổng vận chuyển gửi và nhận hàng từ các cổng khác ") và những thứ tương tự.

Tôi hiểu tất cả điều này có nghĩa là gì, nhưng chỉ ở mức độ rất giả tạo. Về cơ bản, tôi biết cổng là gì và tôi hiểu giao thức là gì, nhưng chúng thực sự là gì?

Là những cổng vật thể vật lý? Có phải chúng là thứ gì đó được tích hợp vào máy tính của tôi không? Có bao nhiêu cổng? Tôi có thể tăng hoặc giảm số lượng cổng không? Họ thậm chí là một cái gì đó vật lý? Hoặc viết bằng mã? Mã này ở đâu? Hệ điều hành? Điều gì thực sự là một cảng?

Giao thức là gì? Tôi tưởng tượng chúng là một loại mã .... Bạn có thể tạo giao thức của riêng mình không? Làm thế nào để bạn có được một cổng cụ thể để chạy một giao thức cụ thể? Ngôn ngữ nào bạn sử dụng để tạo giao thức? Làm thế nào để bạn xác định hoặc phát minh ra một giao thức mới?

Câu trả lời:


9

Trả lời câu trả lời của Hello71s, có thể giúp hình dung một cổng bằng cách suy nghĩ về cấu trúc của một địa chỉ trong một gói. Một gói là một đơn vị dữ liệu được truyền xung quanh một mạng. TCP là một ví dụ về giao thức lớp vận chuyển sử dụng các cổng và thường được sử dụng qua IP.

Vì vậy, IP có hai thành phần địa chỉ - IP nguồn và IP đích. TCP thêm vào điều này bằng cách sử dụng một cổng nguồn và một cổng đích. Đó là các cổng cho phép máy thu nhận phân biệt lưu lượng truy cập cho cùng một địa chỉ IP - nghĩa là, nếu bạn có một máy chủ nhận cả yêu cầu web và email trên một địa chỉ IP, thì bạn cần xác định ứng dụng nào sẽ nhận được dữ liệu - dịch vụ email hoặc dịch vụ web. Vì vậy, chúng có thể trông như thế này nếu một người dùng thực hiện một yêu cầu web và yêu cầu email đến cùng một máy chủ:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

Dịch vụ web sở hữu cổng 80 và dịch vụ email sở hữu cổng 25 - họ "lắng nghe" trên các cổng tương ứng, cho phép lưu lượng truy cập kết thúc ở đúng nơi.

Cổng nguồn là "phù du" - trong đó nó được tạo thành tại thời điểm gói được gửi. Tuy nhiên, nó vẫn phục vụ một mục đích hữu ích. Nó cho phép cả hai đầu của kết nối theo dõi các cuộc hội thoại riêng biệt. Xem xét nếu người dùng của chúng tôi đã gửi hai yêu cầu web giống nhau:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

Điều này cho phép dịch vụ web biết rằng đây là những yêu cầu riêng biệt, nhưng đồng thời, lưu lượng truy cập trở lại từ máy chủ web - các trang web - được gửi trở lại các cổng nguồn tương ứng, cho phép trình duyệt biết yêu cầu nào mà máy chủ phản hồi.

Lưu ý rằng tất cả đều đề cập đến số cổng, từ góc độ TCP / IP, dữ liệu thực tế được di chuyển qua các cổng này có thể là bất cứ điều gì. Nó không quan tâm hoặc không có bất kỳ nhận thức nào về các ứng dụng, vì vậy nếu bạn có lưu lượng truy cập web trên cổng 25 và email trên cổng 80, thì sẽ không có gì là khôn ngoan hơn.

Tùy thuộc vào ứng dụng gửi và nhận để đảm bảo dữ liệu là cấu trúc phù hợp và đây là nơi các giao thức ứng dụng xuất hiện. HTTP là một ví dụ về giao thức ứng dụng mà trình duyệt web sử dụng để giao tiếp với máy chủ web. Đó là một giao thức được xác định rõ ràng đảm bảo rằng trình duyệt sẽ gửi yêu cầu đến bất kỳ máy chủ web nào và máy chủ web sẽ hiểu và phản hồi hợp lý. Nhưng những gì nó không bao gồm trong định nghĩa của nó là bất cứ điều gì về cách các gói đi từ A đến B - đó là trách nhiệm của các lớp trước - lớp vận chuyển, internet và các lớp liên kết.


Cảm ơn bạn! Đây chỉ là câu trả lời tôi đang tìm kiếm, cảm ơn vì đã giúp đỡ!
Bob

3

Hừm. Tôi nghĩ rằng nơi tốt nhất để bắt đầu sẽ là xem xét IP Suite, hay còn gọi là mô hình TCP / IP. (Bỏ qua các lớp khác của mô hình OSI vì mục đích đơn giản.)

Về cơ bản, đó là một loạt các lớp:

Lớp ứng dụng - HTTP, FTP, POP, SSH, v.v ...
Lớp vận chuyển - TCP, UDP, v.v ...
Lớp Internet - IP, ICMP, v.v ...
Lớp liên kết - Ethernet, v.v.

Các cổng, phần lớn, được thực hiện ở lớp vận chuyển (lớp 4 - Có, việc đánh số là chính xác.)

Phần lớn các ngăn xếp TCP và / hoặc UDP được triển khai trong các hệ điều hành sử dụng một hệ thống cơ bản gán các cổng cho các chương trình và chỉ đơn giản là nâng cao các sự kiện trong các chương trình này khi các gói đi qua mạng. Tuy nhiên, bất kỳ thực hiện có thể làm việc trên lý thuyết; thậm chí có thể bằng các ngăn xếp thay thế giả thuyết suy ngẫm trong học viện.

TCP được định nghĩa là có tổng số 65535 cổng, mà bất kỳ chương trình nào cũng có thể sử dụng để làm bất cứ điều gì họ muốn (mặc dù nhiều hệ điều hành giới hạn việc sử dụng các cổng dưới 1024, tạo cho chúng trạng thái đặc biệt đặc biệt). Mặc dù có một số danh sách hạn chế, không có tiêu chuẩn thực sự để xác định ai sẽ nhận được cổng nào và cổng nào chạy chương trình gì. Do đó, một cổng là một số ngẫu nhiên mà các triển khai khác nhau của chương trình quyết định đồng ý giao tiếp. Tất nhiên, các nhà thiết kế của các chương trình như vậy cố gắng tránh các cổng mà các chương trình phổ biến khác đã chọn.

Được cho rằng không có cách nào để chạy bằng TCP. Một số giao thức chạy trên lớp internet trần, hoặc thậm chí lớp liên kết trần, chủ yếu cho mục đích hiệu quả hoặc do các giao thức này được phát minh trước cả khi TCP hoặc IP tồn tại. Tất nhiên, khi làm như vậy, bạn đánh đổi sự đơn giản và kiểm tra lỗi rộng rãi của các thư viện mạng OS.

Để biết thêm chi tiết, hãy kiểm tra các trang Wikipedia trên mô hình OSI, TCP và IP.


Tôi hiểu tất cả những điều đó. Vì vậy, về cơ bản, một cổng không phải là một vật lý? Cái gì đó được lập trình? Cổng được xác định ở đâu trên máy tính? Và sau đó cho các giao thức, chúng được tạo ra như thế nào? Là những người được lập trình?
Bob

Không, một cổng không phải là một vật lý trong bối cảnh này (rõ ràng một cổng USB là vật lý nhưng không liên quan đến chủ đề này). Các giao thức được xác định thông qua RFC ( en.wikipedia.org/wiki/Request_for_Comments ) và được thực hiện theo mã - được lập trình.
Paul

Sẽ đúng khi nói rằng TCP là một quy trình hệ thống dự trữ bộ nhớ để lưu trữ dữ liệu đến từ IP (hoặc lưu trữ dữ liệu được IP truy xuất) và bộ nhớ này được chia thành 'cổng'. Và rằng các ứng dụng (quy trình) khác như HTTP, có thể thông báo cho TCP rằng họ muốn dự trữ các cổng cụ thể (ví dụ 80 và 443). Sau đó, nó trở thành công việc của TCP thành 1. cho phép HTTP thêm dữ liệu gửi dữ liệu vào các địa chỉ bộ nhớ đó và 2. thông báo cho HTTP khi dữ liệu đến đã được thêm vào các địa chỉ bộ nhớ đó?
Zach Smith

Có lẽ Bob đã nhầm lẫn giữa các cổng giao thức và cổng chuyển đổi vật lý. Phần cổng giao thức đã được trả lời tốt bởi một số, mặc dù thiếu bất kỳ nguồn nào. Đối với các cổng vật lý, đó là các vị trí đầu vào và đầu ra nơi kết nối cáp cho phép truyền dữ liệu mạng. Điều đó có thể liên quan đến các mạch điện tử, máy thu sợi quang, laser và bộ đệm. L. Peterson phiên bản thứ 4.
nassim

3

Mặc dù câu hỏi này đã được đánh dấu là đã trả lời, tôi muốn giải quyết một số câu hỏi bổ sung được hỏi trong OP.

Là những cổng vật thể vật lý?

Không có cổng không phải là đối tượng vật lý.

Số cổng là số nguyên không dấu 16 bit, có nghĩa là phạm vi cổng có sẵn để sử dụng là từ 1 đến 65535 (số cổng 0 được bảo lưu và không thể được sử dụng). Một quy trình liên kết các kênh đầu vào hoặc đầu ra của nó thông qua các ổ cắm Internet, một loại mô tả tệp, với một giao thức truyền tải, số cổng và địa chỉ IP. Quá trình này được gọi là ràng buộc và cho phép gửi và nhận dữ liệu qua mạng.

Có phải chúng là thứ gì đó được tích hợp vào máy tính của tôi không? Họ thậm chí là một cái gì đó vật lý? Hoặc viết bằng mã? Mã này ở đâu? Hệ điều hành? Điều gì thực sự là một cảng?

Phần mềm mạng của hệ điều hành có nhiệm vụ truyền dữ liệu đi từ tất cả các cổng ứng dụng lên mạng và chuyển tiếp các gói mạng đến một quy trình bằng cách khớp địa chỉ IP và số cổng của gói.

Chỉ một quá trình có thể liên kết với một địa chỉ IP cụ thể và kết hợp cổng bằng cách sử dụng cùng một giao thức truyền tải. Lỗi ứng dụng phổ biến, đôi khi được gọi là xung đột cổng, xảy ra khi nhiều chương trình cố gắng liên kết với cùng một số cổng trên cùng một địa chỉ IP bằng cùng một giao thức.

Đoạn văn trên là chìa khóa để hiểu tại sao các cổng / giao thức được sử dụng trong mạng. Nếu chúng tôi không có cách nào để chỉ định giao thức truyền dữ liệu qua số cổng apon đã thỏa thuận - bạn sẽ không thể thực hiện nhiều hơn 1 việc một lúc (kiểm tra email và sử dụng web) vì máy tính của bạn sẽ có không có cách nào để phân biệt giữa dữ liệu cho ứng dụng email của bạn và dữ liệu cho trang web bạn đang duyệt.

Có bao nhiêu cổng?

Số cổng được gán theo nhiều cách khác nhau, dựa trên ba phạm vi:

  1. Được biết đến / Cổng hệ thống (0-1023) - Phạm vi cổng này được sử dụng bởi các quy trình hệ thống cung cấp các loại dịch vụ mạng được sử dụng rộng rãi (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. Cổng đã đăng ký / người dùng (1024-49151) - Phạm vi số cổng từ 1024 đến 49151 là các cổng đã đăng ký. Chúng được IANA gán cho dịch vụ cụ thể khi ứng dụng bởi một thực thể yêu cầu. (Webmin / 10000, HTTP Proxy / 8080, Giao thức máy tính từ xa / 3389, v.v.)

  3. Các cổng Ephemeral / Dynamic / Private (49152-65535) - Phạm vi 49152 Lỗi65535 chứa các cổng động hoặc riêng không thể đăng ký với IANA. Phạm vi này được sử dụng cho các mục đích tùy chỉnh hoặc tạm thời và để phân bổ tự động các cổng phù du.

Tôi có thể tăng hoặc giảm số lượng cổng không?

Liên quan đến việc có thể tăng số lượng cổng khả dụng, bạn không thể chỉ định một cổng trên 65535 do toán học cho phép kết nối mạng (nhị phân) - vì vậy câu trả lời cho câu hỏi này là không, bạn không thể tăng tổng số cổng khả dụng cổng trên 65535.

Giao thức là gì?

Trong khoa học máy tính, một giao thức truyền thông là một hệ thống các quy tắc kỹ thuật số để trao đổi thông điệp trong hoặc giữa các máy tính. Khi tin nhắn được trao đổi qua mạng máy tính, hệ thống quy tắc được gọi là giao thức mạng. Một giao thức về cơ bản là một tập hợp các lệnh / lệnh / cuộc gọi đã được thống nhất mà hai thiết bị nối mạng có thể giao tiếp với nhau. Hãy suy nghĩ nếu chúng ta không đồng ý với các giao thức và máy chủ web chỉ gửi dữ liệu ngẫu nhiên tới các trình duyệt web mà trình duyệt không biết phải làm gì với? May mắn thay, chúng tôi có HTTP và mọi trình duyệt web được tạo đã tích hợp vào phần mềm để nó có thể giao tiếp với bất kỳ máy chủ web nào cũng nói cùng ngôn ngữ (HTTP).

Tôi tưởng tượng chúng là một loại mã .... Bạn có thể tạo giao thức của riêng mình không? Ngôn ngữ nào bạn sử dụng để tạo giao thức?

Có, bạn có thể tạo các giao thức của riêng bạn. Các giao thức được viết bằng nhiều ngôn ngữ. Tôi không phải là nhà phát triển phần mềm, nhưng tôi khá chắc chắn rằng miễn là bất kỳ ngôn ngữ nào bạn đang sử dụng đều có thư viện cho phép bạn viết phần mềm có thể giao tiếp qua TCP / IP (có các bộ giao thức khác, nhưng TCP / IP là hầu hết được sử dụng rộng rãi) bạn có thể sử dụng ngôn ngữ đó để viết một giao thức. Ngôn ngữ lập trình 'C' dường như được sử dụng phổ biến nhất để viết các giao thức. Điều này là do thực tế là nhiều giao thức mạng đầu tiên được phát triển trên UNIX vào những năm 1970 và C tình cờ là ngôn ngữ mà chính UNIX được viết.

Làm thế nào để bạn có được một cổng cụ thể để chạy một giao thức cụ thể?

Điều này khác một chút giữa các hệ điều hành. Ví dụ: để thay đổi số cổng Remote Desktop Protocol chạy trên Windows, bạn cần chỉnh sửa sổ đăng ký. Trên Linux, nhiều dịch vụ mạng có thể được cấu hình trực tiếp từ tệp .conf cho một dịch vụ mạng cụ thể.

Làm thế nào để bạn xác định hoặc phát minh ra một giao thức mới?

Xem https://journal.paul.querna.org/articles/2012/02/22/designing-network-prot Protocol / cho một bài đăng trên blog của một người gần đây đã phát triển một giao thức mạng mới và những việc anh ta phải làm dọc đườ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.