실제로 포트와 프로토콜은 무엇입니까?


11

사람들이 포트 및 프로토콜 (컴퓨터 네트워킹과 관련하여)에 대해 이야기하는 것을 듣고 종종 유사성을 제공합니다. 다른 포트에서 ")와 같은 것들.

나는 이것이 의미하는 바를 매우 인공적인 수준으로 이해합니다. 기본적으로 포트가 무엇인지 알고 프로토콜이 무엇인지 이해하지만 실제로는 무엇입니까?

이 포트는 물리적 개체입니까? 그것들은 내 컴퓨터의 일부에 내장되어 있습니까? 포트가 몇 개입니까? 포트 수를 늘리거나 줄일 수 있습니까? 그들은 심지어 육체적 인 것입니까? 아니면 코드로 작성 되었습니까? 이 코드는 어디에 있습니까? 운영 체제? 항구 란 무엇인가?

프로토콜이란 무엇입니까? 나는 그들이 일종의 코드라고 상상할 수 있습니다 ... 당신은 당신의 자신의 프로토콜을 만들 수 있습니까? 특정 프로토콜을 실행하기 위해 특정 포트를 어떻게 얻습니까? 프로토콜을 작성하기 위해 어떤 언어를 사용합니까? 새로운 프로토콜을 어떻게 정의하거나 발명합니까?

답변:


9

Hello71s의 답변에 따르면 패킷의 주소 구조를 생각하여 포트를 시각화하는 데 도움이 될 수 있습니다. 패킷은 네트워크를 통해 전달되는 데이터 단위입니다. TCP는 포트를 사용하는 전송 계층 프로토콜의 예이며 일반적으로 IP를 통해 사용됩니다.

따라서 IP에는 원본 IP와 대상 IP의 두 가지 주소 지정 구성 요소가 있습니다. TCP는 소스 포트와 대상 포트를 사용하여이를 추가합니다. 수신 시스템이 동일한 IP 주소로 향하는 트래픽을 구별 할 수있게하는 포트입니다. 즉, 단일 IP 주소로 웹 요청과 이메일을 모두 수신하는 서버가있는 경우 데이터를 수신 할 애플리케이션을 결정해야합니다. -이메일 서비스 또는 웹 서비스. 따라서 단일 사용자가 동일한 서버에 웹 요청과 이메일 요청을 수행하는 경우 다음과 같이 보일 수 있습니다.

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

웹 서비스는 포트 80을 소유하고 전자 메일 서비스는 포트 25를 소유합니다. 각 포트를 "수신"하여 트래픽이 올바른 위치에있게됩니다.

소스 포트는 "일시적"입니다. 즉, 패킷이 전송 될 때 구성됩니다. 그러나 여전히 유용한 목적으로 사용됩니다. 연결의 양쪽 끝에서 별도의 대화를 추적 할 수 있습니다. 사용자가 두 개의 동시 웹 요청을 보냈는지 고려하십시오.

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

이를 통해 웹 서비스는 이러한 요청이 개별 요청임을 알 수 있지만 웹 서버 (웹 페이지)의 반환 트래픽은 해당 소스 포트로 다시 전송되므로 브라우저는 서버가 어떤 요청에 응답하는지 알 수 있습니다.

이것은 모두 TCP / IP 관점에서 포트 번호를 의미하며, 이러한 포트를 통해 이동되는 실제 데이터는 무엇이든 될 수 있습니다. 응용 프로그램을 신경 쓰지 않거나 인식하지 못하므로 포트 25에서 웹 트래픽이 있고 포트 80에서 전자 메일이 있으면 더 현명하지 않습니다.

데이터가 올바른 구조인지 확인하는 것은 송수신 응용 프로그램에 달려 있으며, 응용 프로그램 프로토콜이 들어오는 곳입니다. HTTP는 웹 브라우저가 웹 서버와 통신하는 데 사용하는 응용 프로그램 프로토콜의 예입니다. 브라우저가 모든 웹 서버에 요청을 보내고 웹 서버가 현명하게 이해하고 응답하도록하는 잘 정의 된 프로토콜입니다. 그러나 그 정의에 포함되지 않은 것은 패킷이 A에서 B로 어떻게 전달되는지에 관한 것입니다. 이는 이전 레이어 (전송, 인터넷 및 링크 레이어)의 책임입니다.


감사합니다! 이것은 내가 찾던 답이었습니다. 도와 주셔서 감사합니다!

3

흠. 시작하기에 가장 좋은 곳은 TCP / IP 모델 인 IP Suite를 보는 것입니다. (단순화를 위해 OSI 모델의 다른 계층은 무시합니다.)

기본적으로 일련의 레이어입니다.

응용 계층-HTTP, FTP, POP, SSH 등
전송 계층-TCP, UDP 등
인터넷 계층-IP, ICMP 등
링크 계층-이더넷 등

포트는 대부분 전송 계층에서 구현됩니다 (계층 4-예, 번호가 정확합니다).

