}

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 시스템 해킹 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate using chrome ↓↓↓===***===>

2020년 6월 2일 화요일

OSI 7계층 프로토콜, 포트, TCP UDP란 자세히


안녕하세요 마무입니다. 오늘은 "OSI 7계층"과 "프로토콜 뜻", "물리계층", "데이터링크 계층", "네트워크 계층", "전송계층", "TCP UDP", "포트번호 란", "세션 계층", "표현 계층"에 대해서 다뤄볼 것입니다.

이 포스트를 다 읽을 시

OSI 7계층 개념과 프로토콜이란 ,포트(port), TCP UDP

에 대해서 정확하게 아시게 됩니다.


*이 포스트를 읽기전 필요한 개념*
네트워크, 브라우저, 인터넷, URL :  https://mamu2830.blogspot.com/2020/05/url.html
***********************************


--목차--

1. OSI 7계층이란

2. 프로토콜이란

3. 물리 계층

4. 데이터링크 계층

5. 네트워크 계층

6. 전송 계층, TCP, UDP, 포트

7. 세션 계층

8. 표현 계층

9. 응용 계층

10. 총 정리(브라우저를 이용해 네이버에 접속)

---------

여기서 못 찾은 정보는
리눅스 독학 페이지https://mamu2830.blogspot.com/p/blog-page_13.html
네트워크 독학 페이지https://mamu2830.blogspot.com/p/blog-page_15.html
운영체제 독학 페이지https://mamu2830.blogspot.com/p/blog-page_14.html
에서 찾아보세요!



1. OSI 7계층이란



컴퓨터쪽 공부를 하시다보면 꼭 한번쯤은 중요하다며 듣게되는 단어가 있습니다. 바로 "OSI 7계층"이라는 것이죠.

"OSI(Open System Interconnection) 7계층"이란 국제적 표준을 만드
"ISO(International Organization for Standardization, 국제표준을 위한 기관)"에서 제정한, 컴퓨터 네트워크 분야의 통신과정을 7계층으로 나눈 표준을 의미합니다.

말이 어려운데, "개방형 체계(Open System)"란  "다른 것과 상호작용하는 체계"를 말합니다. 그냥 다른 것들(다른 생물체, 환경, 물건 등등)과 상호작용하는 모든 생물체나 물건들이 모두 개방형 체계로 볼 수 있으며 그렇기에 컴퓨터도 개방형 체계입니다.

"상호연결(Interconnection)"이란 "다른 것과 연결돼 있는 것에 또 연결하는 것"을 의미합니다. "a-b-c "이렇게 이미 다른 것과 연결돼 있는 것에 "a-b-c-d"와 같이 "d"를 연결하는 것이죠. 그리고 수 많은 컴퓨터들이 연결돼 있는 인터넷이 바로 이런 상호연결이죠.

"OSI(Open System Interconnection) 7계층"이란, 쉽게 "컴퓨터(개방형 체계)가 인터넷(상호연결)을 이용해 통신하는 과정을 7단계로 나눈 것"입니다.

 "OSI 7계층"라는 것은 [물리(L1), 데이터링크(L2), 네트워크(L3), 전송(L4), 세션(L5), 표현(L6), 응용(L7)]계층으로 이루어져 있습니다.



이렇게 말이죠.

현재 저희들은 운영체제를 이용해서 컴퓨터를 사용하지 않습니까? 저희가 운영체제를 통해 하는 응용프로그램의 모든 활동이 모두 "응용(애플리케이션)계층"에 해당하는 행위들입니다.

마우스를 이용해 특정 프로그램을 실행시킨다거나, 마우스를 이용해 파일들을 생성 및 삭제, 크롬 브라우저를 클릭하는 것과, 네이버 사이트에서 "NAVER"로고를 클릭해 네이버 홈페이지로 돌아가는 등등 의 모든 행위가 말이죠.

그래서 다른 서버컴퓨터에 브라우저를 이용해 접속하는, "인터넷에 접속하는 행위""응용계층"에서 시작해 "표현-->세션-->전송-->네트워크-->데이터링크-->물리계층" 순으로 데이터가 이동한 뒤, 위 사진처럼 "다른 컴퓨터의 물리계층"에 도착한 다음 데이터링크-->네트워크-->전송-->세션-->표현-->응용계층순으로 데이터가 이동하는 것이죠.

물론 실제론 수십 수백개가 넘는 라우터를 건너서 목적지 1계층부터 7계층까지 도달하겠지만요.

왜 이렇게 컴퓨터의 인터넷 통신과정을 7단계로 나누었느냐? 그것은 각 세분화를 통해 전문성이 향상되고, 고장날 시 수리에 용이하기 때문입니다.

