일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 명령어
- sklearn
- data preprocessing
- Machine Learning
- 사이킷런
- 머신러닝
- partition
- ML
- 레이블 인코딩
- PARTITION BY
- Cartesina Product
- CROSS JOIN
- Python
- 원핫인코딩
- 기본
- SQLD
- SQL
- django
- Today
- Total
Programming Blog
TCP 통신 본문
TCP/IP 통신
네트워크 프로그래밍 : 멀리 떨어져 있는 두 개의 호스트를 연결시켜주는 매개체 역할
server : 소켓 생성(socket) > 연결을 위한 IP주소 할당(bind) > 소켓 연결 가능 상태로 전환(listen) > 연결 요청 수락(accept)
client : 연결 요청(connect)
closesocket() 연결 종료
모든 실행이 끝나면 반드시 연결 종료한다.
서버에서 연결준비를 완료하고 클라이언트에서 연결을 요청한다.
윈속 기바의 데이터 입,출력 함수
send, recv
프로토콜 : 컴퓨터 상호간의 대화에 필요한 통신 규약, 즉 데이터를 주고 받는 방법을 약속하는 것이다.
소켓 생성
socket(int damain, int type, int protocol);
domain : 통신을 위해 사용할 프로토콜 체계, 소켓이 사용될 환경을 고려하여 프로토콜을 설정해야 한다.
type : 데이터 전송을 위한 전송 타입,
전송방식 2가지
SOCK_STREAM(신뢰성 있는 순차적인 바이트 기반의 연결 지향 전송 타입)
SOCK_DGRAM(빠른 전송, 데이터 손실 가능성, 데이터 크기 제한)
protocol : 특정 프로토콜 지정
프로토콜 체계가 PF_INET일 경우 전달인자
PF_INET, SOCK_STREAM, IPPROTO_TCP(0) //연결 지향 TCP 소켓 생성
PF_INET, SOCK_DGRAM, IPPROTO_UDP(0) //비연결 지향 UDP소켓 생성
프로세스 : 메모리상에 올라와 있는 실행중인 프로그램
바이트 순서
Big-Endian : 상위 바이트의 값이 메모리상에 먼저(번지수가 작은 위치에) 표시되는 방법
Little-Endian : 하위 바이트의 값이 메모리상에 먼저(번지수가 작은 위치에) 표시되는 방법
*네트워크 바이트 순서 : 서로 다른 CPU를 장착하여 주고 받는 데이터가 다를 수 있으므로 반드시 ★Big-Endian방식만 사용하는 약속
바이트 순서 변환 함수
h : host byte order
n : network byte order
s : short(16Bit)
l : long(32Bit)
short htons() : host byte(16bit) > network byte , 16비트 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 변환하는 함수
short ntohs() : network byte(16bit) > host byte , 16비트 데이터를 네트워크 바이트 순서에서 호스트 바이트 순서로 변환하는 함수
long htonl() : host byte(32bit) > network byte , 32비트 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 변환하는 함수
long ntohl() : network byte(32bit) > host byte , 32비트 데이터를 네트워크 바이트 순서에서 호스트 바이트 순서로 변환하는 함수
주소 정보 할당
bind 함수가 소켓에 주소 정보를 할당하는 역할을 한다
서버에서의 기본적인 함수 호출 순서
socket() / 소켓 생성
bind() / 소켓에 주소 할당
listen() / 연결 요청 대기 상태
accept() / 연결 허용
read() & write() / 데이터 송수신
close() / 연결 종료
클라이언트의 기본적인 호출 순서
socket() / 소켓 생성
connect() / 연결 요청
read() & write() / 데이터 송수신
close() / 연결 종료
Server : socket > bind > listen > accept > read & write > close
Client : socket > connect > read & write > close
* 클라이언트 connect에서 연결 요청 > 서버에서 accept > 서버와 클라이언트에서 read & write 하여 데이터 송수신
Iterative 서버의 구현
accept함수의 호출 시점에서 클라이언트 연결 소켓을 생성한 후 적절한 데이터 송,수신 과정을 거친 다음 close함수를 호출해 주고 있는데
서버의 소켓을 종료하는 것이 아닌 클라이언트의 소켓을 종료하는 것이 목적임을 주의해야 한다. 그렇게 클라이언트의 요청을 서버에서
반복적으로 처리하는 서버를 Iterative서버라고 한다.
echo 서버/클라이언트의 구현
에코 서버 : 클라이언트가 전송해 주는 데이터를 그대로 되돌려 전송해 주는 기능의 서버
특징 : 클라이언트가 서버로부터 몇바이트의 데이터를 수신할 것인지 예상 가능하다는 점.