컴퓨터 네트워크-전송 계층 프로토콜

통신 및 정보 처리의 관점에서 볼 때 전송 계층은 애플리케이션 계층에 통신 서비스를 제공하며, 통신 부분의 최상층과 사용자 기능의 최하위에 속합니다. 네트워크 에지 부분의 두 호스트가 네트워크 코어 부분의 기능을 사용하여 전체 통신을 수행하는 경우 호스트의 스택에만 전송 계층이 있고 네트워크 코어 부분의 라우터는 패킷을 전달할 때 다음 세 계층의 기능만 사용합니다.

LAN 1 의 호스트 a 와 LAN2 의 호스트 b 가 상호 연결된 WAN 을 통해 통신하도록 합니다. IP 프로토콜이 헤더의 대상 주소를 기준으로 소스 호스트 A 에서 보낸 패킷을 대상 호스트 B 로 전송할 수 있다는 것을 알고 있습니다. 그렇다면 전송 계층이 필요한 이유는 무엇입니까?

IP 계층을 보면 통신의 양쪽 끝에 두 개의 호스트가 있습니다. IP 데이터그램의 헤더는 두 호스트 IP 주소 간의 실제 통신 엔티티가 호스트의 프로세스이며, 이 호스트의 한 프로세스와 다른 호스트의 한 프로세스가 데이터 (즉, 통신) 를 교환하고 있음을 분명히 보여 줍니다. 두 호스트 간의 통신은 두 호스트의 응용 프로그램 프로세스가 서로 통신한다는 것을 의미합니다. IP 프로토콜은 패킷을 대상 호스트로 보낼 수 있지만 패킷은 호스트의 애플리케이션 프로세스로 전달되지 않고 호스트의 네트워크 계층에 남아 있습니다. 전송 계층의 관점에서 볼 때 실제 통신 끝점은 호스트가 아니라 호스트의 프로세스입니다. 즉, 엔드-투-엔드 통신은 애플리케이션 프로세스 간의 통신입니다. 일반적으로 한 호스트의 여러 응용 프로그램 프로세스가 다른 호스트의 여러 응용 프로그램 프로세스와 동시에 통신합니다.

예를 들어 사용자가 브라우저를 사용하여 웹 사이트 정보를 찾는 경우 해당 호스트의 응용 프로그램 계층에서 브라우저 클라이언트 프로세스를 실행합니다. 웹 페이지를 탐색하는 동안 메일을 통해 웹 사이트에 피드백을 보내려면 호스트의 애플리케이션 계층도 메시지의 클라이언트 프로세스를 실행합니다. 그림 5- 1 에서 호스트 A 의 적용 프로세스 AP 1 은 호스트 B 의 적용 프로세스 AP3 과 통신하고 적용 프로세스 AP2 는 상대방의 적용 프로세스 AP4 와 통신합니다. 이것은 전송 계층이 재사용 및 재사용이라는 매우 중요한 기능을 가지고 있음을 보여줍니다. 여기서 "재사용" 은 발신자의 다른 적용 프로세스가 동일한 전송 계층 프로토콜을 사용하여 데이터를 전송할 수 있음을 의미하며 (물론 적절한 헤더를 추가해야 함), "재사용 해제" 는 수신자의 전송 계층이 신문의 헤더를 분리한 후 대상 적용 프로세스 1 로 데이터를 올바르게 전달할 수 있음을 의미합니다. 그림 5- 1 에서 두 전송 계층 사이에는 "전송 계층은 애플리케이션 프로세스 간의 논리적 통신을 제공합니다" 를 나타내는 양방향 굵은 화살표가 있습니다. "논리적 통신" 이란 애플리케이션 계층에서 애플리케이션 계층의 메시지가 낮은 전송 계층에 전달되면 전송 계층이 서로의 전송 계층 (예: 수천 킬로미터) 에 메시지를 전달할 수 있다는 의미입니다. 마치 이러한 통신이 수평 방향으로 직접 데이터를 전송하는 것처럼 말입니다. 그러나 실제로 두 전송 계층 사이에는 수평 물리적 연결이 없습니다. 데이터 전송은 그림에서 점선의 방향 (다단계 통과) 을 따릅니다. 논리적 소통' 은' 이렇게 보이는 소통이지만 실제로는 그렇지 않다' 는 것이다.

