※ 본 카테고리의 내용은 부스트캠프 챌린지 기간동안 학습한 내용을 바탕으로 정리한 내용입니다.
목차
0. OSI 7 Layer
OSI(Open Systems Interconnection Reference Model) 7 Layer는 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층별로 나누어 설명한 것입니다.
OSI 7계층 모델은 ISO(국제 표준화 기구)에서 만들었습니다. 신기하게도 OSI를 거꾸로 돌리면 ISO(...)
그렇다면 왜 OSI 7계층이라는걸 만들어서 계층별로 나누었을까요?
흐름을 알아보기 쉽고, 다른 사람들이 이해하기 쉽고, 단계별로 분리를 시켜놓으면 문제가 되는 단계만 고치면 되기 때문입니다.
각 계층을 간단하게 살펴보도록 하겠습니다.
0.0. 물리 계층(Physical Layer)
이 계층에서는 주로 전기적, 기계적 특성을 이용해 통신 케이블로 데이터를 전송합니다.
전기적인 데이터 신호를 이용하여 비트를 주고받는 특징을 가집니다.
이 계층에서는 리피터, 허브 등을 사용합니다.
0.1. 데이터 링크 계층(DataLink Layer)
물리 계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보전달을 유지할 수 있도록 해 주는 역할을 하는 계층입니다.
주로 Mac주소를 이용하여 통신을 하고, 이 계층에서 전송되는 단위는 프레임입니다.
데이터 링크계층의 대표적인 장비로는 브리지, 스위치 등이 있습니다.
0.2. 네트워크 계층(Network Layer)
네트워크 계층은 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 수행합니다.
경로를 선택하고 주소를 정하고 경로에 따라 패킷을 전달해 주는 것이 주된 역할이죠.
네트워크 계층의 대표적인 장비는 라우터이고, Layer 3 스위치도 사용합니다. (데이터 링크 계층에서 사용하는 스위치와 비슷하지만 사용하는 계층이 달라서 Layer로 구분합니다!)
IP주소를 이용하여 통신을 하고, 패킷을 한 단위로 사용합니다.
0.3. 전송 계층(Transport Layer)
아래 3개의 계층과 위 3개의 계층을 연결하는 역할을 맡고 있습니다.
보통 TCP 프로토콜을 사용하여 포트를 이용하여 응용프로그램들이 데이터를 전송할 수 있도록 도와주는 역할을 하죠.
또한 패킷들의 전송이 유효한지 확인하고 전송에 실패한 패킷들을 다시 전송하는 역할을 맡기도 합니다.
스타크래프트를 할 때 많이 보게 되는 TCP, UDP등의 프로토콜을 사용하는 계층이 바로 전송 계층입니다.
데이터 전송 단위로는 세그먼트를 사용합니다.
0.4. 세션 계층(Session Layer)
데이터가 통신하기 위한 논리적인 연결을 담당합니다. 전송 계층과 비슷한 역할을 담당하고 있죠?
전송 계층이 보다 낮은 단계의 통신을 확인한다면, 세션 계층에서는 응용 프로그램 관점에서 통신을 담당합니다.
TCP/IP 세션을 만들고 없애는 책임을 가지고, 다양한 통신 관련 방법들을 제공합니다.
세션 계층부터 마지막 응용 계층까지는 데이터를 한 단위로 전송합니다.
0.5. 표현 계층(Presencation Layer)
데이터 표현이 서로 다른 응용 프로세스들의 독립성을 제공하고 암호화하는 역할을 담당합니다.
인코딩, 암호화, 복호화 등의 동작이 이 계층에서 이루어집니다.
그리고 세션 계층과 응용 계층의 데이터 전달의 매개체가 되기도 합니다. (응용 계층에서 넘겨받은 데이터를 세션 계층이 다룰 수 있는 형태로 바꾸거나, 세션 계층으로부터 넘겨받은 데이터를 응용 계층이 이해할 수 있는 형태로 바꾸고 전달하는 일을 합니다.)
0.6. 응용 계층(Application Layer)
데이터의 최종 목적지로 우리가 직접 마주치는 응용프로그램, 브라우저들을 담당하는 계층입니다.
HTTP, FTP, SMTP, POP3, IMAP, Telnet 등의 프로토콜이 있고, 이 프로토콜들은 응용계층에서 우리가 원하는 일들을 처리해 주는 역할을 담당합니다.
즉, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행하는 역할을 맡고 있는 계층입니다.
우리랑 가장 가까운 곳에 있기 때문에 사람이 다루기에도 수월한 편에 속하죠.
1. 3way Handshakes
위에서 배운 계층들 중에서 전송 계층에서 담당하는 중요한 역할이 있습니다.
바로 3-way Handshaking 이라는 역할인데요!
3-way Handshaking은 TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 뜻합니다.
먼저 제가 서버와 통신을 하고 싶다고 가정하면, 저는 제 컴퓨터를 이용해서 서버에 SYN(Synchronizing)신호를 넣습니다.
서버에게 통신하고 싶다고 요청하는 것이죠.
만약 서버가 통신을 할 준비가 되어있다면, SYN ACK(Synchronizing Acknowledging)라는 신호를 제 컴퓨터로 보냅니다.
이렇게 한 번씩 거쳐서 확인을 했담녀 다시 한 번 서버에 메시지를 보내서 연결합니다.
이렇게 총 3번의 데이터 전송 과정을 거치면서 서로가 준비되었다는 것을 알 수 있게 되는 것이죠!
이 과정에서 Sequence Number과 Ack Number가 등장하는데, 이것들은 데이터를 주고받을 때 잘 주고 받았는지, 혹시 데이터가 중간에 짤리지는 않았는지 확인하는 용도로 사용하게 됩니다.
Sync 과정에서는 보낼 때의 Sequence 번호가 받을 때 Ack번호보다 1만큼 작은 것이 특징입니다.
굳이 데이터를 받지 않았음에도 준비가 됐다는 의미에서 Ack를 +1 한 것이죠.
그리고 SYN ACK 신호 이후에 Ack를 보낼 때는 앞서 받은 Ack 번호와 동일하고, Ack 번호는 SYN ACK의 연속 번호보다 1만큼 커져 있어야 하는 것이 특징입니다.
만약 데이터를 전송하게 되면 Packet의 이름이 SYN이나 ACK 등이 아닌 DATA로 바뀌게 되며, DATA를 받을 때마다 Ack를 날려줌으로써 잘 전송받고 있다는 것도 전달할 수 있게 됩니다.
또한 데이터의 크기에 따라 답으로 주는 Ack가 크기만큼 증가합니다. 이것 또한 정확한 정보를 전송받고 있다는 것을 전달하기 위함입니다.
반대로 3way가 아닌 4way Handshaking 과정도 존재합니다.
다만 이 과정은 정 반대로 클라이언트가 연결을 종료하고자 할 때 보통 사용합니다.
서로 종료한 준비가 됐는지 확인하기 위해 메시지를 주고받고, 서로 FIN플래그를 전송하여 의사 여부를 확실하게 확인하고 서버가 마지막까지 클라이언트에게 FIN플래그를 전송함으로써 4way Handshaking이 종료됩니다.
"포트가 같으면 응용프로그램이 같을 수 있을까?" 에 대해서 추가로 글을 작성할 예정입니다!
최근댓글