1. Socket
- 네트워크 상에서 통신을 가능하게 해주는 양 끝단의 연결고리
- 특정 프로토콜을 사용하여 데이터를 송수신할 수 있도록 해줌
- 소켓 프로그래밍 : 소켓을 이용하여 네트워크 상에서 데이터를 주고받는 프로그램을 작성하는 것
- 소켓 생성 : 프로그래밍 언어에서 제공하는 API를 활용하여 소켓을 생성할 수 있음
- 소켓 주소 : IP 주소와 포트 번호로 구성된 네트워크 식별자
- 용도 : 서버와 클라이언트 간의 통신, 프로세스 간 통신 등
2. TCP(Transmission Control Protocol) & UDP(User Datagram Protocol)
- TCP : 전송 계층 프로토콜로, 데이터 전송의 신뢰성을 보장
- 연결형 프로토콜 : 데이터 전송 전에 연결을 설정하고, 통신이 완료될 때까지 연결을 유지함
- 신뢰성 : 데이터 전송의 순서 보장, 패킷 손실 시 재전송 등의 메커니즘을 제공
- 사용 사례 : 웹 브라우징, 이메일 전송 등 신뢰성 있는 데이터 전송이 필요한 경우.
- UDP : 전송 계층 프로토콜 중 하나로, 주로 간단하고 빠른 데이터 전송이 필요할 때 사용
- 비연결형 프로토콜 : 데이터의 연결 상태를 유지하지 않고 데이터를 전송
- 속도 우선 : 데이터 전송 속도가 빠르지만, 신뢰성은 보장되지 않음(패킷 손실 가능)
- 사용 사례 : 실시간 스트리밍, 온라인 게임 등 신속한 데이터 전송이 필요한 상황
-
비교TCPUDP신뢰성신뢰성 보장 O신뢰성 보장 X속도느림빠름오버헤드연결 설정 및 유지를 위한 오버헤드 있음TCP에 비해 상대적으로 오버헤드 적음

출처 : https://velog.io/@jjo3ys/2.3.2-전송계층-tcp-udp-zbxef4i1 3. 소켓 프로그래밍의 차이점
- TCP 소켓 프로그래밍
- 연결 설정 : 클라이언트와 서버 간에 안정적인 연결을 설정함(3-way handshake)
- 데이터 전송 : 연결이 설정되면 스트림 방식으로 데이터를 주고 받음
- 연결 해제 : 통신이 끝나면 연결을 해제하여 리소스를 반환함 (4-way handshake)
-
더보기
TCP 소켓 필수 구성 요소
- 소켓 생성:
- socket() 함수를 사용하여 소켓을 생성합니다.
- 예: int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- 주소 구조체 설정:
- sockaddr_in 구조체를 사용하여 IP 주소와 포트 번호를 설정합니다.
- 예: servaddr.sin_family = AF_INET;, servaddr.sin_addr.s_addr = INADDR_ANY;, servaddr.sin_port = htons(PORT);
- 소켓 옵션 설정 (선택사항):
- **setsockopt()**를 사용하여 소켓 옵션을 설정할 수 있습니다. 예를 들어, 포트 재사용을 설정합니다.
- 예: setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
- 바인딩:
- bind() 함수를 사용하여 소켓을 특정 IP 주소와 포트에 바인딩합니다.
- 예: bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- 연결 대기 (서버에서만 필요):
- listen() 함수를 통해 클라이언트의 연결 요청을 대기합니다.
- 예: listen(sockfd, 3);
- 연결 수락 (서버에서만 필요):
- accept() 함수를 사용하여 클라이언트의 연결 요청을 수락합니다.
- 예: int new_socket = accept(sockfd, (struct sockaddr *)&cliaddr, &addrlen);
- 데이터 송수신:
- **send()**와 recv() 함수를 사용하여 데이터를 주고받습니다.
- 예: send(new_socket, hello, strlen(hello), 0);, recv(new_socket, buffer, sizeof(buffer), 0);
- 연결 종료:
- close() 함수를 통해 소켓을 닫습니다.
- 예: close(sockfd);
- 소켓 생성:
- UDP 소켓 프로그래밍
- 간단한 설정 : 별도의 연결 설정 과정이 필요 없음. 데이터그램을 직접 보냄
- 데이터 전송 : 독립적인 데이터그램을 전송하며, 데이터의 상태나 순서를 보장하지 않음
- 연결 해제가 없음 : 연결 유지 없이 필요한 데이터 전송만 진행함
-
더보기
UDP 소켓 필수 구성 요소
- 소켓 생성:
- socket() 함수를 사용하여 소켓을 생성합니다.
- 예: int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- 주소 구조체 설정:
- sockaddr_in 구조체를 사용하여 IP 주소와 포트 번호를 설정합니다.
- 예: servaddr.sin_family = AF_INET;, servaddr.sin_addr.s_addr = INADDR_ANY;, servaddr.sin_port = htons(PORT);
- 바인딩 (서버 측):
- bind() 함수를 통해 소켓을 특정 IP 주소와 포트에 바인딩합니다.
- 예: bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- 데이터 송수신:
- **sendto()**와 recvfrom() 함수를 사용하여 데이터를 주고받습니다.
- 예: sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));, recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&cliaddr, &len);
- 연결 종료:
- close() 함수를 통해 소켓을 닫습니다.
- 예: close(sockfd);
- 소켓 생성:
- TCP 소켓 프로그래밍
'GDG on Campus: SSWU 6th > Winter Blog Challenge' 카테고리의 다른 글
| [Winter Blog Challenge] (Chapter Member 이예림) (2) | 2025.06.06 |
|---|---|
| [Winter Blog Challenge] GDG Flutter 스터디 후기 (Chapter Member 박정선) (0) | 2025.06.06 |
| [Winter Blog Challenge] 웹 API (Chapter Member 이하경) (0) | 2025.03.27 |
| [Winter Blog Challenge] SQL vs. NoSQL (Chapter Member 김예린) (0) | 2025.03.07 |
| [Winter Blog Challenge] 텍스트만 입력하면 영화가 뚝딱? 구글 비오(Veo)를 만나다 (Team Member 김찬진) (0) | 2025.03.07 |