Network / / 2024. 9. 26. 12:53

네트워크 프로토콜

ICMP(Internet Control Message Protocol)는 IP 네트워크에서 오류 보고 및 네트워크 상태를 진단하는 데 사용하는 제어 메시지 프로토콜이야. 이 프로토콜은 TCP UDP 같은 전송 프로토콜과는 달리 데이터를 직접 전송하기 위한 게 아니라, 네트워크 장치들 간의 통신 문제를 파악하거나 상태를 관리하기 위한 목적으로 사용돼.

 

ICMP의 주요 역할:

 

1. 오류 보고:

ICMP는 네트워크 통신 중 문제가 발생했을 때 해당 문제를 보고하는 메시지를 보낼 수 있어. 예를 들어, 전송하려던 IP 패킷이 목적지에 도달할 수 없거나, 라우터의 경로가 잘못되었을 때 이 정보를 보내는 방식이지.

2. 진단 및 네트워크 상태 확인:

네트워크가 제대로 작동하는지 확인하기 위해 ICMP를 이용해 진단 메시지를 주고받을 수 있어. 대표적인 명령어가 Ping이야. Ping은 ICMP의 에코 요청(Echo Request) 메시지를 보내고, 목적지에서 이에 대한 응답(Echo Reply)을 받는 방식으로 네트워크 연결 상태를 테스트하지.

 

ICMP의 주요 메시지 유형:

 

ICMP는 여러 가지 유형의 메시지를 제공해, 그 중 가장 중요한 몇 가지를 소개할게:

 

1. Echo Request와 Echo Reply (타입 8, 타입 0):

 네트워크 연결 상태를 확인할 때 사용돼. Ping 명령어에서 Echo Request를 보내고, 상대방이 Echo Reply로 응답하는 방식이지.

2. Destination Unreachable (목적지 도달 불가, 타입 3):

 패킷이 목적지에 도달할 수 없을 때 전송하는 메시지야. 예를 들어, 라우터가 목적지 네트워크를 찾을 수 없거나, 방화벽에 의해 차단된 경우 이 메시지가 반환돼.

3. Time Exceeded (시간 초과, 타입 11):

 IP 패킷에는 TTL(Time to Live, 생존 시간)이라는 값이 있는데, 이 값이 0이 되면 패킷이 더 이상 전송되지 못하고 폐기돼. 이때 ICMP가 시간 초과 메시지를 보내지. 네트워크 경로 추적을 할 때 사용하는 Traceroute 명령어도 이 메시지를 활용해 경로를 보여줘.

4. Redirect (경로 변경, 타입 5):

 라우터가 더 나은 경로를 발견했을 때 전송하는 메시지야. 원래 가려던 경로보다 더 빠른 경로가 있으면 이 메시지를 통해 알려주지.

5. Source Quench (출발지 억제, 타입 4):

 네트워크 트래픽이 너무 많을 때, 더 이상의 패킷 전송을 억제하기 위해 보내는 메시지야. 하지만, 현대 네트워크에서는 이 메시지를 거의 사용하지 않지.

 

ICMP 동작 방식:

 

ICMP는 IP 프로토콜의 일부로 동작하지만, ICMP 패킷은 별도의 데이터 전송을 위한 연결을 설정하지 않아. 즉, 비연결성을 가지고 있어. ICMP 메시지가 전송될 때는 데이터처럼 전송되는 게 아니라, 네트워크 상태나 오류를 알리는 보조 메시지로서 동작하지.

 

ICMP 메시지는 기본적으로 IP 헤더 ICMP 메시지 본문으로 구성돼. ICMP 메시지 본문에는 오류나 상태 정보가 담겨 있고, IP 헤더에는 이 메시지를 주고받는 출발지와 목적지 정보가 있어.

 

ICMP의 한계:

 

ICMP는 진단과 오류 보고에 매우 유용하지만, 보안상 취약점이 될 수도 있어. 네트워크 침입자는 ICMP 메시지를 악용해서 네트워크 구조를 파악하거나, DoS(Denial of Service) 공격에 이용할 수 있어. 그래서 많은 방화벽이나 보안 설정에서는 ICMP를 제한하거나 차단하는 경우가 많아.

 

