C언어 TCP/IP 소켓 통신

dumdumer·2025년 6월 26일
0
post-thumbnail

이번 학기 네트워크 프로그래밍에서는 유닉스, C언어, TCP/IP 환경에서 소켓 통신을 공부했다.
공부한 내용을 복기해보며 정리한 내용이다.

TCP/IP

TCP/IP 프로토콜

  • 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP를 기반으로 사용하는 인터넷 통신 프로토콜들을 의미한다.
  • 운영체제의 일부로 구현되며, 응용 프로그램은 운영체제가 제공하는 TCP/IP 프로토콜을 통해 통신을 수행한다.

계층 구조

각 계층에서의 역할

  • 네트워크 엑세스 계층
    • 물리적 네트워크를 통한 데이터 송수신
    • 이더넷 48bit 물리주소 사용
  • 인터넷 계층
    - 네트워크 엑세스 계층의 도움을 받아 목적지 호스트까지 데이터를 전송
    • IP주소 사용 (소프트웨어적으로 정의된 논리주소)
    • 라우팅(데이터를 목적지까지 전달하는 일련 작업, 라우팅 정보를 기초로 데이터 전달)
  • 전송 계층
    • 최종 통신 목적지(응용 프로그램)을 지정하고 데이터 손실,손상 등의 전송 오류 없이 데이터를 전송하는 역할
    • 포트 번호 사용
    • TCP(연결형, 신뢰할 수 있는 통신, 일대일 통신, 데이터 경계 구분 안 함(바이트 스트림))
    • UDP(비연결형, 신뢰할 수 없음, 일대일/일대다 통신, 데이터 경계 구분 함(데이터그램))

인터넷에서 데이터 전송 원리

패킷(Packet)

  • 크게 각 프로토콜에서 정의한 제어 정보(IP 주소, 포트번호, 오류 검출 코드 등) + 데이터로 나뉜다.
  • 제어 정보는 패킷의 앞에 붙는 패킷 헤더(header)와 뒤쪽에 붙는 트레일러(Trailer)로 구분된다.

패킷 송신/수신

  • 송신측은 TCP/IP 계층의 응용 계층부터 네트워크 엑세스 계층까지 내려가면서 각 계층의 프로토콜에 필요한 헤더나 트레일러를 덭붙인다.(캡슐화)
  • 수신측은 반대로 낮은 계층부터 상위 계층까지 올라가면서 각 계층의 헤더/트레일러를 처리하고 상위 계층으로 전달한다.(역캡슐화)

송신측:

수신측:


소켓(Socket)

  • 소켓은 인터넷 상에서 두 프로그램(클라이언트, 서버)이 데이터를 송수신하기 위한 통신 종단점이다.

데이터 타입 관점

  • 소켓은 데이터 타입 관점에서 파일 디스크립터나 핸들과 유사한 개념이라 할 수 있다.
  • 생성과 설정을 하고 난 후에 운영체제의 통신 관련 정보를 참조해 다양한 통신 기능을 편리하게 사용할 수 있는 데이터 타입이다.
// 리눅스 파일 입출력
int fd = open("myfile", ...); // 파일 생성
read(fd, ...); // 데이터 읽기
write(fd, ...); // 데이터 쓰기
// 윈도우 소켓
SOCKET sock = socket(...); // 소켓 생성
recv(sock, ...); // 데이터 읽기
send(sock, ..._); // 데이터 전송

네트워크 프로그래밍 인터페이스 관점

  • 소켓은 응용 계층과 네트워크 계층(전송 계층, 인터넷 계층, 네트워크 엑세스 계층) 사이에 위치하는 것으로 간주된다.
  • 응용 프로그램은 네트워크 프르토콜의 세부사항을 몰라도 소켓이 제공하는 기능(send(), recv() 등)들을 사용하여 간단하게 네트워크 프로토콜들을 거쳐 상대방과 통신할 수 있다.
profile
tik tok

0개의 댓글