공부/네트워크

[네트워크] OSI 7계층과 TCP/IP 에 대해서

용팬 2019. 4. 30. 23:59

[OSI 7계층]

OSI 7 Layer
미 국방성 TCP/IP 자료

 

[물리 계층]

비트의 전송을 담당한다.

통신공학적 접근으로는

1.전파와 전압으로 비트를 표현하는 방법

2.연결을 위한 전선의 종류 : TPC(Twisted Pair Cable), 동축케이블, 광케이블, 무선설비

3.타이밍

1대1 통신, 일방향통신(방송)을 하려면 물리 계층으로도 충분하다.

송신지와 수신지가 직접 대응하거나 송신된 신호를 증폭하여 방송하면 되기 때문이다.

 

[데이터 링크 계층]

하지만 네트워크나 다수의 사용자가 이용할때, 특정 수신인을 지목하기 위해서는 데이터 링크 계층이 필요하다.

송신지와 수신지의 주소(MAC Address, 각 장치는 LAN카드를 보유함)가 필요하다.

큰 데이터를 작은 데이터로 나누어 전송되며, 이로써 순서 제어와 흐름 제어가 필요해진다. 

데이터의 오류 확인이 필요해진다.  例) 패리티 검사 , Block Sum Check , CRC(순환중복검사, 전체 데이터를 검사하는것)

데이터를 바이트로 구분하여 보기 시작한다. (비트열이 아닌 바이트열(숫자)를 전달한다는 개념이다.)

사실상 네트워크는 2계층만을 가지고도 형성 가능하다.

하지만 기업/국가와 같은 단체에 따라서 사용하는 하드웨어 프로토콜(1계층)과 소프트웨어 프로토콜(2계층)이 다르기 때문에 이와 같은 노드들을 연결하기 위해서는 프로토콜의 변환이 불가피했고, 이를 위해 제 3계층이 탄생한다.

Switch , Bridge , Hub가 이 계층에서 동작한다. ( Collison Domain ) 

[네트워크 인터페이스 계층]

LAN으로의 연결을 담당하는 1,2계층을 묶었고, 우리가 사용하는 LAN은 Ethernet이다. 이 것이 최초의 LAN이었기 때문에, 현재는 이 것으로 통일된것으로 보인다. 로컬이더넷에서는 CSMA/CD 프로토콜을 이용한다.

2계층에서 수신자와 송신자의 구분이 가능하기 때문에 교환기 기능을 구현할 수 있다. 例)Hub, Bridge, Switch

Preamble : 프레임의 시작을 나타내는 필드, 초기에는 신호지연으로 인한 약간의 비트 손실을 허용하기 위함이었다. 비트동기를 위해 56비트동안 '1', '0'을 반복한다.

SFD(Start of Frame Delimiter) : 프레임 시작 구분자. 항상 10101011(2) 171로 설정된다. 프레임 동기를 위한 식별용 문자. 마지막 두 비트가 '11'임.

송신지/수신지 주소 : MAC Address

길이 : 2바이트, 0x600(1536) 이하이면 수납되는 LLC의 길이(3~1500byte) 를 나타내며, 0x600이상이면 DIX2.0으로 해석

데이터 = 페이로드

CRC = FCS

MAC 프레임 길이 : 64(MAC헤더 14 + 데이터 46 + FCS 4)

최소길이가 46바이트가 되도록 Padding 뒤에 0을 붙임 ~ 1518(MAC헤더 14 + 데이터 1500 + FCS 4)

 

[네트워크 계층]

앞서 말했다시피, 동일한 환경하에서는 이 제 3계층이 필요하지 않다. 하지만 피어들의 하드웨어와 소프트웨어가 사용하는 프로토콜의 상이로 이를 총괄할 제 3계층이 형성되었다.

2계층은 LAN을 벗어나면 무의미해지는 주소를 갖고 있기 때문에, 3계층은 새로운 주소를 부여한다. 例) IP Address

주소를 보고 우편물을 어디로 보낼지 결정한다.( Routing )

1,2계층의 하드웨어, 소프트웨어 프로토콜의 차이를 이 곳에서 통합/관리한다.

Router가 이 계층에서 동작한다. ( Broadcast Domain )

[인터넷 계층]

 

<IP>

1) Version : IPv4 / IPv6 

2) IHL : 옵션값을 제외한 헤더의 길이 

3) TOS : 서비스의 품질을 나타냄, QOS 

4) Total Len : 데이터를 포함한 전체 길이 

 