요약:

 

 ICMP는 네트워크에서 오류를 보고하고, 상태를 진단하기 위한 프로토콜이야.

 데이터 전송을 목적으로 하지 않고, 네트워크 관리와 통신 오류를 확인하는 데 사용돼.

 주요 기능: 오류 보고(예: 도달 불가, 시간 초과), 진단(예: Ping, Traceroute).

 보안상 이유로 ICMP를 제한하는 경우가 많아.


MTU(Maximum Transmission Unit)는 네트워크를 통해 한 번에 전송할 수 있는 최대 데이터 크기를 뜻해. 쉽게 말해서, 한 패킷이 가질 수 있는 최대 크기라고 보면 돼.

 

MTU의 중요한 역할:

 

네트워크에서 데이터를 전송할 때, 데이터를 패킷이라는 작은 단위로 쪼개서 보내. MTU는 이 패킷이 한 번에 얼마만큼 큰 데이터를 담을 수 있는지 제한하는 거야. MTU 값이 너무 크면 전송 중에 문제가 생길 가능성이 커지고, 반대로 너무 작으면 패킷을 너무 많이 쪼개서 보내야 해서 비효율적일 수 있어.

 

MTU 값:

 

 일반적으로 이더넷 네트워크의 기본 MTU 값은 1500바이트야. 이 값은 데이터뿐만 아니라 IP 헤더와 TCP 헤더 등 여러 추가 정보도 포함해.

 만약 전송하려는 데이터가 이 MTU 값을 초과하면, 데이터를 작은 패킷으로 쪼개는 과정(fragmentation)이 발생해.

 

왜 MTU가 중요한가?

 

MTU 값이 너무 크거나 너무 작으면 네트워크 성능에 영향을 줄 수 있어:

 

1. MTU 값이 너무 크면: 중간에 문제가 생기면 큰 패킷이 손실되고, 다시 재전송해야 할 데이터가 많아져서 오히려 효율이 떨어질 수 있어.

2. MTU 값이 너무 작으면: 작은 패킷들이 많이 생기면서 패킷 수가 많아지고, 그만큼 처리해야 할 양이 많아져 성능에 부정적인 영향을 줄 수 있어.

 

MTU와 Fragmentation:

 

 데이터가 MTU보다 클 경우, 패킷을 쪼개서 보낸다고 했잖아? 이걸 프래그멘테이션(fragmentation)이라고 해.

 프래그멘테이션이 발생하면 각 패킷에 추가적인 헤더 정보가 붙고, 여러 번의 패킷 조립 과정이 필요하기 때문에 네트워크 성능이 저하될 수 있어.

 

MTU의 예:

 

만약 어떤 네트워크의 MTU가 1500바이트라면, 네트워크는 한 번에 1500바이트 이하의 데이터를 담아 패킷으로 전송해. 1500바이트보다 큰 데이터를 전송하려면, 이를 여러 개의 패킷으로 나누어서 보내야 하지.

 

요약:

 

 MTU는 한 번에 전송할 수 있는 최대 패킷 크기를 말해.

 보통 이더넷에서 MTU 값은 1500바이트.

 MTU가 너무 크거나 작으면 네트워크 성능에 영향을 미칠 수 있어.

 데이터를 전송할 때 MTU보다 큰 데이터를 전송하려면 패킷을 쪼개야 하는데, 이 과정이 프래그멘테이션이라고 불러.


Tip💡

퍼블릭 멀티캐스트는 여러 수신자에게 데이터를 동시에 전송하는 방식 중 하나로, 멀티캐스트 그룹에 가입한 모든 수신자에게 데이터를 보내는 네트워크 통신 방식이야. 여기서 퍼블릭은 모든 사람들이 접근할 수 있는 네트워크 환경에서, 멀티캐스트 여러 수신자에게 동일한 데이터를 한 번에 보내는 방식을 의미해.

 

멀티캐스트란?

 

