1. 소켓이란?

소켓의 사전적 의미는 "구멍", "콘센트", "연결" 등의 뜻을 가진다.
네트워크의 소켓 역시 주변에서 흔히 볼 수 있는 플러그를 끼우는 소켓과 개념이 비슷하다.
단지 플러그를 연결하는 소켓은 어떤 디바이스에 전기를 공급받을 수 있도록 해주는 연결부이고,
네트워크의 소켓은 두 프로그램이 데이터를 송수신할 수 있도록
"네트워크 환경에 연결할 수 있게 만들어진 통로(연결부)" 이다.
이러한 소켓을
인터넷 소켓(Internet Socket) 혹은 네트워크 소켓(Network Socket)이라 부른다.
2. 소켓의 종류

소켓 통신은 클라이언트와 서버가 서로 양방향 연결을 한다.
따라서 클라이언트가 서버로,
서버가 클라이언트로 데이터 전송이 가능하다.
이는 연결 방식에 따라
TCP/IP 와 UDP/IP
로 나뉜다.
➥ TCP/IP 방식

▸ 양방향 통신 (3 way handshake)
▸TCP를 사용하므로 연결 지향형
▸ 신뢰성 높은 데이터 전송을 보장
▸ 데이터 전송 순서를 보장
▸ UDP보다 느린 속도
➥ UDP/IP 방식

▸ 단방향 통신
▸ UDP를 사용하므로 비연결 지향형
▸ 신뢰성이 낮은 데이터 전송
▸ 데이터 전송 순서가 보장 X
▸ 재전송을 하지 않음
▸ TCP보다 빠른 속도
3. TCP/IP 소켓 통신 순서
➪ 클라이언트(Client) 소켓 통신 과정
[1. 소켓 생성]
socket()을 통해 클라이언트 소켓을 생성
[2. 소켓 연결]
connect()를 통해 IP주소와 Port Number로 식별되는 서버에 연결 요청
3 way handshake 방식을 사용해 연결
[3. 데이터 송수신]
wirte()로 연결된 소켓을 통해 데이터를 송신
read()로 수신
받은 데이터 내용을 바로 송신하지 않고
송신용 버퍼 메모리 영역에 저장해두었다가
데이터 크기에 따라 모아서 보내거나 분할하여 보냄
[4. 소켓 연결 종료]
close()로 연결 종료
4 way handshake 방식 사용해 종료
➪ 서버(Server) 소켓 통신 과정
[1. 소켓을 생성]
socket()을 통해 서버 소켓을 생성
[2. 소켓을 바인딩]
bind()를 사용해 소켓과 포트 번호를 결합
인자로 (서버 소켓, Port Number) 혹은 (IP 주소, Port Number)를 전달
지정된 Port Number을 시스템 내에서 사용할 것을 요구
만약 사용 중인 Port Number이라면 에러 반환
[3. 연결 요청 대기]
listen()
bind()의 인자가 서버 소켓과 결합이 되었다면
클라이언트의 연결 요청 대기 (클라이언트의 connect())
성공적으로 요청을 수신하면 SUCCESS 반환
[4. 연결 허용]
accept()
소켓 사이의 연결 수립
클라이언트 소켓과 서버 소켓이 연결되는 것이 아니라
클라이언트 소켓과 accept() API 내부에서 새로 만들어지는 소켓과 연결
따라서 서버 소켓은 클라이언트와의 연결 요청을 수신하는 역할
서버 소켓은 다른 연결을 위해 다시 listen()하거나 close()
[5. 송수신]
write() & read()
클라이언트의 송수신 과정과 동일
[6. 소켓 연결 종료]
close()를 통해 연결 종료
클라이언트와 연결되었던 서버 소켓과
accept()의 소켓 모두 다 종료해야 함
참고
https://papimon.tistory.com/80
https://recipes4dev.tistory.com/153
https://on1ystar.github.io/socket%20programming/2021/03/16/socket-1/
▼ 파이썬 소켓 프로그래밍
파이썬 소켓 프로그래밍
↓ 소켓이란? https://yks-study.tistory.com/34?category=1007602 소켓 통신 (Socket Communication) 1. 소켓이란? 소켓의 사전적 의미는 "구멍", "콘센트", "연결" 등의 뜻을 가진다. 네트워크의 소켓 역시 주변..
yks-study.tistory.com
'기타' 카테고리의 다른 글
[STCON 2024] OWASP Top 10 for LLMs 및 대응 방안 (5) | 2024.11.04 |
---|---|
Binwalk 옵션 (0) | 2023.07.16 |
[자료구조] - 스택 (Stack) (0) | 2022.08.24 |
2, 8, 10, 16 진법 변환 쉽게 하기 (0) | 2022.05.03 |