전화기와 같이 네트워크 통신을 하는데 필요한 하드웨어이다.
대표적으로 LAN 카드가 네트워크 어뎁터에 해당한다.
인터넷 네트워크에서의 통신 규약이다.
보통 네트워크 상의 주소를 나타낼 때 사용된다.
네트워크 상의 주소에 해당한다.
IPv4(IP version 4)는 4바이트 숫자로 표현하며 1바이트씩 끊어서 10진법으로 'xxx.xxx.xxx.xxx'라고 표기한다.
'127.0.0.1'의 경우 특별하게 로컬 호스트의 주소로 약속되었는데 이를 루프백(loopback) 주소라고 한다.
IPv6(IP version 6)는 16바이트 숫자로 표현하며 2바이트씩 끊어서 16진법으로 'xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx'라고 표기한다.
IPv6에서 0000은 생략이 가능하여 ::으로 줄일 수 있다.
예를 들어 '1234:0000:0000:0000:0000:0000:0000:abcd'는 '1234::abcd'로 줄일 수 있다.
IP 주소에 대응되는 이름이다.
예를 들어 'www.naver.com'은 네이버 홈페이지의 IP 주소에 해당하는 도메인 이름이다.
IP 주소에 루프백이 있듯이 도메인 이름에는 localhost가 있다.
단 도메인 이름과 IP 주소가 1:1 대응하는건 아니다.
하나의 도메인 이름은 여러개의 IP 주소를 가질 수 있다.
트래픽이 많은 웹서버의 경우 부하를 줄이기 위해 여러 IP 주소를 사용한다.
반대로 하나의 IP 주소가 여러개의 도메인 이름을 가진 경우도 가끔 있다.
도메인 이름과 IP 주소를 보관하는 서버 컴퓨터이다.
IP 주소와 함께 네트워크 통신에 사용되는 식별자이다.
하나의 IP 주소를 갖는 컴퓨터에서 서버를 여러개 띄울 수 있다.
그런데 IP 주소로 네트워크 어뎁터는 식별할 수 있지만 운영체제 상의 프로그램을 식별할 수는 없다.
이 경우 각 프로그램에 특정 포트를 부여하여 원하는 프로그램에 연결할 수 있다.
0~65535까지 2바이트 ushort 타입이며 0~1024는 특정 용도로 사용하기로 약속됐기 때문에 대부분 1025부터 사용한다.
IP 주소와 포트를 합친 개념이다.
'[IP 주소]:[포트]'와 같이 표현한다.
양방향의 네트워크 통신에 필요한 엔드 포인트이다.
프로토콜 정의에 따라 수많은 종류의 소켓이 있지만 TCP 소켓과 UDP 소켓이 많이 사용된다.
TCP | UDP | |
---|---|---|
연결성 | 연결 지향성: 통신 전에 반드시 연결함 | 비연결 지향성: 연결에 의존하지 않음 |
신뢰성 | 데이터를 제대로 보냈는지 확인하는 절차가 존재함 | 데이터가 제대로 전달됐는지 확인하지 않음 |
순서 | 데이터를 보낸 순서와 받는 순서가 같음 | 데이터를 보낸 순서와 받는 순서가 다를 수 있음 |
속도 | 신뢰성 및 순서 확보를 위한 부가적인 통신과 알고리즘으로 인해 다소 느림 | 데이터 전달에만 집중하므로 빠름 |
데이터의 한계 | 한계가 없음 | 최대 65,535바이트까지 지원함 |
방향성 | 스트림 중심. 송신 측에서 한 번 전송하더라도 내부적으로 분할되어 수신 측에서 여러 번에 걸쳐 수신할 수 있다. | 메세지 중심. 메세지의 경계가 존재하여 송신 측에서 한 번 전송한 데이터는 수신 측에서도 한 번에 수신한다. 만약 내부적으로 분할될 경우 파편화(fragmentation)가 발생할 수 있다. |
특정 IP 주소와 소켓을 연결하는 것을 뜻한다.
클라이언트는 서버의 엔드 포인트로 데이터를 전송하기 때문에 서버가 바인딩 작업을 수행해야 클라이언트에서 보내는 데이터를 소켓을 통해 수신할 수 있다.
참고 자료
시작하세요! C# 10 프로그래밍 - 정성태