Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

네트워크 보안 10주차 정리 (TCP 프로그래밍) 본문

2-2/네트워크 보안

네트워크 보안 10주차 정리 (TCP 프로그래밍)

김브래 2023. 11. 7. 23:27

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