본문 바로가기
반응형

전체 글73

[Network/Protocol] TCP란? 전송계층 프로토콜 TCP TCP와 UDP를 사용하며 이외 몇 가지가 더 있다. 대부분 TCP와 UDP가 대부분이다. TCP는 전송되는 패킷에 오류와 중복이 없게 하고, 보낸 순서와 수신자가 받는 순서가 같도록 신뢰성 있는 전송을 보장하는 프로토콜이다. 3-way handshaking , 경로지정, 단편화 등 여러 가지 기능을 통해 신뢰성을 보장한다. 그리고 헤더에 오류코드에 대응할 수 있는 데이터를 포함한다. 송신 측에서는 데이터를 패킷으로 분할하고, 수신 측에서는 패킷을 결합하여 순서대로 재조립한다. 전송계층의 기능 연결 제어 데이터 전송 단편화(UDP x) 재조립(UDP x) TCP Header TCP 헤더의 모습 Source Port Address 송신 측 포트 번호 Destination Port .. 2021. 3. 17.
[C/C++/소켓프로그래밍] Socket이란? 소켓 Socket 다른 원거리의 컴퓨터와 통신하기 위해 응용프로그램에서 소켓을 사용해야 한다. 소켓은 OS API를 이용해 소켓을 열며 OS마다 조금씩 다른 부분이 있다. 여기서는 리눅스 소켓을 사용한다. TCP/UDP를 이용해서 자료를 전송하려면 소켓을 생성, 운영체제에서 제공하는 소켓 API를 사용한다. 소켓 기술자를 받아와 통신을 시작한다. 소켓을 여는 과정 소켓은 위와 같은 과정을 거치며 TCP/UDP를 기반으로한 전송 계층 함수이다. TCP/UDP tcp는 연결 지향형 프로토콜로 안정성과 신뢰성을 보장한다. 수용가능한 자료만큼 전송하고 흐름제어를 한다. 그만큼 udp보다는 느리지만 신뢰성과 안정성이 보장된 프로토콜이다. udp는 비연결 지향형 프로토콜로 속도는 tcp에 비해서 빠르나 신뢰성이 떨.. 2021. 3. 13.
[C/C++/소켓프로그래밍] Hostent란? 도메인 주소로부터 이진형식의 주소를 쓰기 위한 구조체이다. 이를 먼저 알기 위해서 DNS에 대한 이해가 필요하다. DNS 도메인 네임 시스템(Domain Name System)의 약자로 우리가 IP를 사이트마다 외우기 어려우니 www.abce.com처럼 럼 사람이 알기 쉽게 도메인 이름을 사용하는 것이다. 그리고 이것을 ip주소와 도메인 네임간의 변환을 시스템적으로 구현한 것을 DNS라고 한다. 도메인 네임에는 계층이 존재하고 이것에 맞춰 DNS서버가 구현된다. DNS서버에 도메인 네임을 쿼리하면 서버는 ip주소로 변환하고 라우팅 정보를 제공한다. 또한 반대로 ip주소를 입력하면 도메인 네임을 반환하는 rDNS도 존재한다. gethostbyname() #include (hostent 구조체 포인터 반환).. 2021. 3. 12.
[C/C++/소켓 프로그래밍] IP 주소 형식 변환 aton() ntoa() 이진형식으로의 변환 IP란? ip는 컴퓨터 네트워크에서 서로를 인지하고 통신하기 위해 부여하는 주소같은 것이다. Internet Protocol의 약자로 인터넷 통신 규약을 가리키는 말이다. 일상에서 전화번호와 같은 존재이다. 현재 IP는 v4와 v6로 나뉘며 v4는 0~255사이의 십진수를 쓰며 .으로 각각을 구분한다 (0.0.0.0~255.255.255.255) 이중 특정 ip는 예약되어 할당되지 않는 ip도 있지만 전부 사용한다면 약 43억개의 ip를 사용할 수 있다. v6는 v4로는 모든 기기에 할당할 ip가 부족하게 되자 나온 새로운 버젼이다. 기존 32비트에서 128비트로 증가하였다. 현재 ipv6는 우리나라에서 많이 쓰이진 않지만 아직은 과도기적 시기로 점차 대체해 나가는 중이다. v4에서 v6로 가면서 :로 .. 2021. 3. 10.
[C/C++/소켓프로그래밍]hton ntoh (htons,htonl,ntohs,ntohl) 빅 엔디안과 리틀 엔디안 변환 소켓에서 hton, ntoh함수 두 함수는 리틀 엔디안, 빅 엔디안을 사용하는 체계에서 빅엔디안 또는 리틀엔디안으로 변환해주는 함수이다. TCP/IP는 빅 엔디안 방식을 사용하므로 리틀 엔디안 체제에서 사용시 빅 엔디안으로의 자료 변환이 필요하다. 때문에 네트워크 소켓통신에서 빅엔디안, 리틀 엔디안을 다뤄야 한다. 시스템마다 빅엔디안 리틀엔디안 사용이 다르지만 보통은 빅엔디안을 사용한다 하지만 리틀엔디안을 사용하는 경우 빅엔디안형식으로의 변환이 필요하다. Big-endian Little-endian 빅 엔디안은 시작 주소에 데이터의 최상위 비트(MSB)가 오도록 저장한다. 리틀 엔디안은 시작주소에 최하위 비트(LSB)가 오도록 저장한다. 4byte int 0x1234 a a+1 a+2 a+3 Big-en.. 2021. 3. 6.
C 소켓프로그래밍 Socketpair 소켓을 이용해서 응용프로그램과 자료를 읽고 쓸 수있다. sendbuffer에서 자동적으로 상대 receivebuffer에 보내고 read()를 이용해 전송받은 수신버퍼에서 자료를 가져온다. Socketpair의 헤더와 예제 #include #include return=socketpair(int domain,int type,int protocol,int sockp[2]);//return int type sys/types.h와 sys/socket.h를 포함해야하며 socketpair() int형을 반환하며 호출 성공시 0 실패시 -1을 반환한다. 코드는 두개의 소켓을 생성, 자동으로 연결된다. int sp[2]; if((socketpair(PF_LOCAL,SOCK_STREAM,0,sp)==0) printf(.. 2021. 3. 6.
반응형