본문 바로가기
네트워크

socket 통신 과정

by meanjung 2021. 7. 6.

소마하면서 다른 사람 코드를 보는데, socket과 logging, thread 라이브러리를 많이들 쓰더라..

그래서 하나하나 공부하면서 나에게도 필요한 게 있나 찾아봐야겠다.

 

socket 통신의 원리

예제 코드

활용 방안


TCP socket

파이썬에서 TCP를 사용하려면 socket.SOCK_STREAM으로 지정하고 socket.socket 함수를 사용해 소켓 객체를 생성하면 된다.

장점

- 수신자가 전달 받지 못한 패킷을 발신자가 감지하여 재전송하기 때문에 신뢰성이 높다.

- 발신자가 전송한 순서대로 수신자가 읽게 된다.

 

UDP socket

socket.SOCK_DGRAM

- 수신자가 패킷을 전달받았는지 발신자가 신경쓰지 않고, 발신자가 전송한 순서와 수신자가 수신한 순서가 다를 수 있다.


통신 과정

서버에서 리스닝 소켓을 생성한다.

서버와 클라이언트가 연결된다.

클라이언트가 데이터를 전송하고, 서버가 데이터를 수신한다.

서버가 데이터를 전송하고, 클라이언트가 데이터를 수신한다.

클라이언트가 연결 종료 메시지를 전송한다.

 

- 서버에서 socket(), bind(), listen(), accept() 순으로 함수들을 호출해 리스닝 소켓을 생성한다.

listening 소켓은 클라이언트의 접속을 대기하는 역할을 한다.

 

- 클라이언트가 연결되면 accept()에서 새로운 소켓을 리턴하여 클라이언트와 통신시 사용하도록 한다.

 

- 클라이언트는 connect 함수를 호출해 서버에 연결을 시도한다. 이때부터 3-way handshake를 시작한다. handshake는 네트워크를 통해 양쪽이 연결되는 것을 보장한다.

 

- 연결이 완료된 후, 서버와 클라이언트는 send()와 recv()를 호출해 데이터를 주고 받는다.

 

- 클라이언트가 연결 종료 메시지를 전송하거나 socket을 닫으면 서버는 클라이언트와 통신을 위해 사용한 socket을 닫는다. 

 

 

https://webnautes.tistory.com/1381 ☜ 이거 그대로 복습하면서 공부하면 될듯.

 


참고

https://recipes4dev.tistory.com/153

 

소켓 프로그래밍. (Socket Programming)

1. 소켓(Socket) 만약 네트워크와 관련된 프로젝트를 진행하면서, 사용자(User)의 관점이 아닌, 개발자(Developer)의 관점에서 네트워크를 다뤄본 경험이 있다면, "소켓(Socket)"이라는 용어가 아주 낯설

recipes4dev.tistory.com

https://webnautes.tistory.com/1381

 

파이썬 소켓 프로그래밍 - 클라이언트 / 서버 예제

파이썬에서 소켓을 사용한 TCP 서버/클라이언트 예제에 대해 다룹니다. 클라이언트가 서버에 접속하여 통신이 시작되는 방식입니다.  1. TCP 소켓 2. 간단한 에코 서버, 클라이언트 예제 3. 쓰레드

webnautes.tistory.com

 

댓글