TCP 프로토콜 관점에서의 소켓
소켓은 기본적으로 TCP 기반 통신을 할때 클라이언트와 서버가 통신하기 위해 사용되는 개념임
PORT 란
port(number)는 socket 을 식별하기 위해 부여되는 숫자, socket 은 <protocol, IP address, port number) 로 정의됨
하지만 프로토콜 스펙을 시스템 레벨에서 구현하면서 조금 달라진다.
Port number
0~16 bits 로 이루어진 숫자 (0 ~ 65535)
- 0 ~ 1023: well-known ports
- http(80), https(443), dns(53)
- 1024 ~ 49151: registered ports (IANA에 등록된 번호)
- MySQL DB(3306), Apache tomcat server(8080)
- 49152 ~ 65535: dynamic ports (등록안된 번호, 자동 할당될 때 사용)
소켓이란?
네트워크 프로그래밍 관점에서의 소켓
- TCP/IP 네트워크 모델에서 Application 계층 밑의 계층은 네트워크 기능을 편하게 사용할 수 있도록 시스템이 프로그래밍 인터페이스를 제공하는것
- 애플리케이션은 socket 을 통해 데이터를 주고 받음
- 대부분의 시스템은 socket 형태로 네트워크 기능 제공
- 보통 socket을 직접 조작해서 통신 기능 구현할 일은 적음
- 보통 라이브러리나 모듈형태로 해당 기능이 제공되는데 내부를 열어보면 소켓을 활용하여 프로토콜을 구현함
TCP socket 동작 방식
클라이언트와 서버가 통신할때
- 서버는 listening socket 을 정의하고 클라이언트의 연결을 기다림
- 클라이언트 A 와 서버의 connection 이 수립되면 앞으로 데이터를 주고 받을 소켓을 생성하고, 해당 소켓으로 통신함.
- 클라이언트 B와 서버의 connection 이 수립되면 앞으로 데이터를 주고 받을 소켓을 생성하고, 해당 소켓으로 통신함.
- 이때 <protocal, ip, port> 로 소켓을 특정할 수 없음(N) 개가 존재하기 때문에
- connection 이 성립된 이후에는 <src IP, src port, dest ip, dest port> 로 소켓을 식별함
- 클라이언트 측면에서도 port가 재사용 될수 있는데 이럴때는 어떻게 문제를 해결할까
- 동일한 <src IP, src port, dest ip, dest port> socket 으로 연결되어있으면 더이상 연결 할 수 없음
참고
https://www.cs.dartmouth.edu/~campbell/cs50/socketprogramming.html
'네트워크' 카테고리의 다른 글
[RFC-8705] - OAuth 2.0 Mutual-TLS (1) | 2024.02.12 |
---|---|
[네트워크 ] - HTTP 1.0, HTTP 1.1, HTTP 2.0 (0) | 2024.01.31 |
[네트워크] - TCP 통신 (0) | 2024.01.16 |
[네트워크] - IPv4 (0) | 2024.01.16 |