개요

네트워크 소켓은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 소켓은 RFC 147에 기술사항이 정의되어 있다.

소켓구조.png

역사

소켓(socket)은 버클리 대학(University of California at Berkeley)에서 만들어져 1982년 BSD(Berkeley Software Distribution) UNIX 4.1에서 처음 소개 되었으며 현재 널리 사용 되는 것은 1986년 BSD UNIX 4.3에서 개정 된 것이다, 그래서 이 소켓을 BSD소켓 또는 버클리 소켓이라고 불리며 개발자는 이를 사용하여 네트워크 개발을 효율적으로 할 수 있다.

구성

인터넷 소켓은 다음과 같은 요소들로 구성되어 있다.

UDP 소켓

클라이언트

1. 소켓 생성

serverPort = 12000
serverName = 'hostName'
clientSocket = socket(socket.AF_INET, socket.SOCK_DGRAM)

2. 메시지 전송 주고 받기

message = "What you want to transfer"
clientSocket.sendto(message, (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recv-from(2048)

3. 소켓 닫기

clientSocket.close()

서버

1. 소켓 생성

serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind((,serverPort))

2. 접속을 기다린다.

while(메시지가 올때까지) 

3. 메시지 전송 주고 받기

message, clientAddress = serverSocket.recvfrom(bufferSize)
serverSocket.sendto(messageInfo, clientAddress)

4. 소켓 닫기

serverSocket.close()

TCP 소켓

클라이언트

1. 소켓 생성

serverName = 'serverName'
serverPort = 12000

2. 서버 연결 요청

clientSocket.connect((serverName, serverPort))

3. 메시지 전송 주고 받기

clientSocket.send(MessageToSend)
clientSocket.recv(BufferSize)

4. 소켓 닫기

clientSocket.close()

서버

1. 소켓 생성

serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind((, serverPort))

2. 입력 연결 요청 대기

serverSocket.listen(1)
while(accept 가 참)

3. 연결시 새로운 소켓 생성후 저장

connectionSocket = serverSocket.accept()

4. 새로운 소켓으로 통신

connectionSocket.send(MessageToSend)
connectionSocket.recv(BufferSize)

5. 소켓 닫기

connectionSocket.close()