Network/Network

네트워크 통신 프로토콜 - TCP, UDP, IRC

728x90

🌐 TCP(Transmission Control Protocol)


🔏 Protocol 이란?

프로토콜은 해석하면 "규약"으로, 서로 다른 시스템에 있는 개체들이 성공적으로 데이터를 주고받을 수 있도록 하는 통신 규약을 말한다. 특정한 목적을 위해서는 각 목적에 따른 프로토콜을 반드시 지켜야하며, 컴퓨터끼리 서로 소통할 때는 같은 프로토콜을 사용해야만 한다.

 

네트워크 프로토콜은 총 7계층에 따라 그 종류를 나눌 수 있다. ( ⇒ OSI 7 layer)

osi 7 layer에 따른 프로토콜의 종류

그 중에서도 대표적인 프로토콜을 살펴보자면 아래와 같다.

  • TCP/IP (Transmission Control Protocol / Internet Protocol): 전송 제어 및 인터넷 프로토콜 → 인터넷에 연결하기 위해 반드시 지켜야하는 프로토콜
  • FTP (File Transfer Protocol): 파일 전송 프로토콜
  • Telenet: 원격 로그인 프로토콜
  • SMTP(Simple Mail Transfer Protocol): 이메일 프로토콜
  • HTTP(Hyper-Text Transfer Protocol): w3(www)에서 정보를 주고 받을 수 있도록 하는 프로토콜 → http:// 할 때의 그 http

🔏 TCP (Transmission Control Protocol) 이란?

TCP는 전송제어규약(프로토콜)으로, IP와 함께 인터넷 상에서 데이터를 메세지 형태로 보내기 위해 사용되는 프로토콜이다. IP와 함께 묶어서 사용하기 때문에 "TCP/IP"로 흔하게 묶어 말한다. 

 

🪚 TCP Header 구조

더보기

네트워크 패킷이란?

네트워크 상에서의 "패킷(packet)"이란, 네트워크로 묶인 개체들 사이에서 전달되는 데이터의 형식화된 블록을 말한다. 패킷은 제어 정보와 사용자 데이터로 구성되고, 이를 페이로드라고도 한다. 데이터를 단순한 바이트/비트 형태로 전달하기 보다는 패킷 형식으로 바꿔 보내면 장문 메시지를 보다 더 효과적이고 신뢰성있게 전달할 수 있다.

 

ex. IP 패킷

IP 패킷은 Header + Payload로 구성된다. 그리고 IPv4 패킷의 헤더는 특정한 순서에 따라 담는 내용의 정보가 달라진다.

TCP Header 구조

TCP/IP 패킷은 [IP Header] + [TCP Header] + [TCP Data]의 형태로 전달된다.

 

Source Port Address 필드 (16bit)

데이터를 생성한 애플리케이션에서 사용하는 포트번호를 나타내며, 그 값의 크기에 따라 아래와 같이 나눠진다.

  • Well-known ports (0~1,023): IANA에 의해 배정 및 제어되는 포트
  • Registered ports (1,024~49,151): IANA에 의해 배정 및 제어되지는 않지만, 중복을 피하기 위해 등록된 포트
  • Dynamic ports (49,151~65,535): iANA에 의해 제어 및 등록되지 않으며, 어느 프로세스에서든 사용가능한 임시 포트

 

Destination Port Address 필드 (16bit)

패킷을 전달할 목적지 애플리케이션이 사용하는 포트 번호를 나타내며, 대표적인 포트 넘버는 아래와 같다.

  • 21: FTP
  • 23: Telent
  • 25: SMTP
  • 80: HTTP
    • Alternate HTTP: 8008, 8080
  • 110: POP3
  • 194: IRC (Internet Relay Chat)
  • 443: Secure HTTP (HTTPS)
  • 1863: MSN Messenger

 

Sequence Number 필드 (32bit)

전송되는 데이터의 가상 회선으르 통해 전송되는 데이터의 모든 바이트에는 고유한 일련 번호가 부여되며, 네트워크가 불안해 패킷이 분식 또는 지연될 경우 segment가 순서에 맞지 않게 도착할 수 있기 때문에, sequence nubmer를 이용해 데이터를 올바른 순서로 재배열 할 수 있다.

 

Acknowledgement Number 필드 (32bit)

수신자(패킷을 받는 입장)가 예상하는 다음 시퀀스 넘버다. 앞의 바이트들을 정상적으로 모두 수신했음을 확인하는 응답의 의미를 가지고 있다.

 

Data Offset (4bit)

32bit WORD 단위로 나타낸 TCP 헤더의 크기 값이다. 헤더의 최소 크기는 5word (=20byte), 최대 크기는 15word (=60byte)다. 이는 실제 데이터 상에서의 TCP 세그먼트의 시작 위치의 오프셋을 의미한다.

 

Reserved (3bit)

예비 필드로, 0으로 채워져야한다.

 

Flags (9bit)

  • NS(1)
  • CWR(1)
  • ECE(1): ECN-Echo
    • SYN플래그가 1일 경우, TCP 상대가 ECN(Explicit Congestion Notification) 가능
    • SYN플래그가 0일 경우, IP 헤더셋에 Congestion Experienced 플래그가 설정된 패킷이 정상적인 전송 중 수신되었음을 의미
  • URG(1): Urgent Pointer 필드의 값이 유효함
  • ACK(1): Acknowledgement 필드의 값이 유효함 → 최초의 SYN 패킷 이후 전송되는 모든 패킷은 이 플래그가 설정되어 있어야만 한다.
  • PSH(1): push 기능; 수신 애플리케이션에 버퍼링된 데이터를 푸시할 것인지 결정
  • RST(1): connection reset
  • SYN(1): Synchronized Sequence Number → 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 함
  • FIN(1): 종료 플래그; 남은 송신측 데이터 없음

