소마하면서 다른 사람 코드를 보는데, 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
https://webnautes.tistory.com/1381
'네트워크' 카테고리의 다른 글
python socket select 함수 이해하기 (0) | 2021.07.26 |
---|---|
nmap script engine(nse) (0) | 2021.07.10 |
scapy를 활용한 패킷 스니핑, 변조, 재전송 (0) | 2021.07.05 |
tcp/ip, IPv4 패킷, scapy (0) | 2021.07.04 |
scan, tcp/udp, nmap 계속 복습 및 정리 (0) | 2021.07.01 |
댓글