5) ID : 식별자, 단편화된 IP    패킷을 재조립할 때 사용

6) IP Flags

- x : 미사용, 항상 0 

- D : Don't frag, 0 (단편화 가능), 1 (단편화 불가능) 

- M : More frag, 0 (마지막 조각을 의미), 1(뒤에 따라올 조각이 있다) 

7) Fragmentation Offset :  순서 번호,   몇번까지 받았다를 의미 ex) 3080 0 - 1479 / 1480 - 2959 / 2960 - 3079 

13 비트로 이루어져 있어서 2의 16승을 구분하기 위해 2의 3승인 8로 나눠진 수치임. 

 ID,IP플래그, FragOffset  이 3개는 재배열과 관련된 필드


8) TTL : 패킷의 수명, 라우터를 거칠때마다 감소

9) Protocol : 프로토콜의 종류 표시

- 1 : ICMP - 2 : IGMP - 4 : IP - 6 : TCP - 17 : UDP - .... 

10)  체크섬 : 헤더 오류검출 진행. 

11) Source Address :  송신지 IP주소 

12) Destination Address :  수신지 IP주소

 

IP (internet protocol)은 1,2계층의 차이를 감춘다.

데이터를 약 64kbyte 단위로 잘라서 전송하고, LAN Card 에서는 1.5kbyte정도로 잘라서 전송한다.

하위계층인 제3계층이 제4계층의 프로토콜 정보를 담고있다. 

라우터를 거쳐서 목적지에 도달 실패하면 패킷을 버리도록 설계되어있는데, 이 정보만으로 라우터는 교환기의 역할을 할 수 있는지 묻는다면 불가능하다. 실제 데이터의 교환은 하위 2계층에서 이루어지기때문에 IP와 MAC을 대응시킬 Routing table을 제작할 필요가 있으며, 테이블은 그 네트워크 속 노드들이 적당하게 만든다. 만드는 방법은 대표적으로 ARP(Address Resolution Protocol, 주소 해석 프로토콜)을 사용한다. RARP는 반대 개념으로 기억력이 부족한 장치들이 자신의 MAC으로 IP를 알아낼때 쓰인다.

 

인터넷의 연결상태는 항상 변한다. 따라서 패킷의 도달 여부를 알 수 없을 경우에 대비하여 ICMP(인터넷 제어 메시지 프로토콜)을 이용하여 '패킷을 배달하는 라우터'는 전달 상황을 송신자에게 보고한다.

<ICMP>

ㅡ 라우터 ---> 송신자 ㅡ

# 목적지 도달하지 못한 이유 전송

# 경로이상 , 방향전환 전송

# 시간초과 , TTL 만료 전송

# 네트워크 혼잡, 송신량 감소 요청

ㅡ 송신자 ---> 수신자 ㅡ

# 패킷 수신여부 요청

ㅡ 수신자 ---> 송신자 ㅡ

# 패킷 수신완료 전송

 

사용하는 프로토콜 : IP , ARP , ICMP ...

 

[전송 계층]

4계층은 3계층에서 정해진 주소의 노드 속 어떤 프로그램에게 이 정보가 갈 것인지 파악하고 전달한다.

[전송 계층]

TCP와 UDP 이 두가지가 사용된다. 이 계층에서는 Port라는 개념이 등장하는데, 이 번호로 어떤 프로그램으로 이어질지 구분한다. 3계층에서는 노드만을 구분하였고, 데이터를 나누어서 보낸 후, 그에 대한 대답을 라우터 또는 송/수신자로부터 받았다.

하지만 어떤 프로그램에 그 데이터를 송/수신하는지 , 프로그램 간의 가상 연결상태 , 데이터 전송의 신뢰성 (재전송) 을 신경쓰지 못하였다. 따라서 전송계층에서는 위 세가지 사항을 다룬다.

 

<TCP>

연결형,신뢰성 전송 프로토콜이다.

전송하는 데이터 단위는 '세그먼트'

프로그램간의 가상 연결을 위하여 핸드셰이킹을 사용한다.

3-Way-HandShaking 은 링크의 연결에 사용되며 

ㅡ    #SYN 전송    #ACK,SYN 회신    #ACK 전송   ㅡ이라는 과정을 통해서 이루어진다.

4-Way-HandShaking 은 링크의 절단에 사용되며

ㅡ    #FIN 전송     #ACK 회신 #FIN 회신     #ACK 전송    ㅡ이라는 과정을 통해서 이루어진다.

HandShaking 을 보여주는 그림

