개발일지

[Network]TCP/IP 4계층 모델 본문

네트워크

[Network]TCP/IP 4계층 모델

강강강 2022. 11. 27. 17:29

인터넷 프로토콜 스위트 (internet protocol suite) 는 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 프로토콜의 집합으로 이를 TCP/IP 4계층 모델로 설명하거나 OSI7계층 모델로 설명하기도 합니다.

 

오늘은 TCP/IP 계층 위주로 얘기를 해볼까합니다.

 

위 그림을 보면 계층으로 나누어져 있는데 이 계층들은 특정 계층이 변경되었을 때 다른 계층이 영향을 받지 않도록 설계되어있습니다.

예를들면 전송계층에서 TCP 를 UDP 로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치해야하는 것이 아닌 것처럼 유연하게 설계된 것입니다. 

 

이런 공부를 하면서 느낀건데 정말.. 알면알수록 컴퓨터의 세계는 대단하고..다 이유가 있고.. 정말 밑바닥부터 알아야 나중에 쓰러지지 않는다는 것을 뼈저리게 느껴요,, 무튼..

 

1. 애플리케이션 계층 Application Layer

여기는 HTTP, FTP, SSH, SMTP, DNS 와 같은 응용프로그램이 사용되는 프로토콜 계층!!

웹서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층입니다!!!

HTTP: World Wide Web을 위한 데이터 통신의 기초이자 웹사이트를 이용하는데 쓰는 프로코콜
FTP: 장치와 장치간의 파일을 전송하는데 사용되는 표준 통신 프로코콜
SSH: 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
SMTP: 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜
DNS: 도메일 이름과 IP 주소를 매핑하는 서버

2. 전송계층 Transport Layer

송신자와 수신자를 연결하는 통신 서비스를 제공하며 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공하며 애플리케이션 계층과 인터넷 계층 사이의 데이터가 전달될 때의 중계역할을 한다.

대표적으로 TCP UDP 가 있다!

 

TIP!! 면접문제에서 TCP UDP 차이점이 뭔지 물어보는 경우가 많다는디..

TCP: 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해 연결을 하며 신뢰성을 구축해 수신 여부를 확인함

UDP: 패킷의 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 줌..

 

또 꼬리를 물자면.. TCP 신뢰성이 있는데 UDP 사용 왜하냐고 물어볼수도 있다..

TCP 는 패킷의 수신 여부를 확인해야 하기 때문에 UDP 보다 속도가 느리다는 단점이 있다. 즉, 신뢰성은 높지만 속도가 느리다

UDP 는 패킷의 수신여부따위 확인하지 않기 때문에 속도가 빠르다! 즉, 신뢰성은 낮지만 속도가 빠르다.

그래서 동영상이나 실시간 데이터를 빠르게 주고 받고싶을 때 사용한다고 한다!!!!

 

자,, TCP 가 신뢰성을 어떻게 구축하는지 알아보자. 

-> TCP 는 신뢰성을 구축할 때 3-way handshake 라는 작업을 진행한다. 

3-way handshake

3단계로 왔다갔다해야해서 3-way 이고 마치 악수하면서 인사하며 상태확인하는 느낌이라 handshake 인듯..?

 

1. SYN 단계 (SYNchronization 의 약자, 연결 요청 플래그)

: 클라이언트는 서버에 클라이언트의 ISN (Initial Sequence Numbers  로 초기 네트워크 연결할 때 할당되는 32비트 고유 시퀀스 넘버) 을 담아서 SYN 을 보낸다. 

2. SYN + ACK 단계  (ACKnowledgement 의 약자, 응답 요청 플래그)

: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN 을 보내며 승인번호로 클라이언트의 ISN + 1 값을 보낸다.

3. ACK 단계

: 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK 를 서버에 보낸다. 

 

위와같이 3-way handshake 과정 후 신뢰성이 구축되고!! 그 다음 데이터 전송을 시작하는 것!!!!!

UDP 는 이런 과정이 없어서 신뢰성이 없다는 것임.. 걔는 패킷 잃어버려도 모름,,

 

자 이제 TCP 가 연결을 해제하는 과정도 있어야하지 않겠는가.. 그것은 4-way handshake 과정을 이루어진다.

 

 

4-way handshake

 

1. FIN 단계

먼저 클라이언트가 연결을 닫으려고 할 때 FIN 으로 설정된 세그먼트를 보낸다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림.

2. ACK 단계

서버는 클라이언트로 ACK 라는 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.

3. FIN 단계

서버는 ACK 를 보개소 일정 시간 이후에 클라이언트에 FIN 이라는 세그먼트를 보낸다. 

4. ACK 단계

클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK 를 보내서 서버는 CLOSE 상태가 된다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해지된다.

 

 

자.. 여기서 봐야하는게 뭐냐면 클라이언트의 TIME_WAIT 이다. 그냥 연결을 닫으면 되지 굳이 왜 일정 시간 후에 닫을까?

-> 지연 패킷이 발생하는 경우를 대비하기 위해서다. 패킷이 뒤늦게 도착했는데 이를 처리하지 못하면 데이터 무결성 문제가 일어나기때문!!

-> 또 두 장치가 연결이 닫혔는지 확인하기 위함이다. 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 줄곧 LAST_ACK 로 되어있기 때문에 접속오류가 날것임.. 

 

3. 인터넷 계층 Internet Layer

: 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다. 

IP, ARP, ICMP 등이 있고 패킷을 수신해야 할 상대의 주소를 지정해서 데이터를 전달한다! 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결형적인 특징을 가지고 있다.

 

4. 네트워크 접근 계층 Network Access Layer 

: 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치간의 신호를 주고받는 "규칙"을 정하는 곳이다.