Window size (16)

해당 세그먼트를 보내는 개체가 보내려고 하는 window 크기를 말하며, (byte 단위) ACK 필드의 sequence number보다 큰 값이어야 한다.

 

Checksum (16)

헤더 및 데이터의 에러 확인을 위해 사용되는 checksum 필드다. 

 

Urgent Pointer (16)

URG 플래그가 설정되어 있는 경우, 이 필드에 적힌 값은 sequence number로부터의 offset을 말한다.

 

Options (32배수 / optional-필수X)


🤹 TCP의 작동 - 연결 생성 및 종료

  • SYN: Synchronize Sequence Nubmers
  • ACK: Acknowledgment

⇒ 성공적인 TCP 접속을 위해 반드시 필요하다.

👋 TCP의 3-way Handshaking: TCP 연결 초기화

TCP 3-way Handshake

TCP의 3-way Handshaking은 Client와 Server 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 확인하는 과정이다. 이 때 서로 상대편에 대한 초기 Sequence Number를 얻을 수 있도록 한다.

  1. Client→Server: SYN 패킷 전송; Client는 SYN을 보낸후, SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
  2. Server→Client: SYN+ACK 전송; Server가 SYN 요청을 받을 후, Client 쪽으로 요청을 수락한다는 의미의 ACK와 SYN flag가 설정된 패킷을 발송한다. 이 때 Server는 ACK를 받기를 기다리는 SYN_RECEIVED 상태가 된다.
  3. Client→Server: ACK 전송; 이후 클라이언트와 서버 간의 연결이 이뤄지고, 데이터를 주고받을 수 있게 된다. 이 때 Server는 ESTABLISHED 상태가 된다.

👋 TCP의 4-way Handshaking: 세션 종료

TCP의 4-way Handshake

TCP의 4-way Handshaking은 세션을 안전하게 종료하기 위해 수행되는 과정이다.

  1. Client→Server: FIN flag 전송; Client에서 연결을 종료하는 의미의 FIN 플래그를 보낸다.
  2. Server→Client: ACK 전송; Server에서 FIN 플래그를 받았다는 확인 메시지를 보낸 후 자신의 통신이 끝날 때까지 기다리는 TIME_WAIT 상태가 된다.
  3. Server→Client: FIN flag 전송; Server에서 통신이 끝났을 때 마찬가지로 Client로 FIN 플래그를 보낸다.
  4. Client→Server: ACK 전송; Client에서도 Server에서 보낸 FIN 플래그를 받았다는 의미의 메시지를 보낸다.

🌐 UDP(User Datagram Protocol)


🔏 UDP (User Datagram Protocol) 이란?

UDP는 데이터를 Datagram(데이터 그램) 단위로 처리하는 프로토콜이다. 

이 때 Datagram독립적인 관계를 지니는 패킷을 말한다. 데이터그램은 65535 byte로, 메세지의 내용이 그 크기를 초과할 경우 잘라서 전송한다.

 

TCP는 연결형 프로토콜인 반면, UDP는 독립적/비연결형 프로토콜이다. 다시 말해, UDP는 연결을 위해 할당되는 논리적 경로가 없고, 이에 따라 각 패킷은 서로 다른 경로로 독립적으로 처리된다.

 

  • connect 함수가 불필요하기 때문에, Client Socket과 Server Socket의 구분이 없다.
  • UDP 헤더의 Checksum 필드를 통해 최소한의 오류만 검출할 수 있어, 신뢰성은 낮다.
  • TCP 보다는 속도가 빠르기 때문에 신뢰성보다는 연속성이 중요한 서비스에서 주로 사용된다. (ex. 실시간 스트리밍 서비스)
  • 1:1 뿐만 아니라 1:N, N:N 통신이 가능하다.

🌐 IRC (Internet Relay Chat)


🔏 IRC (Internet Relay Chat) 란?

IRC는 실시간 채팅 프로토콜로, 그룹 대화를 포함해, 개인 메시지를 통한 1:1 소통, 파일 공유를 포함한 채팅 및 대화도 가능하다. 

 

  • TCP를 기반으로 한다.
    • RFC 1459번 참고) IRC 프로토콜은 text 기반의 컨퍼런싱의 사용을 위해 디자인되었다.
  • 클라이언트/서버 구조를 가진다.
    • 클라이언트는 서버 내부의 채널에서 활동할 수 있으며, 서버는 많은 채널들을 가질 수 있다.
    • 채널은 클라이언트에 의해 만들어 질 수 있다.

📜 참고

http://www.ktword.co.kr/test/view/view.php?m_temp1=1889 

 

TCP Header

초기 순서번호, ISN, Window Size , 윈도우 크기 , Windowsize

www.ktword.co.kr

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

 

[ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake

우선  TCP의 3-way Handshaking 에 대하여 알아보겠습니다. * TCP 3-way Handshake 란? TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다. TCP 3 Way Handshake..

mindnet.tistory.com

 

https://boanin.tistory.com/70

 

BOTNET 을 파헤쳐라. (2. IRC란 무엇인가?)

작성자: 미남닷컴 편집자: 엔시스 (sis@sis.pe.kr) 지금 포스팅 부터는 영어로도 쓰도록 하겠습니다. 보고 싶어하는 사람이 있네요 ^^: 부족한 영작실력, 틀렸다면 꼬집어주세요~ 조용히 -_-; IRC (Interne

boanin.tistory.com

 

SMALL