Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Network] 1. 인터넷 네트워크 본문
OSI 7계층과 TCP/IP 프로토콜 스택
OSI 7계층, TCP/IP 프로토콜 스택 모두 계층형 구조로 네트워크를 설명한다는 공통점이 있다. 하지만 두 계층이 일치하는 것은 아니다. OSI 표준 모델은 장비 개발과 통신 자체를 어떻게 표준으로 잡을지 사용되는 반면, 실질적인 통신을 설명할 때는 TCP/IP 모델을 주로 사용한다.
OSI 7계층
- 7계층부터 1계층 까지 Application Layer(응용 계층), Presentation Layer(표현 계층), Session Layer(세션 계층), Transport Layer(전송 계층), Network Layer(네트워크 계층), DataLink Layer(데이터링크 계층), Physical Layer(물리 계층) 으로 이뤄져있다.
- 상위 계층은 개발자가 하위 계층을 고려하지 않고 데이터를 표현하는데 집중한다.
- 하위 계층은 데이터를 상대방에게 잘 전달하는 역할을 가지고 네트워크 엔지니어는 데이터를 전송하는데 집중한다.
TCP/IP Protocol
- Application(응용 계층), Transport(전송 계층), Internet(인터넷 계층), Network Access(네트워크 액세스 계층)로 이뤄져있다.
- 기존의 상위계층 개발자는 응용 계층만 신경쓰면 된다.
- 네트워크 엔지니어는 나머지 3계층에 대해 집중하면 된다.
- 이론보다는 실용성에 중점을 둔 프로토콜 스택이다.
- 계층별 특징
- 애플리케이션 계층(HTTP, FTP) : 비즈니스 로직 혹은 특정 데이터를 만들어내는 것에 따라 생성되는 데이터 전송 계층
- 트랜스포트 계층(TCP, UDP) : 물리적으로 연결, 경로 지정이 된 후 데이터를 전송하는 방법을 정의하는 계층
- 인터넷 계층(IP) : 노드(컴퓨터)의 논리적 주소로 데이터를 보낼 경로를 선택하는 계층
- 네트워크 액세스 계층 : 실제로 랜선을 꼽는 랜카드, 랜카드 드라이버등과 같이 물리적 영역을 표준화하는 계층
인터넷 통신 과정 요약
- 클라이언트는 google.com, naver.com, daum.net 과 같은 도메인을 이용해 사이트에 접속을 시도한다.
- Key/Value 로 도메인과 매칭되는 접속 주소를 가지고 있는 DNS 서버에서는 해당 요청에 맞는 IP 주소를 응답해준다.
- 클라이언트는 보내고자하는 데이터를 적절한 크기로 나눠 패킷(payload)들을 만든다.
- 각각의 패킷에는 TCP 정보를 추가하여 목적지와 출발지의 포트정보나 패킷의 순서, 검증 정보등을 추가한다.
- 출발지와 목적지 IP, 관리정보들을 추가하여 인터넷 세계에서 내가 보내고자 하는 요청 혹은 정보의 목적지를 지정한다.
- (TCP 인 경우) 3 way handshake로 클라이언트와 서버는 각각 syn -> syn + ack -> ack 과정을 거쳐 서로가 연결되었음을 확인하고 데이터를 전송한다.
TCP의 3 way Handshaking 과정
1. 클라이언트는 서버에 접속을 요청하는 SYN(synchronize sequence numbers) 패킷을 보낸다. 이때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK(acknowledgment)와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.
3. 클라이언트는 서버에게 ACK를 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 이때 서버 상태가 ESTABLISHED이다.
IP(Internet Protocol)
- TCP/IP 프로토콜 스택에서 인터넷 계층으로 인터넷에서 생성 및 사용되는 주소로 네트워크 환경에서 내 컴퓨터의 주소라 할 수 있다.
- 네트워크 환경에서 컴퓨터(노드)간 통신하기 위해 각 컴퓨터에 부여된 네트워크 상의 주소
- 네트워크 주소 : 공통 영역
- 호스트 주소 : 중복이 없는 식별자 역할의 값
- 실제로는 32자리의 2진수로 이뤄져 있다. 0 ~ 2^32개를 만들 수 있으나 대부분 사용되고 있어 IPv6로 대체중이다.
IP 패킷 정보
- 노드끼리는 IP 주소를 이용하여 데이터를 전달하는데 데이터 전달 단위를 패킷(Packet)이라 한다.
- 패킷은 다음과 같이 구성된다.
- Payload : 전송하고자 하는 데이터의 한 블록
- 주소지 정보 : 발신지, 목적지 주소
- 관리 정보 : Header, IPv6와 같이 망이 패킷을 목적으로 전달하는데 필요한 정보
IP의 한계점
- 비연결성 : 패킷을 받을 대상이 없거나 서비스가 불가능해도 패킷을 전송한다.
- 비신뢰성 : 패킷이 중간에 소실될 수도 있고 순서도 보장되지 않는다.
- 구분의 모호함 : 같은 IP를 사용하는 하나의 서버에 하나 이상의 애플리케이션이 구동중일 경우 어떤 애플리케이션에 패킷을 전달해야 할지 알 수 없다.
TCP, UDP
애플리케이션 계층에서 전달된 정보(payload)에 TCP 정보를 생성하여 포함시킨다. IP 패킷 정보가 가지고 있는 한계점(비신뢰성, 비연결성)을 TCP 정보를 통해 해결한다.
TCP : 전송 제어 프로토콜(Transmission Control Protocol)
- 연결 지향 프로토콜이다.
- TCP 3 way handshake(가상 연결)
1. SYN(Synchronizer) 접속 요청 메세지 전송
2. SYN + ACK : 응답 메세지와 함께 접속 요청 메세지를 같이 보낸다.
3. ACK : 요청 응답을 하며 이제 양측이 연결되었음을 보장할 수 있게 된다.
4. 데이터 전송 : 이제 데이터를 송수신할 수 있다.
- 데이터 전달 보증 : 클라이언트에서 데이터를 전송하면 서버측에서는 데이터가 잘 왔는지 응답을 해주기 때문에 데이터 전달을 보증할 수 있다.
- 순서 보장 : TCP 정보에는 순서와 같은 정보들이 포함되어 있어, 패킷의 순서가 잘못된 경우 서버에서 순서가 잘못된 패킷을 기준으로 재송신 요청을 해서 패킷을 받기 때문에 순서를 보장할 수 있다.
- 신뢰할 수 있는 프로토콜 : 데이터가 전달됨을 보증하고 순서도 보증되기에 신뢰할 수 있다.
- 현재 대부분이 TCP를 사용한다.
UDP : 사용자 데이터그램 프로토콜(User Datagram Protocol)
- TCP와 비교하여 연결지향도 아니고 데이터 전달, 패킷 순서도 보장되지 않는다.
- 기능이 거의 없기 때문에 속도가 빠르다.
- IP와 비슷해 보이지만, PORT 정보는 포함되어 있고 체크섬도 추가되어 있다.
- 애플리케이션에서 추가적인 작업이 필요하다.
체크섬(checksum)
중복 검사의 한 형태로 송신된 자료의 무결성을 보호하는 방법으로 네트워크를 통해 전달되는 값이 위/변조 되는 경우를 대비해 체크섬 값을 같이 보내 무결성을 보호한다.
PORT
- IP가 인터넷에서 논리적인 컴퓨터의 주소라면 PORT는 컴퓨터 내의 수많은 애플리케이션의 식별자가 되는 경로이다. 더 쉬운 예시로 IP를 아파트 동이라고 표현한다면 PORT는 호수가 되는 것이다.
- PORT는 0 ~ 65535 까지 할당 가능하다.
- 0 ~ 1023 까지는 이미 일반적으로 사용되는 포트이므로 사용하지 않는게 좋다.
- 임의로 애플리케이션 포트를 설정할 때 이미 일반적으로 사용하는 포트로 변경하려는 시도를 종종 하는 경우가 있는데 반드시 사전 확인 후에 변경하는 것이 좋다.
DNS : 도메인 네임 시스템(Domain Name System)
- IP 주소는 외우기도 힘들고 변경 가능성이 많다.
- IP 들을 Key/Value 형태로 가독성 좋고 외우기도 좋은 도메인을 알아서 매칭하여 찾아주는 DNS 서버가 만들어졌다.
- 클라이언트에서 도메인 명으로 접속 요청을 보낸다.
- DNS 서버에서는 도메인에 해당하는 IP를 매칭하여 응답한다.
- 해당 IP로 접속한다.
출처
'CS > Network' 카테고리의 다른 글
[Network] 브라우저에 URL을 입력했을 때 발생하는 일들 (0) | 2023.11.30 |
---|---|
[Network] 5. HTTP 헤더 (0) | 2023.06.11 |
[Network] 4. HTTP 메소드, 상태 코드 (0) | 2023.06.05 |
[Network] 3. HTTP 기본 (0) | 2023.06.05 |
[Network] 2. URI, URL, URN (0) | 2023.06.05 |