① 참고: IP 계층에는 재사용 및 재사용 기능도 있습니다. 즉, 발신자의 서로 다른 프로토콜에 있는 데이터는 P 개의 데이터그램으로 패키징할 수 있고, 수신측의 IP 계층은 IP 헤더의 프로토콜 필드에 따라 구분되어 헤더에서 분리된 데이터를 수신해야 하는 프로토콜에 전달할 수 있습니다.

네트워크 계층은 호스트 간의 논리적 통신을 제공하는 반면 전송 계층은 애플리케이션 프로세스 간의 완벽한 논리적 통신을 제공합니다 (그림 5-2 참조). 전송 계층에는 네트워크 계층에서 대체할 수 없는 기타 중요한 기능이 많이 있습니다.

전송 계층은 수신된 메시지에 오류가 있는지 확인해야 합니다. 네트워크 계층에서 IP 데이터그램 헤더의 체크섬 필드는 데이터 섹션이 아닌 헤더에 오류가 있는지 여부만 확인합니다.

애플리케이션 요구 사항에 따라 전송 계층에는 접속 지향 TCP 와 접속 없는 UDP 의 두 가지 전송 프로토콜이 필요합니다. 전송 계층은 네트워크 토폴로지, 라우팅 프로토콜 등과 같은 다음 네트워크 코어의 세부 사항을 숨깁니다. ) 는 상위 레벨 사용자로부터 온 것으로, 적용 프로세스가 두 전송 계층 엔티티 간에 완벽한 논리적 통신 채널이 있음을 알 수 있지만 전송 계층에서 사용하는 프로토콜이 다르기 때문에 이 논리적 통신 채널에서 상위 계층으로의 성능 차이가 매우 큽니다. 전송 계층이 접속 지향 TCP 프로토콜을 사용하는 경우 네트워크는 신뢰할 수 없지만 (최선을 다해 서비스만 제공) 이 논리적 통신 채널은 전이중 신뢰할 수 있는 채널과 같습니다. 그러나 전송 계층이 연결되지 않은 UDP 프로토콜을 사용하는 경우 이 논리적 통신 채널은 여전히 신뢰할 수 없는 채널입니다.

TCP/P 전송 계층의 두 가지 주요 프로토콜은 인터넷의 공식 표준인 UDP (User Datagram Protocol) 입니다. 전송 제어 프로토콜 (TCP).

두 개의 피어 전송 엔티티가 통신 중에 전송하는 데이터 단위를 TPDU (전송 프로토콜 데이터 단위) 라고 합니다. 그러나 TCP/IP 시스템에서는 사용된 프로토콜에 따라 TCP 세그먼트 또는 UDP 사용자 데이터그램이라고 합니다.

UDP 는 데이터를 전송하기 전에 연결을 설정할 필요가 없습니다. 원격 호스트의 전송 계층은 UDP 메시지를 받은 후 어떠한 확인도 필요하지 않습니다. UDP 는 신뢰할 수 있는 전송을 제공하지 않지만 경우에 따라 가장 효율적으로 작동합니다.

TCP 는 접속 지향 서비스를 제공합니다. 데이터 전송 전에 연결을 설정해야 하며, 데이터 전송 후 연결을 해제해야 합니다. TCP 는 브로드캐스트 또는 멀티캐스트 서비스를 제공하지 않습니다. TCP 는 신뢰할 수 있는 연결 지향 전송 서비스를 제공하기 때문에 확인, 흐름 제어, 타이머, 연결 관리 등과 같은 많은 오버헤드가 불가피합니다. 이로 인해 프로토콜 데이터 단위의 헤드가 많이 증가할 뿐만 아니라 프로세서 자원도 많이 차지하게 됩니다.

