TCP/IP

2024. 2. 2. 18:42

아직 잘 모르겠는 것들 정리

  • '

 

 

1. TCP 란 ?

 - 전송 제어 프로토콜(Transmission Control Protocol)

 - IP 위에서 동작하는 프로토콜이다. IP가 데이터 패킷을 목적지까지 전달하는 역할을 담당한다면, TCP는 이 패킷들(SYN, ACK)이 신뢰성 있고 순서대로 전달되도록 보장하는 역할을 한다. 그래서 이 두 프로토콜을 TCP/IP라 부르며, 인터넷 통신의 기반이 된다.

 

 

2. IP란 ?

 - IP는 인터넷 프로토콜(인터넷에서 데이터를 주고받는 방식을 정의한 규약)을 의미.

 - IP 주소는 이 IP 프로토콜이 운용되는 네트워크에서 각 장치를 구분하기 위해 부여하는 고유한 주소를 의미.

 - 즉 IP는 '프로토콜'이라는 규약이며, 이 IP 주소는 이 규약을 통해 데이터를 주고받는 각각의 장치를 구별하기 위한 '주소'이다.

 - 간단히 말하면 IP는 우편 배달을 위한 규칙이고, IP 주소는 배달지 주소라고 비유할 수 있다.

 

  IP의 주요 역할

1. 주소 지정 : IP는 각 장치에 고유한 IP 주소를 부여한다.(XX.XXX.XX.X) 이 주소는 네트워크 상에서 장치를 식별하고, 데이터 패킷이 올바른 목적지에 도달할 수 있도록 한다.

2. 패킷 전달 : IP는 데이터를 패킷 단위로 전달하는 역할을 한다. TCP에 의해 분할된 데이터 패킷들은 IP를 통해 네트워크를 통해 전송된다.

3. 라우팅 : IP는 패킷이 목적지까지 가장 효율적인 경로로 전달되도록 라우팅한다. 이는 여러 개의 네트워크와 라우터를 거쳐 이루어진다.

4. 비신뢰성 : IP는 비신뢰성이라는 특징을 가진다. 이는 패킷이 손실되거나 순서대로 도착하지 않을 수 있다는 것을 의미한다.

이 문제는 상위 계층의 TCP에서 처리한다.

=> 따라서 IP의 주요 역할은 데이터 패킷의 전달과 라우팅이다. 이를 통해 네트워크 상의 다양한 장치들이 서로 통신할 수 있게 한다.

 

 - IP가 어떻게 데이터 패킷을 목적지까지 전달하는가?

TCP가 데이터를 패킷으로 나누고 IP는 이 패킷들을 실제로 전송하는 역할을 한다. 이렇게 TCP에 의해 나눠진 패킷들은 그 다음 계층인 네트워크 계층의 IP를 통해 실제로 네트워크를 통해 전송된다. IP는 이 패킷들이 목적지까지 도달할 수 있게 하는 역할을 한다. 이 때 각 패킷에는 목적지 IP 주소가 포함되어 있다. 이 IP 주소는 패킷이 어디로 가야하는지를 결정한다.

    1) 데이터 패킷의 생성 : 데이터를 전송할 때, 이 데이터는 패킷이라는 작은 단위로 나뉜다. 각 패킷에는 목적지의 IP 주소와 함께 데이터의 일부분이 포함된다.

    2) 패킷의 전송 : 생성된 패킷은 네트워크를 통해 전송된다. 패킷은 라우터라는 장치를 통해 전송되는데, 라우터는 패킷의 목적지 IP 주소를 보고 어느 방향으로 패킷을 보낼지 결정한다.

    3) 패킷의 도착 : 패킷이 목적지에 도착하면, TCP/IP 스택은 패킷을 원래의 데이터로 재조립한다. 이 과정에서 패킷이 손실되거나 순서가 바뀌면, TCP는 재전송을 요청하거나 패킷을 재정렬한다.

    4) 데이터의 수신 : 재조립된 데이터는 수신 프로그램에게 전달된다.

 

