[CS]TCP/IP

김피자·2023년 2월 14일
0

CS

목록 보기
11/22

들어가기 전

패킷 통신이 등장하기 전, 컴퓨터 간 데이터 통신은 '회선 교환'방식을 통해 이루어졌다. 회선 교환 방식은 통신을 하고자하는 두 호스트가 데이터를 전송하기 전에 미리 데이터 이동 경로를 하나하나 설정해두는 방식인데 이때, 미리 설정해둔 경로는 두 호스트만을 위한 전용 경로가 되고, 이 경로를 통해 통신의 처음부터 끝까지 모든 데이터가 왔다갔다 하게된다.

하지만 회선 교환 방식을 사용하면 이미 설정된 이동 경로는 할당이 해제될 때까지 다른 호스트들이 사용할 수 없게 독점된 상태!
즉, 데이터를 전송하고 있지 않아도 연결을 끊지 않는 이상 다른 호스트들이 사용할 수 없다.

또, 단절에도 매우 취약해 두 호스트간 연결이 끊어지면 이동 경로를 다시 연결해야하고, 그 사이에 다른 호스트가 차지해버리면 해당 경로가 비게 될 때까지 기다려야한다!

늘 그렇듯 이는 갱장히~~비효율적이다
그래서 등장한 것이 패킷 통신!


패킷 통신

패킷 교환 방식은 기존의 방식처럼 이동 경로를 미리 정해두지 않는다.

대신 데이터를 패킷이라는 단위로 나누고, 다중 노드로 구성된 네트워크를 통해 전송한다.

전송될 데이터는 고유번호를 달고 있는 패킷으로 쪼개져 네트워크를 통해 전송되고, 최종 수신지에 도착하면 그 고유번호 순서대로 결합되어 원래 데이터로 완성된다!

각 패킷들은 전송 시 가장 효율적인 경로를 통해 최종 수신지까지 이동한다.
경로를 독점하는 이전 방식과 다르게 그때 그때 상황에 맞는 경로로 갈 수 있도록 해 효율성이 좋다.

출발지부터 도착지까지 가는 중간 중간마다 최적 이동 경로를 안내하는데

그럼 최적의 경로 안내는 대체 누가해주나요?

라우터

패킷을 수신한 중간 노드가 패킷의 최종 수신지를 확인하고, 수신지까지 가는 많은 경로 중 그 상황에 딱 최적이라고 판단되는 경로로 패킷을 이동시키는 것을 라우팅이라고 하고 이런 라우팅을 수행하는 중간 노드를 라우터라고한다!

데이터를 보내는 호스트에서는 해당 네트워크가 사용하는 프로토콜을 기반으로 데이터를 작은 단위로 분할하고, 분할한 데이터들 앞에 각각 패킷번호, 송신지&수신지 정보 등을 담은 패킷 헤더를 붙여 패킷이라는 형태로 변환해 데이터를 전송한다.

데이터들을 잘개 쪼개 패킷이라는 단위로 변환하는 과정을 '캡슐화'라고 한다!

  1. 패킷 교환 방식에서 패킷을 만들고 재결합할 때 사용되는 패킷 헤더에 기록되는 정보와 그 정보를 어떻게 처리할 것이지에 대해서는 프로토콜이 정한다.
  1. 패킷마다 독립적으로 전송되기 때문에 어디에서 어디로 가는지에 대한 정보를 모든 패킷이 가지고 있어야 하고, 패킷을 다시 결합하여 데이터를 만들 수 있도록 모든 패킷은 각자 고유 번호를 갖고 있어야 한다.

송신 호스트가 보낸 패킷들은 각각 독립적인 라우팅 과정을 거쳐 수신지에 도착하기 때문에 각 패킷들은 전송에 걸리는 시간도 다르고, 순서도 다르다.

즉, 패킷의 전송 순서가 보장되지 않는다!

그래서 수신지 호스트에서는 송신 호스트가 전송한 패킷이 모두 도착하면 프로토콜을 사용해 패킷 해더를 읽고 > 패킷을 순서에 따라 다시 정리해 > 재결합한다.

패킷 전송 방식을 사용하면,
중간 노드 각각에서 다른 노드로 이동할 때마다 최적의 경로를 찾아 이동하기 때문에 전송 효율이 굉장히 높다!

따라서 현재에는 거의 모든 통신이 패킷 전송 방식으로 이루어지고 있다.


TCP/IP

TCP 프로토콜

신뢰성 있고, 무결성을 보장하는 연결을 통해 데이터를 안전하게 전달해주는 전송 프로토콜

IP 프로토콜

패킷들을 가장 효율적인 방법으로 최종 목적지로 전송하기 위해 필요한 프로토콜


위에서 패킷 교환 방식에 대해 설명할 때,

해당 네트워크가 사용하는 프로토콜을 기반으로 데이터를 작은 단위로 분할하고, 분할한 데이터들 앞에 각각 패킷번호, 송신지&수신지 정보 등을 담은 패킷 헤더를 붙여 패킷이라는 형태로 변환해 데이터를 전송한다.

