공대생의 개발 일기장

System Programming - network 본문

시스템 프로그래밍 - 리눅스

System Programming - network

SeoKyung 2023. 5. 9. 02:04

 network programming은 음... 사실 모르겠다. 갑자기 개념이 난해해졌달까? 일단은 socket에 대해서 생각해보자.

 

socket이 뭐냐 file이다. 그럼 file과 차이는 뭐냐? 사실 나도 잘 모르겠다... 그냥 특별한 file!이라고 생각하면 편할 것 같다. 일단 이름부터 network니까 인터넷 환경을 이용한다고 생각될 것이다. 그리고 실제로 그렇다. 지금까지 실습한 것이 모두 한 컴퓨터에서 했었다면 network는 여러 대의 컴퓨터끼리 연결...? 그냥 network적 특징을 가진다고 보면될 것 같다.

 

여러 대의 컴퓨터를 이용하기 때문에 각 컴퓨터마다의 ip를 사용하고 또, port number라는 것도 이용한다. port number 음... ip를 주소라고 치면 port number는 더 정확히 몇 동 몇 호인지까지 표기해주는거라고 이해하자. 어쨌든 이제 각 컴퓨터의 ip와 port number를 아니까 서로 소통할 수 있게 된다. 슬슬 인터넷과 같은 느낌이 들지 않는가?! 이미 CS에서 network에대해서 조금 공부했으니 이제 각 컴퓨터 중 어떤것은 server, 어떤 것은 클라이언트라는 느낌도 들 것이다.

 

socket도 일단은 file이라고 했으니까 예전에 file을 다루었던 함수들(open이나 write, read)을 쓸 수 있는데 또 번거롭게도 그 함수들을 그냥 사용할 수가 없다...

 

x = socket( ? ); // 참고로 x는 integer

connect(x, 이걸 보낼 컴퓨터 ip+port number, ?);

 

이런식으로 기존 함수들로 바로 여는 대신에 socket이랑 connect라는 함수를 쓴다. 그럼 이제 받는 놈은

 

y = socket( ? );bind(y, 자기 ip +  port number);listen(y, 5)y2 = accept(y, ?);

 

솔직히 이해안되는데 그냥 외워라. bind가 무엇인지 listen이 무엇인지 accept가 무엇인지는 단어 뜻으로 그냥 직관적으로 받아들일 수 있을 것이다. 근데 진짜 어이없는건 여기까지가 지금까지 썼던 함수 read다. read함수 하나면 끝날 걸 엄청 돌아서 구현한 것.