다중화와 역다중화를 알기 위해서는 먼저 소켓부터 알아야한다!
소켓은 데이터가 네트워크에서 프로세스로 이동할 때 문의 역할!
각각의 프로세스는 하나 또는 그 이상의 소켓을 가지고 있다.
전송 계층에서 호스트는 데이터를 직접 받지 않고, 소켓을 통해서 받는다!
송신 측에서 이루어진다.
여러 소켓의 데이터를 처리
전송 계층 헤더를 추가(추후에 역다중화에서 쓰인다)
수신 측에서 이루어진다.
헤더 정보를 사용하여 수신된 세그먼트를 올바른 소켓으로 전송
소켓은 특별한 식별자를 가지고 있다.
각 세그먼트는 소켓의 식별자를 가리키는 특별한 필드를 지녀야한다.
- 소스 포트 번호 필드
- 도착 포트 번호 필드
포트 번호: 16비트의 숫자로 되어있고, 0~65535의 범위의 숫자이다.
IP 주소 또한 소켓 식별자를 가리킬 때 사용된다.
clientSocket = socket(AF_INET, SOCK_DGRAM)
호스트는 위와 같이 UDP 소켓을 만든다.
소켓을 만들 때, 전송 계층은 자동으로 포트 번호(1024 ~ 65535)를 지정해준다.
clinetSocket.bind(('', 19157))
위와 같이 포트 번호(19157)를 직접 지정해줄 수도 있다.
- IP 주소와 포트 번호가 동일한 패킷: 동일한 목적지를 향해 전송!
recvfrom()
파이썬 코드에서 서버는 위의 코드를 통해 client 측의 포트 번호를 받아낸다.