멀티캐스트는 하나의 송신자가 여러 수신자에게 동시에 데이터를 전송하는 방식이야. 이는 모든 수신자에게 동일한 데이터를 전송해야 할 때 매우 효율적이야. 예를 들어, 동영상 스트리밍, 온라인 게임 서버에서 여러 유저에게 동시에 정보를 전송할 때 유용하지.

 

 유니캐스트: 한 번에 한 사람에게 데이터를 보내는 방식 (1:1).

 브로드캐스트: 네트워크 상의 모든 장치에게 데이터를 보내는 방식 (1:모두).

 멀티캐스트: 특정 그룹에 속한 여러 수신자에게만 데이터를 보내는 방식 (1:선택된 다수).

 

퍼블릭 멀티캐스트의 의미

 

퍼블릭 멀티캐스트는 말 그대로, 인터넷과 같은 공개된 네트워크에서 멀티캐스트 그룹을 통해 데이터를 전송하는 것을 뜻해. 이 방식에서는 특정 그룹에 속한 사람들만 데이터를 받을 수 있지만, 그 그룹은 퍼블릭 네트워크를 통해 접근할 수 있어. 즉, 인터넷 상에서 특정 멀티캐스트 주소에 참여한 모든 사람들이 그 데이터를 받을 수 있는 방식이라고 할 수 있어.

 

멀티캐스트의 주요 특징:

 

1. 효율적인 데이터 전송: 동일한 데이터를 여러 명에게 동시에 전송하므로 네트워크 대역폭을 절약할 수 있어.

2. 특정 그룹 대상: 브로드캐스트와 달리, 멀티캐스트는 특정 그룹에 가입한 장치들만 데이터를 받아.

 

예시:

 

 온라인 스트리밍 서비스에서 멀티캐스트 기술을 사용하면 동일한 방송을 보는 여러 사람에게 동시에 데이터를 전송할 수 있어. 퍼블릭 멀티캐스트의 경우, 전 세계 어디서든 그 방송을 수신할 수 있는 그룹에 가입된 사람들은 동일한 데이터를 받을 수 있게 돼.

 

퍼블릭 멀티캐스트는 주로 대규모 네트워크 환경에서 여러 사용자에게 동시에 데이터를 전송해야 할 때 유용하게 사용되는 방식이야.

 

멀티캐스트 주소는 IPv4에서는 D 클래스(Class D) 주소로 구분되며, 이 주소는 특정 범위 내에서 멀티캐스트 그룹을 식별하는 데 사용돼. 멀티캐스트 주소는 **공용(public)**과 사설(private) 네트워크에서 각각 사용할 수 있는 범위가 정해져 있어.

 

1. 퍼블릭 멀티캐스트 주소 (Public Multicast Address):

 

 퍼블릭 멀티캐스트 주소는 인터넷과 같은 공개된 네트워크에서 사용되는 멀티캐스트 주소야.

 범위: 224.0.0.0 ~ 239.255.255.255

이 범위 안에서 특정 주소를 멀티캐스트 그룹에 할당해 데이터를 전송할 수 있어.

 

세부적인 범위:

 

 224.0.0.0 ~ 224.0.0.255: 로컬 네트워크에서만 사용되는 멀티캐스트 주소로, 유효 범위가 제한적이야. 주로 라우팅 프로토콜(예: OSPF, RIP)에서 사용돼.

 224.0.1.0 ~ 238.255.255.255: 전 세계적으로 사용할 수 있는 퍼블릭 멀티캐스트 주소 범위. 인터넷에서의 글로벌 멀티캐스트 트래픽에 사용돼.

 239.0.0.0 ~ 239.255.255.255: 이 범위는 사설 멀티캐스트로 주로 사용되며, 인터넷보다는 사설 네트워크 내부에서 주로 사용돼. 그래서 이 범위가 프라이빗 멀티캐스트 주소로 분류돼.

 

2. 프라이빗 멀티캐스트 주소 (Private Multicast Address):

 

 프라이빗 멀티캐스트 주소는 인터넷과 같은 공개 네트워크가 아니라, 기업이나 학교 같은 사설 네트워크에서 사용돼.

 범위: 239.0.0.0 ~ 239.255.255.255

