Network - TCP/IP

수현·2023년 10월 1일
0

CS

목록 보기
4/11
post-thumbnail

Echo Server

메아리 서버, TCP 클라이언트와 TCP 서버 간의 통신이 잘 동작하는지 확인하기 위한 테스트 과정으로 클라이언트에서 보낸 메시지를 서버에서 받아 그대로 다시 돌려보낸다.


TCP/IP란

TCP를 기반으로 한 많은 애플리케이션 프로토콜들이 IP(Internet Protocol)위에서 동작하여 이를 TCP/IP로 묶어 부른다. IP 주소 체계를 따르며 IP routing을 통해 목적지에 도달하게 한다.

전송할 데이터는 위와 같이 TCP로 감싸지고, 다시 IP 패킷으로 감싸진 후 전송하게 된다.

TCP 개념과 특징

TCP(Transmission Control Protocol)는 트랜스포트 계층의 전송 제어 프로토콜이다. 연결 지향 프로토콜로 패킷을 전송하기 위해 논리적 경로를 배정하며, 이 경로를 통해 확실한 출발지와 종착지 사이에서 데이터가 전송된다. TCP의 특징은 아래와 같다.

  1. 데이터 전달 보증
    : 클라이언트에서 데이터를 전송하고, 이를 서버에서 잘 받았으면 잘 받았다고 응답을 보냄

  2. 순서 보장
    : 클라이언트가 패킷 1, 2, 3을 보낸다. 예를 들어 1, 3, 2 순서로 도착했을 경우 3번을 처리하지 않고 2번 부터 다시 보내라고 응답한다.

TCP는 신뢰성이 보장되는 대신 UDP보다 속도가 느리기 때문에 연속성보다는 신뢰성있는 데이터 전송이 중요할 때 사용된다. 이와 비교하여 UDP는 비연결형이고 한 종단 시스템에서 다른 곳으로 데이터를 독립적인 패킷으로 만들어 보내는데 전송에 대한 보장은 하지 않는다.

IP의 역할

  • 지정한 IP 주소에 데이터 전달

  • Packet이라는 통신 단위로 데이터 전달
    → IP packet 정보 : 출발지 IP, 목적지 IP, 전송할 데이터 등

  • IP의 비연결성, 비신뢰성, 프로그램 구분 등의 문제를 TCP와 함께 사용함으로써 해결할 수 있다.


TCP 동작

TCP는 양쪽 Endpoint가 통신할 준비가 되었는지, 데이터가 제대로 전송되었는지, 가는 도중 변질되지 않았는지, 수신자가 얼마나 받았는지 등을 점검한다. 이러한 정보들은 TCP Header에 담겨있으며 흐름 제어, 혼잡 제어에 관여하는 요소들도 포함되어 있다.

TCP는 Port를 이용하여 Endpoint를 연결하며 Port는 입구의 위치를 알려주는 역할을 한다.

Segment는 TCP가 실을 수 있는 데이터의 크기이다.

3-way handshake

데이터를 전송하기 전, 정확한 전송을 위해 서버와 클라이언트 간의 세션을 수립하는 과정이다. 물리적 연결은 아니며 논리적인 가상 연결이다.

*SYN(접속 요청) : Synchronize Sequence Number / ACK(요청 수락) : Acknowledgement

  1. 클라이언트가 서버에게 ‘SYN’을 보내 통신이 가능한지 확인한다.

  2. 서버가 클라이언트로부터 ‘SYN’을 받고 ‘SYN/ACK’를 보내 통신할 준비가 되었음을 알린다.

  3. 클라이언트가 서버의 ‘SYN/ACK’를 받고 ‘ACK’를 보내 전송이 시작함을 알린다. 'ACK'와 함께 데이터를 전송할 수 있다.

4-way handshake

서버와 클라이언트 간의 세션을 종료하는 과정이다.

  1. 클라이언트가 종료를 위해 FIN(finish)을 전송한다.
  2. 서버는 FIN을 받고 확인메세지인 ACK를 클라이언트에게 보낸다.
  3. Close준비가 다 된 후 서버는 클라이언트에게 FIN 플래그를 전송한다.
  4. 클라이언는 해지 준비가 되었다는 정상 응답인 ACK를 서버에게 보낸다.

흐름 제어

송신자와 수신자는 한번에 데이터를 얼마나 보낼 수 있는지와 받을 수 있는지를 수시로 확인하여 한번에 받고 보낼 수 있는 데이터의 양인 ‘Window size’를 상황에 따라 조절한다. 수신자는 지금까지 받은 데이터의 양을 확인하여 ‘Acknowledgement Number’를 송신자에게 보낸다.

혼잡 제어 - Slow Start

연결 초기에 송신자와 수신자가 데이터를 넉넉하게 주고받을 수 있더라도 중간 경로인 네트워크가 혼잡하면 제대로 보낼 수 없다. 따라서 송신자는 연결 초기에 데이터 송출량을 낮게 잡고 보내면서 수신자의 수신을 확인하며 데이터의 송출량을 조금씩 늘린다. 이렇게 하면 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있는데 이것이 slow start이다.


참고 자료

https://www.inflearn.com/course/lecture?courseSlug=http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC&unitId=61354
https://aws-hyoh.tistory.com/entry/TCPIP-쉽게-이해하기
https://mangkyu.tistory.com/15
https://jeongkyun-it.tistory.com/180

profile
실패와 성장을 기록합니다 🎞️

0개의 댓글