쉽게 OSI 7계층을, 의학을 인간의 몸 기관에 따라 분류한 것과 같다고 생각하시면 됩니다.

밥을 먹으려는데 팔이 안 움직일시 정형외과를 가고, 팔은 움직이는데 입안이 헐어서 밥을 먹기 힘들다면 이비인후과를 가서 치료하고, 밥이 식도를 통과해 위에 도착했을 때 통증이 온다면 내과를 가 빠른 점검 및 치료를 하듯이

컴퓨터도 통신이 안 될 때엔 7계층 순서로 문제를 판단해, 어디 계층 문제인지 진단하고 빠르게 수리할 수 있다는 겁니다. 그리고 계층을 나눔으로서 전문성도 향상됐죠.

사실 공부를 하다보면 다들 통신과정 "OSI 7계층"이 매우 중요하다며! 막무가내로 외우라고 하는데요, 저는 개인적으로 외우라기보단 "이해"하라고 하고싶습니다. 왜냐면 진정하게 OSI 7단계를 이해해야지 앞으로의 모든 컴퓨터 공학 공부에 쓸모가 있기 때문입니다. 단순히 외우기만 하면 "7계층 순서" 맞추는 시험 문제 풀 때 말곤 의미가 없어요.

제 포스트를 순서대로 다 읽으시면 자연스럽게 흐름이 이해되시면서 왜 물리, 데이터링크, 네트워크, 전송, 세션, 표현, 응용 순으로 계층 순서가 나뉘었는지 알게 되고, 어느 순간 자연스레 외워지실 겁니다. (물론 한번만에 다 외우지긴 힘들겠지만...)




2. 프로토콜이란



인터넷을 통한 통신 7계층을 이해하기 위해선 "프로토콜(protocol)"이란 것에 대해서 알아야 합니다.

"프로토콜(protocol)"이란  "공식적인 상황에서 사용되는, 규칙이나 허락된 행동"이란 뜻입니다. 그래서 위급상황이 닥칠시 탈출하기 위해 해야하는 절차(행동원칙)를 "Evacuation protocol(대피 프로토콜)"이라 하죠.

마찬가지로 컴퓨터 공학에서 사용되"프로토콜(Protocol)""다른 기계들이 통신을 하기 위해 서로 지켜야할 규칙"을 말합니다.

"통신"이라는 것은 사실 "전기적 신호를 일치시켜서 정보교환을 하는 행위"이기 때문에
특정 "규칙(프로토콜)" 일치시켜야 합니다.

"프로토콜을 지켜야(일치시켜야) 한다"는 것은 쉽게 라디오나 무전에서 통신이 되려면 
"주파수를 맞춰야 했던 것과 같다"고 생각하시면 됩니다.

그리고 "인터넷을 통한 통신"은 사실은 어마어마하게 많은 전기공학, 통신공학, 물리공학 기술등 수 많은 기술들이 복합적으로 사용돼 가능한 것으로, 당연히 그 수 많은 각각의 기술마다 서로 지켜야 할 프로토콜(규칙)이 있습니다.

그것들이 바로 "OSI 1계층"부터 "OSI 7계층"까지 지겹도록 나오는 수 많은 프로토콜인 것이죠.

여기서 팁을 주자면, "프로토콜"이란 단어를 "규칙"이라고 해석할 경우 자연스러운 이해가 안되는 일이 종종 생기실텐데, 그런 경우엔 "프로토콜"을 그냥 "기술"이라고 해석하고 넘어가시면 편합니다.

"HTTP(HyperText Transfer Protocol)" = "HTML 문서를 전송할 때 지켜야할 규칙" = "HTML 문서 전송 기술이렇게 말이죠.

자 이렇게 프로토콜의 정의에 대해서 알아봤으니 이제 구체적으로 각 계층의 역할과 프로토콜들에 대해서 다뤄보겠습니다.




3. 물리 계층이란



먼저 1계층 "물리계층(Physical layer)"은 통신중 제일 낮은 단계입니다.
제일 낮은 단계라는 것은 OSI 7계층맨 밑에 있다는 겁니다.

이 물리계층은 신호(아날로그, 디지털)와 0과 1로 이루어진 데이터들을 다루는 구간입니다. 실제로 전기와 같은 물리적 물질과 그런 물질들을 다루는 장비들의 영역이기에 말 그대로 "물리계층(Physical Layer)"이라 부르는 것입니다.

물리계층에서 데이터링크 계층으로 데이터를 보낼 때  메인보드에 달린 "랜 카드(LAN card)"에서 컴퓨터의" 0과 1의 정보"를 "전기신호"로 변환하여 랜 카드에 연결된 "랜 선"으로 보냅니다.

