[CS 스터디] 네트워크 7일차 - 4계층

강아람·2023년 1월 22일
1

네트워크

목록 보기
6/11
post-thumbnail

📚 4계층

4계층은 전송 계층(Transport Layer)으로, 송신자의 프로세스와 수신자의 프로세스를 연결하는 통신 서비스를 제공한다.

전송 계층은 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 다중화 등의 서비스를 제공한다.

포트 (Port)

4계층에서 특정 프로세스 간 통신을 위해 사용하는 주소이다.

하나의 포트 번호는 장치 내의 하나의 프로세스만 사용 가능하다. 프로세스를 찾는 주소이기 때문에 장치 내 다른 프로세스와 포트 번호가 중복되면 통신할 프로세스를 찾을 수 없기 때문이다!

포트 번호는 일반적으로 정해져있지만 무조건 지켜야하는 것은 아니다.

특징

포트 번호는 0~65535까지 사용 가능하고, 이를 3가지 종류로 분류할 수 있다.


Well-Known Port

전 세계적으로 유명한 포트 번호로, 1024번까지 지정되어 있다.

Registered Port

Well-known 포트보다 유명하지는 않지만 잘 알려진 포트 번호로, 주로 DB나 유명 프로그램의 포트 번호이다.
1024보다 크고 49000보다 작은 번호로 지정되어 있다.

Dynamic Port
일반 사용자들이 사용하는 포트 번호이다.
49152 ~ 65535 중 하나를 사용한다.



4계층 프로토콜

전송 계층의 중요성

만약 전송 계층이 없다면 어떻게 될까?

1) 데이터의 순서가 보장되지 않음
상위 계층에서 데이터를 전송할 때 데이터의 크기가 매우 크다면 데이터를 일정한 크기로 잘라서 수신자에게 전송하게 된다. 이때 데이터의 순서가 바뀌면 수신자 측에서 데이터를 해석하기 어려울 수 있다.

2) 흐름 문제 발생
송수신자 간의 데이터 처리 속도 차이로 인해 수신자가 처리할 수 있는 데이터의 양을 초과하게 되면 수신자의 데이터 처리 작업이 원활하지 못할 수 있다.

3) 혼잡 문제 발생
인터넷 상의 어떤 문제로 인해 네트워크의 데이터 처리 속도가 느려져 혼잡해질 수 있다.

4) 데이터의 손실 가능
이러한 문제들로 인해 결과적으로 데이터의 손실이 발생하게 된다.

따라서 데이터의 순서를 보장하고 흐름과 혼잡을 제어할 수 있는 프로토콜이 등장했다.

4계층에는 대표적인 프로토콜로 TCP, UDP가 있다.

TCP (Transmission Control Protocol)

TCP는 연결 지향형 프로토콜이다.

TCP는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 신뢰성 있는 데이터 통신을 가능하게 한다.

✨ TCP의 특징에 대해 알아보자!


1. 가상회선 패킷 교환 방식을 사용한다.


TCP는 3-way handshaking 과정을 통해 프로그램 간 연결을 수립하고, 4-way handshaking 과정을 통해 연결을 해제한다.

패킷을 전송하기 전 목적지까지의 최적 경로를 결정(라우팅)하고, 논리적 연결을 수립해야 한다. (3-way handshaking)

3-way handshaking

1단계 Client → Server : SYN
클라이언트는 서버에 데이터를 요청하기 위해 연결을 요청한다. 이때 클라이언트와 서버는 연결을 위한 포트를 열어둔다.
클라이언트는 SYN 세그먼트에 임의의 난수인 SEQ(시퀀스 번호)를 담아 서버에 전송한다.

2단계 Server → Client : SYN + ACK
서버는 SYN 세그먼트을 받고 클라이언트에게 요청을 확인했다는 ACK 세그먼트와 연결을 요청하는 SYN 세그먼트을 전송한다. 이때 클라이언트에게 받은 SYN 세그먼트의 SEQ에 1을 더해 ACK 세그먼트에 포함하고, 서버의 SYN 세그먼트에는 또다른 난수를 담아 보낸다.

