일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- CI
- libasm
- 스프링부트 웹 소켓
- IOS
- 소켓
- jenkins
- 42seoul
- 티스토리챌린지
- MySQL
- Spring
- 스프링부트
- sql
- 인공지능
- 프로그래밍언어론
- 리눅스
- Xcode
- 데이터베이스
- springboot
- CD
- javascript
- AI
- 스프링
- JPA
- swift
- 네트워크
- 아이패드다이어리
- DBMS
- 다이어리
- 오블완
- 오라클
- Today
- Total
Hi yoahn 개발블로그
컴퓨터 네트워크 및 실습 - 네트워크 모듈 본문
네트워크 관련 파이썬 모듈
IP 주소와 ipaddress 모듈
TCP/IP 에서는 호스트를 식별하기 위해 IP주소를 사용
- IP 주소 표현 방법: IP주소/(네트워크 주소의 자리 수)
ex) "192.168.100.10/24" -> 24비트가 네트워크 주소 표현을 위해 사용됨
1. IPAddress 모듈
- IP 주소를 표현하고 처리하기 위해 사용됨
- 파이썬에서 아용되는 IP 주소를 나타내기 위한 클래스
ipaddress.ip_address()
- IP 주소 객체 생성
IPv4, IPv6 자동 인식
IPv4, IPv6 호스트 주소 객체 직접 생성
- ipaddress.IPv4Address('192.168.0.1')
- ipaddress.IPv6Address('2001:ab8::2000')
IP주소 속성
- 주소 객체 속성을 이용하면 주소 속성 접근 가능
is_multicast 멀티캐스트 주소인지
is_private 사설망 주소이면 T
is_global 공중망 주소이면
is_unspecified 주소 용도가 지정 안되어있으면 T
is_reserved 유보된 주소이면 T
is_loopback 루프백 주소이면 T
- addr = ipaddress.ip_address('127.0.0.1')
- addr.version => 4
IP 주소 객체의 version을 알려준다(IPv4, IPv6)
2. socket 모듈
socket 이란?
- 통신 채널의 종단점이다.
- 통신을 하기 위해서는 프로그램이 socket 에 접속해야 한다.
- socket 모듈은 호스트에 관한 정보를 알아내고, socket 에 접속하여 데이터를 송수신 할 수 있는 함수를 제공한다.
socket.gethostname()
- 호스트이름 -> 문자열 주소이름 반환
- 자신이 사용하고 있는 컴퓨터 이름 검색
'DESKTOP-T6HFAIH'
socket.gethostbyname(host)
- 문자열 호스트 이름을 IP 주소로 변환한다. (host=www.python.org -> 151.101.88.223 )
socket.gethostbyname_ex(host)
- 호스트에 대한 더 많은 정보에 액세스
- 표준 호스트 이름, 별칭, 호스트에 사용 가능한 모든 IP주소를 튜플로 반환
= ( hostname, aliaslist, ipaddrlist )
socket.getfqdn(domain이름)
- 약식 서버이름으로부터 완전한 서버 이름을 검색
(문자열 주소에 대한 완전한 도메인 이름을 확인하기 위해서 사용)
socket.gethostbyaddr(ip주소)
- addr에 대한 host를 검색하는 함수
- 호스트의 ip주소를 알고 있으면 호스트의 문자열 주소를 알아낼 수 있음
- 호스트 정보를 ( hostname, aliaslist, ipaddrlist ) 튜플로 반환
3. 주소 유형(address family)과 소켓 유형(type)
- 주소 유형과 소켓 유형을 이용하여 데이터 전송 방식을 결정
- TCP/IP 프로토콜 구성
TCP/IP | OSI | 프로토콜 | ||
응용계층 | 응용계층 | DNS, DHCP, FTP, HTTPS, IMAP, POP3, SSH, SMTP, Telnet, TFTP | ||
표현계층 | JPEG, MIDI, MPEG, PICT, TIFF | |||
세션계층 | NetBIOS, NFS, SQL, ZIP, PAP | |||
전송계층 | 전송계층 | TCP, UDP | ||
네트워크계층 | 네트워크계층 | IPv4, IPv6 | ||
네트워크 인터페이스 계층 (접속 계층) | 데이터링크계층 | ARP, ATM, STP, CDP, , | ||
물리 계층 | Bluetooth, Ethernet, Wifi, ISDN |
- 주소 유형: 사용할 네트워크 계층 프로토콜을 지정
-> 데이터 헤더나 페이로드에 담아서 보냄 (IPv4, IPv6)
- 소켓 유형: 전송계층 프로토콜을 지정한다.
-> TCP/UDP
응용계층 프로토콜 -> 이메일, 인터넷 등 어플리케이션에서 사용하는 것들
파이썬이 지원하는 3가지 주소 유형
1) AF_INET
IPv4, 대부분 인터넷에서 사용
10진 표기법, 4byte=32bit
2) AF_INET6
IPv6 인터넷 주소 지정에 사용, 128비트 주소
3) AF_UNIX
- posix 호환 시스템에서 사용할 수 있는 프로세스간 통신 프로토콜(UDS) 주소 유형
- UDS구현하면 os가 네트워크 스택을 거치지 않고 프로세스간 직접 데이터 전달
- 파일 시스템이 주소 지정을 위한 네임스페이스로 사용됨
-> 동일한 시스템의 프로세스로 제한
소켓 유형
1) SOCK_STREAM
- 스트림 지향 전송
- 신뢰성있는 전송을 보장하는 TCP 프로토콜 사용
- HTTP와 같이 대부분의 응용 프로토콜에서 사용
- 메시지 순서, 재전송이 자동으로 처리되어 복잡한 응용 프로그램을 만드는 것이 간단해짐
2) SOCK_DGRAM
- 메시지 지향 데이터그램 전송
- 비신뢰성 전송을 하는 UDP 프로토콜 사용
- 멀티캐스팅에서 사용
- UDP: 사용자 데이터그램 프로토콜
UDP와 TCP 유형은 IPv4, IPv6모두 지원
3. 인터넷 서비스 정보 찾기
- 인터넷 응용 서비스 이름& 할당된 포트번호 알아내기
- 프로토콜 이름으로부터 할당번호 알아내기
service: 응용계층이 제공하는 프로토콜 (http, ftp, telnet,,,)
proto: 전송계층 프로토콜 (TCP/UDP)
- 인터넷 서비스 정보 검색을 위해 사용되는 함수
1) socket.getservbyname()
- 프로토콜의 포트 번호 확인
- IP주소가 하나인 호스트에서 다수의 응용프로그램 실행 가능
- 각각의 응용 프로그램은 고유한 소켓과 연결
- 소켓 = IP주소 + 포트번호 로 식별
- 특정 프로토콜 -> 지정된 포트 번호 할당되어있음
getservbyname(servicename, [protocolname])
servicename: 응용서비스 프로토콜(http, ftp,)
protocolname: TCP, UDP 전송계층 프로토콜
- 인터넷 응용프로토콜에 대한 포트번호 반환
>>> socket.getservbyname('http')
80
- 전송계층에 대한 프로토콜 이름이 포트로 어떻게 매핑되어있는지 확인
>>> socket.getprotobyname('tcp')
6
2) urllib.parse.urlparse()
- URL을 6개 요소로 분해
scheme: url에서 처음부터 :까지의 정보 (http, https, ftp, ,,)
parsed_url=urlparse(url)
socket.getservbyname(parsed_url.scheme)
-> scheme과 port 속성을 조사하여 프로토콜에 대한 포트번호를 확인한다
3) socket.getservbyport(port)
- 포트번호로부터 서비스 알아내기
4) socket.getprotobyname(proto)
- 프로토콜 이름으로부터 프로토콜 번호 알아내기
socket 정보 찾기
socket의 속성값 알아내기
- dir(socket) : socket의 모든 속성 표시
- getattr(socket, '모듈의 속성 이름')
getattr(socket,'AF_INET') -> socket의 AF_INET 속성값 반환
- getaddrinfo() 함수로 소켓에 대한 정보 찾기
socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)
- host : 도메인 이름 (ip주소 or 문자열 주소)
- port : 서비스 이름 or 포트 번호
- return: (family, type, proto, cannonname, sockaddr)
- 주소 유형, 소켓 타입, 네트워크 계층 프로토콜, ?, sockaddr=(ip, port) 소켓 주소
IP 주소 변환
- 컴퓨터 언어에 따라 IP주소를 표현하는 방법이 다르다
- IP주소 표현을 서로 변환할 필요가 있다.
inet_aton(), inet_ntoa()
10진 주소(a) <-> network 주소
바이트 순서 변환
- 멀티 바이트 데이터를 저장하는 순서 변환
- 호스트 바이트 순서
컴퓨터가 메모리에 저장하는 순서 (BigEndian, LittleEndian)
(높은 바이트부터 표시)
- 네트워크 바이트 순서
네트워크에서 바이트 단위로 데이터가 전달되는 순서
(낮은 바이트부터 표시)
Network -> host 주소 | 32bit | socket.ntohl(x) | |
16bit | socket.ntohs(x) | ||
host -> Network 주소 | 32bit | socket.htonl(x) | |
16bit | socket.htons(x) |
(양의 정수 x)
'sswu > 컴퓨터네트워크' 카테고리의 다른 글
[netwhat] 2. Netmask / Subnetmask / Broadcast (0) | 2021.01.05 |
---|---|
[netwhat] 1. What is an IP address (0) | 2020.12.28 |
컴퓨터 네트워크 및 실습 - 소켓 프로그래밍 (0) | 2020.06.10 |
컴퓨터 네트워크 및 실습 - 네트워크 (0) | 2020.06.03 |
컴퓨터 네트워크 및 실습 정리 - 파이썬 (0) | 2020.06.03 |