@해당 포스팅은 김영한 강사님의 강의내용을 활용하여 정리한 글입니다.
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP / UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
* 인터넷 프로토콜 스택의 4계층이란 단순히 네트워크 통신을 위한 프로토콜 집합
이 인터넷 프로토콜의 스택은 상위 계층에서 발생한 데이터를 하위 계층으로 전달하여 패킷으로 분할하고 전송한다.
보통 서버 또는 클라이언트에서 응답이나 요청을 보내면, 이를 처리하는 SOCKET 라이브러리는 TCP 프로토콜을 호출하여 데이터를 TCP 세그멘트로 분할한다. 이후 IP 프로토콜을 호출하여 다시 한번 IP 패킷으로 캡슐화하고, 최종적으로 MAC 주소를 가진 네트워크 프레임이 캡슐화를 다시 한 후, 네트워크에 전달한다.
TCP 세그먼트
우선 IP 패킷은 이전 포스팅을 통하여, 출발지 IP와 목적지 IP가 포함된다는 것은 알았을 것이다.
TCP 세그먼트는 IP의 단점을 보완할 수 있는 역할을 하는데, 그것들이 바로 PORT, 전송 제어, 순서, 검증 정보등이다.
TCP 특징
전송 제어 프로토콜(Transmission Control Protocol)
- 연결 지향 - TCP 3 Way handshake (가상 연결)
- 상대방의 연결 상태를 알 수 있다.
- 데이터 전달 보증
- 데이터가 잘 전달되었는지 알 수 있다.
- 순서 보장
- 순서가 엉킴에도 TCP 정보를 통해 순서가 보장된다.
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
- 클라이언트는 먼저 서버에게 접속을 요청하면서(SYN)을 보낸다.
- 연결이 잘 되었다면, 요청을 받은 서버는 클라이언트에 요청을 수락(ACK)하면서, 클라이언트에게도 접속을 요청(SYN)한다.
- 응답을 받은 클라이언트는 서버의 요청을 수락( ACK)한다. 최근엔 이 과정에서 함께 데이터 전송이 가능하다.
이 과정을 통해서, 만약 상대방으로부터 응답이 없다면 이를 통해 상대방의 연결이 불완전하다는 것을 알 수 있다.
그리고 이 연결은 물리적 연결이 아닌 논리적 연결이다. 더 쉽게 말하자면 진짜로 연결된 게 아니라, 서로 연결할 수 있구나 정도로 논리적으로 연결된 것이다.
TCP 세그먼트로 서버로 데이터를 전송을 하게 되면, 서버에서 이 데이터를 제대로 전달을 받았는지 응답을 해준다.
이를 통해, 데이터로 전달이 잘 되었는지의 여부를 알 수 있다.
기본적으로, 여러 패킷을 서버로 데이터를 전송한 경우, 여러 요인들에 의해서 패킷의 경로가 변경될 수 있다고 이전 포스팅에서 언급했다. 하지만 TCP는 중간에 잘못된 순서의 패킷으로 전달되었다면, 잘못된 것부터 모든 순서를 다시 전송하도록 요청한다.
UDP 특징 사용자 데이터그램 프로토콜(User Datagraml Proceed)
- 하얀 도화지 같이 아무 기능이 없다.
- 연결지향 : TCP 3 Ways handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터의 전달 및 순서가 보장되지 않지만, 단순하기에 빠름
이를 보면 알 수 있듯이, UDP는 IP와 매우 유사하다. 다른 점은 Port와 체크섬 정도만 추카되었다.
애플리케이션에서 추가 작업 필요하다.
PORT , 항구
만약 포트가 없다면 한 클라이언트에서 웹 요청, 게임 서버로 요청, 음악 요청을 동시에 보냈을 때, 이 요청을 받은 서버는 클라이언트에 응답을 보낼 때, 게임에서 필요한 패킷인지, 웹 요청인지 등등 알 수 없게 된다. 왜냐면 패킷의 IP 주소는 같은 클라이언트에서 모두 동일하기 때문이다. 그래서 이것을 구별하기 위해 포트가 필요하다.
한마디로 IP는 요청을 보낼 서버를 찾기 위한 주소이고, PORT는 같은 IP에서 전송된 컴퓨터에서 어플리케이션을 구분하기 위한 주소라고 생각하면 된다.
비유를 하자면, IP는 내가 살고 있는 아파트이고, PORT는 내가 몇동 몇호에 살고 있는지의 정보다.
클라이언트는 서버로 요청을 보내고 응답을 받을 때, 클라이언트의 많은 어플리케이션 중 응답 받아야 할 어플리케이션으로 정확하게 전달 받기 위해서 출발지 포트와, 목적지 포트를 보내고, 서버는 요청을 받고 클라이언트에 응답할 때, 다시 클라이언트의 여러 어플리케이션 중 데이터가 필요한 어플리케이션으로 정확하게 전달하기 위해서 이 출발지 포트와 목적지 포트가 필요하다.
하지만 IP의 단점으로 기억하기가 어렵다는 단점과 IP 주소가 변경될 수 있다는 단점을 가지고 있다.
보통의 경우엔 요청을 보내는 동안 IP 주소가 변경될 일은 잘 없지만, WI- FI 핫스팟과 같은 네트워크를 사용하고 있다면 도중에 변경될 가능성이 있다고 한다. 이렇게 된다면 응답을 할 서버는 클라이언트의 신규 IP를 알아내야 제대로 응답을 할 수 있다.
DNS 도메인 네임 시스템(Domain Name System)
- 전화번호부
- 도메인 명을 IP 주소로 변환 가능
우선 DNS 서버는 도메인 명과 IP 주소를 매핑해서 저장해놓은 형태이다. 위에서 말했듯이 IP 주소는 인간이 기억하기 어렵다는 단점이 있지만 문자열은 비교적 기억하기 쉽다. 그래서 우리는 DNS 서버로 도메인 명을 전달하면 IP 주소를 반환 받은 이후에 실제 서버로 이동하게 된다. 이를 통해 IP 주소가 변경이 되어도 서버 쪽에서 IP를 업데이트만 잘 해준다면 우리는 여전히 동일한 도메인명만 알고 있으면 해당 서버로 접근할 수 있다.
'네트워크 > HTTP' 카테고리의 다른 글
쿠키, 세션, 캐쉬 (0) | 2023.04.24 |
---|---|
HTTP 상태 코드 (0) | 2023.04.21 |
HTTP 기본 (0) | 2023.04.21 |
URI,URL,URN (0) | 2023.04.20 |
인터넷 네트워크 (0) | 2023.04.19 |