22TCP IP 네트워크 프로토콜 소개-전송 계층: UDP 프로토콜
호스트에는 여러 적용 프로세스가 동시에 외부 세계와 통신하는 경우가 많습니다 (예: 브라우저 및 QQ 가 동시에 실행). 다음 그림에서 호스트 a 의 AP 1 프로세스가 호스트 b 의 AP3 프로세스와 통신하고 있으며 호스트 a 의 AP2 프로세스도 호스트 b 의 AP4 프로세스와 통신하고 있습니다 .....
두 호스트의 전송 계층 사이에는' 전송 계층은 애플리케이션 프로세스 간의 논리적 통신을 제공한다' 는 회색 양방향 화살표가 있습니다.
논리적 통신: 전송 계층에서 양방향 화살표를 따라 수평으로 데이터를 전송하는 것처럼 보이지만 실제로는 그림의 점선을 따라 여러 프로토콜 계층을 통해 전송됩니다.
TCP/IP 스택의 전송 계층에는 ——UDP 와 TCP 의 두 가지 중요한 프로토콜이 있습니다. 서로 다른 애플리케이션 프로세스가 전송 계층에서 TCP 또는 UDP 중 하나를 사용합니다.
첫 번째 섹션에서는 포트 개념을 이해했으며 포트 역할은 전송 계층에 반영됩니다.
앞의 그림에서 AP 1 AP3 과 AP2 와 AP4 간의 통신은 동일한 전송 계층 프로토콜 (TCP 또는 UDP) 을 통해 전송할 수 있습니다. IP 주소나 MAC 주소에 따라 데이터를 올바른 호스트로만 전송할 수 있으며 포트에 의해 식별되는 프로세스를 전송해야 합니다.
예를 들어 브라우저와 QQ 를 동시에 사용하고, 브라우저가 80 개의 포트를 차지하고, QQ 가 4000 개의 포트를 차지한다면, 전송된 QQ 메시지는 4,000 개의 포트를 통해 QQ 클라이언트에 표시되며 브라우저에 잘못 표시되지 않습니다.
포트 번호는 0 부터 65535 까지입니다. 여기서 각 항목은 다음을 나타냅니다.
숫자 0 ~ 1023 은 시스템 포트 번호입니다. 이러한 포트 번호는 www.iana.org 에서 찾을 수 있으며 가장 중요한 TCP/IP 애플리케이션 중 일부에 할당됩니다. 다음은 몇 가지 일반적인 시스템 포트 번호입니다.
다음과 같이 netstat -luant 명령을 사용하여 수신 포트를 나열합니다.
보시다시피 모두 TCP 프로토콜입니다. 그러나 나중에 UDP 패킷 전송을 시뮬레이트하는 프로그램을 작성하고 tcpdump 도구를 사용하여 패키지를 캡처하여 UDP 프로토콜을 이해하는 데 도움을 줄 것입니다.
UDP (User Datagram Protocol) 사용자 데이터그램 프로토콜 (user datagram protocol) 은 IP 데이터그램 서비스에 소량의 기능만 추가합니다. 주요 특징은 다음과 같습니다.
UDP 는 연결되지 않으며 TCP 와 같이 데이터를 보내기 전에 연결을 설정할 필요가 없으므로 오버헤드와 지연이 줄어듭니다.
UDP 는 전달의 신뢰성을 보장하지 않고 최선을 다해 전달한다.
UDP 는 메시지 지향적입니다. 애플리케이션 계층에서 전송된 IP 데이터그램의 경우 매우 간단한 캡슐화 (8 바이트 UDP 헤더) 만 수행되므로 헤더 오버헤드가 적습니다.
UDP 에는 정체 제어가 없으므로 네트워크 정체가 발생할 경우 발신자가 전송 속도를 낮추지 않습니다. 이 기능은 IP 전화, 화상 회의 등과 같은 실시간 어플리케이션에 매우 중요합니다. 이러한 데이터를 버리지 않으면 지연 누적이 발생할 가능성이 높기 때문에 정체로 인해 일부 데이터가 손실될 수 있습니다.
UDP 는 일대일, 일대다, 다대일 및 다대다 상호 작용을 지원합니다.
애플리케이션 계층에서 전송 계층, 네트워크 계층에 이르는 모든 수준의 캡슐화
UDP 데이터그램은 UDP 헤더와 데이터 섹션의 두 부분으로 나눌 수 있습니다. 데이터 부분은 응용 프로그램 계층에서 전달된 데이터입니다. UDP 헤더는 *** 8 바이트로, 이 8 바이트는 4 개의 필드로 나뉩니다.
이 c 프로그램은 IP 주소가 192. 168. 1 인 포트 7777 에' hello' 메시지를 보냅니다. 편집기를 사용하여 프로그램을 수정하여 다른 콘텐츠를 다른 IP 로 보낼 수 있습니다.
컴파일 후 실행하지 마십시오. 또한 잘 알려진 캡처 키트 도구인 tcpdump 를 사용하고 다음 명령을 차례로 입력하여 설치하고 tcpdump 를 실행해야 합니다.
새 터미널을 열고 다음 명령을 입력하여 방금 컴파일된 c 프로그램 테스트를 실행합니다.
테스트 프로그램이 실행되면 tcpdump 를 방금 실행한 터미널로 돌아가서 패킷 캡처 결과를 확인합니다.
파란색 상자는 16 의 대상 포트, 녹색 상자는 16 의 대상 IP, 빨간색 상자는 20 바이트의 IP 헤더, 주황색 밑줄은 8 바이트의 UDP 헤더, 빨간색 밑줄은 hello 의 ASCII 코드입니다.
4500 부터 0 10 1 까지 모두 IP 헤더입니다. IP 메시지 앞에서 이미 언급되었으니 여기서는 더 이상 군말을 하지 않습니다. 후반부는 UDP 메시지입니다.
UDP 헤더는 *** 8 바이트이므로 eb39 ~ ac82 는 UDP 헤더의 일부입니다.
Eb39: 소스 포트, 2 바이트, 십진수로 변환, 32830 입니다.
1e6 1: 대상 포트, 2 바이트, 10 진수 7777.
00 1c: 패킷 길이 (바이트) 입니다. 10 진수를 사용하는 경우 패킷 길이는 28 바이트입니다.
Ac82: 체크섬
다음은 데이터 내용의 ASCII 코드입니다.
Tcpdump 를 사용하여 UDP 데이터그램을 가져오고 메시지를 해석합니다.
C 프로그램을 수정하여 다른 IP 및 다른 포트로 다른 콘텐츠를 보냅니다.