들어가기
인터넷 프로토콜 스위트(internet protocol suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합이며, 이를 TCP/IP 4 계층 모델로 설명하거나 OSI 7 계층 모델로 설명한다.
네트워크는 다수의 시스템을 전송 매체로 연결해 구성하 시스템들의 집합체이다. 네트워크들이 모여서 더 큰 네트워크로 확장할 수도 있다. 컴퓨터 네트워크는 물리적으로는 크게 호스트 시스템과 전송 매체로 구분한다고 할 수 있다. 서로 다른 호스트들이 전송 매체를 통해서 통신하는 것이 네트워크인 것이다.
하지만 호스트들마다 서로 다른 특징을 가질 거이다. 이런 호스트들을 연결해서 통신을 하려면 연결하는 방식을 표준화해야 한다. 국제 표준화 단체인 ISO(International Standard Orgainzation)에서 이러한 표준화된 연결 방식이 바로 OSI 7 계층인 것이다. 자세한 내용은 https://khdscor.tistory.com/61를 참고하길 바란다.
TCP/IP 계층 모델은 네트워크에서 사용되는 통신 프로토콜의 집합으로 계층들은 프로토콜의 네트워킹 범위에 따라 네 개의 추상화 계층으로 구성된다.
아래의 사진을 봐보자.
OSI 7 계층이나 TCP/IP 4 계층이나 계층을 몇 개로 나누느냐의 차이일 뿐 실제 기능에 있어서는 차이는 없다. TCP/IP 계층에서 애플리케이션 계층은 OSI 7 계층에서 3개의 계층으로 나뉜 것이고, 링크계층은 데이터 링크 계층과 물리 계층 2 계층으로 나뉜 것이다. 그리고 인터넷 계층을 네트워크 계층으로 부르는 것이 다르다.
이 계층들은 특정 계층이 변경되었을 때, 다른 계층에 영향을 주지 않도록 설계되었다.
애플리케이션 계층은 사용자 공간으로 프로그래밍 환경에서 전송 계층의 기능을 제공하는 소켓 시스템 콜을 호출해 TCP와 UDP 기능을 사용할 수 있다. 소켓 시스템은 유닉스, 리눅스, 윈도우 운영체제 등 인터넷에 접속 가능한 모든 호스트에서 제공한다. 프로그램에서 소켓을 사용할 때 소켓마다 부여되는 고유 주소인 포트 번호를 관리해야 한다. 포트번호와 사용자 프로그램은 1대 1로 대응되지만 응용환경에 따라 여러 개의 포트를 할당할 수도 있다. 인터넷 응용 프로그램의 고유 주소는 IP 주소와 포트 번호의 조합으로 구성된다.
즉, 애플리케이션 계층은 사용자가 어떤 프로그램을 사용하는 사용자 공간이고 전송 계층 이하 계층들은 운영체제 내부에서 구현된 시스템 공간인 셈이다.
1. 애플리케이션 계층
FTP, HTTP, SSH, SMTP 등 주된 서비스를 담당하는 프로토콜 계층이다. 사용자의 주된 프로그램 사용이 이루어진다.
FTP는 장치와 장치 간의 파일을 전속하는 데 사용되는 프로토콜이다.
SSH는 암호화 네트워크 프로토콜이다.
HTTP는 WWW(World Wide Web)를 이용하는데 쓰이는 프로토콜이다.
SMTP는 전자 메일 전송을 위한 프로토콜이다.
2. 전송 계층
컴퓨터 네트워크에서 데이터를 교환하는 최종 주체는 호스트 시스템이 아니고, 호스트 내부에서 실행되는 네트워크 프로세스이다. 전송 계층은 송신 프로세스와 수신 프로세스 간의 연결기능을 제공하기 때문에 프로세스 사이의 안전한 데이터 전송을 지원한다. 즉, 프로세스 간의 연결을 한다는 거이다. 전송 계층은 데이터가 전송되는 최종적인 경로상의 양 끝단 사이의 연결이 완성되는 곳이다.
전송계층에서는 포트 주소라는 것이 사용된다. 포트 주소는 호스트에서 실행되는 프로세스를 구분해 주며 소켓 주소라는 용어를 사용하기도 한다. 웹을 실행하는지, 파일 전송인지, 메일인지 등 어느 프로세스를 사용하는지를 구분하는 것이다.
여기서 TCP와 UDP가 독립적으로 포트 주소를 관리한다. TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 각각 연결형, 비연결형 서비스를 제공한다. 텔넷이나 FTP, 웹 브라우저 등과 같은 네트워크 응용 프로그램들은 모두 TCP와 UDP를 사용해 네트워크에 연결할 수가 있는 것이다.
애플리케이션 계층은 사용자 프로그램으로 구현된다. 프로그래밍 환경에서 전송 계층의 기능을 제공하는 소켓 시스템 콜을 호출해 TCP와 UDP 기능을 사용할 수 있다.
TCP는 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 한다. 이에 따라 신뢰성을 만들어 수신 여부를 확인하며 '가상회선 패킷 교환 방식'을 사용한다.
가상회선 패킷 교환 방식은 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 가상회선을 따라 전송된 순서대로 도착하는 방식이다.
UDP는 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 '데이타그램 패킷 교환 방식'을 사용한다.
데이터그램 패킷 교환 방식은 각각의 패킷이 독립적으로 이동하여 최적의 경로를 선택하며 이동한다. 그렇기에 각각의 패킷이 선택하는 최적의 경로는 다를 수가 있기에 순서가 다를 수 있는 것이다.
그렇다면 TCP는 어떻게 연결이 이루어지고 연결이 해제되는 지를 알아보자.
TCP는 신뢰성을 확보할 때 '3-way handshake'라는 작업을 진행한다.
위의 그림처럼 클라이언트와 서버가 통신할 때 세 단계를 거친다. SYN은 Synchronize의 약자로 동시에 진행한다를 의미한다. ACK는 Acknowledgment의 약자로 승인을 의미한다.
1. SYN 단계: 클라이언트는 서버에 클라리언트의 ISN을 담아 SYN을 보낸다. ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있다.
2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다.
3. ACK 단계: 클라이언트는 서버의 ISN +1 한 값인 승인번호를 담아 ACK를 서버에 보낸다.
ISN은 Initial Sequence Numbers의 약자로 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호이다.
이렇게 신뢰성이 구축되고 데이터 전송을 시작한다. 이러한 과정이 있기에 TCP가 신뢰성이 있는 계층이라고 하는 것이다.
그렇다면 연결을 해제할 때는 어떨까?
TCP가 연결을 해제할 때는 4-way handshake 과정이 발생한다.
FIN은 Finish의 약자로 끝낸다는 의미이다.
1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
2. 서버는 FIN을 받고 클라이언트로 ACK라는 승인 세그먼트를 보낸다. 그리고 COLSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
3. 서버는 ACK를 보내고 일정 시간 후에 FIN이라는 세그먼트를 보낸다.
4. FIN을 받고 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.
여기서 중요한 점은 TIME_WAIT이다. 클라이언트가 바로 CLOSED 상태가 되지 않고 좀 더 기다리는 이유는 지연 패킷이 발생할 경우를 대비하기 위함이다. 패킷이 뒤늦게 도착하고 이를 처리하지 못하면 데이터 무결성 문제가 발생한다.
그리고 두 장치가 연결이 닫혔는지 확인하기 위해서이다. 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 할 때 장치는 줄곧 LAST_ACK로 되어 있기 때문에 접속 오류가 나타날 것이다.
3. 인터넷 계층
인터넷 계층은 송신 호스트가 어떤 경로를 통해 수신 호스트에 전달되는지를 결정하는 라우팅 문제를 처리한다. 보통 호스트끼리의 통신은 여러 중개 시스템을 거쳐서 통신이 이루어지는데 어떤 경로로 송신 호스트에서 수신 호스트까지 갈지를 정하는 것이다. 중개 시스템의 기능은 일반적으로 라우터가 수행한다. 네트워크에서 여러 경로가 만들어지고 통신이 이루어지면 네트워크 부하가 증가할 수 있고 이로 인해 특정 지역에 혼잡이 발생할 수 있다. 이를 위한 혼잡 제어는 인터넷 계층에서 담당한다.
인터넷 계층에서는 전송 데이터를 패킷이라 부르며, 중개 과정에서 경로 선택의 기준이 되는 호스트 주소가 필요하다. 인터넷에서는 IP 프로토콜이 인터넷 계층의 기능을 수행하므로 호스트 IP주소가 경로 선택에 중요한 기준이 된다. 하지만 호스트에 도착하고 나서는 링크 계층의 MAC 주소를 이용해서 호스트를 구분한다. 그렇기에 IP주소를 MAC 주소로 변환할 수 있어야 한다.
위에서 설명했다시피 각 계층마다 프로토콜을 통해서 통신을 한다. 더욱이 주소와 관련해서 여러 프로토콜이 활용된다. 인터넷 계층에서는 대표적으로 ARP, RARP, ICMP가 있다.
일반적으로 송신 호스트는 자신의 IP 주소와 MAC 주소는 간단히 얻을 수 있지만, 수신자의 주소를 얻으려면 몇 단계의 처리 과정이 필요하다. 먼저, 상대방 호스트의 IP 주소는 응용 프로그램의 사용자로부터 입력되지만 MAC 주소는 어디에서도 얻을 수 없다. 이때 필요한 게 ARP(Address Resolution Protocol)이다. ARP는 상대방 호스트의 IP 주소를 이용해 MAC 주소를 구하는 기능이 있기에 위 문제를 해결할 수 있다.
그렇다면 RARP는 무엇일까? RARP는 Reverse Address Resolution Protocol의 약자이다. 의미대로 ARP와는 반대로 MAC 주소를 통해 IP 주소를 구할 수가 있다. 호스트의 IP 주소는 컴퓨터 설정 작업의 초기화 과정에서 특정 파일에 보관된다. 그러나 하드디스크가 없는 시스템은 LAN 카드의 내장된 자신의 MAC 주소는 알지만, 파일 시스템이 존재하지 않으므로 IP 주소를 알 수 없다. 이럴 때 RARP를 사용해서 문제를 해결할 수가 있는 것이다. 즉, 일반 컴퓨터에서는 RARP를 사용하지 않지만, 디스크가 장착되지 않은 시스템에서는 RARP를 반드시 사용해야 한다.
마지막으로 ICMP에 대해서 간단히 설명하자면, 사용자 데이터의 전송 과정에서 오류가 발생하면 오류 메시지가 생성되는데, ICMP(Internet Controm Message)는 이를 전송하는 기능을 담당하는 프로토콜이다.
4. 링크 계층
링크 계층은 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 규칙을 정하는 계층이다. OSI 7 계층에서는 이를 물리 계층과 데이터 링크 계층으로 나누는데 물리 계층에서는 무선 LAN과 유선 LAN을 통해 0과 1로 이루어진 데이터를 보내는 계층을 말한다. 데이터 링크 계층은 '이더넷 프레임'을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하는 계층이다.
데이터 링크 계층을 이용해 전송되는 데이터를 프레임이라고 부른다. 프레임 헤더에 표시되는 송수신 호스트 정보에는 LAN 카드에 내장된 송수신 호스트의 MAC 주소가 기록된다.
물리 계층을 통해 데이터를 전송할 때는 MAC 주소를 이용해서 호스트를 구분한다.
결론
이렇게 TCP/IP 계층 모델에서 각 층의 대해서 알아보았다. 공부하면서도 느낀 것은 OSI 7계층하고 큰 차이가 없다는 것이다. 결국 기능을 어떻게 계층화할 것인지만 다른 것이지 본질은 같은 것이다.
마지막으로 PDU에 대해서 간단히 작성하고 글을 마치겠다.
PDU(Protocol Data Unit)는 네트워크의 어떠한 계층에서 계층끼리 데이터가 전달될 때 한 덩어리의 단위를 PDU라고 한다. PDU는 제어 관련 정보들이 포함된 '헤더', 데이터를 의미하는 '페이로드'로 구성되어 있으며 계층마다 부르는 명칭이 다르다.
애플리케이션 계층에서는 메시지, 전송 계층에서는 세그먼트(TCP), 데이터그램(UDP), 인터넷 계층에서는 패킷, 링크 계층에서는 프레임(데이터 링크 계층), 비트(물리 계층)이다.
각 계층에서의 PDU는 한 계층을 내려가면 그 계층의 헤더가 붙여지면서 새로운 PDU로 변환되는 것이다.
참고
쉽게 배우는 테이터 통신과 컴퓨터 네트워크 - 박기현
면접을 위한 CS 전공지식노트 - 주홍철
https://www.scaler.com/topics/computer-network/tcp-3-way-handshake/
https://sjs2215.tistory.com/57
'통신 및 네트워크' 카테고리의 다른 글
SMTP을 사용한 메일 통신은 어떻게 진행되는가?(With POP3, IMAP) (2) | 2024.10.19 |
---|---|
HTTP 버전의 변화(HTTP/1.0, HTTP/1.1, HTTP/2.0, HTTPS, HTTP3.0) (0) | 2023.06.15 |
네트워크 성능 분석 명령어 (0) | 2023.06.04 |
프로토콜 - HTTP 에 대한 간단 정리 (0) | 2022.05.07 |
네트워크 관련 기초 용어 (0) | 2022.05.07 |