3단계 Client → Server : ACK
클라이언트는 서버에게 받은 ACK 세그먼트의 SEQ+1을 보고 연결이 수립됨을 확인한다. 따라서 서버의 SYN 세그먼트에 SEQ에 1을 더해 ACK 세그먼트에 담아 서버에게 보낸다.


3-way handshaking을 통해 논리적 연결이 설정된 경로를 가상회선이라고 한다. 가상회선 식별 번호(VCI)가 붙은 패킷들은 순서대로 회선을 통해 이동한다.

패킷들이 모두 같은 경로를 통해 순서대로 이동하므로 수신자 측에 도착하는 패킷의 순서도 바뀌지 않고 전송된다.


데이터 전송이 모두 끝나면 4-way handshaking을 통해 연결이 해제된다.

4-way handshaking

1단계 Client → Server : FIN
클라이언트는 연결 종료를 알리는 FIN 세그먼트를 서버에 전송한다.

2단계 Server → Client : ACK
서버는 FIN 세그먼트를 받으면 일단 SEQ+1을 담은 ACK 세그먼트를 보낸다. 아직 남은 데이터가 있다면 전송을 마친 후에 해당 포트의 응용 프로세스에게 close() 요청을 한다.

클라이언트는 서버에게 ACK 세그먼트를 받으면 FIN 세그먼트가 올 때까지 기다린다.

3단계 Server → Client : FIN
서버는 통신이 끝나면 연결 종료에 합의한다는 의미로 FIN 세그먼트를 클라이언트에게 보내고 기다린다.

4단계 Client → Server : ACK
클라이언트는 서버로부터 받은 FIN 세그먼트에 대한 ACK 세그먼트를 전송한다. 그리고 일정 시간동안 아직 클라이언트로 도달하지 못했을 수 있는 데이터를 기다린다. (TIME-WAIT)

서버는 클라이언트에게서 ACK 세그먼트를 받으면 소켓을 닫는다.
TIME-WAIT의 제한 시간이 끝나면 클라이언트도 소켓을 닫는다.

출처 : https://velog.io/@nnnyeong/Network-TCP-3-way-4-way-Handshake


2. 오류 제어

데이터가 유실되거나 잘못된 데이터가 수신되는 상황 대처

TCP는 통신 중 오류가 발생하면 해당 데이터를 재전송한다.
즉, 재전송을 통해 오류를 제어하는 ARQ(Automatic Repeat Request)를 사용한다.

오류 확인

  • 송신자가 보낸 패킷에 대한 ACK(긍정 응답)를 받지 못하는 경우 (송신 패킷 유실 or 수신 ACK 패킷 유실)
  • 중복된 ACK를 받은 경우
  • 수신자로부터 NACK(부정 응답)를 받은 경우

Stop and Wait ARQ

송신 패킷에 대한 ACK를 받은 후 다음 패킷을 보내는 방식

송신 패킷을 보낸 후 일정 시간동안 ACK를 기다리다 timeout이 발생하면 이전 데이터를 재전송한다. 패킷을 하나씩 보내기 때문에 시간이 오래 걸리고 비효율적이다.


Go Back N ARQ

패킷을 여러 개 보내고 오류가 발생하면 그 패킷부터 재전송하는 방식

오류가 발생한 지점부터 재전송하게 되면 정상적으로 전달된 다음 패킷들도 모두 재전송해야 하기 때문에 비효율적이다.


Selective Repeat

오류가 발생한 데이터만 재전송하는 방식

GBn ARQ 방법의 단점을 보완하는 방법으로, 패킷을 연속적으로 보내고 손상되거나 손실된 패킷만 재전송한다.
패킷을 재전송하면 패킷의 순서가 달라지므로 별도의 데이터 재정렬 작업이 필요하다. 따라서 수신 측에 별도의 버퍼를 두고 패킷 재정렬을 수행해야 한다.


3. 흐름 제어

전송되는 데이터의 양을 조절

송신 측과 수신 측의 데이터 처리 속도 차이로 인해 문제가 발생할 수 있다. 송신 측이 보내는 데이터의 양이 수신 측 버퍼에 담을 수 있는 데이터의 양보다 많으면 수신 측 버퍼의 오버플로우가 발생한다.
이러한 문제를 방지하기 위해 송신 측의 데이터 전송량을 수신 측의 윈도우 크기보다 적게 조절한다.


