TCP/IP

이의섭·2022년 1월 10일
0

네트워크

목록 보기
1/8
post-thumbnail

인터넷에서 두 컴퓨터는 어떻게 통신할까?

가까이 있는 컴퓨터끼리는 직접 선을 연결해서 USB로 파일을 넘기듯이 파일을 전송하고 받을 수 있지만 멀리 있는 컴퓨터들끼리의 통신은 어떻게 이뤄질까요?

우리는 과거 해킹송에서 IP라는 단어를 들어보았습니다. 바로 이 IP를 통해 멀리 있는 컴퓨터들과의 통신을 수행합니다. 정확히는 IP 주소를 통해서 이뤄지는것이죠.

IP

IPInternet Protocol의 앞 글자들만 따온것으로, 지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달합니다.
패킷의 정보는 간단하게 보면 이러한데 보내고자 하는 전송 데이터를 IP 주소와 기타 정보의 껍질로 쌓여 패킷이 되고, 이 패킷을 인터넷 상에다 보내는 것 입니다.

인터넷에는 수만은 노드(다른 서버)들이 있어서 매번 다른 노드들을 경유해가면서 최종 목적지 IP주소로 패킷을 전달하게 됩니다. 이렇게 목적지 IP주소를 통해 다른 컴퓨터와의 통신이 가능하게 됩니다.

IP 프로토콜의 한계

한계점은 크게 3가지가 있습니다.

1. 비연결성

  • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다
    🔼 존재하지 않는 IP주소이거나, 서버가 꺼진 상태여도 무조건적으로 패킷을 전송합니다.

2. 비신뢰성

  • 중간에 패킷이 사라지면?
    🔼 중간 노드(서버)가 꺼지면 패킷이 그대로 유실되어 버립니다.
  • 패킷이 순서대로 안오면?
    🔼 메시지의 크기가 크면 하나의 메시지를 여러개의 패킷으로 나눠서 보내게 되는데, 이 때 패킷들은 서로 다른 노드들을 경유해가면서 순서대로 도착하지 않을 수 있습니다.

3. 프로그램 구분

  • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
    🔼 우리의 컴퓨터에서는 음악 스트리밍 프로그램, 게임, 메신저 등등 여러개의 프로그램이 돌아가는데 각각의 프로그램의 요청에 대한 응답이 어떤 프로그램에 대한 응답인지 알 수 있는 정보가 없습니다. (게임 응답인지, 음악 응답인지...)

TCP/UDP

위와 같이 3가지의 큰 문제점들을 해결하기 위해 TCP/UDP 프로토콜이 등장하게 됩니다. 이 프로토콜들은 IP 프로토콜을 대체하는 것이 아니라 같이 쓰면서 한계점을 보완해주는 방식으로 사용됩니다.

TCP는 연결지향적이면서, 데이터 전달을 보증하고, 순서를 보장하는 등 벌써 IP프로토콜의 한계 1,2를 극복할 수 있어보입니다. 그럼 하나씩 어떤것인지 살펴보겠습니다.

연결지향적


그림과 같이 TCP는 통신을 하기 전에 두 컴퓨터끼리 서로의 존재를 확인하고 서로 통신을 하겠냐는 동의를 구합니다. 서로 요청과 수락을 하는 3번의 과정을 3 way handshake라고 부릅니다. 이 과정을 통해 비연결성을 해결할 수 있습니다.

데이터 전달을 보장


클라이언트가 어떤 요청을 보내게 되면 서버는 그 요청을 받았다는 응답을 내려주면서 그 응답을 받고 "잘 전달이 됐구나" 알 수 있습니다.

순서 보장


비신뢰성의 두번째 문제인 패킷이 순서대로 전달되지 않는 문제는 서버가 패킷들을 받고, 순서대로 왔는지 검증을 한 뒤 순서대로 오지 않은 자리서부터 다시 보내달라는 응답을 내려주게 됩니다. 그림에서는 패킷2부터 3까지 다시 보내게 되겠습니다.

그럼 과연 어떻게 순서와 전달을 보장하고, 프로그램을 구분하지?

이는 바로 IP패킷을 만들기 전에 출발지 PORT, 도착지 PORT, 전송제어, 순서, 검증정보 등등을 먼저 감싼 TCP세그먼트를 추가해줌으로써 가능해집니다.

그러면 목적지IP에 도착한 뒤 서버에서 데이터를 까보기 전에 미리 순서나 검증 정보를 통해 해당 패킷이 옳바르게 왔는지 확인이 가능해지는 것 입니다.

그렇다면 여기서 PORT는 뭘까요? 바로 프로그램의 고유한 번호라고 생각하시면 될 것 입니다. 이를 현실세계에서 비유를 하자면 아파트가 바로 IP주소가 되고, 동/호수가 바로 PORT번호라고 비유하십니다. 이렇게 TCP세그먼트 정보들을 사용해서 IP 프로토콜의 한계를 극복하는 과정을 살펴보았습니다.

UDP는 하얀 도화지

UDP는 IP 프로토콜과 거의 유사하기때문에 하얀 도화지라고 설명하셨습니다. 다른점은 프로그램을 구분하는 PORT번호와 받은 메시지가 정확한것인가를 확인하는 체크섬정보를 추가한것 뿐이라고 합니다. 때문에 TCP 방식에서 필요한 3 way handshake이나 데이터 전달 보증, 손상된 세그먼트 수신에 대한 재전송 요청처리 등을 하지 않기때문에 TCP 방식보다 속도면에서 우수하다고 합니다. (그리고 TCP 자체를 최적화해서 사용하기엔 이미 너무 많은곳에 적용되어있어서 TCP를 변경하기 보다 UDP를 손봐서 최적화하기 좋다고 합니다.)

profile
사용자 중심 생각하는 프론트엔드 개발자가 되고 싶은..

0개의 댓글