1) 네트워크 통신
p.472 그림 6.22
전화 통신 | 컴퓨터 통신 | 설명 |
전화기 | 네트워크 어댑터(Network Adapter) | 컴퓨터에 보통 LAN 카드라고 내장돼 있는 것이 네트워크 어댑터에 해당한다. |
전화번호 | IP 주소(IP Address) | IP 주소는 4바이트의 숫자다. 하지만 4바이트 숫자를 표기하는 것은 인간 입장에서 쉽게 인식할 수 없으므로 1바이트씩 점(.)을 이용해 나눠서 표기한다. 예를 들어, 10.10.10.200과 같은 식이다(각 자리의 수가 1바이트이므로 0~255 사이의 값을 갖는다.) |
사람 이름 | 도메인 이름(Domain Name) | 4개의 숫자로 나눠서 IP 주소를 표기하는 것도 인간 입장에서는 쉽게 기억할 수 없다. 따라서 IP 주소마다 이름을 부여해서 관리한다. |
전화번호부 | 도메인 네임 서버(Domain Name Server) | 도메인 이름과 그에 대응되는 IP 주소 정보를 보관하고 있는 컴퓨터 |
cf. 프로토콜(protocol)
복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약. 신호 송신의 순서, 데이터의 표현법, 오류 검출법 등을 정함.
cf. TCP/IP(Transmission Control Protocol / Internet Protocol)
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP(인터넷 프로토콜)와 전송 조절 프로토콜인 TCP(전송 제어 프로토콜)로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.
2) System.Net.IPAddress
cf. IPv4(Internet Protocol version 4)
IPv4 주소는 32비트 길이의 식별자로 0.0.0.0 ~ 255.255.255.255까지의 숫자의 조합으로 이루어지며 총 네 구간으로 나눠져 있으며 최대 12자리의 번호로 이루어져 있다. IPv4를 통해 최대 약 43억 개의 서로 다른 주소를 부여할 수 있다. 하지만 전 세계 공용으로 사용되며 인터넷 사용자수가 급증하면서 IPv4 주소가 고갈될 문제에 처해있다.
cf. IPv6(Internet Protocol version 6)
IPv6 주소는 기존의 IPv4 주소체계를 128비트 크기로 확장한 차세대 인터넷 프로토콜 주소다. IPv6 주소의 경우 일반적으로 16비트 단위로 나누어지며 각 16비트 블록은 다시 4자리 16진수로 변환되고 콜론으로 구분된다. 기존에 IPv4 주소가 최대 43억 개를 만들 수 있는 것에 비해 IPv6 주소는 3.4*1038개의 주소를 생성할 수 있다.
cf. 공용 IP(공인 IP, Public IP)
인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(Internet Service Provider, 인터넷 서비스 공급자)가 제공하는 IP주소다. 공용 IP 주소라고도 불리며 외부에 공개되어 있는 IP 주소이다.
- 공인 IP는 전 세계에서 유일한 IP 주소를 갖는다.
- 공인 IP 주소가 외부에 공개되어 있기에 인터넷에 연결된 다른 PC로부터의 접근이 가능하다. 따라서 공인 IP 주소를 사용하는 경우에는 방화벽 등의 보안 프로그램을 설치할 필요가 있다.
cf. 개인 IP(사설 IP, private IP)
일반 가정이나 회사 내 등에 할당된 네트워크의 IP 주소이며, 로컬 IP, 가상 IP라고도 한다. IPv4의 주소 부족으로 인해 서브넷팅된 IP이기 때문에 라우터에 의해 로컬 네트워크 상의 PC나 장치에 할당된다.
사설 IP 주소 대역
- Class A : 10.0.0.0 ~ 10.255.255.255.255
- Class B : 172.16.0.0 ~ 172.31.255.255
- Class C ; 192.168.0.0 ~ 192.168.255.255
공인 IP(Public IP) | 사설 IP(Private IP) | |
할당 주체 | ISP(인터넷 서비스 공급자) | 라우터(공유기) |
할당 대상 | 개인 또는 회사의 서버(라우터) | 개인 또는 회사의 기기 |
고유성 | 인터넷 상에서 유일한 주소 | 하나의 네트워크 안에서 유일 |
공개 여부 | 내/외부 접근 가능 | 외부 접근 불가능 |
사설 IP 주소만으로는 인터넷에 직접 연결할 수 없다. 라우터를 통해 1개의 공인(Public) IP만 할당하고, 라우터에 연결된 개인 PC는 사설(Private) IP를 각각 할당받아 인터넷에 접속할 수 있게 된다.
ex)
IPAddress ipAddr = IPAddress.Parse("202.179.177.21");
Console.WriteLine(ipAddr);
IPAddress ipAddr2 = new IPAddress(new byte[] { 202, 179, 177, 21 });
Console.WriteLine(ipAddr2);
3) 포트(Port)
포트는 운영체제 통신의 종단점이다. 이 용어는 하드웨어 장치에도 사용되지만, 소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 컴퓨터에서의 포트란 외부의 다른 장비와 접속하기 위한 플러그 같은 것이다. 포트 번호는 어떤 프로그램에 접속할 것인지를 컴퓨터에게 알려준다. 포트는 ushort(부호 없는 2바이트 정수)로 표현한다.
ex)
ftp://000.000.000.000:21
여기서 000.000.000.000은 IP 주소를 나타내며 : 다음의 21은 포트 번호를 의미한다. IP 주소는 컴퓨터를 찾을 때 필요한 주소를 나타내며, 포트는 컴퓨터 안에서 프로그램을 찾을 때 나타내는 것이다.
cf. Well-Known port
- 0 ~ 1023 : Well-known port, 잘 알려진 포트, 특정한 쓰임새를 위해 할당된 TCP, UDP 포트번호
- 1024 ~ 49151 : registered port, 등록된 포트
- 49152 ~ 65535 : dynamic port, 동적 포트
포트 | 프로토콜 | 용도 |
20 | FTP | FTP - 데이터 전송 포트 |
21 | FTP | FTP - 제어포트 |
22 | SSH | Secure Shell - ssh, sftp 같은 프로토콜 및 포트 포워딩 |
23 | Telnet | 텔넷 프로토콜 - 암호화 되지 않은 텍스트 통신 |
25 | SMTP | Simple Mail Transfer Protocol - 이메일 전송 프로토콜 |
53 | DNS | Domain Name System |
80 | HTTP | HyperText Transfer Protocol - 웹 페이지 전송 프로토콜 |
123 | NTP | Network Time Protocol - 시간동기화 프로토콜 |
433 | HTTPS | HyperText Transfer Protocol over Secure Sockets |
514 | Syslog | 시스템 로그 전송 프로토콜 |
3.1) System.Net.IPEndPoint
EndPoint는 접점, 종점 또는 종단점 등으로 해석할 수 있다. TCP/IP 통신에서 접점이란 IP주소 + 포트를 말하며 BCL에서는 이 정보를 묶는 단일 클래스로 IPEndPoint 타입을 제공한다.
3.2) System.Net.Dns
cf. Domain name
도메인 네임은 넓은 의미로는 네트워크상에서 컴퓨터를 식별하는 호스트명을 가리키며, 좁은 의미에서는 도메인 레지스트리에게서 등록된 이름을 의미한다. 이를 통틀어서 '웹 주소'라고 부르는 경우도 있다.
GetHostEntry 정적 메서드는 도메인 이름을 입력받으면 시스템에 설정된 도메인 네임 서버(DNS: Domain Name Server)로 해당 이름의 IP를 조회한다. 결과로 돌려받은 IPHostEntry 타입은 도메인 이름에 설정된 IP 목록을 IPAddress 타입의 배열인 AddressList 속성으로 제공한다. 도메인 네임 하나에 여러 개의 IP가 묶인 것도 존재한다.
ex)
IPHostEntry entry = Dns.GetHostEntry("www.microsoft.com");
foreach (IPAddress ipAddress in entry.AddressList)
{
Console.WriteLine(ipAddress);
}
string myComputer = Dns.GetHostName();
Console.WriteLine("컴퓨터 이름: " + myComputer);
IPHostEntry entry1 = Dns.GetHostEntry(myComputer);
foreach (IPAddress ipAddress in entry1.AddressList)
{
Console.WriteLine(ipAddress.AddressFamily + ": " + ipAddress);
}
도메인 이름을 사용할 때의 단 한 가지 단점이라면 DNS로부터 IP 주소를 조회해야 하기 때문에 그만큼 속도가 저하된다는 것이다. 이 때문에 윈도우 운영체제에는 내부적으로 한번 조회된 적이 있는 도메인명과 IP 주소는 일정 시간 동안 저장해 두는 기능이 있다.
3.3) System.Net.Sockets.Socket
소켓(Socket)은 프로세스가 네트워크를 통해서 데이터를 주고받으려면 반드시 열어야 하는 창구 같은 것이다. 컴퓨터는 프로세스가 데이터를 전송하고 싶다고 바로 보낼 수 없고, 송신받는 곳과 수신받는 곳이 모두 소켓을 열어야 한다. 송신하는 곳이 소켓을 열고 데이터를 전송하면 네트워크 모델에 따라 목적지 호스팅 데이터가 도착하고, 데이터에 써진 포트 넘버와 같은 포트를 할당받은 프로세스를 찾아 그 프로세스의 소켓을 통해 해당 데이터를 전달한다. 소켓을 열기 위해선 호스트에 할당된 IP 주소, 포트 번호, 프로토콜(Protocol) 등이 필요하다.
Socket 생성자는 3개의 인자를 받는다.
public Socket(
AddrressFamily addressFamily,
SocketType socketType,
ProtocolType protocolType
)
// Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
cf. TCP와 UDP 방식의 차이점
기준 | 소켓 | |
TCP(ex. 파일) | UDP(ex.영상) | |
연결성 | 통신 전에 반드시 서버로 연결 (연결 지향성 : connection-oriented) |
연결되지 않고 동작 가능 (비연결 지향성 : connectionless) |
신뢰성 | 데이터를 보냈을 때 반드시 상대방은 받았다는 신호를 보여줌(신뢰성 보장) | 데이터를 보낸 측은 상대방이 정상적으로 데이터를 받았는지 알 수 없음 |
순서 | 데이터를 보낸 순서대로 상대방은 받게 됨 | 데이터를 보낸 순서와 상관없이 먼저 도착한 데이터를 받을 수 있음 |
속도 | 신뢰성 및 순서를 확보하기 위한 부가적인 통신이 필요하므로 UDP에 비해 다소 느림 | 부가적인 작업을 하지 않으므로 TCP보다 빠름 |
클라이언트 소켓은 데이터가 전송돼야 할 대상을 지정하기 위해 접점 정보(IP 주소와 포트)가 필요하다. 서버 소켓은 컴퓨터에 할당된 IP 주소 중에서 어떤 것과 연결될지 결정해야 하고 이 과정을 바인딩(binding)이라고 한다. 소켓이 특정 IP와 포트에 묶이면 바인딩이 성공했다고 볼 수 있다.
3.4) TCP 소켓
P.494 그림 6.33
'스마트팩토리 > C#' 카테고리의 다른 글
29. 익명타입(Anonymous Type) (0) | 2020.08.19 |
---|---|
28. 제네릭 (0) | 2020.08.18 |
26. 연산 범위 확인, 가변 매개변수, extern, unsafe (0) | 2020.07.27 |
25. MessageMap (0) | 2020.07.24 |
24. 복습 (0) | 2020.07.24 |