TCP/IP 통신 정리

Godssi·2024년 11월 12일

Communication

목록 보기
1/8

TCP/IP란?

인터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 통신규약(Protocol)의 모음이다. 인터넷 프로토콜 스위트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 수위트로 불린다.

TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP전송 조절 프로토콜인 TCP로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 어플리케이션 프로토콜이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다.

인터넷에 연결된 컴퓨터 간에 데이터 송수신 Protocol(규칙) 집합으로 모든 통신 기술의 기초이다. 위키 백과에서 인용된 말을 다시 되돌아보면 사실 TCP/IP는 하나의 프로토콜이 아니라 TCP와 IP를 합쳐서 부르는 말이다.

TCP란?

전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 힘께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 된다.

TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 Protocol이자 인터넷을 이루는 핵심 Protocol의 하나이다. TCP는 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용된다.

양쪽 단말기(Computer)가 통신 준비 되었는지, 데이터가 제대로 전송되었는지, 변질되지는 않았는지, 수신자가 얼마나 받았고 빠진 부분은 없는지 등을 점검한다. 해당 정보들은 TCP Header에 담겨 있으며 SYN, ACK, FIN, Source Port, Destination Port, Sequence Number, Window size, Checksum과 같은 신뢰성 보장과 흐름 제어, 혼잡 제어에 관여할 수 있는 요소들이 포함되어 있다. 그리고 IP 및 TCP Header를 제외한 TCP가 실을 수 있는 데이터의 크기를 세그먼트(Segment)라고 한다.

3-way Handshake (TCP 작동원리)

TCP는 송신자와 수신자가 데이터를 전송하기 전 먼저 ①서로 통신이 가능한지 의사를 묻고 ②한번에 얼마나 받을 수 있는지 등의 정보를 확인한다.
1. 송신자가 수신자에게 SYN를 날려 통신이 가능한지 확인한다. 이 때 Port가 열려 있어야 한다.
2. 수신자가 송신자로부터 SYN를 받고 SYN/ACK를 송신자에게 날려 통신할 준비가 되어있음을 알린다.
3. 송신자가 수싲나의 SYN/ACK를 받고 ACK를 날려 전송을 시작한다.

TCP Header

TCP/IP 통신에서 패킷은 데이터를 전송하는 기본 단위이며, 각각의 패킷에는 필요한 헤더 정보가 포함된다. 해당 정보는 TCP와 IP 계층에서 추가되며, 데이터의 전송 및 관리를 용이하게 한다.

TCP Header는 송신자와 수신자 간의 데이터 전송을 제어하고 신뢰성을 보장하기 위해 다양한 정보를 포함하고 있다.

  • Source Port : 송신자의 포트 번호
  • Destination Port : 수신자의 포트 번호
  • Sequence Number : 데이터 바이트의 순서
  • Acknowledgment Number : 이전에 수신한 데이터에 대한 확인 응답 번호(데이터의 수)
  • Data Offset : TCP Header의 길이
  • Flag Bit
    • URG : 긴급 포인터 필드 유효성
    • ACK : 확인 번호 필드 유효성
    • PSH : 푸시 기능
    • RST : 연결 초기화
    • SYN : 연결 요청
    • FIN : 연결 종효
  • Window Size : 수신자가 받을 수 있는 데이터 양
  • CheckSum : 오류 검출 필드
  • Urgent Poiter : 긴급 데이터

실제로 TCP/IP 통신에서 프로그래머가 일반적으로 TCP 헤더를 직접 생성할 필요가 없다. 소켓 프로그래밍 API는 이 과정을 자동으로 처리해준다. 프로그래머는 데이터를 소캣에 쓰거나 소캣으로부터 읽기만 하면 된다.

Socket

네트워크 통신을 수행하기 위한 Software Interface이다. 소캣을 통해 프로그램은 서로 다른 컴퓨터 간에 데이터를 송수신할 수 있다. Socket은 결국 네트워크 통신의 끝점으로 두 소캣 간의 연결을 통해 데이터를 주고받는다.

  • Stream Socket : TCP를 사용하는 소켓으로, 연결 지향적이고, 신뢰성 있는 데이터 전송 제공, 데이터를 Stream(연속적인 바이트) 형태로 송수신하며, 연결 설정 후에 데이터 통신 수행
  • Datagram Socket : UDP를 사용하는 소켓으로, 비연결 지향적이고, 신뢰성이 보장되지 않은 데이터 전송 제공, 데이터를 Datagram(독립적인 패킷) 형태로 송수신하며, 연결 설정 없이 데이터 통신 수행

Socket Library

서로 다른 컴퓨터 간에 데이터를 송수신할 수 있는 Socket 프로그래밍을 가능하게 하는 라이브러리

  • C/C++(Unix) : POSIX 소켓 API를 사용하여 표준 소켓 프로그래밍 수행
  • C/C++ (Windows) : Winsock 라이브러리를 사용하여 네트워크 소켓을 관리하고 통신
  • Python : 표준 라이브러리인 socket 모듈을 사용하여 간단하게 TCP/UDP 소켓 프로그래밍 가능

참고 자료

profile
세상을 도울 로봇 개발자

0개의 댓글