OS에서 구현 된 대부분의 TCP 및 / 또는 UDP 스택은 기본 포트 시스템을 사용하여 프로그램에 포트를 할당하고 네트워크를 통해 패킷이 들어 오면 이러한 프로그램에서 이벤트를 발생시킵니다. 그러나 모든 구현은 이론적으로 작동 할 수 있습니다. 심지어 학계에서 숙고 된 가상의 대안 적 스택에 의해서도있을 수 있습니다.

TCP는 총 65535 개의 포트를 갖는 것으로 정의되었으며, 모든 프로그램이 원하는대로 무엇이든 할 수 있습니다 (많은 OS는 1024 미만의 포트 사용을 제한하여 임시 특수 상태를 제공함). 제한된 목록이 있지만 누가 어떤 포트를 가져오고 어떤 포트가 어떤 프로그램을 실행하는지 정의하는 실제 표준은 없습니다. 따라서 포트는 프로그램의 다른 구현이 통신하기로 동의 한 임의의 숫자입니다. 물론, 그러한 프로그램의 설계자들은 다른 유명한 프로그램들이 이미 선택한 포트를 피하려고 노력합니다.

TCP를 사용하여 실행할 필요는 없습니다. 일부 프로토콜은 주로 효율성을 위해 또는 TCP 또는 IP가 존재하기 전에 이러한 프로토콜이 발명 되었기 때문에 베어 인터넷 계층 또는 베어 링크 계층에서 실행됩니다. 물론 그렇게 할 때, OS 네트워킹 라이브러리의 단순성 및 광범위한 버그 확인 기능을 버려야합니다.

자세한 내용은 OSI 모델, TCP 및 IP에서 Wikipedia 페이지를 확인하십시오.


나는 그 모든 것을 이해합니다. 기본적으로 포트는 물리적 인 것이 아닙니까? 프로그래밍 된 것입니까? 컴퓨터에서 포트는 어디에 정의되어 있습니까? 그리고 프로토콜의 경우 어떻게 만들어 집니까? 그것들이 프로그램되어 있습니까?

아니요,이 문맥에서 포트는 물리적 인 것이 아닙니다 (분명히 USB 포트는 물리적이지만이 주제와 관련이 없습니다). 프로토콜은 RFC ( en.wikipedia.org/wiki/Request_for_Comments )를 통해 정의 되며 코드로 프로그래밍됩니다.
Paul

TCP는 IP에서 들어오는 데이터를 저장하거나 IP로 검색 할 데이터를 저장하기위한 메모리를 예약하는 시스템 프로세스이며이 메모리가 '포트'로 나뉘어져 있다고 말하는 것이 맞습니까? HTTP와 같은 다른 응용 프로그램 (프로세스)은 TCP에 특정 포트 (예 : 80 및 443)를 예약하고 싶다고 알릴 수 있습니다. 그런 다음 TCP의 작업이됩니다. 1. HTTP가 보내는 데이터를 해당 메모리 주소에 추가하도록 허용합니다. 2. 들어오는 데이터가 해당 메모리 주소에 추가되면 HTTP에 알립니다.
Zach Smith

Bob이 프로토콜 포트와 물리적 스위치 포트를 혼동했을 수 있습니다. 프로토콜 포트 부분은 소스가 누락되었지만 여러 사람이 잘 대답했습니다. 물리적 포트는 네트워크 데이터 전송을 허용하는 케이블 연결이 이루어지는 입력 입력 및 출력 위치입니다. 여기에는 전자 회로, 광섬유 수신기, 레이저 및 버퍼가 포함될 수 있습니다. 피터슨 4 판
nassim

3

이 질문은 이미 답변 된 것으로 표시되었지만 OP에서 질문 한 추가 질문 중 일부를 해결하고자합니다.

이 포트는 물리적 개체입니까?

물리적 객체가 아닌 포트는 없습니다.

포트 번호는 16 비트 부호없는 정수로, 사용 가능한 포트 범위는 1-65535입니다 (포트 번호 0은 예약되어 있으며 사용할 수 없음). 프로세스는 인터넷 소켓, 파일 디스크립터 유형을 통해 입력 또는 출력 채널을 전송 프로토콜, 포트 번호 및 IP 주소와 연관시킵니다. 이 프로세스를 바인딩이라고하며 네트워크를 통해 데이터를주고받을 수 있습니다.

그것들은 내 컴퓨터의 일부에 내장되어 있습니까? 그들은 심지어 육체적 인 것입니까? 아니면 코드로 작성 되었습니까? 이 코드는 어디에 있습니까? 운영 체제? 항구 란 무엇인가?

운영 체제의 네트워킹 소프트웨어에는 모든 응용 프로그램 포트에서 네트워크로 나가는 데이터를 전송하고 패킷의 IP 주소와 포트 번호를 일치시켜 도착하는 네트워크 패킷을 프로세스로 전달하는 작업이 있습니다.

