본문 바로가기
Server

[네린이 공부일기] TCP/IP 통신모델, TCP Header, IP Header, TCP와 UDP 차이

by ojava 2022. 4. 17.
반응형

요즘 드라마 노잼시기라 네린이 공부일기 열심히 쓰는 중
드디어 네트워크하면 생각나는 TCP/IP에 대해 정리할 시간이 왔다.

 

TCP/IP 모델

1960년대 말, 미 국방성 알파넷(ARPANET) 용으로 최초 개발된 것이 기원인 TCP/IP
인터넷 아키텍쳐 위원회인 IAB (Internet Architecture Board에서 TCP/IP 모델을 4 계층으로 구성하였다.

  1. Application Layer
    : Application과 Network에 연결되는 Process로 구성
    : HTTP, FTP, SMTP, DNS, Telnet, SNMP 등

  2. Transport Layer
    : End-toEnd Data 전송 기능
    : TCP, UDP
  3. Internet Layer
    : 경로 설정, Packet 전송
    : IP

  4. Network Access Layer
    : 물리적인 전송 절차와 신호 전송

 

OSI Reference Model과 TCP/IP 비교

앞에서 정리한 OSI 7 참조 모델은 1983년에 만들어졌으나 TCP/IP 모델은 훨씬 더 고인물로 1960년대 말에 만들어졌다.

OSI가 7계층으로 좀 더 세분화되어 있지만, TCP/IP의 4 계층에서 이 모든 기능이 구현되어 있다.
각 계층이 대응하는 모델을 아래와 같이 표로 만들어 비교할 수 있다.

TCP/IP Model (구현 모델) OSI Reference Model (참조 모델)
Application Application
Presentation
Session
Transport Transport
Internet Network
Nework
Access
Data Link
 

OSI의 경우 참조 모델이라고 하고, TCP/IP의 경우 구현 모델이라고 부른다. 또한 우리가 인터넷이라고 부르는 망은 TCP/IP망이라고도 한다. TCP/IP 모델을 기반으로 구현되었기 때문이다.

실제 구현사항을 비교해보면 웹 브라우저는 TCP/IP의 Application 단의 내용을 구현한 것이고, Windows나 Linux와 같은 운영체제 (OS)는 Transport와 Internet 계층을 구현한 내용으로 해당 계층의 기능을 지원한다.
마지막으로 랜카드나 UTP 같은 랜케이블을 포함한 Ethernet은 Network Access 계층을 구현한 것으로 해당 기능을 지원한다.

 

TCP/IP Protocol Stack

계층 Protocol
Application FTP HTTP
(HTTPS)
SSH Telnet SMTP DNS TFTP SNMP
Transport TCP UDP
Internet ICMP (Internet Control Message Protocol,인터넷 제어 메시지 프로토콜)
인터넷 프로토콜의 비신뢰적인 특성을 보완하기 위한 프로토콜로 IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주는 기능을 제공
IP ARP (Address Resolution Protocol,
주소 결정 프로토콜)
네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(bind)시키기 위해 사용되는 프로토콜
IGMP (Internet Group Management Protocol, 인터넷 그룹 관리 프로토콜)
서브넷 간에 멀티 캐스트 패킷의 목적지를 관리하기 위한 프로토콜
RARP(Reverse Address Resolution Protocol, 역순 주소 결정 프로토콜)
IP호스트가 자신의 물리 네트워크 주소(MAC)는 알지만 IP주소를 모르는 경우, 서버로부터 IP주소를 요청하기 위해 사용한다.
Network
Access
Network Interface

 

계층별 프로토콜을 추가적으로 설명하자면 1 계층인 Application 영역의 프로토콜이 가장 다양한데, 사용 목적별로 다시 구분하면 아래와 같다.

1) File Transfer
- FTP (File Transfer Protocol, 파일 전송 프로토콜)
- TFTP (Trivial File Transfer Protocol, 간단한 파일 전송 프로토콜) FTP와 마찬가지로 파일을 전송하기 위한 프로토콜이지만, FTP보다 더 단순한 방식으로 파일을 전송한다.

