이번 포스트는 OSI 7 Layer에 대해서 알아본다.
출처 : https://gyoogle.dev/blog/computer-science/network/OSI%207%EA%B3%84%EC%B8%B5.html
통신과정이 복잡해짐에 따라 7개의 레이어로 나눈 것이 OSI 7 계층이다.
실제하는 요소들을 보기 좋게 나눈 것이기도 하지만,
각 요소들이 레이어에 적합한 일들을 한다.
(덕분에 한 레이어에선 하나의 것만 중점으로 고려할 수 있다.)
여기는 "말 그대로" 물리에 밀접한 기계와 관련된 부분이다.
케이블, 리피터, 허브 같은 것들이 이에 해당한다.
어떤 데이터가 가는지, 오류가 있는지는 관여하지 않는다.
여기서 부턴 1,0을 넘어 그것에 대해 의미를 부여한다.
통신 단위를 프레임으로 하며, 이더넷, 스위치, 브리지가 여기에 해당한다.
상위노드에서 받은 데이터그램을 한번 포장한 것이 프레임.
네트워크 계층에서 받은 데이터그램에 헤더와 트레일러를 붙여서 프레임을 만든다.
헤더는 송,수신 노드의 MAC 주소가 담겨 있으며
트레일러는 에러 체크를 위한 값이 들어 있다.
프레임이 제대로 전송되었는지 보장하기 위해 오류 체크를 해야한다.
여러 방법을 통해 오류 대응을 한다.
자세한 내용은 여기 참고
전송 환경에 따라 또는 기기의 성능에 따라서 노드간 전송 속도가 다를 수 있다.
흐름제어는 이를 처리하기 위한 제어로, 간단히 말해서 Stop and Wait라고 할 수 있겠다.
출처 : https://velog.io/@redgem92/네트워크-데이터-링크-계층Data-Link-Layer-1
프레임을 보내고 상대가 받았다는 응답이 있을 때까지 기다렸다가 보낸다.
너무 오랫동안 응답이 없으면 다시 보낸다.
위의 간단한 흐름제어는 기다리는 시간이 너무 아깝다.
한번에 여러개를 보내지만, ACK 응답도 받을 수 있는 방법이 있다.
출처 : https://copycode.tistory.com/74
Sliding Window는 여러개의 프레임을 버퍼인 윈도우를 사용해서 보낸다.
윈도우의 최대 크기는 고정한채로, 프레임이 성공적으로 전송되야 버퍼가 움직이는 형태로 되어있다.
이더넷은 L2(데이터링크)에서 이루어지는 LAN 통신 프로토콜이다.
내부 통신망을 위한 프로토콜로, CSMA/CD
가 핵심이다.
내부 통신망은 하나 (혹은 여러개)의 허브로 이루어진 단일 망으로 전기적 신호를 보내면 모든 단말기(노드)에 송신된다.
그래서 통신을 하다보면 프레임끼리 충돌이 발생하기도 한다.
CSMA/CD
는 이 충돌을 해결하기 위한 방법으로 아래가 핵심이다.
일단 보내보고 충돌이 생기면 랜덤한 시간동안 기다렸다 보낸다
어찌보면 비효율적인 것 같지만, 단말기가 적은 망에서는 특별한 처리 없이도 잘 돌아가는 방법이다.
또 다른 이야기로 내부망에서 프레임이 자신의 것인지 확인하는 방법은 프레임의 헤더를 까보는 것이다. 그곳을 보면 목적지 Mac 주소가 적혀 있는데, 이것을 보고 자신의 것인지 알 수 있다.
경로를 선택하고, 주소를 정하며 패킷을 전달하는 계층이다.
전송 단위는 패킷이며 보낼 경로를 선택하는 것을 라우팅
이라고 한다.
라우터가 여기에 속하며 여기서 쓰는 주소를 IP(Internet Protocol)라고 한다.
IP 패킷이라는 용어는 "패킷"이라는 언어의 폭력성 때문에 이렇게 쓰는 것 같다. 정확한 용어는 IP 데이터 그램이다.
IP 프로토콜에서 데이터가 전달되는 단위를 IP 데이터 그램이라고 한다.
IP데이터 그램은 IP에 대한 정보들을 담은 헤더 데이터랑 합쳐서 만들어 진 것이다.
헤더에는 IP 버전, 프로토콜(전송계층의 프로토콜, TCP or UDP ...), 보내는 사람 받는 사람 주소 등이 들어간다.
IP는 기본적으로 비연결성이다. (연결상태를 저장하지 않는다)
출처 : http://www.embeddedlinux.org.cn/linux_net/0596002556/understandlni-CHP-18-SECT-4.html
IP가 비연결성인 이유는 데이터가 잘 도착했는지, 오류가 없는지 확인해도 오류 처리를 할 수 없기 때문이다.
상위 계층인 전송계층은 데이터 소실이 일어나면 재전송이 가능하다 (단말기 간의 통신 프로토콜이라서) 그런데 IP는 어떤 노드에서든지 접근하기 때문에 중간 노드의 경우 원본 데이터를 알 수 없으니 재전송이 불가능하다.
IP 데이터그램이 비신뢰적이고 비연결성이기 때문에 생긴 프로토콜
IP 데이터그램 특성 때문에 ICMP가 생겨났다
전송시 오류가 발생하면 보낸 사람에게 ICMP패킷을 만들어 보내준다.
이 녀석은 IP 보안으로 나왔기 때문에 애매하게 2~3계층에 걸쳐있다고 말할 수 있겠다. (그래서 설명도 다들 제각각)
어떤 오류에서 ICMP가 발동하는 지는 아래에 자세한 설명이 있다.
출처 : https://programming119.tistory.com/155
출처에 가보면 더 자세한 설명을 볼 수 있다.
출처 : http://www.deadfire.net/tcpip/tcpip08.html
라우터는 여러개의 망을 연결해주는 역할을 한다.
망의 게이트 역할을 한다고 생각하면 쉽다.
송신자가 있는 망에서 패킷을 받아 수신자의 망으로 던져준다.
라우터는 L3계층에 있는 기기라서, IP데이터그램까지 보고, 상위계층의 tcp payload는 열어보지 않는다.
라우터에서 Fragmentation을 담당한다.
동적 주소 할당 프로토콜로 라우터의 핵심 기능이다.
IP 주소는 MAC과 다르게 제조시 보드에 저장되지 않는다.
라우터에게 할당 받아야 하는 것인데 할당과정이 이 프로토콜에 있다.
동적으로 할당받을 수도 있고, 내가 지정할 수도 있다.
자세한 설명은 아래 포스트에 정말 잘 나와있어서 대체한다.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jga0674&logNo=221004234317
Reliable Sequencing Network Service
신뢰성있는 연속적인 네트워크 서비스를 지원한다.
하위 계층에서 Sliding Window같은 기술들이 있지만, 그것들은 부가기능이고
전송계층에선 확실히 패킷이 순차적으로 전송되고 있는지를 보장한다.
대표적으로 TCP, UDP 기술이 있다.
여기서부턴 출발지 단말기, 목적지 단말기 간의 서비스이며, 중간 노드는 여기에 관여하지 않는다.
(라우터가 전송계층 패킷을 까보지 않는다는 말)
연결성을 보장하는 전송 프로토콜
*세그먼트는 TCP에서 전송단위다.
출처 : https://ko.wikipedia.org/wiki/전송_제어_프로토콜
연결은 3-hands-shake 라고 하는 방식을 사용한다. (자세한 방식은 그림 참고)
Data ->
<- ACK + Data
ACK + Data ->
<- ACK
데이터는 이렇게 전송한다. (Sliding Window가 있을 수 있다)
종료는 4-hands-shake를 한다.
출처 : https://dev.to/tamerlang/udp-in-depth-15e5
UDP는 연결수립-데이터전송-연결종료 과정이 없다.
그냥 보낸다.
연결성, Sequencing, 중복검사 같은 것들을 하지 않는다.
이런걸 어디다가 쓰지? 싶지만, 빠른 전송에 좋다. (실시간 스트리밍 서비스 같은 것들)
크~잘보고 갑니다~