Stop and Wait

상대방에게 데이터를 보낸 후 잘 받았다는 응답이 올 때까지 기다리는 방식

매번 전송한 패킷에 대한 ACK를 받아야 그 다음 패킷을 전송할 수 있기 때문에 비효율적이다.


Sliding Window

송신자가 수신 측의 윈도우 크기를 참고하여 데이터 흐름을 제어하는 방식

윈도우: 한 번에 받을 수 있는 데이터의 양

수신자는 3-way handshaking 과정에서 송신자에게 윈도우 크기를 미리 알린다. 송신자는 ACK를 받지 않아도 수신 측의 윈도우 크기만큼 패킷을 전송할 수 있다.
만약 ACK를 받지 못한 상황에서 수신 측 윈도우만큼 데이터를 보냈다면 패킷을 전송하지 않고 기다린다.
이후 ACK가 오면 ACK를 받은만큼 패킷을 전송할 수 있다.


4. 혼잡 제어

네트워크에 문제가 발생하여 혼잡한 상황 해결

네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라고 한다. 송신 측에서 패킷을 보냈으나 라우터의 문제로 인해 ACK를 받지 못한 송신자가 계속해서 패킷을 재전송하여 발생하는 문제이다.
혼잡 제어는 혼잡 현상을 방지하고 해결하기 위해 수행한다.

흐름 제어는 송신 측과 수신 측의 전송, 혼잡 제어는 라우터를 포함한 넓은 범위의 전송 문제를 다룬다.

AIMD (Additive Increase / Multiplicative Decrease)

패킷을 하나씩 보내며 문제가 발생하지 않으면 송신 윈도우 크기를 1씩 증가시키고, 패킷 전송 실패나 TIME_OUT이 발생하면 윈도우 크기를 절반으로 감소시키는 방식

Additive Increase
송신 측의 윈도우 크기를 혼잡을 감지할 때까지 1씩 증가시킨다.

Multiplicative Decrease
혼잡을 감지하면 송신 측의 윈도우 크기를 절반으로 감소시킨다.

초기 네트워크의 높은 대역폭을 활용하지 못해 오랜 시간이 걸리고, 네트워크가 혼잡해져야 윈도우 크기를 감소시키기 때문에 혼잡 상황에 미리 대처하지 못한다.


Slow Start

패킷을 하나씩 보내며 ACK 패킷 당 송신 윈도우를 1씩 증가시키고, 혼잡이 감지되면 윈도우 크기를 1로 줄이는 방식

AIMD는 초기 전송 속도를 올리는데 시간이 많이 소요된다.
Slow Start도 AIMD와 같이 처음에는 패킷을 하나씩 보낸다. 이후 패킷에 대한 ACK 패킷을 받을 때마다 윈도우 크기를 1씩 증가시킨다. 즉, 송신 윈도우 크기가 지수적으로 증가한다.

혼잡 회피
윈도우 크기가 증가하여 임계값에 도달하면 데이터 손실을 회피하기 위해 선형적으로 1씩 증가시킨다. 윈도우를 증가시켜 혼잡 회피 기능을 수행한다.

혼잡 현상이 발생하면 윈도우 크기를 1로 줄이고 다시 slow start 방식으로 증가시킨다.


💻 TCP Tahoe와 TCP Reno

TCP Tahoe

fast retransmit (빠른 재전송) : Timeout 뿐만 아니라 중복 ACK를 3번 받은 경우 혼잡 제어를 수행한다.

TCP Reno

timeout인 경우에는 TCP Tahoe와 동일하게 Slow Start + 혼잡 회피 방식으로 동작한다.

fast recovery (빠른 회복) : fast retransmit(3개의 중복 ACK)인 경우에는 윈도우 크기를 1로 줄이는 것이 아닌 현재 윈도우 절반으로 줄인다.
중복 ACK가 아닌 새로운 ACK를 수신할 때까지 기다린다. 새로운 ACK를 수신하면 혼잡 회피 단계를 실행해 윈도우 크기를 1씩 증가시킨다.


출처: https://hyeo-noo.tistory.com/280