=> 이렇게 IP는 데이터 패킷의 생성부터 목적지까지의 전달 과정을 관리한다. IP는 단순히 패킷을 목적지까지 전달하는 역할만 하며, 패킷이 정확하게 전달되었는지 확인하거나, 패킷의 순서를 재정렬하는 등의 역할은 TCP가 담당한다.

 

데이터를 패킷으로 나누는건 TCP의 역할이며, 이 패킷들을 실제로 네트워크를 통해 전송하는 것은 IP의 역할이다.

TCP는 데이터를 패킷 단위로 나누고, 이 패킷들이 순서대로 전달되도록 관리한다. 패킷이 손실되거나 에러가 발생하면 TCP는 재전송을 요청한다.

이렇게 TCP에 의해 나눠진 패킷들은 그 다음 계층인 IP를 통해 실제로 네트워크를 통해 전송된다. IP는 패킷이 정확한 목적지까지 도달할 수 있도록 하는 역할을 한다. 이를 위해 IP 주소를 사용하여 각 패킷을 정확한 목적지로 라우팅한다.

 

 

* TCP와 HTTP(HyperText Transfer Protocol)의 차이

  - 1. TCP는 OSI 7계층 모델의 전송 계층에서 작동하는 프로토콜이다. TCP의 주요 역할은 데이터를 안정적으로, 순서대로, 에러 없이 전달하는 것이다. TCP는 데이터를 패킷을 나누고, 이 패킷들이 정확하게 목적지에 도달하도록 관리한다. 패킷이 손실되거나 에러가 발생하면, TCP는 재전송을 요청한다. 또한 패킷들이 순서대로 도착하도록 재정렬한다. - 신뢰성있음(Reliable -> 왜냐하면 '3-way-handshake'를 하고 전송하기 때문에.), 연결지향적(Connection-oriented). 같은 전송계층의 UDP는 비연결성임. 

 - 2. HTP는 애플리케이션 계층에서 작동하는 프로토콜이다. HTTP의 주요 역할은 웹 서버와 클라이언트 간의 웹페이지와 웹기반 애플리케이션을 주고 받는 것이다. HTTP 요청이 발생하면, 웹 서버는 해당 요청에 대한 HTTP 응답을 보낸다. HTTP는 상태를 유지하지 않는 프로토콜이므로, 각 요청과 응답은 독립적으로 관리된다.

=> 즉 TCP와 HTTP는 각각 다른 계층에서 작동하며, 서로 다른 역할을 한다. TCP는 데이터의 신뢰성 있는 전송을 보장하며, HTTP는 웹 서버와 클라이언트 간의 통신을 가능하게 한다. 사실상 HTTP 통신을 할 때 내부적으로는 TCP를 사용하여 데이터를 신뢰성 있게 전송되도록 한다. 그래서 이 둘은 보통 함께 작동한다.

 

*3-way-handshake 

 : TCP의 동작 방식 중 하나로, TCP 연결을 시작할 때 사용되는 방법이다.

1. SYN : 클라이언트가 서버에게 연결을 시작하겠다는 의미로 SYN 패킷을 보낸다. 이 패킷은 클라이언트의 초기 시퀀스 번호를 가지고 있다.

2. SYN-ACK : 서버가 클라이언트의 SYN 패킷을 받으면, 이를 확인하고 클라이언트에게 ACK 패킷을 보낸다. 이 ACK 패킷은 클라이언트의 초기 시퀀스 번호에 1을 더한 번호를 가지고 있다. 또한 서버는 자신의 초기 시퀀스 번호를 가진 SYN 패킷도 함께 보낸다.

3. ACK : 클라이언트는 서버의 SYN-ACK 패킷을 받으면, 서버의 초기 시퀀스 번호에 1을 더한 번호를 ACK 번호로 가진 ACK 패킷을 서버에게 보낸다. 이로써 TCP 연결이 성립하게 된다.

 

웹 브라우저가 웹 서버에 HTTP 요청을 보내면, 실제로는 TCP를 통해 '3-way-handshake'를 통한 연결 설정 과정을 거친 후에 HTTP 요청이 전송되게 된다. 이후 웹 서버는 HTTP 응답을 클라이언트에게 보내고, 이때도 실제 데이터의 전송은 TCP를 통해 이루어진다.

