[Web] 웹을 위한 인터넷 네트워크

BaekSeungYun·2022년 6월 12일
0

김영한 님의 inflearn 강의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 공부한 내용을 정리한 글입니다.

IP(Internet Protocol)

특징

  • 인터넷에 연결된 네트워크에서, 정보를 송신하고 수신하기 위해 정해진 통신 규약입니다.
  • 패킷(Packet) 단위로 정보가 이루어지고 송수신 됩니다.
  • 통신을 하기 위한 노드들, 클라이언트, 서버들이 고유의 IP를 가지고 있으며 IP를 이용해 패킷이 목적지를 찾게 됩니다.
  • IP 패킷에는 출발지 IP Address와 목적지 IP Address, 그리고 전송하고자 하는 메시지가 포함됩니다.

IP의 한계

  • 비연결성 : 패킷을 받을 대상이 없거나 서비스할 수 없는 상황에서도 패킷을 전송할 수 있습니다. 패킷을 받는 대상이 수신 가능한 상태인지 알 방법이 없습니다.

  • 비신뢰성 : 패킷을 전송하지만 네트워크 상에서 패킷이 유실될 수도 있고, 라우팅 상황에 따라 나누어 보낸 패킷이 순서대로 도달하지 않을 수도 있습니다. 이 경우 패킷이 잘 도달하였는지, 유실되었는지 알 방법이 없습니다.

  • 프로그램 구분 : 패킷이 순서대로 잘 도착했다고 하더라도, 서버에서 여러 애플리케이션이 구동되고 있는 경우, 어떤 패킷이 어떤 애플리케이션을 위한 것인지 확인할 수 있는 방법이 없습니다.


PORT

  • IP의 문제점 중 프로그램 구분이 안된다 는 문제를 해결해 줍니다.
  • 같은 서버에서 여러 애플리케이션이 동작하는 경우 각 애플리케이션마다 서로 다른 포트를 Listening 하여 각각 자기에게 온 패킷을 찾아갈 수 있도록 합니다.
  • TCP와 UDP헤더에는 Source Port(출발지 포트 번호)Destination Port(도착지 포트 번호)를 갖고 있습니다.
  • 포트 번호는 0번부터 65535번까지 사용할 수 있지만, 0번부터 1023번 포트는 Well-Known Port로 사용되는 경우가 많은 포트 번호이므로 사용하는 것을 지양합니다.

TCP

IP만 사용할 때 발생하는 문제들을 해결해 줄 수 있습니다.

TCP Header

TCP 패킷의 헤더에는 다음 정보들이 포함됩니다.

  • Source Port : 송신할 때 사용한 포트 번호입니다. 16bits를 할당받습니다.

  • Destination Port : 수신하는 포트 번호입니다. 16bits를 할당받습니다.

  • Sequence Number : 전송하는 데이터의 순서를 지정하며 32bits를 할당받습니다. 보낼 데이터 1byte당 1씩 증가시킵니다.

  • Acknowledgement Number : 수신자가 예상하는 다음 시퀀스 번호를 의미하며 32bits를 할당받습니다. 다음에 받고자 하는 데이터의 시작점을 의미한다고 볼 수 있죠.

  • Data offset : TCP 헤더 크기를 갖는 4bits 공간입니다. 뒤의 Options에 따라 TCP 헤더의 크기가 달라질 수 있는데, 어디까지가 헤더인지 알아야 헤더와 메시지를 구분할 수 있습니다. 그럴 때 Data Offset을 참조하면 되겠죠.

  • Reserved : 3bits 할당된 공간으로 미래에 설정할 수 있도록 예약해둔 비트입니다. 기본적으로 0으로 설정해야 합니다.

  • Bit Flags : 그 뒤로는 1비트씩 9개의 Bit Flags들이 따릅니다.

    • URG : Urgent 필드에 값이 채워져 있음을 알리는 Flag 입니다.

    • ACK : Acknowledgement 필드에 값이 있음을 알립니다. 0으로 설정되는 경우에는 값이 무시되어버립니다.

    • PSH : 이 데이터를 빠르게 애플리케이션에게 전달해 달라는 Flag입니다. 1이라면 이후 더 연결된 세그먼트가 없음을 의미하기도 합니다.

    • RST : 연결 상태인 연결을 강제로 reset 해달라는 요청을 보낼 때 사용합니다.

    • SYN : Sequence Number의 동기화를 위한 요청이라는 것을 의미합니다.

    • FIN : 연결을 종료하는 요청을 의미합니다.

      그리고 이후 Reserved 필드를 이용하여 3개의 Bit Flags 들인 NS, CWR, ECE가 추가되었습니다. 위 3개의 필드들은 네트워크의 명시적 혼잡통보를 위해 사용됩니다.

  • Window Size : 한번에 전송 가능한 최대 데이터의 양을 의미하며 16bits를 할당합니다.
  • Checksum : 데이터 송신 중 오류를 검출하기 위한 필드로 16bits할당됩니다.
  • Urgent Pointer : 긴급하게 처리해야 하는 데이터를 가리키고 있는 포인터로16bits 할당됩니다.
  • Options : TCP의 기능을 확장할 때 쓰이며, 길이는 가변적입니다.

3 Way Handshake

TCP로 통신하는 경우, 메시지가 송수신되기 전 다음 과정을 거칩니다.

  1. SYN : 상대에게 통신의사를 밝히고 통신을 요청하는 메시지를 송신합니다.
  2. ACK+SYN : 상대방 측에서 메시지에 대해 통신 가능하다는 응답을 보내고, 또 통신 의사를 밝히고 통신을 요청하는 메시지를 함께 보냅니다.
  3. ACK : 2에서 보낸 SYN에 대한 응답을 보냅니다.

실제로 송신 노드와 수신 노드가 물리적으로 연결되어 있는 것은 아니지만, 위 과정을 통해 개념적으로 연결성을 보장받을 수 있습니다.

Flow Control

  • 보내는 측이 받는 쪽 보다 데이터 전송 속도가 빠르다면, 빨리빨리 보내도 수신측에서 데이터를 모두 받을 수 없습니다.
  • 이를 위해 수신 측에 맞추어 데이터 전송 속도를 조절해야하고, 이를 Flow Control이라고 합니다.

Stop and Wait
매번 전송한 데이터에 대해 ACK를 받아야 다음 데이터를 전송할 수 있는 방식을 말합니다.

Sliding Window
송신 측에서 ACK 없이 동적으로 흐름제어 할 수 있도록 하는 기법입니다.


UDP

UDP는 연결지향형TCP와 다르게, 비연결지향형 프로토콜입니다. 별도로 Three Way Handshaking 같은 연결 절차를 거치지 않고 패킷을 전송할 수 있습니다. IPPORT 가 추가된 정도로 생각해도 됩니다.

UDP Header


TCP Header에 비해 아주 단순한 구조를 가지고 있습니다.

  • Source Port, Destination Port : TCP와 동일합니다 각각 16bits의 크기를 갖습니다.
  • Length : 헤더와 데이터를 합한 전체 패킷의 길이를 담습니다. 16 bits 크기를 갖습니다.
  • Checksum : TCP와 동일하며 16bits의 크기를 갖습니다.
profile
우테캠 6기

0개의 댓글