* TCP/IP 란?
TCP/IP는 컴퓨터와 컴퓨터간의 지역네트워크(LAN) 혹은 광역네트워크(WAN)에서 통신을 위한 통신규약(Protocol)이다.
즉 인터넷에서, 컴퓨터와 컴퓨터간의 통신을 위한 프로토콜이다.
TCP/IP는 5계층으로 나뉘어져 있고 각 계층마다 특정 역할이 있다.
1. Physical Layer (1 계층)
모든 파일과 프로그램은 0과 1의 나열이다.
결국 0과 1만 주고받을 수 있고 주고받으면 된다.
0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고 (encoding)
아날로그 신호를 받은 컴퓨터는 해당 신호를 디지털 신호인 0과 1의 나열로 해석 (decoding) 하여
물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈, 계층이 바로 1 계층이다.
해당 과정은 하드웨어적으로 수행된다.
2. Data-Link Layer (2 계층)
그렇다면 여러 대의 컴퓨터가 통신하려면 어떻게 해야 할까?
내가 통신하고 싶은 모든 컴퓨터에 전선을 꽂을 수는 없다.
그 과정은 비용적, 공간적으로 매우 비효율적이기 때문이다!
따라서 전선 하나를 가지고 여러 대의 컴퓨터와 통신할 방법을 모색해야 한다.
하나의 라우터(공유기)로 하나의 단위 네트워크를 만들고 해당 네트워크를 또 라우터로
묶고 묶으면 거대한 네트워크가 형성이 되는데 이러한 전 세계의 컴퓨터들이 계층 구조로 연결된 것을 인터넷이라고 한다.
같은 네트워크에 있는 여러 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈, 계층이 바로 2 계층이다.
데이터 링크 계층은 랜카드에 구현되어있으며 2계층 모듈도 1계층 물리층과 같이 하드웨어적으로 구현되어 있다.
3. Network Layer (3 계층)
먼저 3계층을 설명하기 이전에 패킷을 알아야 한다. 패킷이란 목적지의 ip 주소와 보내고자하는 데이터로 이루어져있다.
A에서 B로 패킷을 보내려고하자. A에서 가장 가까운 라우터로 패킷이 전달되고 해당 라우터는 패킷의 ip 주소를 확인한다.
해당 라우터는 자신과 연결된 컴퓨터의 ip 주소 중 패킷의 ip 주소와 일치하는 컴퓨터가 없다면 자신의 상위 라우터로 다시 패킷을 보낸다. 이와 같은 과정이 B라는 컴퓨터에 도착하기까지 반복된다.
인터넷 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해 ip 주소를 이용해서 길을 찾고 자신 다음의 라우터에게 데이터를 넘겨주는 것이 네트워크 계층에서 일어나는 일이다.
네트워크 계층의 기술은 운영체제의 커널에 소프트웨어적으로 구현되어 있다.
4. Transport Layer (4 계층)
3계층까지 거쳐 데이터를 무사히 받은 컴퓨터는 받은 데이터를 실행중인 프로세스에게 무사히 전달해야 한다.
어떤 데이터를 무슨 프로세스에게 줘야할지 어떻게 알 수 있을까?
포트 번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값이다.
따라서 이미 하나의 포트 번호에서 실행되고 있는 프로세스가 있다면 다른 프로세스가 해당 포트 번호에선 실행될 수 없다.
또한 데이터를 보내는 컴퓨터는 받는 컴퓨터가 실행중인 프로세스의 포트 번호도 미리 알고 있어야 한다.
우리가 브라우저를 통해 네이버에 접속할때 사실 포트번호는 생략되어있지만 실제로는 80번 포트에 요청하는 것이다.
결국 4계층은 목적지인 컴퓨터에서 특정 포트번호에 실행중인 프로세스에 정확히 데이터가 도착하게끔 하는 모듈, 계층이다.
4계층도 마찬가지로 운영체제의 커널에 소프트웨어적으로 구현되어 있다.
5. Application Layer (5 계층)
Tcp/ip 소켓 프로그래밍이란 운영체제의 transport layer에서 제공하는 api를 활용해서 통신 가능한 프로그램을 만드는 것을 Tcp/ip 소켓 프로그래밍, 또는 네트워크 프로그래밍이라고 한다.
Tcp/ip 소켓 프로그래밍을 통해 누구나 자신만의 application layer 인코더와 디코더를 만들 수 있다.
대표적인 application layer 프로토콜로 http가 있다.