참고로 "NIC(Network Interface Card)""랜카드"는 같은 겁니다.
네트워크 분야에 나오는 "Interface"란 데이터 신호가 흐르는 통로를 의미하거든요!
"NIC"는 말 그대로 "네트워크 데이터 신호가 흐르는 통로 카드"란 뜻이죠.

한번 자신의 컴퓨터의 랜선 꼽는 부분을 봐보세요, 그 랜선을 꼽는 포트가 분명 





이렇게 생긴 랜 카드와 연결돼 있을 겁니다.

당연히 물리계층에도 사용되는 규칙, 규격(프로토콜)들이 있으니...

 "랜 카드"와 연결된 "랜 선"에서 [데이터 <-> 신호] 바뀔 때 사용되는 프로토콜에는
요즘 흔히 쓰이는 "LAN선"에 사용되는 "1000BASE-T"와 아직도 직렬(Serial)통신에 사용되는 "RS-232"가 있습니다.

"랜 선"은 다들 익숙할테지만, "RS-232"는 낯선 이름일텐데요,

 

위 사진에 나오는 규격이 바로 "RS-232"입니다.





4. 데이터링크 계층



이제 1계층인 물리적인 전선을 지나서, 이제 각 전선들의 데이터들이 서로 연결될 때 사용되는 기술과 장비를 우린 데이터(Data)들이 연결(link)된다고 해서 "데이터 링크(Data link)"계층이라고 합니다.

"데이터링크 계층"은 위에서 말했다시피 서로 다른 데이터(신호)들이 연결되는 계층으로서, 어떻게 다른 컴퓨터들에게 오는 각각의 데이터들을 혼동, 충돌없이 원활하게 다른 컴퓨터로 보내겠느냐에 대한 프로토콜들이 있습니다.

그리고 그 프로토콜에는 그 유명한 "이더넷(Ethernet)"이 있고, 그 외엔 "FDDI", "ATM, "토큰링(Token ring)"등등이 있습니다.

그리고 2계층인 같은 네트워크에서 통신이 가능하게 해주는 매개체(Media)를 구분하고 접근(Access)및 사용하기(Control)위해 사용되는 절대 겹치지 않는 주소인 MAC(Media Access Control) 주소(Address)가 있습니다.

여러대의 기기들이 연결됐을 때(네트워크가 형성됐을 때) 각 기기들을 구분하기 위한 무언가가 필요하지 않습니까? 하지만 기기 이름으로 구분하기엔 이 세상에는 같은 종류의 기기들이 많죠.

그래서 겹칠 일이 없는 "MAC주소"를, 통신이 가능하게 해주는 모든 매개체 각각이 가지고 있게 한 것이죠.

위에서 말했다시피 통신이 가능하게 해주는 매개체를 구분하기 위한 것이 "MAC주소"로, "컴퓨터"인 경우 "랜 카드"가 0과1 데이터를 신호로 바꿔 통신이 되게 해주는 매개체죠?

그래서 랜카드에 "MAC주소"가 있습니다.

그리고 이런 "2계층 프로토콜"과 "MAC주소"를 이용해 같은 네트워크에 속한 기기들의 원할한 통신이 가능하게 해주는 장비에는 대표적으로 "2계층(L2) 스위치"가 있습니다.

2계층 스위치??? 그럼 다른 계층 스위치도 있나요?  라는 질문이 떠오르실텐데

3계층에서 사용되는 "L3 스위치", 4계층에서 사용되는 "L4 스위치"란 것도 있습니다.

기본적으로 "스위치"는 그 계층의 트래픽을 적절히 분배해 그 계층의 원할한 통신이 가능하게 해주는 기능이라고 생각하시면 좋습니다.





5. 네트워크 계층이란



이제 단순히 전선 여러 개로 연결될 수 있는 수준(2계층)을 넘어 "네트워크와 네트워크 사이(인터넷)"에서 컴퓨터를 구분하고 찾아가기 위해 사용되는 장비와 기술 영역을 "네트워크 계층"이라고 합니다.

그리고 인터넷상의 수 많은 컴퓨터들이 서로 각 컴퓨터들을 구분하고 찾아가기 위해 사용하는 규칙(프로토콜)이 바로 그 유명한 "IP(Internet Protocol)"입니다.

우리는 이 "IP"를 이용해 데이터를 보낼 때 "송신하는 컴퓨터의 위치""수신하는 컴퓨터 위치"를 적은 특정 형태 데이터를 만드는데, 이 데이터 형태를 "패킷(Packet)"이라고 합니다.