FTP와의 TFTP의 차이는 FTP는 TCP를 사용하여 대량의 파일 ​송/수신을 수행하는 프로토콜.
TFTP는 UDP를 사용하며, 라우터나 스위치 같은 
네트워크 장비에 ISO 이미지를 업/다운로드 할 때 사용한다.

2) E-mail
- SMTP (Simple Mail Transfer Protocol) 전자 메일 전송 프로토콜
** 참고로 반대로 메일 수신 시에는 메일 설정 등에서 본 적이 있는 POP3 (Post Office Protocol 3)를 사용한다.

3) Remote login
- Telnet : 원격지에 있는 장비로 표준 터미널 에뮬레이션 기능 제공

4) Network management
- SNMP (Simple Network Management Protocol, 간이 망 관리 프로토콜) 은 IP 네트워크상의 장치로부터 정보를 수집 및 관리하며, 또한 정보를 수정하여 장치의 동작을 변경하는 데에 사용되는 인터넷 표준 프로토콜이다.
: 네트워크 장애 관리, 장비 설정, 통계, 성능 및 보안 관리 용도로 사용한다.
: 주로 NMS (Network Management System)에서 많이 사용함

5) Name management
- DNS (Domain Name System) : 도메인 주소를 IP 주소로 변환

* RIP (Routing Information Protocol, 라우팅 정보 프로토콜)는 UDP/IP 상에서 동작하는 라우팅 프로토콜이다.

 

 

2 계층인 Trasport에 연계된 내역을 1 계층 Protocol과 연계하면 아래와 같다

계층 Protocol
Application
Layer
FTP SSH Telnet HTTP  HTTPS DNS TFTP  SNMP 
Port 번호 20, 21 22 23 80 443 53 69 161
Transport
Layer
TCP UDP
Network
Layer
IPv6 IPv4

* DNS의 경우 때에 따라 TCP에 속하기도 하고 UDP에 속하기도 한다.
* Port 번호로 사용되는 부분은 IANA에서 정한 Well-known Port로 정해져 있다.

 

반응형

 

 

UDP (User Datagram Protocol)

  • Connetionless Protocol
    : 비 연결성 서비스
    : 데이터 전송을 위해 사전에 필요한 프로세스가 없다.
  • Best-Effort Delivery
    : 데이터 전달에 대한 보장이 안됨, 신뢰성 보장 못함

연결에 필요한 준비과정이 적고 간단하게 구현되는 전송 서비스 구현 시 사용됨
브로드캐스트, 멀티캐스트를 사용하는 애플리케이션에 사용되고 빠른 응답이 필요한 서비스 구현에 사용됨

 

TCP (Transmission Control Protocol)

TCP는 상위 Application으로부터 받은 데이터를 IP로 전달하기도 하고, IP로 받은 정보를 상위 Application으로 전송하는 역할도 담당하고 있다.

  • 연결 지향 프로토콜 : 3 Way Handshake (논리 경로 형성)
  • 신뢰성 있는 전송
    : 이를 위해 Sequence Number와 Acknowledgement Number를 사용함
  • 흐름 제어 : 송수신지 간에 전송되는 데이터 전송량을 제어
  • Packet Recovery
    : 데이터 전송 과정에서 패킷 손실 시 복구하는 기능도 가지고 있음

 

TCP Header에는 많은 정보를 담고 있는데 아래와 같이 표시할 수 있다.

TCP Header 구성도

기본적으로 구성되는 필드를 합치면 20 byte이고 옵션까지 포함하는 경우 최대 60 byte까지 구성될 수 있다.

송수신 포트 각각 16 bits, Sequence Number, Acknowledment Number 각각 32 bits
4 bit의 Header Length 필드, 6 bit의 Reserved 필드, 6개의 컨트롤 필드, 체크섬, 긴급 포인트 필드

 

Port Address

