반응형 Programming/Socket9 [C Socket Programing] servent 구조체(servent structure) Servent servent 구조체를 이해하기 위해서는 소켓 프로그래밍 자체뿐만 아니라 네트워크 흐름에 대해서 알면 이해가 쉽다. 처음 봤을 때는 이해가 되지 않았으나 방화벽등 네트워크 장비를 만지다 보니 이해가 되었다. getservent(), getservbyname(), getservbyport() 등과 같은 함수와 같이 쓰이며 주로 /etc/services의 정보를 읽어 사용한다. DNS를 알아내거나 서비스(포트 주소) 자체를 이용하기 위해 사용한다. Servent 구조체 struct servent{ char *s_name; char **s_aliases; int s_port; char *s_proto; } servent구조체는 이와 같이 정의되어 있다. s_name : 서비스 이름, 포트명 s_.. 2021. 6. 7. Socket을 닫은 뒤 바로 쓸 수 없는 이유 socket 관련 예제를 진해하다 보면 연결을 끊고 바로 같은 PORT를 이용하는 경우가 잦을 것이다. 그럴 때마다 소켓이 정상적으로 동작하지 않는다. 이것은 TCP 특성상의 이유로 정상적인 현상이다. TCP의 특성에 의한 시스템적으로 막혀 있는 것이다. TCP이해 TCP에서는 신뢰성, 단편화등 많은 기능을 수행하기 위해 3-way handshaking 3.3/4 연결 종료를 수행한다. 결과적으로는 신뢰성있는 통신을 하기 위해서 이 기법을 사용한다. TCP에서는 세션 관리를 한다. 이는 신뢰성 있는 연결 상태를 확립하기 위해 존재하는 TCP의 특성이다. 이로 인해 반대로 취약점이 있기도 하나 신뢰성있는 통신을 하기 위한 기능이다. 주제처럼 세션을 끊을 때 이 현상이 발생한다. 위와 같이 먼저 FIN을 요.. 2021. 5. 4. [C 소켓프로그래밍] TCP 소켓 동작원리 Tcp의 내용 설명 codedatasotrage.tistory.com/18 TCP 상태 전이도 서버측과 클라이언트 측 관점으로 나눈 TCP 상태 전이도이다. TCP의 신뢰성 보장을 위한 기능중 하나이다. 소켓의 종료는 누가 먼저 종료 요청을 보내느냐의 따라 달라지며 먼저 자신이 닫았을 경우 ACK 패킷을 송신함을 끝으로 TIME_OUT 상태에서 대기하다 소켓이 종료된다. 이 종료 시간은 커널에서 설정이 가능하다. 소켓 동작 원리 연결 과정 1. SYN 패킷 전송 단계 TCP 헤더의 SYN 비트를 1로 설정하여 패킷을 송신한다. 처음 SYN 패킷은 ISN(Init Seq Num)를 SYN 필드에 기록하여 전송한다. 보안상의 이유로 ISN을 임의의 숫자를 사용하나 0도 자주 사용한다. 2. SYN, ACK .. 2021. 4. 3. [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. 이전 1 2 다음 반응형