브래의 슬기로운 코딩 생활
네트워크 보안 10주차 정리 (TCP 프로그래밍) 본문
TCP 프로그래밍
소켓 생성 및 TCP 클라이언트용 APIs
통신 모델
서버/클라이언트 모델
Server : 서비스 제공자
Client : 서비스 요청자
방식에 따른 서버의 종류
복잡성(서버 vs 클라이언트)
- 서버는 일반적으로 클라이언트의 요청에 맞는 서비스를 제공
- 다양한 클라이언트의 요청에 대한 응답을 처리해야 함
- 서버는 클라이언트대비 복잡한 제어와 구조를 가짐
네트워크 프로그래밍
- 원거리 프로세스간 상호 통신을 위한 기법
- 운영체제는 원거리 프로세스간 통신을 위해 소켓(socket)을 지원
네트워크 시험
네트워크 시험 툴
명령어: nc {-options} [hostname] [port]
• NC: Net Cat
• 네트워크 시험을 위한 도구
– 일반적으로 프로그램 검증 도구(debugger)로 사용
• 지정한 옵션으로 원격 서버에 접속을 시도
• 사용자의 입력내용(표준 입력)을 서버에 전달
• 대표적 옵션:
– -u : UDP 모드 동작(생략이면 TCP 모드로 동작함)
– -t : telnet형태로 동작(TCP)
– -l : listen 모드 동작(서버로 사용 시)
– -p : localhost의 포트번호(서버로 사용 시)
소켓 생성
소켓 생성 함수
함수 : socket()
• 소켓을 생성하는 함수
• 프로세스간의 통신을 위한 EP(End-Point)를 생성
• 인자:
– domain : 소켓에 사용될 프로토콜 패밀리
– type : 소켓의 유형
– protocol : 프로토콜 별 세부사항 설정(없으면: 0)
• 결과 값:
– 성공 : 파일 기술자
– 실패 : -1
함수 : socket()
• 인자:
– domain : 소켓에 사용될 프로토콜 패밀리
– type : 소켓의 유형
– protocol : 프로토콜 별 세부사항 설정
TCP 소켓
특징
- 연결형 소켓(Connection Oriented)을 사용
- 데이터의 신뢰성을 보장
TCP용 소켓 생성
- socket() 함수를 사용
- domain 항목 IPv4 주소 체계를 사용한다는 의미를 갖는 AF_INET(Address Family INTERNET)을 지정
- type 항목에는 SOCK_STREAM을 지정
- protocol 항목은 의미 없음
접속 요청
함수 : connect()
• 서버에 접속을 요청
• TCP 클라이언트용 함수
• 서버에 접속을 요청하기 위해서는 원격의 IP주소와 포트번호를 알고 있어야 함
• 인자
– sockfd : 파일 기술자(소켓 기술자라고도 함)
– *addr : 접속할 대상(서버)의 정보
– addrlen : addr 구조체의 크기
• 결과 값:
– 성공 : 0
– 실패 : -1
소켓 및 TCP 프로그래밍
TCP 서버용 APIs
TCP 서버 동작
기본 동작
- 서비스 제공을 위한 대기상태를 유지
- 클라이언트 접속 요청에 대한 (연결) 대기큐(backlog)를 생성
- 연결 대기큐별 접속 수락 및 요청 서비스 제공
TCP 서버용 함수
주소 할당 함수
함수 : bind()
• 서버용 함수
• 소켓과 할당할 주소(IP 주소, 포트번호)를 연결
• 인자:
– sockfd : 소켓 기술자
– *addr : 할당할 주소 정보
– addrlen : 구조체변수 *addr의 크기
• 결과 값:
– 성공 : 0
– 실패 : -1
연결 대기 함수
함수: listen()
• 서버용 함수
• 연결 요청 대기큐(backlog)를 생성
• 클라이언트로부터 연결 요청을 기다리는 대기큐를 생성
• 인자:
– sockfd : 소켓 기술자
– backlog : 대기큐의 개수(크기)
• 결과 값:
– 성공 : 0
– 실패 : -1
연결 요청 수락 함수
함수 : accept()
• 서버용 함수
• 클라이언트의 연결(접속) 요청을 수락함
• 클라이언트를 위한 새로운 소켓(파일) 기술자가 생성됨
• 인자:
– sockfd : 서버의 소켓 기술자
– *addr : 클라이언트의 주소 정보
– *addrlen : 구조체 변수 *addr의 크기
• 결과 값:
– 성공 : 소켓 기술자
– 실패 : -1
'2-2 > 네트워크 보안' 카테고리의 다른 글
네트워크 보안 12주차 정리 -1 (Multiplex 서버- select 기법) (0) | 2023.11.21 |
---|---|
네트워크 보안 11주차 정리 (소켓 및 TCP 프로그래밍) (0) | 2023.11.21 |
네트워크 보안 9주차 정리 (네트워크용 기본 API) (0) | 2023.10.31 |
네트워크 보안 중간고사 힌트 정리 (2) | 2023.10.21 |
네트워크 보안 7주차 정리 (UNIX 기본 함수) (0) | 2023.10.17 |