전송계층은 TCP / UDP로 나눠지는데, Application 계층과의 통신을 위해 포트를 사용하게 된다.
하나의 프로그램에서 동시에 여러 프로그램을 호출할 수 있기 때문에 각각 다른 포트를 사용하며, Port 필드는 송신지와 수신지로 나누어지며 총 2 byte 크기를 가진다. (각각 1~65535까지의 값을 가질 수 있음)

 

TCP 연결 지향과 신뢰성 보장

TCP는 가상회선을 설정해서 데이터를 전송하고 전송이 완료된 후에는 회선을 해지하는 과정을 거치는데, 이 과정에서 연결 지향 관리와 신뢰성 있는 데이터 전송을 확립하게 된다.
(* 가상회선 : 물리적 연결처럼 작동하는 논리적 연결 방식)

  1. 데이터 전송 전 연결 설정
    : 3 Way Handshaking (데이터 전송 전 통신 개시 과정)
    : 클라이언트와 서버 간 총 3번의 SYNC, ACK 과정을 통해 연결 진행 
    : 이를 통해 가상 회선 (virtual circuit)이 형성됨 
  2. 신뢰성 있는 데이터 전송 과정
  3. 데이터 전송 과정 완료 후 연결 종료
    : 4 Way handshaking
    : 클라이언트와 서버 간 총 4번의 FIN, ACK 과정을 통해 연결 종료
    : 가상 회선 해지로 데이터 전송이 불가해짐

 

이 과정에서 Sequence Number와 Acknowledgement Number, 컨트롤 필드(urg, ack, psh, rst, syn, fin)를 사용한다.

  • Sequence Number
    : 신뢰성 있는 데이터 전송을 위해 모든 byte 마다 일련번호로 교환하고자 하는 초기 순차 번호를 갖게 됨
  • Acknowledgement Number (응답 확인 번호)
    : 수신 Segment의 확인 응답을 위한 필드, Segment에 실린 마지막 바이트에 순차 번호 1을 더하거나 데이터의 길이로 구하게 됨
  • Flag Control Field
    : 흐름 제어, 종료, 전송 모드 등으로 사용

 

3 Way Handshaking과 4 Way Handshaking에 대해서도 그리고 싶었으나 구글링하면 자세히 나온다 ^_ㅠ
나의 경우는 연결을 맺기 위한 게 3 Way Handshaking고 연결 해지를 위한 방식이 4 Way Handshaking 라는 정도만 알아도 충분할 것으로 보고 넘어간다.

 

그 외 TCP Header에 담겨오는 정보들에 대한 추가 설명

Window size : 응답 확인 전 전송 가능한 데이터 양. 65535 byte 값을 가질 수 있다.
Check sum : 각 TCP Segment의 변형 유무 확인을 통해 오류 검출
Urgent Pointer (긴급 포인터 필드) : 긴급 데이터 포함 여부 확인

 

 

TCP와 UDP 비교

TCP UDP
연결 지향 (Connection oriented)  비연결 지향 (Connectionless)
데이터 순서 보장 (Sequencing) 지원 Sequencing 지원하지 않음
에러 제어 (Error control) 가능 Error control 불가능
흐름 제어 (Flow control) 가능 Flow control 불가능
UNICAST 전송 UNICAST, MULTICASE, BROADCASE 전송
Full duplex Half duplex
데이터 전송  

데이터 순서도 보장되고 데이터 손실에 대해서도 보장되어 신뢰성 있는 데이터 전송이 보장되는 TCP
반면 UDP의 경우 단순한 데이터 전송에 특화되었고 TCP에서 제공하는 다양한 제어나 신뢰성 있는 데이터 전송은 가능하지 않지만, 실시간 트래픽 전송이 가능하여 요즘 많이 사용되는 실시간 영상 송출 등에 많이 사용되고 있다.

 

 


IP (Internet Protocol) 

IP 주소로 목적지를 인지하고 목적지 주소지로 Packet을 전송한다.

