[컴퓨터네트워킹] 14. Socket programming

Yoons·2023년 4월 8일
0
post-thumbnail

❗️Notice❗️

저의 velog에 작성된 글은 모두 저의 주관적인 생각 및 이해를 바탕으로 작성된 글이므로 
정확하지 않은 내용을 있을 수 있음을 알립니다.

[교재] Computer Networking : A Top-Down Approach 8th

오늘은 UDP, TCP에 대한 socket programming에 대해 알아보겠습니다.

socket은 이전에 말씀드린 것 처럼 application layer와 protocol layer 사이에서 data를 주고 받는데, 거쳐야 하는 문입니다. 그렇다면 실제로 어떻게 socket을 이용해서 client와 server가 통신을 할 수 있을까요?

1. UDP vs TCP

UDP와 TCP는 이전에 다뤄 본 내용이지만 정리만 해보고 넘어가겠습니다. UDP는 data를 전송할 때 unreliable 하게 전송하기 때문에 중간에 data가 유실되는 문제가 있을 수 있고, connectionless이기 때문에 client와 server간에 연결 없이 data를 통신합니다.

반면에 TCP는 reliable 하게 전송하여 data loss가 없고 connection-oriented 이기 때문에 client와 server가 연결하여 data를 보내는 순서대로 받게 됩니다.


2. Socket programming with UDP

위에서 언급한 것처럼 UDP는 connetionless이다. 즉 client와 server가 연결하지 않는다. 그렇기 때문에 sender와 receiver 사이에서 data를 주고 받을 때 sender가 IP address와 port number를 알려주지 않으면 receiver가 누가 보낸 건지 알지 못한다. 따라서 sender는 packet에 IP address와 port number를 붙여서 보내게 된다.

server는 always-on 상태이다. 그러므로 server의 socket을 먼저 만든다. 그 이후 client도 socket을 만들고 client socket에 server의 IP address와 port number를 넣어서 server에 보낸다. 여기서 자신의 IP, port number가 아니라 server의 것을 붙여 보내는 이유는 서로 연결이 돼있지 않기 때문에 client가 어디로 보낼지 알려줘야 하기 때문이다.

그 이후에 해당 내용은 socket과 network을 통해 server socket으로 들어가서 해당 내용을 server가 읽을 수 있게 된다. 이때 이 내용은 client로부터 받은 것이기 때문에 client가 굳이 자신의 IP와 port nubmer를 붙이지 않아도 server는 알 수 있다. 만약 여기서 port number를 모르면 OS에서 임의로 정하게 된다.

따라서 해당 IP, port number로 내용을 작성해 회신하게 되고, 이 내용을 확인한 client socket은 모든 통신을 끝내고 socket을 close하게 된다.

위의 내용은 UDP를 이용해 client와 server 각각의 입장에서 통신하는 과정을 python으로 작성한 것이다. 참고하길 바란다.


3. Socket programming with TCP

TCP는 UDP와는 달리 connetion-oriented이다. 즉 server와 client가 서로 연결돼있기 때문에 UDP처럼 IP address와 port number를 주고 받을 필요가 없다.

우선 server socket을 먼저 만든다. 그 이후 client의 connection request를 기다리면서 해당 client만을 위한 socket을 생성하고(connectionSocket) 그 socket으로 TCP connection을 맺는다.

TCP connection이 이뤄지면 client는 메세지를 connectionSocket에게 내용을 전달하고 connectionSocket을 통해 server는 이 내용을 읽는다. 이후에 server는 client에게 내용을 회신하고 client socket을 통해 client가 읽은 후 client socket을 close한다.

이때 server는 server socket은 유지한채로 connectionSocket을 close한다. connectionSocket은 해당 client만을 위해 생성한 socket이기 때문이다.

위의 내용은 TCP를 이용해 client와 server 각각의 입장에서 통신하는 과정을 python으로 작성한 것이다. 참고하길 바란다.


마치며

오늘은 UDP, TCP를 이용한 socket programming에 대해 알아보았습니다. 내용이 쉬운 듯 아닌 듯 하네요. 사람은 참 대단한 동물이라는 것을 뼈저리게 느낍니다. 다음 시간에는 새로운 chapter이 Protocol layer에 대해 알아보겠습니다. 수고 많이 하셨습니다 :)

profile
모든 글은 저의 눈물을 머금으며 작성한 글이니..재밌게 봐주세요 :) 깃헙 맞팔@

0개의 댓글