• 소켓 API

    • 네트워크 프로그래밍에서의 표준 API
  • WinSock API

    • 소켓 API를 윈도우에서 구현한 WinSock
  • .NET 네트워크 클래스

    • WinSock API를 사용하기 위해 Wrapper 클래스를 제공하고있다

      <aside> ♟️ Wrapper 클래스 : 기본 자료타입 들을 객체로 다루기 위해서 사요하는 클래스

      </aside>

      • System.Net.Scokets 네임스페이스 안에 TcpClient, TcpListner, UdpClient, Socket 클래스 존재

        Untitled

      • TcpClient : TCP 클라이언트 기능

      • TcpListner : TCP 서버 기능

      • UdpClient : UDP 클라이언트 + 서버 기능

      • Socket : Low Level의 소켓 프로그래밍 기능

      <aside> ⚒️ TcpClient, TcpListner, UdpClient는 내부적으로 Socket 클래스를 사용함 + Socket 클래스는 WinSock API를 호출함

      </aside>

  • 트레일러 : 데이터를 전달할 때 데이터의 마지막에 추가하는 정보

  • IP 주소

    • System.Net.IPAddress

    • IPAdress 클래스 사용해서 IP주소 파싱해서 객체 생성

      // using System.Net;
      IPAddress ip1 = IPAddress.Parse("192.169.1.13");
      
    • 바이트 배열이나 정수를 직접 생성자에 넣어서도 IPAdress 객체 생성 가능

      IPAddress ip2 = new IPAddress(new byte[] {192, 168, 1, 13});
      IPAddress ip2 = new IpAddress(218212544);
      Console.WriteLine(ip3.ToString()); // "192.168.1.13" 출력
      
    • IPAddress 메서드

      // 유용한 IPAddress 메서드
      IPAddress ip = IPAddress.Parse("216.58.216.174");
      byte[] ipbytes = ip.GetAddressBytes(); // IP를 바이트 배열로
      IPAddress ipv6 = ip.MapToIPv6(); // IPv4를 IPv6로 매핑
      
  • DNS

    • 도메인 → IP 주소 알아내기
    • Dns 클래스를 통해 호스트 정보를 얻어올 수 있다
      • Dns.GetHostEntry(호스트명) : 호스트명에 대한 IP 정보, Alias 정보 등을 리턴해서 IPHostEntry 객체에 담아준다
      • 호스트에 대한 IP 주소가 여러 개 일 수도 있기 때문에 IPHostEntry 객체 내부의 AddressList 속성에 IPAddress[] 배열 형태로 저장된다
    • 도메인을 쓰면 DNS에서 IP 주소를 조회하고 그 IP 주소를 사용해야 하기 때문에 그만큼 속도가 저하된다
      • 윈도우에서는 내부적으로 한번 조회된 적 있는 도메인-IP 주소는 일정 시간 동안 저장해두는 기능이 있다
    • 1개의 도메인에 여러개의 IP가 할당된 경우 일종의 부하 분산 역할을 하기도 한다
  • EndPoint

    • System.Net.IPEndPoint
    • TCP나 UDP는 IP주소와 함께 포트번호를 사용한다
    • 이 종단점(EndPoint)를 표현하기 위해 IPEndPoint 클래스 사용
    • IPEndPoint = IP주소 + 포트번호
    IPAddress ip = IPAddress.Parse("74.125.28.99");
    IPEndPoint ep = new IPEndPoint(ip, 80);
    
    Console.WriteLine(ep.ToString()); // "74.125.28.99:80" 출력