UDP (User Datagram Protocol)

UDP는 비연결지향형 프로토콜이다.
UDP는 데이터그램 패킷 교환 방식을 사용하여 데이터를 전송한다.

해당 방식은 UDP의 데이터 단위인 데이터그램 패킷을 만들어 처리한다.
UDP는 비연결형 프로토콜이므로 논리적인 연결이 수립되지 않고, 따라서 하나의 경로로 라우팅되지 않는다.
각각의 패킷은 독립적으로 라우팅되어 서로 다른 경로를 통해 수신 측에 도달한다.

UDP 특징

1) UDP는 패킷이 순서의 변경 없이 동시에 수신 측에 도착하는 것을 보장하지 않아 신뢰성이 낮다.
2) UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
3) 연결 수립과 해제, 통신 제어를 수행하지 않고, 각각의 패킷이 최적 경로로 라우팅되어 전송되기 때문에 TCP보다 빠른 통신이 가능하다.



TCP와 UDP 차이점

프로토콜TCPUDP
연결 방식연결 지향형비연결 지향형
패킷 교환 방식가상 회선데이터그램
전송 순서전송 순서 보장전송 순서 바뀔 수 있음
수신 여부 확인수신 여부 확인수신 여부 확인하지 않음
통신 방식1:1 통신1:1 or 1:N or N:N
신뢰성높음낮음
속도느리다빠르다



TCP/IP 4계층

TCP/IP 4계층은 TCP/IP 프로토콜 통신 과정에 초점을 맞추어 OSI 7계층을 단순화시킨 계층 모델이다.

특징

  • 각 계층별로 역할이 다르기 때문에 계층별 간섭 최소화
  • 특정 계층에서 문제가 생기면 해당 계층만 보완하면 되기 때문에 유지보수 편리
  • 다른 계층의 데이터 전달 과정을 알 필요가 없기 때문에 데이터의 은닉과 캡슐화가 가능

1계층 : 네트워크 접근 계층 (Network Access Layer or Network Interface Layer)

실질적으로 데이터를 전달하는 계층으로, 데이터를 전기 신호로 변환하여 MAC 주소로 목적지를 찾아 데이터를 전송한다.

데이터 단위 : 프레임
프로토콜 : Ethernet, Wi-Fi, PPP, Token Ring

2계층 : 인터넷 계층 (Internet Layer)

패킷을 최종 목적지까지 라우팅하는 계층으로, 데이터를 목적지까지 효율적으로 전달한다.

데이터 단위 : 패킷
프로토콜 : IP, ICMP, ARP, RARP, OSPF

3계층 : 전송 계층 (Transport Layer)

통신하는 노드 간 신뢰성 있는 데이터 전송을 보장하는 계층으로, 어플리케이션에서 넘어온 데이터의 검증, 재전송 등 각종 제어를 담당한다.
또한 역캡슐화 과정에서 포트 번호로 통신 애플리케이션을 찾아 데이터를 전달하는 역할도 한다.

데이터 단위 : Segment
프로토콜 : TCP, UDP, RTP, RTCP

4계층 : 애플리케이션 계층 (Application Layer)

사용자와 가장 가까운 계층으로, 사용자-소프트웨어 간 소통을 담당한다.

데이터 단위 : Data, Message
프로토콜 : HTTP, HTTPS, FTP, SSH, Telnet, DNS, SMTP


📚 5계층과 6계층

5계층 : 세션 계층 (Session Layer)

응용 프로그램 간의 연결을 지원해주는 계층으로, 통신 시스템 사용자 간 연결을 유지 및 설정하는 역할을 담당한다.
통신하는 응용 프로세스가 통신을 위한 TCP/IP 세션을 수립, 제거 기능과 세션 메시지 송수신 기능을 제공한다.

6계층 : 표현 계층 (Presentation Layer)

데이터의 변환 작업을 수행하는 계층으로, 응용 계층으로 전달할 데이터를 응용 계층에서 이해할 수 있도록 인코딩 및 디코딩 등의 변환을 수행한다.
코드 간의 번역, 파일 인코딩, 데이터 압축, 암호화, 복호화 등을 담당하여 응용 계층의 부담을 덜어준다.

0개의 댓글