따라서 HTTP 통신을 할 때 내부적으로는 TCP의 '3-way-handshake'가 이루어지지만, HTTP 자체가 수행하는 것은 아님. 이는 TCP가 데이터의 신뢰성 있는 전송을 담당하며, HTTP는 이러한 TCP의 기능을 활용해 웹 서버와 클라이언트 간의 통신을 담당한다. 

HTTP는 TCP 프로토콜 사용.DNS가 주로 UDP 사용.

 

*4-way-handshake 

 : TCP에서 연결을 종료하기 위해 사용하는 방법이다.

1. FIN : 클라이언트가 데이터를 모두 전송하였다면, 서버에게 연결을 종료하겠다는 의미로 FIN 패킷을 보낸다

2. ACK : 서버는 FIN 패킷을 받고 클라이언트에게 이를 확인했다는 ACK 패킷을 보낸다.

이 시점에서 서버 -> 클라이언트 방향의 연결이 종료되지만, 클라이언트 -> 서버 방향의 연결은 아직 유지된다. 즉, 서버가 아직 보낼 데이터가 남아있다면 보낼 수 있다.

3. FIN : 서버가 모든 데이터를 클라이언트에게 보냈으면, 이제 클라이언트에게 연결을 종료하겠다는 의미로 FIN 패킷을 보낸다.

4. ACK : 클라이언트는 서버의 FIN 패킷을 받고, 이를 확인했다는 ACK 패킷을 서버에게 보낸다. 이 패킷을 서버가 받게 되면, 클라이언트 -> 서버 방향의 연결도 종료되고, 이로써 TCP 연결이 완전히 종료된다.

 

 

TCP/IP 프로토콜 스택 4계층으로 구분짓고 설명

 - LINK 계층(네트워크 인터페이스 계층)

    : 이 계층은 물리적인 네트워크 하드웨어(ex.이더넷)와 관련된 프로토콜을 다룬다. 데이터 링크(ex.MAC주소)와 물리적인 전송(ex.전기 신호 변환)을 담당한다.

    : 물리적인 영역의 표준화에 대한 결과. LAN, WAN, MAN과 같은 NW표준과 관련된 프로토콜을 정의하는 영역

    : 물리적 네트워크를 통한 실제 송수신 담당 - 데이터 링크 계층과 물리 계층

 

 - IP(인터넷 계층)

    : 경로 검색을 해주는 계층, 데이터 패킷의 라우팅과 전송을 담당한다.

    : IP 자체는 비연결지향적이며, 신뢰할 수 없는 프로토콜임

    : 데이터를 전송할 때마다 거처야 할 경로를 선택해 주지만 그 경로는 일정하지 않다.

    : 특히 데이터 전송 도중에 경로상의 문제가 발생하면 다른 경로를 선택해주는데, 이 과정에서 데이터가 손실되거나 오류가 발생하는 등의 문제가 발생할 수 있고, 이를 해결해 주지 않는다.

    : 즉, 오류 발생에 대한 대비가 되어 있지 않은 프로토콜이다.

    : 논리 주소인 IP 주소를 사용하여 데이터를 목적지 호스트까지 전달 - 전세계적으로 유일성 보장

 

 - TCP/UDP(전송) 계층

    : 데이터의 실제 송수신을 담당한다.

    : UDP는 TCP에 비해 상대적으로 간단하다.

    : TCP는 신뢰성 있는 데이터의 전송을 담당한다.

    : TCP가 데이터를 보낼 때 기반이 되는 프로토콜은 IP이다.

    : IP 계층은 문제 발생시 해결하지 않아서 신뢰성이 없다.

    : 이 문제를 해결해 주는 것이 TCP이다.

    : 데이터가 순서대로 전송됐는지 확인하며 대화를 주고 받는다.

    : 확인 절차를 거쳐서 신뢰성 없는 IP에 신뢰성을 부여하는 프로토콜이라고 생각하면 된다.

 

 - APPLICATION 계층

    : 사용자가 직접적으로 상호작용하는 계층으로, 대표적으로 HTTP, FTP, SMTP, DNS 등의 프로토콜이 있다. 이 계층에서는 이메일 전송, 파일 전송 등의 응용 프로그램 관련 서비스를 제공한다.

    : 이러한 서버와 클라이언트의 프로그램 성격에 따라 데이터 송수신에 대한 규칙이 정해지는데 이를 가리켜 APPLICATION 프로토콜이라고 한다.

    : 어플리케이션 계층, 표현 계층, 세션 층

 

 

