본문 바로가기

컴퓨터공부/정보처리기사

[정보처리기사] IP 주소 ,클래스 , IPv6 ,IPv4, 서브네팅 DNS

by Life & study 2023. 6. 23.
반응형

01234567891011121314

[정보처리기사]

[정보처리기사] IP 주소

ㅇㅇ

 

1. 8. 8. 8. 8    로  8비트로 되어있다.
2. 192.128.0.0 /24 면  = 255.255.255  . 0(0~255)  
                                  /8  . /16.  /24./32 
3. 뒤에 적힌 비트의 값이 맨앞에 8비트를 뜻한다.
4. 8비트라는건 0~255 개의 호스트를 가진것을 뜻한다.

 

[정보처리기사] IP 주소 클래스

A 클래스 = 8비트
B 클래스 = 16비트
C 클래스 = 32비트

 

[정보처리기사] IPv6 ,IPv4  비트에 대해서,...

 

 

IPv6                128비트이다.                 6비트 곱하기 2 = 12 뒤에 8비트 이런식으로 외우기?

IPv4                   32비트이다.                 4 곱하기 8 = 32비트 ? 흠?

 

 

[정보처리기사] IPv6 

 

IPv6  에 3가지

유니캐스트, 멀티캐스트, 애니캐스트

 

는 네트워크 통신에서 사용되는 주소 지정 방식입니다.
유니캐스트(Unicast):
유니캐스트는 네트워크에서 한 개의 송신자와 한 개의 수신자 간에 1:1 통신을 위해 사용됩니다.
송신자는 특정 수신자의 IP 주소로 데이터를 전송합니다.
네트워크 상에서 가장 일반적으로 사용되는 통신 방식입니다.
멀티캐스트(Multicast):
멀티캐스트는 네트워크에서 한 개의 송신자와 여러 개의 수신자 간에 1:N 통신을 위해 사용됩니다.
송신자는 특정 그룹의 IP 주소로 데이터를 전송합니다.
그룹에 속한 모든 수신자는 해당 데이터를 수신할 수 있습니다.
멀티캐스트는 IP 주소 범위로 지정되며, 해당 그룹에 속한 모든 호스트에게 데이터를 전송합니다.
애니캐스트(Anycast):
애니캐스트는 네트워크에서 여러 개의 수신자 중 가장 가까운 수신자에게 데이터를 전송하는 방식입니다.
송신자는 특정 그룹의 IP 주소로 데이터를 전송합니다.
해당 그룹에 속한 여러 개의 호스트 중에서 가장 가까운 호스트가 데이터를 수신합니다.
애니캐스트는 주로 로드 밸런싱이나 서비스 가용성을 향상시키기 위해 사용됩니다.

 

import socket

# 유니캐스트 통신 예시
def unicast_example():
    target_ip = "192.168.0.100"
    target_port = 8000

    # 송신자
    sender_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sender_socket.connect((target_ip, target_port))
    sender_socket.send(b"Hello, Unicast!")
    sender_socket.close()

    # 수신자
    receiver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    receiver_socket.bind((target_ip, target_port))
    receiver_socket.listen(1)
    conn, addr = receiver_socket.accept()
    data = conn.recv(1024)
    print(f"Received data: {data.decode()}")
    conn.close()

# 멀티캐스트 통신 예시
def multicast_example():
    multicast_group = "224.0.0.1"
    multicast_port = 8000

    # 송신자
    sender_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sender_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
    sender_socket.sendto(b"Hello, Multicast!", (multicast_group, multicast_port))
    sender_socket.close()

    # 수신자
    receiver_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    receiver_socket.bind(("", multicast_port))
    receiver_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(multicast_group) + socket.inet_aton("0.0.0.0"))
    data, addr = receiver_socket.recvfrom(1024)
    print(f"Received data: {data.decode()}")
    receiver_socket.close()

# 애니캐스트 통신 예시
def anycast_example():
    anycast_group = "192.168.0.255"
    anycast_port = 8000

    # 송신자
    sender_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sender_socket.sendto(b"Hello, Anycast!", (anycast_group, anycast_port))
    sender_socket.close()

    # 수신자
    receiver_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    receiver_socket.bind(("", anycast_port))
    data, addr = receiver_socket.recvfrom(1024)
    print(f"Received data: {data.decode()}")
    receiver_socket.close()

# 유니캐스트 통신 실행
unicast_example()

# 멀티캐스트 통신 실행
multicast_example()

# 애니캐스트 통신 실행
anycast_example()

 

[정보처리기사] 서브네팅

 

서브네팅

 

은 기존의 가지고 있는 IP 주소를 나눠서 쓰는것을 말한다.

 

