박우디의 개발여행/SW 이야기

02. TCP/IP Server & Client 관계

박우디 2023. 2. 11. 01:26

TCP/IP의 Server & Client는 떨어져 존재하는 서로다른 컴퓨터이다.

Client는 기본적으로 서비스를 요청하는 주체이며, Server는 Client에 서비스를 제공하는 역할을 한다.

 

 

소개팅을 앞 둔 남녀로 보이기도 한다. ( ? )

 

이 둘의 약속장소는 Network address로 결정이 되며,

여기에는 hostname, port number, ip, protocol 등등이 적힌다.

Network address는 즉 이 둘의 만남의 장소가 되는 것이다.

 

socket( ) 함수는 각자가 서로를 만나기 위해 문을 박차고 나가는 상황이 된다.

아직 약속장소에 대한 정보가 없으므로,

밖으로 나서긴 했지만 어디로 가야할지는 모르겠다.

 

이 때 이 둘에게 약속장소, 즉 Specific한 Network address를 알려주는 과정이

Client에서는 connect( ) 함수, Server에서는 bind( ) 함수가 된다.

 

기본적으로 Server가 먼저 약속장소에 도착해서 Client를 기다린다.

애당초 socket 함수를 호출하는 타이밍이 server가 앞서있는 구조이다.

기다리는 과정은 Server의 listen( ) 함수를 통해 이뤄진다.

 

이윽고 Client가 도착하면 listen( )함수를 통해 먼저 기다리고 있던 Server는 Client를 맞이한다.

사실 이때 Client는 약속장소에 도착하자마자 Server에게 차일 수도 있다.

즉, Server는 Client를 거부할 수 있다.

 

Server가 Client를 받아들여 준다면,

이 둘은 send( ), recv( ) 함수를 이용하여 대화를 나누게 된다.

소름돋게도 이 둘은 각자 하는말(send 함수)과 듣는말(recv함수)의 길이(bytes)를 계속하여 계산한다.

int로 반환되는 이 길이는 혹시 놓친 말은 없는지 등등을 체크할 때 아주 요긴하게 사용된다.