이 범위는 관리 스코프 멀티캐스트(Administratively Scoped Multicast)라고 불리며, 사설 네트워크 내에서만 유효한 멀티캐스트 통신에 사용돼.

 

프라이빗 멀티캐스트 주소 특징:

 

 이 주소는 인터넷을 통해 전송되지 않으며, 라우터는 이 주소를 통해 외부로 멀티캐스트 트래픽을 보내지 않아.

 주로 내부 네트워크에서 스트리밍, 파일 전송, 네트워크 관리 등의 용도로 사용돼.

 

정리:

 

 퍼블릭 멀티캐스트 주소 범위: 224.0.0.0 ~ 238.255.255.255

 이 중 일부는 로컬 네트워크에서만 유효하고, 나머지는 전 세계 네트워크에서 사용 가능.

 프라이빗 멀티캐스트 주소 범위: 239.0.0.0 ~ 239.255.255.255

 이 범위는 사설 네트워크 내에서만 사용되는 주소.

 

이렇게 퍼블릭과 프라이빗 멀티캐스트 주소는 각각 인터넷 환경과 사설 네트워크 환경에서 다른 목적으로 활용돼.


**홉(Hop)**은 네트워크에서 패킷이 한 장치에서 다른 장치로 이동하는 경로 상의 한 구간을 의미해. 쉽게 말해, 패킷이 한 네트워크 장비(예: 라우터, 스위치)를 통과할 때마다 한 홉을 지나간다고 표현해.

 

예를 들어:

 

 네가 컴퓨터에서 인터넷에 연결된 서버로 데이터를 보낼 때, 그 데이터는 네트워크 장비(예: 라우터, 스위치 등)를 거쳐서 전달돼. 데이터가 한 라우터에서 다음 라우터로 이동할 때마다 한 홉을 통과하는 거야.

 

홉과 TTL(Time To Live):

 

 패킷에는 TTL(Time To Live)이라는 값이 있어, 이 값은 패킷이 지나갈 수 있는 최대 홉 수를 정해줘. 패킷이 네트워크 장치를 통과할 때마다 TTL 값이 1씩 줄어들어. TTL 값이 0이 되면 패킷은 더 이상 전송되지 않고 폐기돼.

 홉 제한을 통해 패킷이 네트워크를 무한정 떠도는 것을 방지할 수 있어.

 

홉의 예시:

 

 만약 네가 컴퓨터에서 구글 서버로 데이터를 보내고, 그 경로에 5개의 라우터를 거친다면, 패킷은 5개의 홉을 통과하게 되는 거야.

 네트워크 진단 명령어인 traceroute를 사용하면, 패킷이 목적지까지 도달하는 데 몇 개의 홉을 거치는지 확인할 수 있어.

 

정리:

 

 : 네트워크에서 패킷이 한 장비에서 다른 장비로 이동하는 각 구간.

 패킷은 여러 홉을 지나 목적지에 도달하고, TTL 값을 통해 무한 전송을 방지.

 

이 개념을 통해 패킷이 네트워크 장비들을 통해 어떻게 이동하는지, 그리고 홉의 수가 많아지면 전송 시간이 길어질 수 있다는 걸 이해할 수 있어.


Review📚

 

TCP/IP 모델은 네트워크 통신을 설명하는 모델로, OSI 7계층과 대응돼. TCP/IP는 4개의 계층으로 구성되어 있으며, OSI 모델의 7계층과는 약간 다르지만 유사한 기능을 제공해. 아래에서 두 모델을 비교해서 설명할게.

 

OSI 7계층:

 

1. 물리 계층 (Physical Layer)

2. 데이터 링크 계층 (Data Link Layer)

3. 네트워크 계층 (Network Layer)

4. 전송 계층 (Transport Layer)

5. 세션 계층 (Session Layer)

6. 표현 계층 (Presentation Layer)

7. 응용 계층 (Application Layer)

 

TCP/IP 4계층:

 

1. 네트워크 인터페이스 계층 (Network Interface Layer)

2. 인터넷 계층 (Internet Layer)