연결이 확립되면 연결을 유지한다. (송/수신지의 프로그램을 '통신대기'상태로 유지한다.)

Sequence Number을 만들어 대화를 시작하고, 오고가는 대화 속의 데이터 양 만큼 Seq. NUM은 증가한다. 

순서번호의 증가가 일치해야만 옳은 대화가 진행되고 있는것이다. ---> 순서번호 증가로 정상 통신 여부 확인한다. 이상할시 재전송 요구한다. (이 재전송 처리 방식은 TCP의 취약점 중 하나)

Sliding window 를 사용하여 송신량의 조절(흐름제어)를 진행한다.

<UDP>

방송용 데이터 전송에 해당되며, 비연결형, 비신뢰성 전송 프로토콜이다.

전송하는 데이터 단위는 '데이터그램'

수신을 확인하지 않고 보낸다.

 

[세션 계층]

 세션이 컴퓨터 용어로 사용될 때의 의미 [네이버 영어사전]

세션 계층은 연결을 유지한다는 개념이다.

UDP가 진정한 의미의 전송 계층이라면, TCP는 이 세션 계층을 조금 포함한 전송 계층의 프로토콜이다.

[표현 계층]

말 그대로 데이터를 표현하며, 문자의 코드화(인코딩), 압축, 암호화를 담당한다.

통신에서 전달하는것은 숫자, 이 숫자는 바이트이며 바이트는 비트열의 전기적 신호이다. 

이를 화면에 출력하고자 할때는 앞선 과정의 역과정(복호화, 압축풀기, 디코딩)을 거친다.

 

[응용 프로그램 계층]

유저와 컴퓨터를 잇는 인터페이스이다.

키보드, 마우스로 전송 데이터를 만들고, 전송 받은 데이터를 화면으로 보여주는 역할을 한다.

HTTP, FTP, Terminal, SMTP 등의 서비스가 그러하다. 

[응용 프로그램 계층]

<FTP>

파일 전송 프로토콜, TCP이용, 20(데이터)/21(제어) 포트를 사용한다. 

서버가 21번 제어포트를 열고 대기하면 클라이언트는 21번 포트로 접근하고, 연결이 되면 클라이언트는 자신이 개방한 포트 넘버를 알려준다. 서버는 20번 포트로 접근하여 데이터를 전송하고 FTP 명령은 문자이기 때문에 직접 타이핑해서 전달 가능하며 명령, 매개변수 단위 구분자를 공백을 사용한다. 마지막엔 줄 바꿈 문자로 마무리하여 전송한다.

<SMTP> Simple Mail Transfer Protocol

메일 전송 프로토콜, TCP이용, 25번 포트

FTP와의 다른점은 지연전송(때를 기다렸다가 전송한다.) 

서버(例 : SENDMAIL)와 클라이언트(例 : MUTT , PINE)로 나뉜다.

<POP> Post Office Protocol 

메일 수신 프로토콜, TCP이용, 110번 포트

사용자는 주기적으로 서버를 확인하여 수신된 메일을 다운로드한다.

<TELNET>

원격 터미널 , TCP이용 , 23번 포트

멀리서 컴퓨터의 콘솔창(CUI)으로 명령을 내릴 수 있다. 

호스트의 ID, Password , IP주소 , 도메인명 등을 알아야한다. 

<Rlogin>

원격 터미널 , TCP이용 

<SSH> Secure Shell

원격 터미널 , TCP이용, 22번 포트

<HTTP>

하이퍼 텍스트 전송 프로토콜, TCP이용 80번 포트

서버, 클라이언트의 정보교환 담당.

<HTTPS>

하이퍼 텍스트 전송 프로토콜, TCP이용 443번 포트

 SSL, TLS프로토콜로 응용계층 데이터를 암호화하여 데이터 보호를 보장한다.

 

<SNMP> Simple Network Management Protocol 

네트워크 구성 관리 프로토콜, UDP이용, 161(request)/162(response) 번 포트

네트워크의 토폴로지 지도를 그려서 네트워크 구성 관리한다.

각 네트워크 세그먼트간 네트워크 사용량/ 에러량/ 처리속도/ 응답시간 등 통계정보로 성능관리를한다.

CPU , Memory 등의 정보를 얻어 오는 장비 관리를 한다

보안성능이 뛰어나다.

 

<TFPT> 파일 전송 프로토콜, UDP이용, 69번 포트

<DHCP> Dynamic Host Configuration Protocol UDP, 67/68번 포트

<BOOTP> DHCP 이전에 개발된 호스트 구성 프로토콜