컴퓨터에서 통신이라는 것이 일어나는 과정을 알아보기 쉽게 단계별로 나눈 것을 말합니다. 결론적으로 단계별로 나누어보면 어디서 오류가 발생했는지 알기 쉽기 때문입니다.
OSI 7계층과 TCP/IP 4계층은 위와 같은 구조로 이루어져 있습니다. 그렇다면, 위 구조를 자세히 살펴보겠습니다.
TCP/IP 4계층은 네트워크를 사용하는 프로토콜의 집합으로 각 계층마다 네트워킹 범위에 따라 프로토콜이 다르게 구성되어 있습니다. OSI와 다르게 실용성을 기반을 둔 구조입니다.
먼저 컴퓨터에 통신이 들어오거나 나가게 될 때 물리계층(Physical Layer)를 통하게 됩니다.
이 계층에서는 단지 데이터를 전기적인 신호로 변환해서 전달하는 기능을 담당하고 있습니다. 그래서 비트(Bit) 단위를 사용해 0과 1단위로 변경하죠. 물리계층에서는 케이블, 리피터, 허브등을 통해 데이터를 전송합니다.
이외에도 AP도 물리계층에 속하는데 이는 다른 LAN 기술을 통해 네트워크를 연결하는 기기를 말합니다.
송수신된 정보를 안전!하게 전달할 수 있는 역할을 하는 계층입니다. 이 계층을 통해 오류가 발생했는지 확인하고 재전송을 할 수 있는 기능을 가지고 있습니다.
이 계층에서는 브릿지나 스위치를 통해 MAC 주소를 가지고 프레임(Frame) 단위로 통신합니다.
NIC에 할당되어 있는 물리주소를 프레임에 부여해 전송하면서 에러 확인, 재전송, 흐름 제어를 진행합니다.
유선 이더넷(Eternet)은 IEEE802.3 표준을 따르는 CSMA/CD 방식을 사용합니다. 대표적인 유선 LAN 케이블로 Twist Pair Cable, 광 섬유 케이블이 있습니다. 유선 LAN은 전이중화 통신 방식을 사용합니다.
CSMA/CD : 전송 후, 충돌을 감지해 발생한다면 재전송하는 방식
무선 LAN은 IEEE802.11 표준을 따르며 양쪽에서 송수신이 가능하나 동시에는 불가능한 반이중화 통신 방식을 사용합니다. CSMA/CA 방식을 사용해 캐리어 감지를 통해 회선이 비어있는지 확인할 수 있고 충돌을 방지할 수 있습니다. 무선 LAN은 대표적으로 와이파이, 지그비, 블루투스 등이 있습니다.
CSMA/CA : 전송 전, 채널 유휴여부를 확인 후 대기한 후 전송하는 방식
💡 와이파이 2.5Ghz? 5Ghz?
무선 LAN을 사용하기 위해 AP(Access Pointer) 이라는 무선 접속 장치가 필요합니다. AP에 사용할 수 있는 대역은 2.5Ghz와 5Ghz가 있는데 주파수 대역이 클수록 채널에 많은 사람들이 들어올 수 있는대신 회절율이 저하되어 장애물에는 조금 취약하다입니다. 반면 2.5GHZ는 장애물에는 강한 특성이 있습니다. AP는 무선 공유기와 동일하게 무선 인터넷을 사용할 수 있는 망이나 무선 공유기와의 차이는 IP를 할당받지 않고 사용하는 인터넷입니다.
네트워크 계층은 데이터를 목적지까지 안전하고 빠르게 전달하는 기능(라우팅)을 담당합니다.
이 계층에서는 라우터를 통해 경로를 설정하고 IP주소를 지정해 해당 경로에 패킷을 전달합니다. 이 계층에서 대표적인 장비로 라우터(Router) 가 있으며 노드를 거칠 때마다 경로를 찾아주는 역할을 하죠. 그 과정에서 상위 계층인 전송 계층이 요구하는서비스 품질(QoS)을 제공하기 위한 수단도 제공합니다.
💡 브라우터(Brouter)
요즘은 브리지와 라우터의 기능을 모두 수행할 수 있는 브라우터를 많이 사용합니다. 내부 네트워크를 분리하는데 브리지를 사용하고 외부 네트워크를 연결하는데 라우터를 사용합니다.
TCP/IP 상에서 인터넷 계층은 OSI 상에서 네트워크 계층에 해당하는데 패킷을 목적지까지 전달하고 라우팅을 담당하는 계층입니다. 이 계층에서는 패킷을 전달하는 IP와 패킷에 대한 에러를 보고하고 진단하는 ICMP, 그리고 경로를 탐색하는 라우팅 프로토콜이 있습니다.
💡IPSec
IP 계층에서 무결성과 인증을 보장하는 인증헤더(AH)와 기밀성을 보장하는 암호화(ESP)를 이용해 양 종단 간 보안 서비스를 제공하는 터널링 프로토콜
💡ARP
P주소를 물리적인 주소로 바꾸어주는 프로토콜입니다. 반대로 물리적인 주소를 IP 주소로 바꾸는 프로토콜은 RARP입니다.
통신망에서 각 패킷에 여러개의 라우터를 건너 뛰면서 최종 목적지까지 패킷을 전달하는 과정을 말합니다. 통신장치에 있는 라우팅 테이블의 IP을 시작으로 SubNetwork 안 라우터들의 라우팅 테이블의 IP 기반으로 패킷을 전달합니다.
- 라우팅 : IP을 찾아가는 과정
- 라우팅 테이블 : 게이트웨이와 최종 목적지까지 가는데 거쳐야할 다음 라우터의 정보를 가지고 있습니다.
- 게이트웨이 : 서로 다른 통신망, 네트워크간 통신 관문을 말하는 용어로 게게이트 웨이를 지날수록 네트워크 상의 통신 프로토콜로 변환 시킵니다.
실제 프로그램들이 TCP, UDP 프로토콜을 통해 전송될 수 있도록 제공하는 계층입니다. 이 계층에서는 데이터를 하나로 합쳐 5계층으로 넘겨주는 역할을 합니다. 즉, 양 끝단(end to end)의 사용자들이 신뢰성이 있는 데이터를 주고 받을 수 있도록 하는 역할이며 전송에 있어 효울성이나 유효성을 생각하지 않도록 합니다.
흐름제어는 송신측과 수신측의 데이터 처리 속도 차를 해결하기 위한 방법입니다. 수신측이 지나치게 많이 받지 않게 조절하고 서로 상태(Stateful)라는 개념이 존재하기 때문에 현재 상태를 피드백합니다.
보내는쪽이 받는쪽보다 속도가 빠른 경우에 문제가 생기는데 이때 받는쪽에서 용량이 초과한 이후에 오는 데이터는 손실이 됩니다. 이러한 위험을 줄이기 위해 보내는쪽의 전송량을 수신측에 따라 조절해야 합니다.
해결할 수 있는 첫번째 방법으로는 매번 전송한 패킷에 대해 확인했다고 응답을 받아야만 전송할 수 있는 구조입니다.
수신측에서 설정한 윈도우 크기 만큼 송신측에 세그먼트를 전송할 수 있습니다. 이를 통해 데이터 흐름을 동적으로 조절할 수 있죠. 실제로 데이터를 보내기 전에 3way handshaking을 통해 송수신간의 크기를 맞추게 됩니다.
혼잡 제어는 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하는 방법입니다.
이번에는 송신측에서 보낸 데이터가 라우터에 몰릴 경우(패킷이 과도하게 증가하게 되는 경우도 포함) 데이터를 처리할 수 없기 때문에 다시 재전송하게되어 혼잡만 생겨 오버플로우나 손실을 발생시키게 됩니다. 이를 해결하기 위해 혼잡 제어를 통해 전송 속도를 줄이게 됩니다.
TCP는 신뢰성있는 통신 방식입니다. 신뢰성을 위해 3번 4번 정도 Handshake하는 방식을 사용합니다.
💡 ISN
초기 네트워크를 연결할 때 할당된 32비트 고유 시퀀스 번호
클라이언트는 연결을 닫기위해 FIN 세그먼트를 서버에게 보냅니다. 그다음 FIN_WAIT_1로 상태를 변경하고 응답을 기다립니다.
서버는 ACK 승인 세그먼트를 보냅니다. 그리고 상태를 변경합니다. 받은 클라이언트는 WAIT_2의 상태로 변경합니다.
일정 시간이 흐른뒤, 서버는 다시 FIN 세그먼트를 보냅니다. 클라이언트는 TIME_WAIT 상태가 되고 다시 ACK 세그먼트를 보냅니다.
일정 시간이 흐른뒤, 연결이 닫히게 됩니다.
여기서, TIME_WAIT이 바로 닫지 않고 일정 시간이 흐른 다음 닫는 이유는 뒤늦게 들어오는 데이터의 무결성(Data Integrity) 문제를 대비하기 위해 지연 방지를 위해 시간을 기다려주는 것입니다.
또한, 두 장치의 연결이 제대로 닫혔는지 확인을 하기 위해서 입니다. 만약에 서버가 Closed가 아닌 상태에서 닫히게 되면 접속 오류가 발생하기 때문입니다.
TIME_WAIT : 소이 바로 소멸되지 않고 일정 시간을 유지하는 상태를 말하며 지연 패킷의 문제를 해결하는데 도움이 됩니다.
SSL/TLS : 전송계층과 응용계층 사이에 클라이언트와 서버 간의 데이터 암호화, 데이터 무결성을 보장하는 보안 프로토콜
앞서 나왔듯이, UDP(User Datagram Protocol)은 데이터 그램 단위로 처리하는 프로토콜입니다. UDP는 TCP와 다르게 에러 처리나 흐름제어가 없기 때문에 에러가 발생할 수 있고 순서가 바뀔 수도 있습니다. 그러면 UDP를 왜 사용하는 것일까요? 결국엔, 속도입니다. 그래서 실시간 라이브방송이나 게임과 같이 실시간으로 동작하는 환경에서 사용합니다.
대표적으로 DNS 환경에서도 사용하는데요. 이유는 요청하는 양이 적고 연결을 유지할 필요가 없는 작업이기 때문입니다. 하지만 크기가 512(UDP limit)이 넘는 경우, TCP를 사용합니다.
DNS request는 UDP 세그먼트에 꼭 들어갈 정도로 사이즈가 작습니다. 그리고 신뢰성 관련해서는 Application 단에서 추가할 수 있기 때문에 가능합니다. 다만 DNS 서버간 요청을 주고 받을 때(Zone Transfer)는 TCP를 사용해야 합니다.
데이터가 통신하기 위한 논리적인 연결을 담당합니다. 앞서 4계층과는 무관하게 응용 프로그램 관점에서 통신 관리하는 방법을 제공합니다. 동시 송수신(Duplex), 반이중(Half-duplex), 전이중(Full-Duplex) 통신 뿐만아니라 체크포인팅, 유휴, 종료, 다시시작 등의 과정을 수행합니다.
주로, 세션을 설정하거나 유지, 종료, 중단등을 다룹니다. 또, 이 계층에서는 TCP/IP 세션을 만들고 없애는 책임을 갖고 있습니다.
예를 들어, 100MB의 파일을 전송하는 경우 이 계층에서는 5MB마다 체크 포인트를 설정하여 연결이 끊어지면 체크포인트 위치부터 세션을 재개하여 데이터 전송을 체크 포인트와 동기화합니다.
또는, 데이터가 충분히 전달될 수 있도록 세션을 닫거나 열수 있습니다. 이렇게 세션 계층는 통신이 끊어지지 않도록 대화를 유지하기 위한 구조입니다.
데이터 표현에 대해 독립성을 제공하고 암호화하는 역할을 합니다. 실제로 애플리케이션이 이를 사용할 수 있게 하기 위해 데이터를 표현하거나 세션계층으로 전달하기 전 압축해서 속도와 효율을 높이기도 합니다. 데이터를 표현한다는 의미는 압축이나 암호화 또는 변환을 한다는 것입니다.
예를 들어, 해당 파일이 TXT인지 JPG인지 구분하거나 인코딩하여 파일을 바꿔주는 역할을 합니다.
응용 프로세스와 직접 관계하여 응용 서비스를 수행합니다. 애플리케이션 계층에서는 HTTP, FTP, POP3와 같은 프로토콜을 사용합니다. 즉, 모든 통신의 양 끝단에는 HTTP와 같은 프로토콜이지 응용프로그램이 아닙니다. 실질적으로 이메일을 보내거나(SMTP) 전송하는 등(FTP) 실질적인 서비스를 수행하는 계층입니다.
우리가 다른 서버에 어떠한 데이터를 요청할 때, 이 계층에서 HTTP라는 데이터를 생성해내는 것을 의미해요.
위 그림 처럼, 상위 계층부터 하위계층 까지 헤더가 붙여지면서 PDU가 바뀌는 과정을 캡슐화라고 합니다.
반대로, 상위계층으로 올라갈 수록 헤더 부분이 제거되는 과정을 비캡슐화 과정이라고 합니다. 이 과정에서 계층이 다른 계층으로 전달될 때 PDU가 바뀌기 되는데 이때, PDU(Protocol Data Unit)은 데이터가 전달될 때의 덩어리 단위를 말합니다. PDU는 제어 정보가 포함된 헤더와 데이터를 의미하는 페이로드로 구성이 되어 있어 계층마다 부르는 명칭이 상이합니다.
계층 | 대표 프로토콜 | PDU | 장비 | TCP/IP |
---|---|---|---|---|
물리(Physical) | Eternet, RS-232 | 비트(Bit) | 허브, 리피터 | 네트워크 인터페이스 |
데이터(Data) | MAC, PPP | 프레임(Frame) | 스위치, 브릿지 | 네트워크 인터페이스 |
네트워크(Network) | IP, ICMP, ARP, DHCP | 패킷(Packet) | 라우터 | 인터넷 |
전송(Transport) | TCP, UDP | TCP : 세그먼트(Segment), UDP : 데이터그램(Datagram) | 게이트 웨이 | 전송 계층 |
세션(Session) | SSH, TLS, NetBIOS | 메세지(Message) | 애플리케이션 | |
표현(Presentation) | JPG, MPEG, PAP, AEP | 메세지(Message) | 애플리케이션 | |
응용(Application) | HTTP, FTP, SMTP, DNS | 메세지(Message) | 애플리케이션 |