일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lua for windows
- file write
- 등록임대주택
- 수도권주택공급
- 찾다죽는줄
- TCP/IP
- 월세
- 국토교통부
- 중소규모택지
- #부동산전자거래 #부동산전자계약 #부동산계약 #부동산전자계약방법 #부동산전자계약하는법 #부동산계약방법 #부동산중개수수료 #부동산중개수수료아끼기 #부동산복비아끼기
- C API
- 티몬삼겹살데이
- C++ API
- QTcpServer
- lua setup
- #신혼부부 #결혼준비 #신혼부부희망타운신혼부부특별공급
- 프리미어 영상변환
- object
- 청량리역한양수자인192
- FILE TRANSFER
- lua install
- 엑스퍼트생일축하해
- lua interpreter
- meta table
- QT TCP
- Lua
- 엑스퍼트2주년
- file open
- 프리미어 영상저장
- file read
- Today
- Total
Value Creator의 IT(프로그래밍 / 전자제품)
#4 리눅스 네트워크 프로그래밍 본문
1. 윈도우와 리눅스의 소켓 방식
리눅스의 소켓 = 파일의 일종
파일 입출력 함수를 네트워크 상에서 데이터 송수신할 때 사용 가능
윈도우는 파일과 소켓을 구분하므로 별도의 데이터 송수신 함수 참조
리눅스의 파일 디스크립터(또는 파일 핸들) --> 파일 또는 소켓에 부여된 정수값
0 : Standard Input
1 : Standard Output
2 : Standard Error
윈도우 소켓 : 소켓 핸들 반환
리눅스 소켓(파일) : 파일 핸들 반환
윈도우는 파일 핸들과 소캣 핸들 구분해서 사용
윈도우 입출력 함수 : send, recv
리눅스 입출력 함수 : read, write
WSA : Win Socket API
API : Application Interface
소켓의 종류
1) 연결지향형 소켓
2) 비연결지향형 소켓
인터넷 프로토콜의 종류
1) TCP(Transmission Control Protocol) : 연결 지향, 스트림 기반 소켓
2) UDP
스택(Stack) : 계층
4단계 계층
LINK 계층 --> IP 계층 --> TCP 계층 --> Application 계층
--> 대부분의 네트워크 프로그래밍은 Application 계층 설계 및 구현이다.
NIC(Network Interface Controller) : 물리적인 네트워크 장치
2. Big endian과 Little endian
0x12345678이라는 데이터를 저장할 때
1) 빅 엔디안
주소 | 0x20번 | 0x21번 | 0x22번 | 0x23번 |
값 | 0x12 | 0x34 | 0x56 | 0x78 |
2)리틀 엔디안(빅 엔디안과 다르게 맨 뒤부터 저장)
주소 | 0x20번 | 0x21번 | 0x22번 | 0x23번 |
값 | 0x78 | 0x56 | 0x34 | 0x12 |
인텔, AMD 계열 CPU : 리틀 엔디안 방식
네트워크 바이트 전송 방식 : 빅 엔디안으로 규정됨
CPU 방식이 빅 엔디안이냐, 리틀 엔디안이냐에 관계없이 빅 엔디안으로 변환해주는 함수가 필요
3. 소켓 연결 절차
1) 함수 호출 순서
* TCP 서버
소켓 생성 --> 생성된 소켓의 주소 할당 --> 연결요청 대기 --> 연결 허용 --> 데이터 송, 수신 --> 연결 종료
socket() --> bind() --> listen() --> accept() --> read(), write() --> close()
* TCP 클라이언트
소켓 생성 --> 연결 요청 --> 데이터 송, 수신 --> 연결 종료
socket() --> connect() --> read(), write() --> close()
2) Iterative 서버
socket() --> bind() --> listen() --> accept() --> read(), write() --> close(client) --> close(server)
↑ ↓
←←←←←←←←←←←←←←←←←←←←←←
반복문을 삽입해서 accept() 함수를 반복 호출하면 구현 가능
3) 에코(Echo) 서버/클라이언트
서버는 클라이언트로부터 받은 메세지를 그대로 재전송한다.
데이터의 크기가 작다면 문제가 없는 것 처럼 보이지만, 데이터의 크기가 커지면 오류가 발생할 수 있다.
4. TCP의 역할
데이터를 주고 받는 과정에서 서로 데이터를 잘 주고 받았는지 확인하고, 분실된 데이터는 재전송해준다.
IP는 데이터 전송의 신뢰성을 보장하지 않는다.
ex) 첫 번째 패킷을 보낸다. 잘 받았는지 확인한다.
잘 받았다는 확인을 받으면 두 번째 패킷을 보낸다. 잘 받았는지 확인한다.
응답이 없다. 두 번째 패킷을 재전송한다.
... ... ... 이런 방식으로 데이터를 전송한다.
5. TCP 입출력 버퍼
TCP를 통해 데이터를 주고 받을 때, 데이터가 오고 가는 완충 지대가 필요하다.
데이터를 임시로 저장해 놓는 곳을 버퍼라고 한다.
A <-> B 통신할 때,
A에서 출력된 값은 곧바로 B의 디스크에 저장되는 것이 아니라, B의 입력 버퍼를 거친 다음에 저장된다.
B에서 출력된 값도 마찬가지로 A의 버퍼를 거친 다음에 A의 디스크에 저장된다.
한 방에 모든 데이터를 전송할 수 없기 때문에 버퍼를 거친다.
A의 출력 버퍼 --> B의 입력 버퍼
A의 입력 버퍼 <-- B의 출력 버퍼
버퍼가 데이터를 얼만큼 받을 수 있는지 TCP를 통해 지속적으로 확인하기 때문에, 데이터가 중간에 소멸되는 일은 없다.
버퍼사이즈 결정
서버 주소
클라이언트 주소
파일 크기 읽기
fopen으로 파일 열기
write로 클라이언트에 파일 쓰기(파일 크기 만큼)
클라이언트에서 온 메세지 read로 읽기
fclose로 파일 닫기
클라이언트 닫기
서버 닫기
'1. 프로그래밍 > 4) Network' 카테고리의 다른 글
Chapter 1 서버-클라이언트 소스코드 분석 (0) | 2019.10.28 |
---|---|
윤성우의 열혈 TCP/IP 프로그래밍 pdf 사이트 (0) | 2019.09.19 |
#3 TCP/IP 송수신 과정 (0) | 2019.06.17 |
#2 Ethernet, IP, TCP/UDP 헤더 소개(Packet Header: Ethernet, IP & TCP/IP) (0) | 2019.06.13 |
#1 Ethernet, TCP/IP 프로토콜 총 정리 (0) | 2019.06.13 |