mojo's Blog
네트워크 TCP/IP 본문
TCP/IP 프로토콜에 대해 알아보도록 한다.
TCP 프로토콜은 Transmission Control Protocol 의 약자로 다른 두 시스템 간에 신뢰성 있는 데이터의 전송을 관장하는 통신 프로토콜로서 IP(Internet Protocol) 프로토콜 위에서 동작한다.
TCP(Transmission Control Protocol) 프로토콜을 사용하는 응용프로그램으로는 e-mail, FTP, 웹(HTTP) 등이 있다.
IP(Internet Protocol)는 패킷 교환 네트워크에서 송신 호스트와 수신 호스트가 데이터를 주고받는 것을 관장하는 프로토콜로서 TCP 하위 레벨 프로토콜이다.
TCP는 IP 기능을 활용하여 두 시스템 사이에 데이터가 손상 없이 안전하게 전송하도록 하며, TCP와 IP를 묶어 TCP/IP로 표기한다.
네트워크 계층
응용 프로그램 (HTTP, e-mail, FTP 등) |
Transport (TCP, ...) |
Network (IP, ...) |
Link (디바이스 드라이버, ...) |
IP 주소에 대해 알아보도록 한다.
IP 주소는 네트워크상에서 유일하게 식별될 수 있는 네트워크 장치의 주소이다. (ex : 192.156.11.15)
하나의 숫자 범위는 0~255로서 한 바이트로 표현이 가능하다. IP 주소는 전화번호, 집주소와 같이 이 주소를 통해 네트워크에 연결된 장치를 식별할 수 있으며, 동일한 주소를 여러 네트워크 장치에 중복해서 사용할 수 없다.
숫자로 된 주소는 기억하기 어려워서 www.naver.com 과 같은 문자열로 구성된 도메인 이름으로 바꿔 사용한다.
사용자가 문자열로 구성된 도메인 이름을 사용하면 DNS(Domain Name Server) 서버에 의해 숫자로 구성된 IP 주소로 자동 변환된다.
현재는 4개의 숫자로 구성된 IP 주소를 표현하기 위해 32비트의 IP 버젼 4 (IPv4) 가 사용되고 있다.
그러나 세계적으로 네트워크 장치의 개수가 폭발적으로 증가하여 각 장치에 고유하게 부여할 수 있는 IP 주소가 고갈됨에 따라 128 비트의 IP 버전 6(IPv6) 이 점점 사용되는 추세이다.
자신의 컴퓨터에서 자신의 IP 주소를 간단히 localhost 라는 이름으로 사용해도 된다. (localhost 의 IP 주소는 127.0.0.1로 정해짐)
윈도우 PC에서 cmd 에서 ifconfig 명령을 수행하면 다음 그림과 같이 컴퓨터의 IP 주소를 확인할 수 있다.
포트에 대해 알아보도록 한다.
IP 주소는 네트워크상에 있는 한 컴퓨터를 유일하게 식별한다.
하지만, 한 컴퓨터에 여러 응용프로그램이 네트워크를 사용하고 있기 때문에, IP 주소만으로 통신하고자 하는 응용프로그램을 식별할 수 없다.
이를 위해 한 컴퓨터 내의 각 응용프로그램은 통신을 위해 가상의 연결단인 포트(port)를 생성하고, 이 포트 번호로 상대방이 자신을 식별하게 한다.
비유한다면 IP 주소는 아파트의 동 번호, 포트 번호는 그 동에 있는 호 번호라고 할 수 있다.
또다른 비유로 은행의 IP 주소는 은행 지점의 주소이고, 포트 번호는 은행 내의 고객 창구 번호와 같다.
따라서 통신을 수행하는 모든 응용프로그램은 IP 주소와 포트를 이용하여 상대편 통신 프로그램을 인지하며 데이터를 교환한다. 이때 상대편 응용프로그램은 자신의 IP 주소와 포트 번호를 알고 통신 접속이나 데이터가 오기를 기다리고 있어야 한다.
포트 번호는 응용 프로그램 개발자가 임의로 선택하여 사용할 수 있으나, 기존 응용프로그램에서 사용하고 있는 포트 번호나 시스템의 포트 번호는 피하는 것이 좋다.
시스템이나 기존에 잘 알려진 응용 프로그램에서 사용하는 포트 번호를 well-known ports 라고 한다.
예를 들어서 Telnet : 23번 포트, HTTP : 80번 포트, FTP : 21번 포트 이며 이들은 주로 0~1023 사이의 번호를 가지므로 사용자가 작성하는 응용프로그램에서는 이 범위의 포트 번호는 피해서 선택하도록 한다.
'Java' 카테고리의 다른 글
Server-Client Chatting Program 만들기 (0) | 2021.08.23 |
---|---|
Socket Programming (0) | 2021.08.23 |
명품 JAVA Programming 제 14장 실습문제 (4, 6번) (0) | 2021.08.18 |
명품 JAVA Programming 제 14장 Open Challenge (0) | 2021.08.18 |
팝업 다이얼로그 / 탭팬 (0) | 2021.08.18 |