TCP와 UDP에 대한 이해
TCP/IP 프로토콜 스택이란, 인터넷 기반의 데이터 송수신을 목적으로 설계된 스택이다. 큰 문제를 작게 나눠 계층화한 결과로, 각 스택 별 영역을 전문화하고 표준화한다.
Link계층 → IP계층 → (TCP계층 / UDP계층) → Application계층
으로 구성되어 있다.
Link 계층
- 물리적 영역의 표준화 결과이다.
- LAN, WAN, MAN과 같은 물리적인 네트워크 표준 관련 프로토콜이 정의되어 있다.
IP 계층
- Internet Protocol을 의미한다.
- 경로의 설정과 관련있는 프로토콜이다.
TCP/UDP 계층
- 실제 데이터의 송수신과 관련된 계층이다(Transport Layer).
- TCP : error control이 존재해 데이터의 전송을 보장하는 신뢰성이 있는 프로토콜. UDP에 비해 복잡.
- UDP : error control이 없어 이를 보장하지 못하는 프로토콜
Application 계층
- 응용프로그램의 프로토콜을 구성하는 계층이다.
- 소켓을 기반으로 완성하는 프로토콜
- 소켓을 생성하면, 아래의 Link, IP, TCP/UDP 계층에 대한 내용은 감춰진다.
TCP 서버/클라이언트의 구현
TCP Server
TCP서버의 기본적인 함수호출 순서는 다음과 같다.
listen()함수의 호출이 이루어지고 연결요청 가능 상태가 되면 클라이언트가 연결을 시도한다. listen함수와 accept함수 사이에서 서버와 클라이언트 사이에 3-way-handshaking이 일어난다.
연결 요청 대기 상태로 진입하는 listen함수이다.
int listen(int sock, int backlog);
//성공 시 0, 실패 시 -1 return
- sock : 연결요청 대기상태에 두고자 하는 소켓 파일 디스크립터. 이 함수의 인자로 전달된 디스크립터의 소켓이 서버 소켓이 된다.
- backlog : 연결요청 대기 큐의 크기 정보를 전달. 동시처리 가능한 client의 수.
TCP Client
TCP 클라이언트의 기본적인 함수호출 순서는 다음과 같다.
클라이언트의 경우, 소켓을 생성하고, 이 소켓을 대상으로 연결의 요청을 위해 connect()함수를 호출하는 것이 전부이다. connect함수를 호출할 때, 연결할 서버의 주소정보도 함께 전달된다.
int connect(int sock, const struct sockaddr* serv_addr, socklen_t addrlen);
//성공 시 생성된 소켓의 파일 디스크립터, 실패 시 -1 return
addrlen는 읽어오는 것이 아니라, 부여하는 것이다.
'네트워크 프로그래밍' 카테고리의 다른 글
[Socket] 도메인 이름과 인터넷 주소 (0) | 2023.10.17 |
---|---|
[Socket] 소켓의 Half-Close (0) | 2022.07.29 |
[Socket] 주소체계와 데이터 정렬 (0) | 2022.07.07 |
[Socket] 소켓의 타입과 프로토콜의 설정 (0) | 2022.07.07 |
[Socket] 네트워크 프로그래밍과 소켓의 이해 (0) | 2022.07.07 |