또한 위에서 언급한 IP(Internet Protocol)를 이용해 패킷을 만들 때나, 인터넷에서 컴퓨터나 길을 구분하기 위해 사용되는 "식별자" "IP(Internet protocol) address" 라고 하며 보통 "IP주소" 또는 "IP 번호"라고 합니다. 이 "IP주소" 덕분에 광활한 인터넷에서 각 컴퓨터들 뿐만 아니라, "네트워크", 그리고 "네트워크와 네트워크 사이의 길"구분할 수 있게 됐죠.

네트워크 계층(Internet)에서 발생한 문제를 메세지형태로 보고할 때 사용되는 프로토콜
"ICMP(Internet Control Messege Protocol)"가 있습니다.

 네트워크 공부를 할 때 내가 설계한 네트워크의 각각의 컴퓨터들이 원할하게 통신이 되는가 알아보기위해 사용하는 "ping"이란 명령어가 있는데, 이 ping이란 명령어가 사용하는 프로토콜이 바로 이 ICMP(Internet control Messege Protocol)입니다.

"IP"기술과 주소를 기반으로 "다른 네트워크를 연결해주고, 빠른 네트워크 길을 찾아주는 L3 장비"가 있으니 그~~~ 유명한 "라우터(Router)"입니다.

IP와 IP주소를 이용해 "라우터"가 다른 네트워크를 구분 및 연결해주고 길을 찾아갈 수 있지만, 광활한 인터넷 특징상 목적지까지 가는 방법이 하나가 아니죠?

그래서 "라우터"가 보다 효율적이고 더 빠른 길을 찾기 위해 라우터에서 사용하는 기술(프로토콜)들이 있으니...

대표적으로 "EIGRP", "OSPF", "BGP"등등 라우터가 어떻게 길을 찾을 것인지 정하는 규칙(프로토콜)이 있으며, 이런 프로토콜을 더 효율적인 길을 찾는(Routing) 프로토콜이라 하여 "라우팅 프로토콜(Routing protocol)"이라 합니다.

물론 "L3 장비"엔 "라우터" 외에도 "L3 스위치"도 있습니다.

참고로 기본적으로 OSI 상위 계층의 장비는 하위 계층의 장비 기능을 기본적으로 가지고 있습니다. 그래서 L3 스위치, 라우터는 L2 스위치 기능도 가지고 있죠.

그리고 보통 "라우터"스위치의 기능도 가지고 있습니다만 보통 수십 대를 연결할 수 있는 스위치에 비해 라우터는 컴퓨터를 직접 연결할 수 있는 포트를 많이 가지고 있지 않습니다.




6. 전송 계층이란



이제 "네트워크 계층의 IP"를 통해 특정 컴퓨터의 위치를 찾아내고 데이터를 보내려할 때, 어떤 식으로 데이터를 상대방에게 제대로 전송(Transport)할 것인지 기술들과 규칙을 다루는 계층을 우린 "전송계층(Transport layer)"라고 합니다.

"네트워크 계층의 IP"인터넷에서 특정 컴퓨터를 찾고, 가는 길을 알려줄 때 쓰이는 것이고, 제대로 데이터를 특정 컴퓨터에게 전달하는 것은 "전송 계층"에서 하는 것입니다.

물론 사실 "네트워크 계층의 IP"만으로도 데이터를 목적지까지 전달할 수 있습니다만 데이터의 안전을 보장하지 못합니다.

"IP만으로" 데이터를 목적지까지 보내는 것은 마치 아무런 보증 시스템도 없이 중고나라에서 집주소(IP)를 알려주고 물건을 산 것과 마찬가지입니다. 아무리 시간이 지나도 물건이 안 오거나, 배송된 물건을 보니까 벽돌이 와도 어쩔 수가 없죠.(물론 요즘 중고나라는 안전거래 시스템이 발달해 이런 일은 거의 없습니다)

하지만 "IP"와 "전송계층 프로토콜"을 같이 사용하면, 데이터가 중간에 손상 및 유실될 시 다시 보낼 수 있습니다. 마치 믿을 수 있는 인터넷쇼핑 사이트를 통해서 구매하는 것과 같습니다. 인터넷 쇼핑 사이트에서 첨부터 물건을 점검하고 보장하는 송장을 택배에 붙여주며, 만약 물건이 잘못 배달됐거나 배달이 안 되면 책임을 져주듯이 말입니다.

이처럼 확실한 데이터 전송을 위해 사용하는 "전송 계층"에 사용되는 프로토콜(규칙)에는 대표적으로
정확한 데이터를 전송하는 것이 목적인 "TCP(Transmission Control Protocol)"
정확한 데이터 배달보단 빠른 전송에 목적을 둔 "UDP(User Datagram Protocol)"
있습니다.

