TCP 통신관련 시스템 함수
네트워크 통신을 지원하는 O/S 에서 TCP 통신 관련한 시스템 함수들에 대해 간단하게 설명한다.
이 시스템 함수들은 TCP 통신에 필요한 요소들을 모듈화 해 놓은 함수들 이므로 이 함수들을 살펴 보는 것도 TCP 통신을 이해하는 데 많은 도움이 될 것이다.
각 O/S 별로 시스템 함수의 명칭은 다를 수 있겠지만 가장 묘사적인이거나 통상적으로 언급되는 명칭으로 명기하여 간단히 설명한다..
socket() → 소켓 생성
파라미터 | |
수행동작 |
♦ 프로토콜 스택에 소켓의 정보를 저장하기 위한 메모리 할당 ♦ 소켓번호 생성 → 소켓번호는 O/S에서 파일디스크립터(fd)로 표현된다 |
반환값 | 파일 디스크립터/소켓번호 ← 프로토콜 스택 상에서 각 소켓을 구분해 주는 번호(포인터) |
bind() → 소켓 결합(서버기능)
파라미터 | 소켓번호, 소켓주소(IP, Port) |
수행동작 |
소켓번호와 소켓주소를 하나의 쌍으로 맺어 준다 → 어플리케이션 레이어에서 사용되는 소켓번호가 이로써 TCP 통신채널과 연결된다. ⊕ 여기서 결합된 소켓은 Gatekeeper 소켓 |
반환값 | 0(성공) / -1(실패) |
listen() → 접속 대기(서버기능)
파라키터 | 소켓번호 |
수행동작 |
♦ 소켓이 클라이언트의 접속을 대기하는 상태가 되도록 전환 → 즉 생성된 소켓이 서버역할을 하는 소켓이 되도록 전환 ♦ 클라이언트들로 부터의 연결 요청은 순서대로 Queue에 저장되어 관리 |
반환값 | 0(성공) / -1(실패) |
connect() → 소켓 연결 (클라이언트 기능)
파라미터 | 클라이언트 소켓번호, 서버의 소켓주소(IP, Port) |
수행동작 |
♦ 클라이언트 포트번호는 시스템에서 자동 할당 ♦ 클라이어트가 서버의 소켓조소로 소켓연결 요청 → 3-way handshake 방식으로 소켓 연결 ⊕ 연결된 소켓 = session이라 함. ♦ 쌍방 소켓 연결 성공(클라이언트 소켓 조립완료) → 소켓번호 와 소켓주소(서버)의 쌍을 맺어 놓아 데이터송수신에 이용 |
반환값 | 0(성공) / -1(실패) |
accept() → 소켓 연결(서버 기능)
파라미터 | 서버의 소켓번호, 메모리 포인터(클라이언트 소켓주소를 저장할 메모리) |
수행동작 |
♦ listen 동작의 결과로 클라이언트의 소켓연결 요청을 처리 → 3-way handshake 방식으로 소켓 연결을 수행 ♦ 쌍방 소켓연결 성공(서버 소켓 조립완료) → 새로운 소켓번호를 생성하여 소켓주소(클라이언트)와 쌍을 맺어 놓는다. |
반환값 | 성공(파일 디스크립터/클라이언트 소켓번호)/-1(실패) ← 프로토콜 스택 상에서 각 소켓을 구분해 주는 포인터/번호 |
send() → 데이터 송신
파라미터 | 소켓번호, 데이터(send), 수신버퍼의 주소(recv) |
수행동작 |
♦ 상위 레이어로부터 내려온 데이터를 송신 버퍼에 저장하여 하위레이어에 적절하게 전달한다. ♦ 데이터 송수신은 클라언트 소켓과 서버소켓을 이용한다. |
반환값 | 0(성공) / -1(실패) |
recv() → 데이터 수신
파라미터 | 소켓번호, 데이터(send), 수신버퍼의 주소(recv) |
수행동작 |
♦ 하위 레이어로 부터 올라온 데이터를 수신 버퍼에 저장한후 적절하게 상위레이어에 전달한다. ♦ 데이터 송수신은 클라언트 소켓과 서버소켓을 이용한다. |
반환값 | 0(성공) / -1(실패) |
close() → 소켓종료
파라미터 | 소켓번호 |
수행동작 |
♦ 소켓연결(session) 헤제 ♦ 소켓에 할당된 Port 번호 해제 |
반환값 | 0(성공) / -1(실패) |