데이터들을 잘개 쪼개 패킷이라는 단위로 변환하는 과정을 '캡슐화'라고 한다!

라고 했는데, 여기서 말하는 프로토콜이 바로 TCP/IP !!!
조금 더 자세히 설명하면

패킷을 만들고 전송하고 재결합할 때 사용되는 헤더의 정보와 그 정보를 어떻게 처리할 것인지에 대해서는 프로토콜이 정하고, 프로토콜에 따라 데이터에 해더가 추가되어 패킷이라는 단위로 캡슐화된다.

이때, TCP/IP 프로토콜을 따르는 네트워크통신이면 송신 호스트에서 전송할 데이터를 TCP/IP 4계층의 구조에 따라 순차적으로 캡슐화를 하여 네트워크에 전송하게 된다. 그리고 데이터를 수신하는 호스트에서도 이 계층 구조에 따라 켑슐화된 패킷을 역순으로 처리(역캡슐화)한다.

TCP/IP의 4계층

1계층 : 네트워크 인터페이스 계층(Network Interface)
2계층 : 인터넷 계층(Internet)
3계층 : 전송 계층(Transport)
4계층 : 응용 계층(Application)

송신 호스트는 데이터를 보내기위해 4계층부터 1계층까지 순차적으로 데이터를 캡슐화하고, 수신 호스트는 캡슐화 된 데이터를 받아 1계층부터 4계층을 거치며 역캡슐화한다.

계층을 지날 때마다 헤더가 하나씩 붙어있는데 이 패킷은 해당 패킷을 수신지까지 효율적으로 전송하기 위한 정보들을 담고있다!

4계층인 응용 계층은 데이터의 내용에 따른 서비스를 처리하는 역할을 하고, 하위 3개의 계층은 데이터 전송을 책임지는 역할을 한다.

하위 3개의 계층 중 최하위 계층인 1계층 네트워크 인터페이스 계층은 LAN안에서 물리적으로 연결된 네트워크 기기 간 데이터 전송을 담당하기 때문에

LAN이 연결된 인터넷에서의 데이터 전송을 책임지는 것은 결국 2계층과 3계층이다.

송신 측

  1. 전송 계층이 전송하려는 메시지를 여러개의 패킷으로 나눠 인터넷 계층으로 보낸다.(세그먼트 전송)

  2. 인터넷 계층은 이 패킷(세그먼트)을 수신지 호스트까지 하나씩 전송한다.

  3. IP프로토콜을 사용해 세그먼트에 IP헤더(수신지 호스트의 IP주소가 담겨있음)를 부착하여 패킷을 전송한다.

  4. 중간 노드인 라우터가 IP주소를 기반으로 한 라우팅을 통해 수신지 호스트까지 전송한다.

수신 측

  1. 인터넷 계층에서 패킷 헤더의 IP를 읽고 자기에게 온 패킷이 맞으면 전송 계층으로 넘긴다.
  2. 전송 계층에서는 세그먼트 헤더 정보를 읽고 수신한 패킷들을 재결합하여 메시지를 만들고, 메시지를 보낼 애플리케이션을 확인하여 전송한다.

저ㅓㅓㅓ기 위에서 패킷은 각각의 전송 순서가 보장되지 않는다고 하였는데 그렇게 각각 따로국밥으로 받은 패킷들을 처리하는 것이 바로 전송 계층의 역할

TCP프로토콜이 모든 패킷들의 오류 여부를 확인하고 송신 호스트가 보낸 패킷을 순서대로 재결합할 수 있도록 전송 과정을 제어한다.
즉, 전송 계층은 패킷을 재결합한 메시지가 수신 호스트로 올바르게 전송될 수 있도록 보장하는 역할을한다.

정리하자면, 인터넷 계층은 IP주소로 수신지 호스트까지 패킷을 전송하는 역할만 하고, 모든 패킷이 재결합할 수 있도록 오류나 중복을 확인하는 것은 전송 계층이 한다.

인터넷 계층은 IP프로토콜을 사용하여 각 패킷의 전송을 책임지고
전송 계층은 TCP프로토콜을 사용하여 전체 메시지의 전달을 책임진다.

결론

전송 계층의 TCP프로토콜과 인터넷 계층의 IP프로토콜이 함께 패킷 교환 방식을 구현하여 인터넷에서 정확한 목적지까지 효율적인 데이터 전송을 가능하게 하기 때문에 TCP/IP인 것이다!!!!!


출처
https://sangbeomkim.tistory.com/119
https://velog.io/@haero_kim/%EB%AC%BC-%ED%9D%90%EB%A5%B4%EB%93%AF-%EC%9D%BD%EC%96%B4%EB%B3%B4%EB%8A%94-TCPIP

profile
제로부터시작하는코딩생활

0개의 댓글