각 프로토콜의 차이를 예시로 표현해보자면, "TCP"는 아파트의 각 호실마다 직접 찾아가 택배물을 배달하고 주인에게 사인 받는 것이고, "UDP"는 아파트 경비실에 모든 택배물을 두고 가버리는 것과 같습니다.

실제로 "TCP" 통신에는 "3-way-handshake"라는 세 과정이 필요합니다.
먼저 데이터를 전송하기 전에 3가지의 확인과정(악수)를 한 다음데이터를 전송하는 것이죠. 이 3가지 과정은 쉽게 "우체국 택배원이 착불 배달"해주는 걸 떠올리면 됩니다.

택배원이 각 건물의 호실(IP)로 찾아가 문을 두들기는(요청, SYN), 그리고 집 주인이 대답하고(대답, ACK), 집주인이 "누구죠?"하고 물어보면(요청, SYN)하면, 택배원이 "네 xxx가 xxx씨에게 보낸 택배 입니다!"하며 (대답, ACK) 서로 안전을 확인한 뒤 문을 열고 택배를 받는(데이터전송) 장면을 말이죠.

이렇듯 "TCP"는 "3-way-handshake" 라는 과정 때문에 다소 시간이 많이 걸립니다만, 데이터 복구 기능이 있어 안전하게 데이터를 확실하게 받을 수 있다는 장점이 있습니다.

다시 "TCP"의 "3-way-handshake"를 "A"와 "B"라는 컴퓨터의 통신을 예시로 정리하자면

i) "A" SYN(SYNchronize, 우리 연결하자!) --> "B"
ii) "A" <-- ACK(ACKnowledge, 연결을 인정하마!) + SYN(너도 나랑 연결하자!) "B"
iii) "A"  ACK(ACKnowledge, 연결을 인정하마!!) --> "B"
iv) <연결 완료 후 데이터 통신>

이렇게 되는 것입니다.

반면 "UDP" 통신은 스위치(라우터)의 "브로드캐스트 주소(경비실)"에 그냥 데이터(주소가 적힌 택배물)를 보내버립니다. 그러면 모든 컴퓨터들이 UDP 브로드캐스트를 받아본 다음 자기에게 온 것이면 받고, 아니면 걍 무시해버립니다.

그리고 이런 경우 실제에서와 마찬가지로, 택배물이 유실되거나 도둑맞아도 택배원은 책임이 없습니다. 

이렇듯 "UDP"를 사용하면 3가지 과정이 필요한 TCP랑 비교해서 매우매우 빠른 통신이 가능합니다. 하지만, 브로드캐스트를 뿌리는 과정으로 제대로 목적지로 전달이 됐는지 보장을 못해 안전성이 낮습니다.(목적지에 제대로 전달이 됐는지도 모르니까요.)

그래서 신뢰성과 안전성이 중요한 작업의 애플리케이션(응용 프로그램)에선 "TCP통신"을 사용하고, 동영상과 같이 빠른 데이터 전송이 필요한 경우"UDP통신"을 사용합니다.

"IP + TCP" : 집주소 + 직접 택배물을 받겠습니다.
"IP + UDP" : 집주소 + 택배물은 경비실에 놔주세요.

그리고 더 효율적인 통신을 위해 사용하는 "전송 계층"의 기술이 있으니 그것이 바로 "포트 번호(Port)"입니다.

"포트 번호(Port number)"란 컴퓨터의 어느 애플리케이션(응용프로그램)에게 데이터를 전달할지를 알려주는 번호입니다.

이렇게만 말하면 이해가 안 되실테니, "포트 번호"란 예시를 들었던 택배물 송장에 써있는 "받는 사람"과 같다고 생각하시면 됩니다.

그 집(IP)에서 누가 받는 것인지(포트번호) 송장에 써 있는 것을 말이죠.

이와 마찬가지로 특정 컴퓨터에게 데이터를 전달할 때, 특정 컴퓨터의 어떤 애플리케이션에게 데이터를 전달하라고 추가적으로 적는 번호가 바로 "포트 번호(Port)"입니다.

포트번호는 "0번~65535번"까지 있으며, 0~1023번호까지는 서버에서 사용되는 주요 프로토콜 번호로 정해져 있고, 클라이언트가 서버에게 데이터를 보내기 위해 잘 알고 있어야하는 포트라 해서 "Well-known-ports"라고 합니다.

