네트워크 프로그래밍
호스트 상호간 데이터 전송
통신과정
SYN : 나 접속할게(client ⇒ server)
SYN, ACK : SYN message 응답, 응 들어와
ACK : ㅇㅋ, 잘 도착함
소켓(Socket)
Network interface : MAC주소(고유한 ID)
IP : 여러개 부여 가능!!, HOST를 구분
PORT : 애플리케이션 구분
Socket : 애플리케이션 안에서 클라이언트들을 구분
TCP Communication
bind() : address와 소켓을 연결(특정 ip의 특정 port를 지정)
listen() : 클라이언트로부터의 연결을 기다림(기다림의 시간...)
connect() : 서버로 연결 접속(ip와 port번호를 넣어서 서버로 접속)
accept() : 클라이언트로부터 연결을 허가(드디어 왔구나!!, 어서 오시오)
recv() : 데이터 받기
send() : 데이터 보냄
close() : 연결 중단
TCP : 전송 보장, 앞에 패킷이 전달이 되어야지 뒤에 패킷을 전달함, 데이터 전달 속도 늦음, 신뢰성
UDP : 패킷을 보내고 신경을 안써서 다음 패킷 바로 보냄
TCP 공격
Syn flooding
Ack storm
사용 함수
socket.gethostname() : Return host name
socket.gethostbyname() : Return IP address
binascii.hexlify() : 16진수 문자열 hexstr로 표현된 바이너리 데이터를 반환
socket.getservbyport(port번호, 프로토콜 이름) : 서비스 이름 찾기
gettimeout() : Blocking mode
encode() : String to Byte
decode() : Byte to String
setsockopt() : 기본 소켓 버퍼 크기 변경
TCP 소켓 : 블로킹 모드가 기본값
논블로킹 모드 : 서버로부터 응답을 무한정 기다리지 않고 연결 과정을 취소할 수 있는 멈춤 기능
NPT(Network Time Protocal) : 시간 서버와 동기화하는 프로토콜
NTP 서버가 제공하는 정확도의 시간 정보가 필요없을 때 SNTP(Simple Network Time Protocal) 사용
Select
select : 싱글쓰레드로 다중 I/O를 처리하는 멀티플렉싱 통지모델의 가장 대표적인 방법
파일 디스크립터의 상황을 파악
- 해당 파일 디스크립터가 I/O 준비 되면
- 그 파일 디스크립터가 할당받은 커널 Buffer에 데이터 복사
Epoll
select의 한계로 등장
select의 한계 : select가 모든 fd를 순회하면서 recv()를 호출하는 방법보다 좋음
epoll : 관찰 대상인 fd들의 정보를 담은 저장소를 직접 운영체제가 담당
- 전체 파일 디스크립터에 대한 반복문을 사용하지 않음
- 커널에게 정보를 요청하는 함수를 호출할 때마다 전체 관찰 대상에 대한 정보를 넘기지 않음
async / await : 동기적으로 처리
fcntl : file control
- 파일 및 레코드 잠금 함수
- 읽기 잠금 : 여러 프로세스가 읽기 공유
- 쓰기 잠금 : 하나의 프로세스만 쓰기
fork : 새로운 프로세스 생성
'개인 공부' 카테고리의 다른 글
정보보호 관리체계 구축(1) (0) | 2023.04.25 |
---|---|
기초 파이썬 지식 (0) | 2023.04.25 |