Python socket
네트워크 계층 (OSI, TCP/IP)
네트워크 계층은 OSI 7 계층으로 이루어져 있고, 인터넷 사용 환경에서는 TCP/IP 4계층(또는 5계층)의 시각으로 바라볼 수 있습니다.
아래 그림은 두 모델을 설명하는 그림입니다.

Ref: https://community.fs.com/blog/tcpip-vs-osi-whats-the-difference-between-the-two-models.html

각 계층의 역할은 아래와 같습니다.
7 계층, Application
: 통신 프로토콜과 인터페이스 담당하는 계층6 계층, Presentation
: 데이터 변환, 암호화 등을 돕는 계층5 계층, Session
: 양 끝단 응용 프로세스에게 통신 연결, 유지 등에 대한 방법을 제공하는 계층4 계층, Transport
: 데이터를 전송하는 방법을 제공하는 계층3 계층, Network
: 다중 노드 네트워크의 구 조화와 관리를 위해 주소 지정, 라우팅과 트래픽 제어를 담당하는 계층2 계층, Data link
: 1 계층에 의해 연결된 두 노드 사이의 신뢰성 있는 전송을 위한 계층1 계층, Physical
: 하드웨어 전송 기술로 구성된 계층
소켓 통신
소켓은 TCP/IP 모델에서 Application 계층과 Transport 계층 사이에서 네트워크 통신을 도와주는 인터페이스 입니다.
함수 설명
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
- @brief 소켓 객체 생성
- @param
family
address family 설정, 이 설정에 따라 address format이 결정됩니다.
socket.bind(address)
- @brief address에 소켓을 연결
- @param
address
socket.AF_INET
의 경우(host, port)
입니다.
socket.listen([backlog])
- @brief 서버가 연결을 허용할 수 있도록 설정
- @param
backlog
client가 연결을 요청했을 때, socket.accept() 없이 대기 가능한 요청의 최대 개수, 주로 5 정도 설정
socket.accept()
- @brief 연결 요청을 수락
- @return (connected_socket, address)
socket.connect(address)
- @brief address에 연결된 socket과 연결
socket.recv(bufsize[, flags])
- @brief 최대 bufsize만큼 데이터를 수신, bufsize는 2^n 값이 적절함
- @return byte
상대 소켓이 닫히면 빈 byte (b''
)를 반환하기 때문에 if not socket.recv(1024)
: 로 연결이 끊겼는지 확인 가능
socket.send(bytes[, flags])
- @brief 데이터를 송신
socket.sendall(bytes[, flags])
- @brief 모든 데이터가 송신될 때까지 송신
socket.close()
- @brief 소켓 종료
socket.gethostname()
- @return string 호스트 이름 반환
TCP, UDP
TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) |
---|---|
연결형 | 비연결형 |
1:1 | 1:1, 1:N, N:N |
높은 신뢰성 | . |
. | 더 빠른 속도 |