만약 네이버 서버측에서 웹서버 애플리케이션(ex 아파치)의 포트를 정해진 80(HTTP), 443(HTTPS)아닌 임의로 정해버리면, "클라이언트"는 "서버 웹서버 애플리케이션" 포트 번호를 모르기에 웹 사이트에 접속할 수가 없습니다. 

그래서 "서버"에선 "특정 애플리케이션에 쓰이는 프로토콜"을 "잘 알려진 포트번호(0~1023)"로 정해 사용하는 겁니다.

또한 "1024번부터"는 보통 컴퓨터가 임의의 애플리케이션용 포트사용을 합니다.
예를 들자면 저희들은 웹 브라우저(크롬, 익스플로러)를 이용해 서버(네이버, 구글, 다음 등등)에 접속하잖아요?

이 때 "웹 브라우저"1024번 이상 포트중 아무 포트번호를 자동으로 할당받고, 서버에 데이터를 보낼 때 웹 브라우저의 포트번호를 적어서 보냅니다. 그래서 서버측에서도 클라이언트의 "웹 브라우저"로 데이터를 보낼 수 있던 겁니다.

이렇게 "전송계층"에서 목적지 애플리케이션 "포트 번호"와 "데이터들의 순서"를 적고 "TCP"를 써서 만든 데이터 형태를 "세그먼트(Segment)"라고 합니다.


전송계층 이후의 "대부분의 프로토콜들"은 전부 TCP와 IP를 근간으로 하므로, 이걸 묶어서
"TCP/IP 프로토콜 슈트"라고 합니다.






7. 세션 계층이란



"네트워크 계층의 IP"를 통해 컴퓨터를 찾아가고, "전송 계층의 포트 번호"를 이용해 컴퓨터의 애플리케이션을 찾아가고, "전송 계층의 TCP"안전한 연결을 확인했습니다.

그러면 이제 "서버의 애플리케이션""클라이언트 애플리케이션" 사이에 데이터 전송을 위한 논리적인 연결통로가 생깁니다.

이 때 실시간으로 데이터를 주고 받기 위한 두 컴퓨터의 논리적 연결, 만남(Session)을 "세션(Session)"이라 하며 이런 세션을 만들고, 유지, 종료할 때 사용되는 기술과 장비들을 
"세션 계층"이라고 합니다.

"L5, 세션 계층"이란, 쉽게 이런 이미지를 떠올리시면 이해가 쉽습니다.




이렇게 일종의 통로가 만들어지는 것을 말이죠.

이런 통로의 "세션"을 통해 어플과 어플사이에 서로 다른 데이터 흐름을 동시에 전송하게 해주는 "Duplex" 기술과 멀리 있는(Remote) 컴퓨터에 있는 프로그램에게 어떠한 일련의 행위(Procedure)를 요청(call)하는 "RPC"기술을 사용할 수 있는겁니다.

이 세션계층에서 사용되는 프로토콜에는 위에서 언급한 "RPC 프로토콜"과 나중에 네트워크를 구축할 때 배울 "터널링"기술에 쓰이는 "PPTP(Point to Point tunneling Protocol)"
등등이 있습니다.

사실 "세션 계층, 표현 계층, 응용 계층"은 보통 동시에 같이 사용이 되므로, 구분이 좀 힘든편입니다.

예를 들어, 요즘은 인터넷 보안이 중요시 돼 데이터를 전송할 때 누군가 도청하거나, 간섭, 위조를 못하게 필수로 쓰는 "TLS/SSL"기술같은 경우 원래는 "세션 계층" 기술이라고 해야할 것 같은데 실제로 "L4 전송계층, L6 표현계층, L7 응용계층" 기술이 동시에 사용된단 말이죠..

이처럼 "OSI 7계층"요즘 통신기술에 적용할 시 예외가 많이 생기기에, 요즘은 그냥 세션, 표현, 응용"응용 계층" 하나로 묶어서 주로 다룹니다.

물리계층 -> 데이터링크 계층 -> 네트워크 계층 -> 전송 계층 -> 응용계층
이렇게 말이죠.





8. 표현 계층이란



세션이 만들어져 이제 데이터를 전송하는데, 각 애플리케이션마다 사용하는 데이터 형태가 각각 다르지 않습니까?

그래서 세션을 통해 넘어오는 데이터(정보)들을 애플리케이션에서 필요한 형태로 변환해 애플리케이션에서 표현(Presentation)하는 계층이기에 "표현 계층(Presentation Layer)"이라고 합니다.

문자 코드는 뭐로 할지, 압축(해제), 암호화등등  데이터를 어떻게 변환할지를 다루는 계층으로 이 표현계층에는 이제 "SMB, AFP, ASN.1"등의 프로토콜들이 사용됩니다.