송신지 측은 상위 계층의 프로토콜로부터 데이터를 받아서 패킷을 분할(Fragmentation)하여 전송하는 역할을 수행하고, 수신지 측은 하위 계층의 프로토콜로부터 데이터를 재조립 (Reassemble) 하여 상위 계층으로 전송한다.

  • 하나의 데이터도 여러 개의 패킷 (Packet)으로 나눠질 수 있음
  • 각 패킷은 필요에 따라 서로 다른 경로로 보내질 수 있음
  • 보낸 순서와 다르게 패킷이 도착할 수 있음
  • IP는 패킷 전달만 수행
  • 순서 정렬은 상위 프로토콜인 TCP가 수행

 

IP Header

IP도 TCP처럼 Header를 가지는데, 역시 많은 정보를 담고 있어 아래와 같이 구성됨을 확인할 수 있다.

IP Header 구성도

VER는 IP Version 값을 표기하는 값으로, 4의 값을 가지면 현재 IP Version이 4라는 것을 표기하는 것이다.
HLEN (Header Length)는 Header의 전체 길이를 표시하는 것으로, Header가 Option 필드에 따라 달라질 수 있기 때문에 별도 필드로 명시함

Total Length는 패킷의 전체 길이를 표시하는 것으로 전체 길이 = IP Header + Data 로 구성되므로 앞에서 적혀있던 Header Length를 이용하면 Data Length도 구할 수 있게 된다.

Service type 필드는 패킷이 라우터에서 어떻게 처리되어야 하는지를 명시한 패킷 처리 옵션 필드다.

Service type 필드 구성 (8 bits)
      D
Minimize delay
T
Maximize
throughput
R
Maximize
reliability
C
Minimize
cost
 
우선 순위 설정 (Precedence) TOS bits 예약 비트
[참고] TOS bits 값 구성 예시

0000 : Normal (default) 
0001 : Minimize cost
0010 : Maximize reliability
0100 : Maximize reliability
1000 : Minimize delay

 

단편화와 재조립

  • MTU (Maximum Transfer Unit)
    : 패킷을 송신할 때 보낼 수 있는 최대 사이즈
    : 사용하고 있는 랜카드에 따라 사이즈가 달라지게 되는데, Ethernet 랜카드는 1500 byte 임
  • 단편화
    : 전송하려는 데이터가 MTU 사이즈보다 큰 경우 MTU 사이즈로 데이터를 분할
    : 송신지에서 데이터를 분할하는 과정을 말함
  • 재조립
    : 수신지에서 받은 단편화 된 데이터를 원본으로 복원
    : 최종 목적지 호스트에 의해서만 수행

 

단편화와 관련된 필드는 Identification, Flags, Fragmentation offset이 있다.

Identification은 송신 Host가 전송한 패킷의 ID를 표시하는 것으로 MTU값에 따라 분할된 데이터를 식별할 수 있는 값으로, 데이터가 분할될 시 모든 데이터에 복사된다.

IP Header Flags 필드는 3 bit로 구성되며 첫 번째 bit값은 사용되지 않는다.
두 번째 bit는 Do not Fragment로 패킷의 분할 여부를 확인하는 값이다. 1이면 분할되지 않음, 0이면 분할됨.  
세 번째 bit는 More Fragment로 데이터가 분할된 대상이 더 있는지 확인하는 정보로, 1이면 추가적인 데이터가 더 있다는 뜻이고, 0이면 마지막 조각이라는 뜻이다.

Fragmentation offset는 분할된 조각의 상대적인 위치를 나타내는 것으로 8byte 단위로 나타낸다.  

 

그 외 IP Header 중 대부분 알고 있거나 많은 설명이 필요하지 않은 추가 정보

  • TTL (Time to live) : 패킷의 수명, 라우터 경유 시 일시 감소한다.
  • Protocol : IP가 전송하는 프로토콜 명시
  • Header Checksum : 경유지 및 도착지에서 checksum을 확인 후 일치하지 않으면 폐기
  • Source IP Address (송신지 IP 주소)
  • Destination IP Address (수신지 IP 주소)
  • Option : 최대 40 byte까지 입력 가능한 추가 정보

 

반응형