3. 전송 계층 (Transport Layer)

4. 응용 계층 (Application Layer)

OSI 7계층과 TCP/IP (출처 -  https://yeon-lee.tistory.com/73)

 

TCP/IP 계층별 설명 및 OSI 모델과의 대응:

 

1. 네트워크 인터페이스 계층 (TCP/IP)

 TCP/IP의 가장 하위 계층으로, 데이터가 실제로 네트워크 매체(케이블, 무선 등)를 통해 전송되는 방식을 정의해.

 OSI 모델의 물리 계층 데이터 링크 계층에 해당해.

 이 계층에서는 MAC 주소와 같은 하드웨어 주소 체계를 사용하고, 이더넷 프로토콜이 대표적으로 사용돼.

2. 인터넷 계층 (TCP/IP)

 패킷이 네트워크를 통해 어떻게 전달될지, 즉 라우팅을 담당해. 이 계층에서 IP 주소를 사용해 네트워크 간 통신을 처리해.

 OSI 모델의 네트워크 계층에 해당해.

 대표적인 프로토콜: IP(Internet Protocol), ICMP(Internet Control Message Protocol), ARP(Address Resolution Protocol).

3. 전송 계층 (TCP/IP)

 데이터의 신뢰성 있는 전송을 책임져. 데이터가 정확하게 전달되었는지 확인하고, 손실된 데이터가 있으면 다시 전송하는 역할을 해.

 OSI 모델의 전송 계층과 대응돼.

 대표적인 프로토콜: TCP(Transmission Control Protocol), UDP(User Datagram Protocol).

4. 응용 계층 (TCP/IP)

 사용자와 직접적으로 상호작용하는 계층으로, 웹 브라우징, 이메일 전송, 파일 전송 등 응용 프로그램들이 사용하는 프로토콜이 이 계층에서 동작해.

 OSI 모델의 응용 계층, 세션 계층, 표현 계층을 모두 포함하는 역할을 해.

 대표적인 프로토콜: HTTP(Hypertext Transfer Protocol), FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol), DNS(Domain Name System).

 

TCP/IP와 OSI 모델 간 대응:

 

 네트워크 인터페이스 계층 (TCP/IP)  물리 계층 + 데이터 링크 계층 (OSI)

 인터넷 계층 (TCP/IP)  네트워크 계층 (OSI)

 전송 계층 (TCP/IP)  전송 계층 (OSI)

 응용 계층 (TCP/IP)  세션 계층 + 표현 계층 + 응용 계층 (OSI)

 

간단 정리:

 

 TCP/IP 모델은 4계층으로 구성되고, 각각이 OSI 모델의 여러 계층과 대응돼.

 네트워크 인터페이스 계층은 데이터 전송 매체와 관련되고, 인터넷 계층은 IP 주소 기반의 패킷 전송 및 라우팅, 전송 계층은 TCP/UDP를 통해 데이터의 신뢰성을 관리, 응용 계층은 실제 사용자와 상호작용하는 네트워크 서비스와 애플리케이션을 관리해.

 

TCP/IP는 OSI 모델보다 실제 구현에 초점을 맞춘 모델이라 네트워크 프로토콜의 핵심 동작을 더 단순화해 표현하고 있어!


TCP UDP는 네트워크 전송 계층에서 사용하는 두 가지 대표적인 프로토콜이야. 이 두 프로토콜은 데이터를 전송할 때 다른 방식으로 작동해, 각기 다른 장점과 단점을 가지고 있어.

 

1. TCP (Transmission Control Protocol)

