Socket
Application program과 운영체제가 관리하는 transport 사이의 interface가 socket에 해당한다.
Socket Programming with UDP
UDP는 clinet와 server간 connection을 setup하지 않고 데이터를 전송하며,
데이터를 전송할 때 packet에 IP destination address와 port 번호를 붙여 전송한다.
구체적인 동작 방식은 아래와 같다.
Client/Server socket interaction: UDP
Client 측 코드
간단하게 흐름을 살펴보면, 우선 socket으로 데이터를 주고받기 위해
`clientSoekct = socket(AF_INET, SOCK_DGRAM)` 으로 클라이언트 소켓을 생성하는 것을 확인할 수 있다.
이 때 AF_INET는 IPv4 형식의 ip address를 사용하겠다는 것을 의미하며 SOCK_DGRAM은 어떤 transport protocol을 사용할 것인지를 명시하는 것으로 UDP를 사용할 것임을 의미한다.
이후 메세지를 생성하고, 이를 전송한 후 리턴값을 받아 decode하는 과정으로 이루어져 있다.
Server 측 코드
Server측 코드도 Clinet와 유사하지만 한 가지 큰 차이점이 있다.
처음 socket을 생성하면, OS에 의해 자동으로 포트번호가 할당된다. 다만, server의 경우 명시적인 포트번호가 존재해야 클라이언트들이 접근할 수 있기 때문에
`serverSocket.bind((",serverPort))` 를 통해 serverPort 주소를 명시적으로 설정해준다.
또한 client에서 자신이 필요한 행위를 수행한 후 socket을 close한 것과 달리, server는 socket을 남겨두고 while loop를 돌며 클라이언트 요청을 계속해서 처리한다.
Socket Programming with TCP
TCP의 경우 서버에서 소켓을 생성하지만, 최초로 생성된 socket의 경우 client의 contact를 받아들이기만 한다는 점에서 door socket이라고도 한다.
Client에서는 socket을 create할 때, 자신이 해당 소켓을 통해 통신할 서버의 IP address와 port 번호를 명시한다.
Client에서 socket이 생성되면 Server에 door socket을 통해 해당 요청이 들어오며, 요청이 접수되면 해당 Client socket과 데이터를 주고받기 위한 새로운 socket을 생성하게된다.
Client/Server socket interaction: TCP
Client 측 코드
Server 측 코드
while문 내부를 보면 serverSocket(Door socket)이 accept를 하면, connectionSocket과 address가 리턴되는 것을 확인할 수 있다.
이후 서버는 리턴받은 connectionSocket을 사용하여 클라이언트와 데이터를 주고받게된다.
'Network' 카테고리의 다른 글
[Computer Network] TCP의 flow control과 congestion control (0) | 2023.11.07 |
---|---|
[Computer Network] Transport Layer(UDP와 TCP) (0) | 2023.11.01 |
[Computer Network] DNS (Domain Name System) (0) | 2023.10.31 |
[Computer Network] Application 계층의 Protocol (0) | 2023.10.31 |
[Computer Network] Internet Layer (0) | 2023.10.29 |