24.01.08 TCP / IP 4계층 모델 1
1. 계층 구조
- TCP / IP 계층은 4개의 계층을 가지고 있으며 OSI 7계층과 많이 비교 됨
- 이 계층들은 특정 계층이 변경 되었을 때 다른 계층이 영향을 받지 않도록 설계됨
예) 전송 계층에서 TCP 를 UDP 로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치해야 하는 것은 아니 듯
유연하게 설계됨
- 각 계층을 대표하는 스택은 아래와 같다
1) 애플리케이션 계층
- FTP, HTTP, SSH, SMTP, DNS 등 응용프로그램이 사용되는 프로토콜 계층
- 웹서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층
* FTP : 장치와 장치간의 파일을 전송하는데 사용되는 표준 통신 프로토콜
* SSH : 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
* HTTP : World Wide Web 을 위한 데이터 통신의 기초자 웹 사이트를 이용하는 데 쓰는 프로토콜
* SMTP : 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜
* DNS : 도메인 이름과 IP 주소를 매핑해주는 서버
예) www.naver.com 에 DNS 쿼리가 오면 [Root DNS] -> [.com DNS] -> [.naver DNS] ->[.www.DNS]
과정을 거쳐 완벽한 주소를 찾아 IP 주소 매핑
이를 통해 IP 주소가 바뀌어도 사용자들에게 똑같은 도메인 주소로 서비스 가능
예) www.naver.com 의 IP 주소가 222.111.222.111 에서 222.111.222.122 로 바뀌어도 똑같은
www.naver.com 이라는 주소로 서비스 가능
2) 전송 계층
- 송신자와 수신자를 연결하는 통신 서비스 제공
- 연결 지향 데이터 스트림 지언, 신뢰성, 흐름 제어를 제공
- 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때 중계역활
- 대표적으로 TCP 와 UDP 가 있다
(1) TCP
- 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해 수신 여부를
확인하며 가상회선 패킷 교환 방식 사용
A) 가상회선 패킷 교환 방식
- 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은
전송된 순서대로 도착하는 방식
- 아래 그림을 보면 3, 2, 1 로 이루어진 패킷이 어떠한 회선을 따라 순서대로 도착하는 것을 알 수 있다
B) TCP 연결 성립 과정
- 신뢰성을 확보할 때 아래와 같은 3-웨이 핸드셰이크(3-way handshake) 라는 작업을 진행
- 아래의 그림처럼 클라이언트와 서버가 통신할 때 다음과 같은 세단계의 과정이 있다
(A) SYN 단계
- 클라이언트는 서버에 클라이언트의 ISN 을 담아 SYN 을 보냄
- ISN 은 새로운 TCP 연결의 첫번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다
다를 수 있다
(B) SYN + ACK 단계
- 서버는 클라이언트의 SYN 을 수신하고 서버의 ISN 을 보내며 승인번호로 클라이언트의 ISN + 1 을 보냄
(C) ACK 단계
- 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK 를 서버에 보냄
* SYN : SYNchronization 의 약자 연결 요청 플래그
* ACK : ACKnowledgement 의 약자, 응답 플래그
* ISN : Initial Sequence Numbers 의 약어 초기 네트워크 연결을 할때 할당된 32 비트 고유 시퀀스 번호
C) TCP 연결 해제 과정
- 해제를 할땐 4-웨이 핸드셰이크(4-way handshake) 과정이 발생
(A) 먼저 클라이언트가 연결을 닫으려고 할때 FIN 으로 설정된 세그먼트를 보낸다.
그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림
(B) 서버는 클라이언트로 ACK 라는 승인 세그먼트를 보낸다.
그리고 CLOSE_WAIT 상태에 들어간다.
클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
(C) 서버는 ACK 를 보내고 일정 시간 이후 클라이언트에 FIN 이라는 세그먼트를 보냄
(D) 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK 를 보내서 서버는 CLOSED 상태가 된다
이후 칼라이언트는 어느 정도의 시간을 대기 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결 해제
- 여기서 눈여겨봐야 할것이 TIME_WAIT 과정이다 왜 굳이 일정 시간 뒤에 닫을까?
(A) 지연 패킷이 발생할 경우를 대비하기 위함
패킷이 뒤늦게 도달하고 이를 처리하지 못하면 데이터 무결성 문제가 발생
예) 전체 데이터가 100일때 일부 데이터인 50만 들어오는 현상이 발생할 수 있다
(B) 두 장치가 연결이 닫혔는지 확인하기 위함
만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 줄곧 LAST_ACK 로
되어있기 때문에 접속 오류가 일어남
* TIME WAIT : 소켓이 바로 소멸되지 않고 일정시간 유지되는 상태를 말하고, 지연 패킷등의 문제점을
해결하는데 쓰인다. CentOS6, 우분투에는 60초로 설정되어있고 윈도우는 4분으로 설정됨
* 데이터 무결성 : 데이터의 정확함과 일관성을 유지하고 보증하는 것
(2) UDP
- 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 데이터그램 패킷 교환 방식
A) 데이터그램 패킷 교환 방식
- 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 감
- 하나의 메세지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 순서가 다를 수 있는 방식
- 아래 그림을 보면 3, 2, 1 로 이루어진 패킷이 순서도 다르고 어떠한 회선을 중심으로 가는 것이 아니라
따로따로 이동하며 순서도 다르게 도착하는 것을 알 수 있다