관리 메뉴

IT창고

Network TCP 클라이언트/서버 프로그램 본문

보안/Network

Network TCP 클라이언트/서버 프로그램

방구석여포 2018. 3. 16. 14:34

TCP 통신에 대해 알아보겠습니다.

TCP통신은 4계층(전송계층)에서 이루어지는 통신으로 신뢰성있는 통신을 보장하고 흐름제어 및 연결지향성을 같습니다.


UDP통신과 다르게 신뢰성이 있는다는 뜻은 TCP통신은 서로가 연결되어 송/수신을 받는데 UDP는 송신만하기 떄문에 신뢰성이 없다고 할수있습니다.


TCP 에코서버를 만들어보겠습니다.

TCP서버는 UDP서버에서 쓰던 함수에서 listen과 accept를 추가로 더 사용합니다.

포트를 설정할때는 사용중인 포트와 충돌이 나지않도록 사용하지않는 포트를 사용해야만 하는데 몇몇 지정포트(well-known)는 암기해두는 편이 좋습니다. 

ex) http: 80, ssh:22, SSL: 443, telnet: 23, ftp: 21, dns: 53, stmp: 25, mysql: 3306 등

인터넷에서도 확인할수있지만 리눅스에서 /etc/service 파일에서도 확인해볼수있습니다.

server의 소켓을 생성하고 client를 따로 설정해야합니다. listen에서 최대 통신가능한 수를 설정하고 accept에서 client의 응답을 대기합니다.


UDP통신과의 다른점은 서로 송/수신을 하고 다음 TCP통신을 위해서는 대기 시간이 필요합니다. (TIME_WAIT)


TCP 클라이언트 프로그램을 만들어보겠습니다.

UDP클라이언트와 다른점은 connect입니다. sys를 import해서 인자를 넣어보게 했는데 connect(( ip, port)) 형식으로 들어갑니다.


서로 TCP통신이 되는걸 확인해볼수있습니다.


이번에는 TCP에코서버를 여러명이 접속할수있도록 만들어보겠습니다.

https://docs.python.org/3/library/threading.html?highlight=threading#module-threading

파이썬의 Threading의 관한 문서입니다.


따로 함수로 묶어 쓰레드를 사용했습니다. 다중접속이기에 어디서 오는 정보인지 확인하기 위해 클라이언트정보를 print했습니다.


다른 곳에서 다중 접속이 가능하며 서로간의 데이터가 주고 받는걸 확인했습니다.


Comments