9. 응용 계층이란



이제 응용프로그램(application)들의 상호작용을 다루는 계층이라서
"응용계층(Application)"이라고 합니다

말 그대로 저희들이 응용프로그램을 이용하고 다루는 계층으로, 그냥 크롬이란 응용프로그램으로 네이버란 서버에 접속해 특정 기사를 마우스로 클릭하는 등, 모든 응용계층에서 다뤄지는 모든 행위들을 생각하시면 됩니다.

세상에 정~말 수 없이 많은 응용프로그램들이 있듯, 각 응용 프로그램들에 사용하는 수 많은 프로토콜들이 있습니다.

대표적으로 누구나 다 사용한다는 유명한 프로토콜들에는 인터넷 상에서의 문자(Hyper Text)데이터들을 다루는 프로토콜 "HTTP", 메일을 보낼 때 사용되는 프로토콜 "SMTP", 그리고 방식의 차이가 있지만 둘다 메일을 받을 때 사용되는 프로토콜 "POP3"와 "IMAP", 도메인 네임서버를 찾을 때 사용되는 프로코톨 "DNS", 파일을 주고 받을 대 사용하는 프로토콜 "FTP",  텔넷 연결을 할 때 사용되는 프로토콜 "TELNET", SSH연결을 할 때 사용되는 프로토콜 "SSH"등등이 있습니다.






10. 총 정리(브라우저를 이용해 네이버에 접속)


한번 총 정리하는 느낌으로 기본 PC로 네이버에 접속하는 과정을 그림으로 나타내보겠습니다.

1)크롬 브라우저를 클릭해 URL에 http://www.naver.com/을 친다 (응용계층)

2) DNS를 통해 naver.com의 IP를 알아낸다.(과정 생략)




3)알아낸 www.naver.com의 IP와 포트 80으로 TCP 연결을 해달라고 OS(운영체제)에게 부탁한다.

4)운영체제(OS)는 www.naver.com 80번포트에게 TCP 3-way-handshakes를 하자고 패킷을 보낸다.

5)www.naver.com이랑 TCP 3-way-handshakes가 성공적으로 이루어졌다.(과정 생략)






6) 크롬(웹브라우저)는 http를 사용해 www.naver.com의 html 파일을 보내달라는 데이터를 적는다.

7) "응용계층(응용+표현+세션)"에서 "html파일을 보내달라는 데이터"를 전송계층에 보내고, 전송계층에서 이 데이터에 크롬의 포트번호(여기선 예시로 3500이라 하겠습니다.)와 목적지 80번 포트, 그리고 기타 정보를 적어서 "세그먼트"형태로 만든다 

8) "전송계층"에서 만든 "세그먼트"를 네트워크 계층에 넘기고, "네트워크 계층"에서 출발지 IP주소와 목적지 IP주소 그리고 기타정보를 추가해 "패킷"형태로 만든다.

9) "네트워크 계층"의 패킷을 데이터링크 계층으로 넘기고, "데이터링크 계층"에서 출발지 MAC주소와 목적지 MAC주소(라우터의 MAC주소) + 기타 정보를 붙여 "프레임"을 만든다.

10) "데이터링크"의 프레임이 "물리 계층"의 "NIC"에서 전기 신호로 변환돼 랜선을 타고 다른 곳으로 이동한다.





11) 라우터들을 통해 www.naver.com의 80번 포트에 도착한다.






12) www.naver.com에서 html 정보들을 http를 통해 내 컴퓨터로 보내준다.
(이 과정은 1~11번의 역순이니 그림으로 표현하지 않겠습니다)





후... 네트워크라는 개념이 워낙 광범위한 개념이라서.. 처음엔 프로토콜 종류와 개념만 설명하려다가 조금만 더.. 조금만 더.. 이러며 살을 붙이다가 이렇게 길게 써버렸네요..

총 5일간 하루 6시간씩 투자했습니다.. 파일시스템 총정리 다음으로 인터넷 포스트와 비슷하게 오래걸린 포스트였네여 ㄷㄷ

오래걸린 만큼 꼭 도움이 됐으면 좋겠습니다!!! 도움이 되셨다면 좋아요, 팔로우 꾸욱! 따뜻한 댓글을 달아주시면 저에게 정말 큰 힘이 됩니다!

그러면 다음에 더 좋은 퀄리티 포스트로 찾아뵙겠습니다!




