4월 14, 2022

TIL) 인터넷 프로토콜 4 계층

 

정보가 전송될때에는 위에서 아래로, 애플리케이션 -> ~ -> 네트워크 인터페이스의 방향으로 전송됩니다.

애플리케이션 계층에서 정보를 만들어 전달하고, 전송 계층에서 정보의 통신 노드를 연결하고, 인터넷 계층에서 통신 노드간 패킷을 전송 및 라우팅 합니다. 네트워크 인터페이스 계층에서는 이를 실제로 전기 신호로 변환하여 전달합니다.

  • IP
클라이언트와 서버에 IP 주소가 부여됩니다.
IP는 지정한 주소에 데이터를 전달합니다. 이때의 통신 단위는 패킷(Packet)입니다.
IP패킷에는 출발지, 목적지, 전송데이터의 정보가 담깁니다.
    
IP **프로토콜은 패킷을 받을 대상이 없어도 전달된다는 비연결성, 패킷의 순서를 보장할 수 없고 중간에 패킷이 사라지는 경우를 대비할 수 없다는 비신뢰성의 두가지 단점이 있습니다.

또한 같은 IP를 사용하는 서버에서 여러 애플리케이션들과 통신하고 있다면, 이를 구분해야 하는 문제가 생깁니다.


이러한 문제를 해결하기 위해서 TCP 프로토콜을 사용합니다.

위의 애플리케이션 계층에서 데이터가 전달되면, 이를 포함한 tcp 정보를 생성한 이후, 이들을 담은 IP패킷을 만들어 LAN등의 네트워크 인터페이스를 통해서 정보를 전송합니다.

TCP 프로토콜은 IP의 단점을 보완하는 IP위에서 동작하는 프로토콜입니다.
  • 연결 지향적이며 (TCP 3 Way-handshake)
  • 데이터 전달을 보증하며(데이터가 중간에 누락된 경우 알 수 있습니다)
  • 흐름을 제어하고
  • 혼잡을 제어합니다

IP가 패킷을 이용한 통신의 방식이라면, TCP/UDP는 전송을 제어하는 "프로토콜"입니다.

IP가 목적지를 찾아가는 것, 그 자체에 중점을 둔다면, 

TCP정보에는 출발지와 목적지의 Port 정보, 전송 제어, 순서, 검증에 대한 정보들이 있습니다.

잠깐, PORT가 뭘까요? 목적지 서버(IP)의 다양한 프로세스(애플리케이션)을 구분하기 위한 번호입니다.

위의 3 Way-handshake는 TCP에서 연결을 확인하는 방식입니다.
1. Synnchronize : 클라이언트에서 서버로 SYN(접속요청) 메시지를 보냅니다
2. Acknowledge: 서버에서 SYN에 대한 응답으로 ACK을 보냅니다. 이때 서버에서도 SYN을 보내야 하기에 이를 ACK과 동봉합니다
3. 클라이언트도 서버의 SYN에 대한 답장으로 ACK을 보냅니다.

이때 3번의 ACK과 함께 데이터도 전송하곤 합니다.

3 way-handshake는 실제적인 연결을 보장하는 것이 아닌, "개념적인" 연결입니다. 서로 syn, syn+ack, ack 의 과정이 이뤄졌기에  연결이 됐다는 논리적 보장이 있을 뿐입니다. 또한, handshake과정에서 거치는 수많은 노드들에 대해서도 알 방법이 없습니다.

흐름 제어의 경우. TCP 헤더의 Window size를 이용해 주고/받을 수 있는 데이터의 양을 정합니다. 이는 수신자 측에서 자신의 상황을 보아가며 수시로 변경합니다.

혼잡 제어는 무엇일까요? 데이터가 지나가는 네트워크 망의 혼잡도를 제어하기 위한 방식입니다. 데이터 송신자는 초기 데이터 송신량을 낮게 잡은 이후, 수신 여부를 확인하며 이를 천천히 늘려나갑니다. 이를 통해 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있습니다. 이를 slow start 라고 합니다. 혼잡 제어에는 이 외에도 다양한 방식이 있다고 합니다.

어느 순간 congestion point를 만나면, window 크기를 1로 줄인 이후 slow start를 다시 적용하는 것을 볼 수 있습니다



TCP와 같은 전송계층에는 UDP도 있습니다. 

전송제어 , 순서, 검증에 대한 정보가 담긴 TCP와 다르게, UDP에는 담겨있는 정보와 기능이 거의 없습니다.
다만 단순하고 빠릅니다. TCP와 다르게 프로토콜에 손을 댈 수도 있습니다.

IP와 거의 같다고도 볼 수 있지만, Port 정보와 체크섬(메시지가 제대로 왔는지 검증해주는 데이터) 가 담깁니다.


** 프로토콜 : 컴퓨터 사이(내부 포함)의 데이터 교환 방식을 정의하는 규칙 체계. 기기간 통신은 교환되는 데이터에 대한 상호 합의를 요하는데, 이런 형식을 정의하는 규칙의 집합이 프로토콜.

해당 글을 참조하였습니다 : https://aws-hyoh.tistory.com/entry/TCPIP-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0