3. UDP란 ?

 - UDP(User Datagram Protocol)는 TCP와 같이 네트워크 통신에 사용되는 프로토콜 중 하나이다. 그러나 TCP와는 달리, UDP는 연결이 설정되지 않는 '비연결형' 프로토콜이다. 이는 UDP가 데이터를 전송하기 전에 목적지와의 연결을 설정하지 않는다는 의미이다.

 - 주요 특징과 장단점

1. 비연결형 : UDP는 데이터를 전송하기 전에 사전 연결 설정 과정 없이 데이터를 전송한다. 이로 인해 데이터 전송이 빠르지만, 패킷 손실 가능성이 있다.

2. 신뢰성 없음 : UDP는 패킷의 도착을 확인하지 않으므로, 패킷이 손실되거나 순서가 바뀌어도 이를 복구하지 않는다.

3. 헤더 크기가 작음 : UDP의 헤더 크기는 작아서 오버헤드가 적다. 이로 인해 네트워크 자원을 더 효율적으로 사용할 수 있다.

4. 데이터그램 지향 : UDP는 패킷 단위로 데이터를 전송하며, 각 패킷은 독립적으로 처리된다.

=> UDP는 이러한 특징으로 인해 실시간 서비스(예: 음성 및 비디오 스트리밍, 온라인 게임)에서 주로 사용된다. 이런 서비스에서는 데이터의 신속한 전송이 중요하며, 일부 패킷의 손실이나 순서 변경이 허용된다.

 

 

** TCP와 UDP의 차이

- TCP는 연결 지향 프로토콜이다. 즉, 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정한다. 3wayhandshake

- TCP는 데이터의 순서롤 보장한다. 이는 패킷이 네트워크를 통해 전송되는 동안 순서가 바뀔 수 있기 때문에 중요하다.

- TCP는 오류 복구를 제공한다. 만약 패킷이 손실되면, 손실된 패킷을 다시 전송한다.

- TCP는 수신자의 데이터 처리 능력을 초과하지 않도록 데이터의 전송 속도를 조절하는 흐름 제어 기능을 제공한다.

- TCP는 네트워크 혼잡 상황을 감지하고, 혼잡이 발생하면 데이터의 전송 속도를 줄여 네트워크 혼잡을 완화하는 혼잡 제어 기능을 제공한다.

- 이러한 기능들로 인해 TCP는 신뢰성 있는 데이터 전송을 제공하지만, 처리 속도는 상대적으로 느리다. 웹, 이메일, 파일 전송 등에 주로 사용된다.

 

- UDP는 비연결형 프로토콜이다. 이는 데이터를 전송하기 전에 연결을 설정하지 않는다는 것을 의미한다.

- UDP는 데이터의 순서를 보장하지 않는다. 이는 패킷이 수신자에게 도착하는 순서가 송신 순서와 다를 수 있음을 의미한다.

- TCP와 달리 흐름 제어, 혼잡 제어 기능을 제공하지 않는다.

- UDP는 오류 복구를 제공하지 않는다. 패킷이 손실되면, 해당 패킷은 복구되지 않는다.

- 이러한 특성들로 인해 UDP는 빠른 데이터 전송을 제공하지만, 신뢰성은 TCP보다 낮다. 실시간 스트리밍, 온라인 게임 등에 주로 사용된다.

4. 소켓이란 ?