댓글 21개:

  1. 좋은 포스트 감사합니다 많은 도움이 될 거 같습니다 ㅎ

    답글삭제
  2. 글 정말 잘 읽었습니다! 택배로 비유해주신 덕분에 이해가 잘 되네요.

    답글삭제
    답글
    1. 택배 비유가 도움이 돼 다행입니다 ㅠㅠ 이 때 좋은 비유가 없을까 하며 생각하느라 한 4시간은 소모했던 것 같아요ㅠㅠ

      삭제
  3. 감사히 잘 읽었습니다. 좋은 공부가 되었습니다.

    답글삭제
  4. 좋은 포스트 감사합니다. 정말 큰 도움이 되었습니다!

    답글삭제
    답글
    1. 도움이 돼 다행입니다! 따뜻한 댓글 감사해요!

      삭제
  5. 안녕하세요 정말 좋은 글들 감사합니다. LVM부터 시작해서 여기가지 읽고있습니다!! 질문이 한가지 있는데요, 네이버에 구글을 검색한다면, 네이버에 구글 검색(L7~L5), 세그먼트를 감싸는 패킷이 랜선으로 전달(L4~L1), 구글서버에서 패킷을 하나씩 까보고 네이버에서 검색했다는 걸 알고 (L1~L4), 여기서 Syn+ack을 보낸다고 했을 때, 구글 서버에서 네이버에 보내는 것은 응용 계층의 세그먼트가 포함이 되어있지 않은거죠?

    답글삭제
    답글
    1. 음.. 일단 질문하신 과정을 좀 더 자세히 말하자면 네이버에서 구글 검색이라는 과정이 사실 하나가 아니라
      1) 브라우저 -> 네이버 웹 서버
      i) 운영체제와 네이버 웹 서버가 TCP 통신
      ii) TCP 3-hand shakes 이후 만들어진 세션을 통해 네이버가 브라우저에게 네이버 홈페이지 HTML과 스크립트들 전송(어플리케이션 계층)
      iii) 네이버 검색창에 구글을 검색하고 나온 구글의 홈페이지 도메인을 네이버가 브라우저에게 전송(어플리케이션 계층)
      --브라우저와 네이버 관계 끝--
      2) 네이버에게 받은 구글 도메인을 이용해 브라우저 -> 구글
      i) 운영체제 -> 구글 웹 서버에게 TCP 3 핸드 쉐이크
      ii) 이후 만들어진 세션을 통해 구글 웹 서버가 구글 홈페이지 HTML을 브라우저에게 전송(응용계층)
      iii) 받은 HTML을 통해 브라우저가 구글 홈페이지를 우리에게 보여줌

      이렇게 크게 2개로 나뉘어집니다.
      만약 이해가 잘 안되신다면
      https://mamu2830.blogspot.com/2021/10/what-is-web-server.html (웹 브라우저와 웹 서버 자세히)란 포스트를 보시면 이해가 될 거라 생각합니다!

      삭제
    2. 추가로 따뜻한 댓글 감사합니다~!

      삭제
  6. 정말 짱입니다. 자격증 책을보며 공부하고 있다가 우연히 마무님의 블로그를 찾게 되었는데 이제는 리눅스 공부할 때 마다 자격증 책이랑 마무님의 블로그를 켜놓고 공부하고 있습니다. 정말 감사드립니다!

    답글삭제
    답글
    1. 이야... 자격증책과 같이 보신다니... 도움이 돼 정말 다행입니다 ㅎㅎ 자주 와주셔서 감사하며 다른 포스트들도 도움이 되길 바라겠습니다!! 따뜻한 댓글 감사합니다!

      삭제
  7. 우와 엄청납니다!!.... 흐릿해지는 기억들 정주행 했더니..... 다시 돌아오네요....... 정성 글 감사합니다......

    답글삭제
    답글
    1. 제 노력이 도움이 돼 정말 다행입니다!! 힘이 나는 댓글 감사합니다~

      삭제
  8. 글 잘 안 쓰는데 안 쓸 수가 없네요ㅠㅠ.
    cs 공부 중인데 너무 이해가 잘되게 정리해 주셔서 공부하는데 도움이 됩니다.
    감사합니다!

    답글삭제
    답글
    1. 전공자에게도 도움이 돼 정말 다행입니다!!! 따듯한 댓글 감사드리고 다른 포스트들도 도움이 되길 바랄게요!

      삭제
  9. 이번 글 역시 정말 잘 보고 공부했습니다ㅠㅠㅠㅠ 감사합니다!!!

    답글삭제
  10. 네트워크 개념이 헷갈렸는데 처음부터 끝까지 자세하게 적어주셔서 이해하기 너무 편했어요! 진짜 감사합니다

    답글삭제
    답글
    1. 이해가 잘 됐다니 정말 다행입니다! 따뜻한 댓글 감사해요~~!

      삭제

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!