본문으로 바로가기

2020/7/28 C#

category 스마트팩토리/C# 2020. 7. 28. 23:01

네트워크 통신

프로토콜(protocol)

컴퓨터 간의 통신에서 서로의 주소를 아는 것과 함께 중요한 것이 어떤 절차를 거쳐 통신을 주고받을 것이냐에 대한 규칙을 정하는것이다. 현재 가장 많이 사용하는 프로토콜이 TCP/IP이다.

 

System.Net.IPAddress

 

현재 널리 사용되는 TCP/IP의 IP는 4번째 버전에 해당하는 기술로서, 줄여서 IPv4(Internet Protocol version 4)라 한다.

IPv4통신을 위해 네트워크 어뎁터에 고유 주소값이 부여된다. 이를 IP주소라 한다.

IPv4의 고갈에 따라 IPv6이 등장했다.

 

C#에서 IP는 System.Net.IPAddress타입으로 표현된다.

Parse 정적 메소드가 제공되므로 문자열로부터 IPAddress 인스턴스로 변환하거나, 직접 숫자에 해당하는 바이트 값을 생성자에 전달하는것도 가능하다

 

포트

네트워크 통신은 일반적으로 두가지로 나뉜다.

서비스를 열고 있는 측(server) ,서비스에 접속하는 측(client)으로 나뉜다.

이름하여 클라이언트/서버구조라고 한다.

 

여기서 서버란 실제로 TCP/IP 통신을 하는 프로그램을 의미하는데, 한대의 컴퓨터에서 실행되는 서버 프로그램의 종류는 매우 다양하다.

예를 들어, 어떤 프로그램은 웹 서버 기능을 구현할수도 있고, 어떤 프로그램은 메일 서버를 구현할수 있다.

그런데 배운 TCP/IP 통신의 식별자는 IP주소다. 문제는 IP 주소가 컴퓨터에 장착된 네트워크 어댑터는 식별해 주지만, 운영체제 상에서 실행중인 프로그램까지는 구분할수 없다는 점이다.

그래서 이것을 해결하기 위해서 TCP/IP는 포트라는 개념을 추가한다.

 

포트가 도입됨으로써 서버 측 프로그램에서는 IP와 함께 포트를 이용해 통신을 대기할 수 있다.

따라서 원하는 포트 번호를 미리 선점하여 통신을 대기해 두면 클라이언트 측에서는 그 번호에 해당하는 포트를 지정해 서버와 연결할 수있다. 

 

포트가 없었을 경우에는 2개의 TCP/IP 프로그램이 한대의 컴퓨터에서 실행하기 위해서 2개의 IP가 할당

 

포드가 있을 경우에는 1개의 IP로  65535개의 TCP/IP 응용 프로그램이 실행될수 있다.

 

 

System.Net.IPEndPoint

 

EndPoint는 접점,종점 또는 종단점으로 해석할수 있는데, TCP/IP 통신에서 접점이란 IP 주소 + 포트를 일컷는 말이다.

 

예를 통하면 이해가 쉽다

현재 컴튜어에 192.168.1.10이라는 주소가 할당돼 있고 여기에 9000번 포트를 지정한 IPEndPoint 정보는 다음과 같다.

 

IPAddress ipAddr = IPAddress.Parse("192.168.1.10");

IPEndPoint endpoint = new IPEndPoint(ipAddr,9000);

 

IP 주소가 192.168.1.10이고 9000번 포트인 경우 -> 192.168.1.10: 90000이 된다

 

 

System.Net.Dns

GetHostEntry 정적 메서드는 도메인 이름을 입력받으면 시스템에 설정된 도메인 네임 서버로 해당 이름의 IP를 조회한다. 결과를 돌려 받은 IPHostEntry 타입은 도메인 이름에 설정된 IP 목록을 IPAddress 타입의 배열인 AddressList 속성으로 제공한다.

why 도메인 이름에 여러개의 IP 주소일까?

집전화,핸드폰,회사 전화 등이 하나의 이름으로 묶여있는 경우처럼 도메인 네임 하나에 여러 개의 IP가 묶인 것이다.

또한 윈도우는 컴퓨터 이름으 자체적인 도메인 이름처럼 해석하는 기능 제공한다.

따라서 사용 중인 컴퓨터의 이름을 GetHostEntry에 전달하면 실행 중인 컴퓨터에 할당된 IP주소 목록을 얻을수 있다.

 

위와 같이 실행 정보를 통해 여러분의 컴퓨터에 공용 IP가 할당돼 있는지, 또는 개인 IP할당되어있는지 가늠할수 있다.

도메인 이름을 사용할때 단점이라면 DNS로부터 IP주소를 조회해야 하기에 그만큼 속도 저하가 된다.

그 때문에 윈도우 내부적으로 한번 조회된 적이 있는 도메인명과 IP는 일정 시간 동안 저장해 두는 기능이 있다.

그래서 다음번에 동일한 DNS 조회 요청이 오면 서버와의 통신 없이 미리 저장해 둔 IP주소를 반환하여 속도를 향상 시킨다.

 

도메인 이름의 이런 특징은 1개의 도메인명에 N개의 IP가 묶인 경우 일종의 부하 분산역할을 한다.

 

IP 주소를 가진 기기로의 통신 속도를 재는 ping 프로그램을 이용해 www.naver.com을  을 조회한다

 

www.naver.com이라는 도메인 이름에 대해 23.46.23.18이라는 주소를 DNS 서버로부터 받은것을 알수 있다.

이후 동일한 명령을 내리면 IP는 바뀌지 않는다. 왜냐하면 이전에 말한것과 같이 저장되기 때문이다.

저장된 목록을 비우기 위해서는 ipconfig 명령을 내릴수 잇다.

그리고 다시 ping을 하면 새로운 IP주소가 나올것이다.

 

 

'스마트팩토리 > C#' 카테고리의 다른 글

2020/7/30 C#  (0) 2020.07.30
2020/07/29 C#  (0) 2020.07.29
2020/07/27 C#  (0) 2020.07.27
2020/07/23~24 C#  (0) 2020.07.23
2020/7/22 C#  (0) 2020.07.22