- 소켓은 네트워크 통신을 위한 인터페이스 또는 엔드포인트이다. 한 컴퓨터의 특정 프로세스에서 다른 컴퓨터의 특정 프로세스로 데이터를 전송하는 통로 역할을 한다.

- 소켓은 IP 주소와 포트 번호의 조합으로 구성된다. IP 주소는 컴퓨터를, 포트 번호는 해당 컴퓨터의 특정 프로세스를 식별한다. 이를 통해 네트워크 상에서 특정 프로세스를 정확히 지정하고 통신할 수 있다.

 - 소켓은 TCP 또는 UDP를 사용하여 데이터를 전송한다.

 - 소켓은 웹서버, 이메일 서버, FTP 서버 등의 네트워크 서비스를 제공하는 서버 애플리케이션에서 주로 사용된다. 이런 서버 애플리케이션들은 클라이언트의 요청을 기다리고 있으며, 요청이 들어오면 해당 요청을 처리하고 응답을 전송한다.

 - 또한 실시간 통신을 필요로 하는 채팅, 멀티플레이어 게임 등에서도 소켓이 사용된다.

 - 프로그래밍 언어에서는 소켓을 사용하여 네트워크 통신을 구현할 수 있다. 대부분의 프로그래밍 언어는 소켓 프로그래밍을 위한 라이브러리 또는 API(Aplication Programming Interface)를 제공한다.

 - 소켓 프로그래밍에서는 소켓을 생성, 연결, 데이터 전송, 연결 해제 등의 과정을 거친다. 이 과정을 통해 네트워크를 통한 데이터 전송이 이루어진다.

 

- 소켓은 프로세스가 드넓은 네트워크 세계로 데이터를 내보내거나 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.

 

 - 소켓은 컴퓨터 네트워크에서 통신을 가능하게 하는 인터페이스를 의미한다. 소켓은 특정 프로세스에서 다른 프로세스로 데이터를 전송하는 엔드포인트 역할을 한다. 소켓은 IP 주소와 포트 번호의 조합으로, 이를 통해 네트워크에서 특정 프로세스를 정확히 지정할 수 있다.

소켓을 통해 데이터를 보내고 받는 것은 통로를 통해 데이터가 이동하는 것과 같다. 이런 통신 방식은 TCP와 UDP 등의 프로토콜을 사용하여 구현된다.

 

 - 프로그램이 네트워크 상에서 데이터를 송신과 수신을 하기 위한 연결부이다. 일반적으로 TCP/IP 프로토콜을 이용하거나 WEBSOCKET을 이용한다.

 

 - 소켓은 프로토콜, IP 주소, 포트 넘버로 정의된다.

 - 프로토콜 : 원래 외교상의 언어로써 의례나 국가간의 약속을 의미하며, 통신에서는 어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약, 약속.

 - IP : 전 세계 컴퓨터에 부여된 고유의 식별 주소

 - 포트 : 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. 즉 같은 컴퓨터 내에서 프로그램을 식별하는 번호이다.

 

=> 즉 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스의 역할을 하는데 데이터를 주고 받을 수 있는 구조체로 소켓을 통해 데이터 통로가 만들어진다. 이러한 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분된다.

 

 

소켓은 네트워크 통신의 인터페이스로, 전송 계층(4번째 계층)에 위치한다. 

소켓은 응용 프로그램이 네트워크 통신을 수행할 수 있도록 하는 인터페이스 역할을 하므로, OSI 모델의 여러 계층에 걸쳐 동작한다.

 

이미지를 다운로드 하는 과정

1. 사용자가 웹 브라우저에서 이미지 다운로드를 요청한다.

2. 웹 브라우저는 사용자의 요청을 처리하고, 이미지가 위치한 서버의 IP 주소를 알아내기 위해 DNS(Domain Name System) 조회를 수행한다.

3. 조회가 완료되면 웹 브라우저는 소켓을 열고, 해당 소켓을 통해 서버와의 TCP 연결을 수립한다. 이 과정에서 3-way handshake가 일어난다.

4. TCP 연결이 수립되면, 웹 브라우저는 HTTP GET 요청을 생성하고, 이 요청을 TCP 연결을 통해 서버로 전송한다.