동일한 전송 프로토콜을 사용하여 하나의 프로세스 만 특정 IP 주소 및 포트 조합에 바인딩 할 수 있습니다. 포트 충돌이라고도하는 일반적인 응용 프로그램 오류는 여러 프로그램이 동일한 프로토콜을 사용하여 동일한 IP 주소의 동일한 포트 번호에 바인딩하려고 할 때 발생합니다.

위의 단락은 포트 / 프로토콜이 네트워킹에 사용되는 이유를 이해하는 데 중요합니다. 합의 된 apon 포트 번호를 통해 데이터를 전송하는 프로토콜을 지정할 수있는 방법이 없다면 컴퓨터는 다음과 같은 이유로 한 번에 둘 이상의 작업을 수행 할 수 없습니다 (이메일 및 웹 사용). 이메일 클라이언트의 데이터와 탐색중인 웹 사이트의 데이터를 구별 할 수있는 방법이 없습니다.

포트가 몇 개입니까?

포트 번호는 세 가지 범위에 따라 다양한 방식으로 할당됩니다.

  1. 잘 알려진 / 시스템 포트 (0-1023)-이 포트 범위는 널리 사용되는 네트워크 서비스 유형 (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)을 제공하는 시스템 프로세스에서 사용됩니다.

  2. 등록 / 사용자 포트 (1024-49151)-1024에서 49151까지의 포트 번호 범위는 등록 된 포트입니다. 요청 엔티티에 의해 신청시 특정 서비스를 위해 IANA에 의해 지정됩니다. (Webmin / 10000, HTTP 프록시 / 8080, 원격 데스크톱 프로토콜 / 3389 등)

  3. 임시 / 동적 / 개인 포트 (49152-65535) – 49152–65535 범위에는 IANA에 등록 할 수없는 동적 또는 개인 포트가 포함 됩니다. 이 범위는 사용자 지정 또는 임시 목적 및 임시 포트의 자동 할당에 사용됩니다.

포트 수를 늘리거나 줄일 수 있습니까?

사용 가능한 포트 수를 늘리는 것과 관련하여 네트워킹이 작동하도록 허용하는 수학 (이진)으로 인해 65535보다 큰 포트를 할당 할 수 없습니다. 따라서이 질문에 대한 대답은 아니요이므로 사용 가능한 총 수를 늘릴 수 없습니다 65535 이상의 포트.

프로토콜이란 무엇입니까?

컴퓨터 과학에서 통신 프로토콜은 컴퓨터 내에서 또는 컴퓨터간에 메시지를 교환하기위한 디지털 규칙 시스템입니다. 컴퓨터 네트워크를 통해 메시지를 교환 할 때 규칙 시스템을 네트워크 프로토콜이라고합니다. 프로토콜은 기본적으로 두 개의 네트워크로 연결된 장치가 모두 통신 할 수있는 일련의 명령 / 명령 / 호출에 동의합니다. 프로토콜에 동의하지 않았고 웹 서버가 브라우저가 무엇을 해야할지 몰랐다는 데이터를 웹 브라우저에 무작위로 보냈습니다. 운 좋게도 우리는 HTTP를 가지고 있으며 생성 된 모든 웹 브라우저는 소프트웨어에 내장되어 있으므로 동일한 언어 (HTTP)를 사용하는 모든 웹 서버와 통신 할 수 있습니다.

나는 그들이 일종의 코드라고 상상할 수 있습니다 ... 당신은 당신의 자신의 프로토콜을 만들 수 있습니까? 프로토콜을 작성하기 위해 어떤 언어를 사용합니까?

예, 고유 한 프로토콜을 만들 수 있습니다. 프로토콜은 다양한 언어로 작성됩니다. 저는 소프트웨어 개발자는 아니지만 사용하는 언어에 TCP / IP를 통해 통신 할 수있는 소프트웨어를 작성할 수있는 라이브러리가있는 한 확실합니다 (다른 프로토콜 제품군이 있지만 TCP / IP가 가장 좋습니다). 해당 언어를 사용하여 프로토콜을 작성할 수 있습니다. 프로그래밍 언어 'C'는 프로토콜 작성에 가장 일반적으로 사용되는 것 같습니다. 1970 년대에 많은 최초의 네트워크 프로토콜이 UNIX에서 개발되었고 C가 UNIX 자체가 작성하는 언어 인 경우가 많기 때문입니다.

특정 프로토콜을 실행하기 위해 특정 포트를 어떻게 얻습니까?

이것은 OS마다 상당히 다릅니다. 예를 들어 Windows에서 원격 데스크톱 프로토콜이 실행되는 포트 번호를 변경하려면 레지스트리를 편집해야합니다. Linux에서는 특정 네트워크 서비스에 대한 많은 네트워크 서비스를 .conf 파일에서 직접 구성 할 수 있습니다.

새로운 프로토콜을 어떻게 정의하거나 발명합니까?

최근 새로운 네트워킹 프로토콜을 개발 한 사람과 그가해야 할 일에 대한 블로그 게시물 은 https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/ 를 참조 하십시오. 길을 따라.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.