앞서 이미 전송 계층의 재사용 및 재사용 기능에 대해 언급했습니다. 사실, 일상생활에는 재사용과 공유의 예가 많다. 한 기관의 모든 부서가 수발실을 통해 다른 부서에 공문을 전송한다고 가정하면, 이는 모든 부서가 이 수발실을' 재사용' 한 것과 같다. 수발실은 다른 부서에서 보내온 공문을 받을 때' 공유' 기능을 완성해야 한다. 즉 봉투에 적힌 기관 부서 주소에 따라 공문을 정확하게 배달해야 한다.

전송 계층의 재사용 및 재사용 기능은 유사합니다. 애플리케이션 계층의 모든 적용 프로세스는 전송 계층을 통해 IP 계층 (네트워크 계층) 으로 전송할 수 있습니다. 이것이 재사용입니다. 전송 계층은 IP 계층에서 각 적용 프로세스로 전송된 데이터를 수신한 후 지정된 적용 프로세스에 개별적으로 전달해야 합니다. 이를 공유라고 합니다. 분명히 애플리케이션 계층의 각 적용 프로세스에 대해 매우 명확한 표시를 하는 것이 중요합니다.

단일 컴퓨터의 프로세스는 프로세스 식별자 (작은 정수) 로 표시된다는 것을 알고 있습니다. 그러나 인터넷 환경에서는 응용 프로그램 계층에서 실행되는 다양한 적용 프로세스를 컴퓨터 운영 체제에서 지정한 프로세스 식별자로 표시하는 것은 불가능합니다. 이는 인터넷에 사용되는 컴퓨터 운영 체제가 다양하고 운영 체제마다 다른 형식의 프로세스 식별자를 사용하기 때문입니다. 서로 다른 운영 체제를 실행하는 컴퓨터의 적용 프로세스가 서로 통신하도록 하려면 특정 운영 체제와 독립적이어야 하는 통합 방법을 사용하여 TCP/IP 시스템의 적용 프로세스를 표시해야 합니다.

그러나 특정 시스템에서 실행되는 특정 프로세스를 인터넷 통신의 최종 대상으로 지정하는 것은 불가능합니다. 이는 프로세스의 생성 및 취소가 동적이기 때문에 통신자가 상대 시스템의 프로세스를 식별하기 어렵기 때문입니다. 또한 대상 호스트에서 제공하는 기능을 사용하여 대상을 식별해야 하는 경우가 많습니다. 어떤 프로세스가 이 기능을 구현했는지 알 수 없습니다 (예: 인터넷에서 메일 서버에 연결, 대상 호스트의 어떤 프로세스가 이 서버 기능을 구현했는지 알 필요가 없음).

이 문제를 해결하려면 전송 계층에서 프로토콜 포트 번호 또는 간단히 포트라고 합니다. 즉, 통신의 끝은 응용 프로그램 프로세스이지만 전송된 메시지를 대상 호스트의 적절한 대상 포트로 전달하면 나머지 작업 (즉, 대상 프로세스의 최종 전달) 은 TCP 또는 UDP 에 의해 수행됩니다.

스택 사이의 이 추상 프로토콜 포트는 소프트웨어 포트이며 라우터나 스위치의 하드웨어 포트와는 완전히 다릅니다. 하드웨어 포트는 서로 다른 하드웨어 디바이스 상호 작용을 위한 인터페이스이고 소프트웨어 포트는 애플리케이션 계층과 전송 개체에 있는 다양한 프로토콜 프로세스 간의 상호 작용을 위한 주소입니다. 시스템마다 시스템이 사용하는 운영 체제에 따라 다른 방식으로 포트를 구현할 수 있습니다.

TCP/IP 전송 계층은 포트 번호 16 으로 포트를 표시합니다. 그러나 포트 번호는 로컬로만 의미가 있으며 전송 계층과 상호 작용할 때 이 컴퓨터 애플리케이션 계층의 각 프로세스에 대한 계층 인터페이스를 표시하는 데만 사용됩니다. 인터넷상의 여러 컴퓨터에서 같은 포트 번호는 중요하지 않습니다. 16 비트 포트 번호는 65535 개의 서로 다른 포트 번호를 허용하므로 한 대의 컴퓨터에도 충분합니다.