5. 서버는 요청받은 HTTP GET 요청을 처리하고, 요청된 이미지 데이터를 HTTP 응답 메시지에 포함시켜 웹 브라우저에게 전송한다.

6. 웹 브라우저는 서버로부터 받은 HTTP 응답을 처리하고, 응답 메시지에 포함된 이미지 데이터를 추출하여 사용자의 컴퓨터에 저장한다. 

==정리==

1. 브라우저에서 URL 입력하고 엔터를 누르면

2. DNS 서버에서 해당 URL의 IP를 조회한다.

3. IP에 해당하는 서버와 TCP 연결을 한다.

4. 이후 HTTP 요청/응답을 한다.

 

 

HTTP 통신과 WEBSOCKET  통신의 비교

- HTTP : 클라이언트의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식.

특징

1. 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신이다.

2. 서버로부터 응답을 받은 후에는 연결이 바로 종료된다.

3. 실시간 연결이 아니고, 필요한 경우에만 서버로 요청을 보내는 상황에 유용하다.

4. 요청을 보내 서버의 응답을 기다리는 어플리케이션의 개발에 주로 사용된다.

 

- WEBSOCKET : 서버와 클라이언트가 특정 포트를 통해 실시간으로 양방향 통신을 하는 방식

특징

1. 서버와 클라이언트가 계속 연결을 유지하는 양방향 통신이다.

2. 서버와 클라이언트가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용된다.

3. 실시간 동영상 스트리밍이나 온라인 게임 등과 같은 경우에 자주 사용된다.

 

SOCKET과 WEB SOCKET의 차이

동작 계층 : OSI 7계층 기준으로 소켓은 인터넷 프로토콜에 기반하므로 TCP, UDP가 위치한 4계층에 위치하며

웹 소켓은 TCP에 의존하지만 HTTP에 기반하므로 7계층에 위치한다.

데이터 형식 : TCP에 기반한 소켓 통신은 단순히 바이트 스트림을 통한 데이터 전송이므로 바이트로 이루어진 데이터를 다뤄야하지만, 웹소켓 통신은 어플리케이션 계층인 7계층에 기반하기 때문에 메시지 형식의 데이터를 다루게 된다.

 

소켓 통신에 기반하여 웹 소켓은 웹 어플리케이션에 맞게 발전한 형태로 소켓 통신을 한다.

 

 

 

  • TCP와 UDP의 차이점은?
  • TCP란 무엇인가?

* TCP, UDP 패킷 구조 차이점

TCP 패킷 구조 : 소스 포트, 목적지 포트, 시퀀스 번호, 확인 응답 번호, 데이터 오프셋,예약, 플래그, 윈도우 크기, 체크섬, 긴급 포인터, 옵션, 데이터 등 여러 부분으로 구성되어 있다. 이 중 시퀀스 번호와 확인 응답 번호는 패킷의 순서를 관리하고, 플래그는 연결 설정, 관리, 종료 등의 작업을 수행하는데 사용된다.

 

UDP 패킷 구조 : 소스 포트, 목적지 포트, 길이, 체크섬, 데이터 등으로 구성된다. UDP 패킷은 TCP 패킷에 비해 간단한 구조를 가지고 있다. 이는 UDP가 패킷의 순서나 신뢰성을 보장하지 않기 때문이다.

 

따라서, TCP와 UDP 패킷의 가장 큰 차이점은 TCP 패킷이 신뢰성 있는 데이터 전송을 보장하기 위한 다양한 정보를 포함하고 있으며, UDP 패킷은 최소한의 정보만을 가지고 있어 빠른 전송을 가능하게 하는 것이다.

 

 

'Network' 카테고리의 다른 글

OSI 7계층  (0) 2024.02.21
스위치(Switch)  (0) 2024.02.15
DNS(Domain Name System)  (0) 2024.02.07
HTTP(S), 소켓  (0) 2024.02.03
웹 소켓(WebSocket)  (0) 2024.01.23

BELATED ARTICLES

more