서브네팅(Subnetting)은 IP 주소 공간을 작은 네트워크로 분할하는 기술입니다. 이를 통해 네트워크 관리자는 더 작은 네트워크를 생성하고, IP 주소를 효율적으로 할당할 수 있습니다.
서브네팅을 위한 코드 실행 순서는 다음과 같습니다:
IP 주소와 서브넷 마스크를 입력받습니다.
서브넷 마스크를 이진수로 변환합니다.
서브넷 마스크의 비트 수를 계산하여 서브넷의 개수를 파악합니다.
서브넷의 개수에 따라 IP 주소를 서브넷으로 분할합니다.

 

# IP 주소와 서브넷 마스크 입력
ip_address = "192.168.0.0"
subnet_mask = "255.255.255.0"

# 서브넷 마스크를 이진수로 변환하는 함수
def convert_to_binary(subnet_mask):
    binary_mask = ""
    for octet in subnet_mask.split("."):
        binary_mask += bin(int(octet))[2:].zfill(8)
    return binary_mask

# 서브넷의 개수를 계산하는 함수
def calculate_subnet_count(subnet_mask):
    binary_mask = convert_to_binary(subnet_mask)
    subnet_count = 2 ** binary_mask.count("0")
    return subnet_count

# IP 주소를 서브넷으로 분할하는 함수
def subnetting(ip_address, subnet_mask):
    subnet_count = calculate_subnet_count(subnet_mask)
    subnet_bits = subnet_count.bit_length() - 1
    subnet_mask_binary = convert_to_binary(subnet_mask)

    subnets = []
    for i in range(subnet_count):
        subnet = ip_address + "/" + str(32 - subnet_bits)  # 서브넷 주소
        subnets.append(subnet)
        ip_address = increment_ip_address(ip_address, subnet_bits)

    return subnets

# IP 주소를 증가시키는 함수
def increment_ip_address(ip_address, subnet_bits):
    ip_parts = ip_address.split(".")
    ip_decimal = int(ip_parts[3]) + 2 ** (8 - subnet_bits)
    ip_parts[3] = str(ip_decimal)
    return ".".join(ip_parts)

# 서브네팅 실행
subnets = subnetting(ip_address, subnet_mask)

# 결과 출력
print("Subnets:")
for subnet in subnets:
    print(subnet)

[정보처리기사] 서브네팅

 

 

[정보처리기사] DNS

도메인 네임은

 

사람인 IP 주소를 이해하기 쉬운 문자로 형태로 표현한것 = https://comingsoon1004.tistory.com/,

 

DNS 는

도메인네임을 컴퓨터가 IP주소 형태로 바꿔서 인식하는것은 DNS = 8.8.8.8, 255.255.255.255

 

import socket

def get_ip_address(domain_name):
    ip_address = socket.gethostbyname(domain_name)
    return ip_address

# 도메인 네임 입력
domain_name = "www.example.com"

# 도메인 네임에 대한 IP 주소 얻기
ip_address = get_ip_address(domain_name)

# 결과 출력
print(f"The IP address of {domain_name} is {ip_address}")

 

 

DNS(Domain Name System)은 인터넷에서 도메인 네임과 IP 주소 간의 매핑을 관리하는 시스템입니다. DNS는 도메인 네임을 IP 주소로 변환하거나, IP 주소를 도메인 네임으로 변환하는 역할을 합니다. 이를 통해 사용자는 도메인 네임을 사용하여 웹 사이트에 접속할 수 있습니다.
코드 실행 순서는 다음과 같습니다:
socket 모듈을 임포트합니다.
socket.gethostbyname() 함수를 사용하여 도메인 네임을 IP 주소로 변환합니다.
socket.gethostbyaddr() 함수를 사용하여 IP 주소를 도메인 네임으로 변환합니다.

 

import socket

# 도메인 네임을 IP 주소로 변환하는 함수
def get_ip_address(domain_name):
    ip_address = socket.gethostbyname(domain_name)
    return ip_address

# IP 주소를 도메인 네임으로 변환하는 함수
def get_domain_name(ip_address):
    domain_name = socket.gethostbyaddr(ip_address)[0]
    return domain_name

# 도메인 네임 입력
domain_name = "www.google.com"

# IP 주소 얻기
ip_address = get_ip_address(domain_name)

# IP 주소를 도메인 네임으로 변환
retrieved_domain_name = get_domain_name(ip_address)

# 결과 출력
print(f"The IP address of {domain_name} is {ip_address}")
print(f"The domain name of {ip_address} is {retrieved_domain_name}")

 

 

 

 

 

 

 

 

 

 

 


 

 

반응형

댓글