TCP 헤더 (출처 - https://ko.wikipedia.org/wiki/전송_제어_프로토콜)

 

TCP 연결형 프로토콜로, 데이터를 신뢰성 있게 전송하는 데 중점을 두고 있어. 이를 위해 다음과 같은 특징을 가지고 있어:

 

 연결 설정: 데이터를 전송하기 전에 송신자와 수신자 사이에서 3-way handshake라고 불리는 연결 절차를 먼저 수행해. 이로 인해 신뢰할 수 있는 데이터 전송이 가능하지.

 데이터 전송의 신뢰성: TCP는 데이터를 전송할 때 패킷 손실이 발생하면 이를 재전송하는 기능이 있어. 또한, 데이터를 보내면 수신자로부터 **수신 확인(ACK)**을 받아 전송이 제대로 이루어졌는지 확인해.

 순서 보장: TCP는 패킷이 전송되는 순서를 보장해. 여러 개의 패킷이 전송되면, 수신자가 데이터를 순서대로 조립할 수 있도록 번호를 붙여 전송해.

 흐름 제어 및 혼잡 제어: 네트워크가 혼잡하거나 수신자가 데이터를 처리할 수 있는 속도에 맞춰 전송 속도를 조절하는 흐름 제어 혼잡 제어를 수행해.

 

사용 예: 웹 브라우징(HTTP/HTTPS), 이메일(POP3, SMTP), 파일 전송(FTP) 등, 데이터 손실 없이 안정적인 전송이 필요한 경우 사용.

 

3-way Handshake (연결 설정 과정)

TCP 3-way Handshake

송신자수신자

SYN, Seq=100 연결 요청 (SYN)
연결 수락 (SYN-ACK) ⟵⟶ SYN-ACK, Seq=300, Ack=101
확인 응답 (ACK) ACK, Seq=101, Ack=301

 

4-way Handshake (연결 해제 과정)

TCP 4-way Handshake

송신자수신자

FIN, Seq=500 연결 종료 요청 (FIN)
연결 종료 승인 (ACK) ACK, Seq=700, Ack=501
연결 종료 요청 (FIN) FIN, Seq=700
연결 종료 승인 (ACK) ACK, Seq=501, Ack=701

 

TCP 데이터 전송 과정 (3-way Handshake 포함)

TCP 데이터 전송 과정

1. 연결 설정 (3-way Handshake)

송신자수신자

SYN, Seq=100 연결 요청 (SYN)
연결 수락 (SYN-ACK) ⟵⟶ SYN-ACK, Seq=300, Ack=101
확인 응답 (ACK) ACK, Seq=101, Ack=301

2. 데이터 전송

송신자수신자

데이터 전송, Seq=101 데이터 수신, Ack=401
데이터 확인 (ACK), Ack=401 수신한 데이터에 대한 확인

3. 연결 해제 (4-way Handshake)

송신자수신자

FIN, Seq=500 연결 종료 요청 (FIN)
ACK, Seq=700, Ack=501 연결 종료 승인 (ACK)
FIN, Seq=700 연결 종료 요청 (FIN)
ACK, Seq=501, Ack=701 연결 종료 승인 (ACK)

 

TIME-WAIT 상태

 

TIME-WAIT는 TCP에서 연결을 해제할 때 발생하는 상태로, 연결을 종료한 측 연결 해제 과정에서 마지막 ACK 패킷을 보낸 후 일정 시간 동안 대기하는 상태야.

 

TIME-WAIT 상태의 목적:

 

 중복 패킷 방지: 네트워크 지연 등으로 인해 기존에 전송된 패킷이 뒤늦게 도착할 수 있어. TIME-WAIT 상태에서 일정 시간 동안 대기함으로써 이러한 중복된 패킷이 잘못된 연결로 전달되는 것을 방지해.

 재전송 방지: 마지막 ACK 패킷이 손실될 경우, 상대방이 FIN 패킷을 다시 보낼 수 있어. 이를 대비해 TIME-WAIT 상태에서 재전송된 FIN을 처리하고 다시 ACK를 보낼 준비를 해.

 

TIME-WAIT 상태의 대기 시간:

 

 TCP의 **대기 시간은 2 * MSL (Maximum Segment Lifetime)**로 설정돼. MSL은 패킷이 네트워크에 머물 수 있는 최대 시간을 의미하며, TIME-WAIT 상태에서는 이 시간 동안 대기함으로써 위의 문제들을 방지해.

 보통 MSL은 30초에서 2분 정도로 설정되며, 따라서 TIME-WAIT 상태는 최대 4분까지 지속될 수 있어.

 

TIME-WAIT의 예시:

 

 만약 클라이언트가 서버에 FIN 패킷을 보내고 서버가 이를 ACK하면, 클라이언트는 TIME-WAIT 상태에 들어가.

 이 상태에서 2 * MSL 동안 대기하며, 이후 안전하다고 판단되면 연결이 완전히 종료돼.

 

Graceful Shutdown (우아한 종료)

 

Graceful Shutdown은 TCP 연결을 정상적으로 종료하는 절차로, 양쪽 모두가 서로 더 이상 보낼 데이터가 없다는 것을 인지하고 4-way Handshake를 통해 연결을 종료하는 방식이야. 이를 통해 연결이 안전하고 완전하게 닫히게 돼.

 

Graceful Shutdown 절차:

 

1. FIN 전송: 먼저 송신 측(예: 클라이언트)이 더 이상 보낼 데이터가 없다는 것을 알리기 위해 FIN 패킷을 전송해.

2. ACK 전송: 수신 측(예: 서버)은 송신 측의 FIN을 확인하고, 이를 ACK 패킷으로 응답해. 이때 수신 측은 여전히 데이터를 전송할 수 있는 상태야.

3. FIN 전송: 이제 수신 측도 더 이상 보낼 데이터가 없으면 FIN 패킷을 전송해.

4. ACK 전송 및 종료: 송신 측은 이를 확인하고 ACK 패킷을 전송한 후 연결을 종료해.

 

Graceful Shutdown의 장점:

 

 데이터 손실 없이 연결을 안전하게 종료할 수 있어.

 네트워크에서 더 이상 전송할 데이터가 없는 상태에서, 양쪽 모두가 확인하고 동의하므로 비정상 종료 데이터 손실을 피할 수 있어.

 

TIME-WAIT와 Graceful Shutdown의 관계:

 

 Graceful Shutdown이 제대로 이루어지면, FIN ACK 패킷이 정확하게 주고받아지며 연결이 안전하게 종료돼.

 이때, FIN을 먼저 보낸 쪽은 TIME-WAIT 상태에 들어가서 패킷의 중복 전송이나 재전송을 대비해 잠시 대기하게 돼.

 

요약:

 

 TIME-WAIT 상태: TCP 연결을 종료한 후 발생하는 대기 상태로, 중복된 패킷이나 재전송된 패킷을 처리하기 위해 일정 시간 동안 대기해.

 Graceful Shutdown: TCP 연결을 안전하게 종료하는 절차로, 4-way handshake를 통해 데이터 손실 없이 양쪽이 연결을 해제해.

 

TCP 시퀀스 넘버의 역할:

 

1. 데이터 순서 보장: 네트워크를 통해 전송된 패킷이 순서대로 도착하지 않더라도 시퀀스 넘버를 통해 원래 순서대로 재조립할 수 있어.

2. 데이터 손실 및 재전송 처리: 만약 중간에 패킷이 손실되거나 문제가 생기면, 수신자가 해당 시퀀스 넘버를 기반으로 손실된 패킷만 다시 요청할 수 있어.

3. 양방향 데이터 흐름 관리: 시퀀스 넘버는 양쪽 모두의 데이터 흐름을 관리해, 송신자와 수신자 간에 정확한 데이터 송수신을 보장해.

 

시퀀스 넘버의 사용 방식:

 

 TCP는 바이트 단위로 시퀀스 넘버를 관리해. 이는 각 패킷에 포함된 첫 번째 바이트의 순서 번호를 의미해.

 연결이 설정되면, 송신자는 임의의 숫자를 시퀀스 넘버로 설정한 후 데이터를 전송해. 수신자는 이를 확인한 후 다음에 받을 바이트의 시퀀스 넘버를 ACK로 응답해.

 TCP 연결을 설정할 때 각 호스트는 **초기 시퀀스 넘버(ISN)**를 무작위로 선택해, 이를 통해 연결의 신뢰성을 높이고 보안을 강화해.

 

예시:

 

1. 데이터 전송:

 송신자가 Seq=100인 패킷을 보낸다고 가정하면, 이는 첫 번째 바이트가 100번째 바이트임을 의미해.

 만약 송신자가 500바이트의 데이터를 보냈다면, 다음 패킷의 시퀀스 넘버는 Seq=600(100 + 500)부터 시작할 거야.

2. ACK 응답:

 수신자가 해당 패킷을 정상적으로 받았다면, 다음에 받을 데이터를 ACK=600으로 응답해. 이 숫자는 수신자가 다음에 받을 바이트의 시퀀스 넘버를 의미해.

 

시퀀스 넘버 예시 흐름:

TCP 시퀀스 넘버 예시

송신자수신자

Seq=100, Data=500 bytes 데이터 수신
데이터 확인 요청 ACK=600
Seq=600, Data=500 bytes 다음 데이터 수신
데이터 확인 요청 ACK=1100

 

정리:

 

 시퀀스 넘버는 TCP 데이터 전송에서 패킷의 순서 신뢰성을 보장하기 위해 사용돼.

 수신자는 시퀀스 넘버를 확인해 패킷이 제대로 도착했는지 확인하고, 다음 패킷을 받을 준비가 되면 **ACK(확인 응답)**으로 응답해.

 이를 통해 TCP는 순서가 보장되고 신뢰성 있는 데이터 전송을 제공해.

 

2. UDP (User Datagram Protocol)

 

UDP 비연결형 프로토콜로, 데이터를 빠르게 전송하는 데 중점을 두고 있어. 연결 설정이나 데이터 확인 절차가 없기 때문에 속도가 빠른 대신, 데이터 전송의 신뢰성은 보장되지 않아.

 

 연결 설정 없음: 데이터를 보내기 전에 별도의 연결 설정 과정이 없어, 송신자가 데이터를 그냥 보내면 수신자가 받는 방식이야.

 데이터 전송의 신뢰성 없음: UDP는 패킷 손실이나 순서 보장 기능이 없어. 즉, 중간에 패킷이 손실되거나 순서가 뒤바뀌어도 이를 복구하거나 재전송하지 않아.

 빠른 전송 속도: TCP에 비해 연결 설정 및 확인 절차가 없기 때문에 전송 속도가 훨씬 빠르지.

 

사용 예: 실시간 스트리밍, 온라인 게임, VoIP(인터넷 전화) 등, 빠른 전송이 중요하고 약간의 데이터 손실이 큰 문제가 되지 않는 경우 사용.

 

TCP vs UDP 비교

TCP와 UDP 비교

특징TCP (전송 제어 프로토콜)UDP (사용자 데이터그램 프로토콜)

연결 방식 연결 지향형 (3-way handshake) 비연결형
데이터 신뢰성 높음 (재전송, 오류 감지, 확인) 낮음 (재전송 없음, 오류 처리 안 함)
데이터 순서 순서 보장 (패킷 순서대로 도착) 순서 보장 없음 (패킷 순서가 뒤바뀔 수 있음)
속도 느림 (연결 설정, 오류 검사를 위한 오버헤드) 빠름 (연결 설정 없음, 최소한의 오버헤드)
흐름 제어 및 혼잡 제어 있음 (윈도우 크기 및 흐름 제어) 없음
사용 예 웹 브라우징, 이메일, 파일 전송 (예: HTTP, FTP) 스트리밍, 온라인 게임, VoIP (예: DNS, VoIP, 비디오 스트리밍)

 

요약

 

 TCP는 신뢰성을 보장하면서 데이터를 전송하는 프로토콜로, 데이터를 정확하게 전달해야 하는 경우에 적합해.

 UDP는 신속한 전송이 중요한 경우에 사용되며, 신뢰성이 보장되지 않지만 빠르게 데이터를 전송하는 데 유리해.

 

'Network' 카테고리의 다른 글

Http 프로토콜  (6) 2024.09.27
UDP 소켓 프로그래밍  (0) 2024.09.26
TCP 소켓 프로그래밍  (0) 2024.09.26
네트워크 필수 개념: DHCP, ARP, NAT, 그리고 ZeroConf  (8) 2024.09.25
네트워크 기초  (0) 2024.09.25
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유