이렇게 하면 서로 통신하기 위해 두 컴퓨터의 프로세스는 상대방의 P 주소 (상대방의 컴퓨터를 찾기 위해) 뿐만 아니라 상대방의 포트 번호 (상대방의 컴퓨터에서 응용 프로그램 프로세스를 찾기 위해) 도 알아야 합니다. 이것은 편지를 보내는 과정과 비슷하다. 우리가 누군가에게 편지를 쓸 때, 반드시 봉투에 그의 통신주소 (그의 숙소를 찾기 위해 P 주소와 맞먹는 주소) 와 수신인의 이름 (같은 숙소에 몇 명이 있을 수 있기 때문에, 포트 번호에 해당할 수 있기 때문) 을 적어야 한다. 봉투에도 너의 주소를 써라. 수신인이 답장을 할 때 편지봉투에서 보낸 사람의 주소를 쉽게 찾을 수 있다. 인터넷상의 컴퓨터 통신은 클라이언트-서버 모드를 사용합니다. 클라이언트가 통신 요청을 시작할 때 먼저 다른 서버의 P 주소와 포트 번호를 알아야 합니다. 따라서 전송 계층의 포트 번호는 다음 두 가지 범주로 나뉩니다.

(1) 서버측에서 사용하는 포트 번호는 여기에 두 가지 범주로 나뉩니다. 가장 중요한 범주는 알려진 포트 번호 또는 시스템 포트 번호이며 값은 0-l023 입니다. 이러한 가치는 www.iana.org 웹사이트에서 찾을 수 있습니다. Iana (internet number distribution authority) 는 이러한 포트 번호를 TCPP 의 가장 중요한 응용 프로그램 중 일부에 할당하여 모든 사용자에게 알립니다. 새 응용 프로그램이 나타나면 IANA 는 잘 알려진 포트를 할당해야 합니다. 그렇지 않으면 인터넷의 다른 응용 프로그램 프로세스가 통신할 수 없게 됩니다.

다른 하나는1024-49151의 값을 갖는 등록 포트 번호입니다. 이 포트 번호는 포트 번호에 익숙하지 않은 응용 프로그램에서 사용합니다. 이러한 포트 번호를 사용하려면 규정 절차에 따라 IANA 에 등록해야 중복이 방지됩니다.

(2) 클라이언트가 사용하는 포트 번호는 49 152-65535 입니다. 이 포트 번호는 클라이언트 프로세스가 실행될 때만 동적으로 선택되기 때문에 일시적인 포트 번호 1 이라고도 합니다. 이 포트 번호는 클라이언트 프로세스 선택을 위해 임시로 사용됩니다. 서버 프로세스가 클라이언트 프로세스에서 메시지를 수신할 때 클라이언트 프로세스에서 사용하는 포트 번호를 알고 있으므로 데이터를 클라이언트 프로세스로 전송할 수 있습니다. 통신이 끝나면 방금 사용한 클라이언트 포트 번호는 더 이상 존재하지 않으며 다른 클라이언트 프로세스에서 사용할 수 있습니다.

① 참고: 짧은 포트는 포트가 짧은 시간을 가지고 있음을 나타냅니다. 클라이언트 프로세스는 운영 체제가 할당한 포트 번호에 신경 쓰지 않습니다. 클라이언트 프로세스에는 전송 계층의 엔티티가 자신을 찾을 수 있도록 포트 번호 (로컬 호스트 내에서 고유해야 함) 가 있어야 하기 때문입니다. 이는 잘 알려진 포트와는 다릅니다. 서버의 전원을 켜자마자 서버 프로그램이 실행되기 시작했다. 인터넷상의 모든 클라이언트 프로그램이 서버 프로그램을 찾을 수 있도록 서버 프로그램에서 사용하는 포트 (잘 알려진 포트) 가 고정되고 잘 알려져 있어야 합니다.