Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

SYDev

[컴퓨터 네트워크] 3주차: TCP/IP 본문

3학년 1학기 전공/컴퓨터 네트워크

[컴퓨터 네트워크] 3주차: TCP/IP

시데브 2024. 4. 1. 11:02
경희대학교 컴퓨터공학부 유인태 교수님의 컴퓨터 네트워크 수업을 기반으로 작성한 게시물입니다.

 

 

TCP/IP 계층 구조 및 역할

  • 인터넷을 사용하는 모든 통신의 기본적인 프로토콜
  • 한 개의 프로토콜이 아닌 여러 가지 프로토콜들의 조합
  • TCP/IP를 기반으로 BAN, PAN, LAN, MAN, WAN 상의 장치들이 데이터를 서로 주고 받음
  • OSI 7 계층 참조 모델과 달리 -> TCP/IP 프로토콜 모델은 4개 계층으로 정의

-> 참조 모델 vs 프로토콜 모델 -> 기본, 기존이 되는 모델(반드시 따라야하는 것은 아님) 실제 모델과 차이가 있음 vs 실제 사용하는 모델

  • TCP: 전송 계층의 전송 제어 프로토콜, IP: 인터넷 계층의 패킷 전달 프로토콜

-> 전송: 어떤 일이 있어도 목적지에 도달해야 함(재전송 이용)

-> 전달: 전달하려 노력하지만 도착하지 않을 수도 있음

  • 모든 응용 계층 서비스들이 포트 주소, IP 주소, MAC 주소를 바탕으로 통신

응용, 표현, 세션(Application, Presentation, Session) 계층 -> 응용(Application) 계층

전송(Transport) 계층 -> 전송(Transport) 계층

네트워크(Netwrok) 계층 -> 인터넷(Internet) 계층

데이터링크, 물리(Data Link, Physical) 계층 -> 네트워크 접속(Network Access) 계층

 

네트워크 접속 계층(Network Access Layer)

  • OSI 참조 모델의 물리, 데이터링크 계층의 역할 수행
  • 프레임의 송신과 수신을 담당
  • ARP(Address Resolution Protocol): IP 주소를 바탕으로 MAC 주소를 알아내기 위해 사용하는 프로토콜
  • RARP(Reverse ARP): MAC 주소를 바탕으로 IP 주소를 요청하기 위해 사용하는 프로토콜
  • NIC, 스위치, 허브 -> 네트워크 접속 계층을 대표하는 네트워크 장치
  • 오류 검출(error detection) 기능이 있으며(트레일러), IP 패킷을 프레임으로 캡슐화
  • ARP request: Broadcast
  • ARP reply: Unicast

인터넷 계층(Internet Layer)

  • OSI 7 계층 참조 모델의 3계층(Network Layer) 역할 수행, 패킷 송수신IP 주소 체계 관리
  • 라우팅 기능 수행: 패킷 수신 -> IP 주소를 확인 -> 패킷을 목적지로
  • 라우팅 경로는 어떤 라우팅 프로토콜을 쓰는지에 따라 달라짐
  • IP 주소 체계: 인터넷 상의 장치를 정의하는 주소, v4(32bits address)와 v6(128bits address)가 있음 -> v4 프로토콜에는 보안 기능X, 주소 공간 부족 문제 > v6 등장
  • ICMP(Internet Control Message Protocol): ping 명령어 -> 인터넷 제어 메시지 프로토콜, 장치 간의 통신 가능 여부를 확인
  • ICMP는 Echo Request(요청)Echo Reply(응답)로 구성

전송 계층(Transport Layer)

  • 종단 장치 간 통신이 완성되는 계층, TCP(Transmission Control Protocol)UDP(User Datagram Protocol)가 대표적이며, 포트 번호를 사용하여 통신
  • TCP신뢰성 있는 통신 제공 -> UDP는 신뢰성 있는 통신을 제공하지 못함
  • UDP는 TCP보다 데이터 처리 속도가 빠름(실시간 특성을 갖는 데이터에 적합)
  • UDP -> 데이터 손실이 있더라도 빠른 데이터 처리 속도를 원할 때 (ex: 야구 중계..), TCP -> 속도는 보장 못해도, 신뢰성 있는 통신 (ex: 이메일..)
  • UDP를 이용하는 응용프로그램에서 어느 정도 신뢰성 있는 통신을 해야 할 경우에는 -> 별도의 프로토콜을 함께 사용하여 신뢰성 제공 가능
  • Well-Known 포트: 대부분의 시스템 간에 널리 이용되는 애플리케이션을 위해 기본값으로 설정되어 있는 포트 번호, 1~1023의 범위 가짐

https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D

 

 

응용 계층(Application Layer)

  • OSI 7계층 참조 모델의 세션, 표현, 응용(session, presentation, application) 계층의 역할을 수행하는 계층
  • 사용자 데이터 처리 계층
  • HTTP, HTTPS, FTP, SMTP, PoP3, DNS 등

 

TCP 헤더

TCP의 신뢰성 통신

-> ack3은 2번 seg까지 오류 없이 수신했다는 것을 의미, ack3 수신 -> 3번 seg부터 모든 seg를 전송

 

TCP 헤더

  • TCP는 연결 지향형(Connection-Oriented) 서비스를 제공하고 신뢰성 있는 데이터 전송을 보장, 이러한 기능은 TCP 헤더 내의 필드에 의해서 가능

  • 출발지 포트 번호(Source Port Number): 출발지 호스트의 포트 번호를 정의한 16비트 필드, 임의 번호 사용
  • 목적지 포트 번호(Destination Port Number): 목적지 호스트의 포트 번호를 정의한 16비트 필드, 주로 Well-Known 포트 번호
  • 순서 번호(Sequence Number): TCP segment에 대한 순서번호를 표시, segment data를 재조립할 때 사용
  • 수신 확인 응답 번호(Acknowledgement Number): 수신 장치에서 발신 장치로 segment의 전송 성공 여부를 알려주기 위해서 사용
  • 헤더 길이(Header Length): TCP 헤더의 길이를 정의 -> 헤더 길이에 암묵적으로 4를 곱함(TCP Header의 크기는 기본 20byte ~ 60byte) -> 기본적으로 0101(5)로 표시되어 있으나, 4를 곱하여 생각(~1111(15) * 4 -> 60byte)
  • 예약 비트(Reversed): 표준 정의 당시, 추후 추가 혹은 업데이트되는 내용을 위해 예약된 필드
  • TCP flags -> 6비트의 control flag
  • URG(Urgent): 긴급 데이터가 TCP 페이로드(payload)에 포함되어 있음을 알리는 필드, 이 비트가 1이면 우선적으로 처리
  • ACK(Acknowledgement): TCP segment들에 대한 수신 확인을 알리기 위해 사용되며, 이 비트가 1이면 수신 확인 응답 번호 이전까지의 모든 segment들을 잘 받았음을 의미
  • PSH(Push): 푸시 요청 -> 긴급한 데이터가 아닌 데이터를 빨리 처리하도록 요청
  • RST(Reset): TCP 세션 리셋을 위한 제어 비트
  • SYN(Synchronization): 통신을 개시하고자 하는 두 호스트 간의 세션 초기화 및 순서 번호 동기화
  • FIN(Final): TCP 세션 종료에 사용하는 제어 비트
  • 윈도우 크기(Window Size): 수신 확인 응답 번호의 수신 없이 전송할 수 있는 데이터 양을 정의 

왼쪽은 수신 즉시 송신하여 win size가 유지, 오른쪽은 수신 즉시 송신하지 못하여 win size가 증가하는 모습

  • TCP Checksum: TCP 패킷 오류 검사 필드, 수신 장치는 이 값을 이용하여 데이터 무결성 확인
  • 긴급 포인터(Urgent Pointer): 긴급 데이터가 있는 지점을 가리키는 포인터 -> 긴급 데이터가 끝나는 지점
  • 옵션(Option): 최소 0에서 최대 40바이트, TCP 통신에 대한 제어 및 관리를 위한 추가 옵션

UDP 헤더

  • TCP: connection-oriented(연결 지향형) <-> UDP: connectionless(비연결형)
  • 전송 계층에서 동작하며, 포트 번호를 기반으로 통신(Well-Known Port 기반)
  • TCP보다 헤더가 간단, TCP같은 다양한 데이터 흐름 제어 기능은 없음
  • 송수신 절차가 비교적 간단, 오류 검출 기능 제공으로 소량의 데이터 전송이나 실시간 데이터 전송에 효과적
  • 비연결형 서비스 -> 데이터그램 간의 전후 관계를 고려하지 않고(sequence number 없음) 전송

  • 출발지 포트 번호: 출발지 호스트의 포트 번호를 정의, 16비트 필드, 임의 번호
  • 목적지 포트 번호: 목적지 호스트의 포트 번호를 정의, 16비트 필드, 주로 Well-Known 포트 번호
  • 길이: 헤더와 데이터를 포함한 UDP 데이터 그램의 전체 길이
  • 체크섬: 헤더와 데이터를 포함한 UDP 데이터 그램의 오류 검사

 

IP 헤더

  • OSI 7 Layer 3계층 기준으로 패킷을 출발지에서 목적지까지 전달하는데 사용
  • IP는 최선형(Best Effort) 서비스 기반으로 패킷 전달 -> 패킷이 목적지에 도착함을 보장하지는 못함. -> 패킷은 전송 도중 손실되거나 손상될 수 있다.
  • 상위 계층의 TCP와 같은 신뢰성 프로토콜을 사용하여 최선형 서비스의 단점을 보완 -> TCP/IP
  • IP 패킷 -> 출발지 장치가 전송한 순서대로 목적지 장치에 도착하지 않을 수 있음
  • IPv4: 주소 고갈&보안 이슈 -> 버전6

  • 버전(Version): IP 프로토콜의 버전을 나타냄
  • 헤더 길이(Header Length): 옵션을 포함할 경우 최대 60바이트까지 사용 가능, 최소 단위는 20바이트
  • DSCP(Differentiated Services Code Points): ToS(Type of Service) 필드로 불렸던 패킷의 우선 순위를 나타내는 필드
ToS
출처: https://operatingsystems.tistory.com/entry/Type-of-Service-Differentiated-Service
패킷의 성격(속도 or 신뢰성 우선)에 따라 데이터 전송 우선순위를 결정
  • ECN(Explicit Congestion Notification): 패킷이 전송 경로에서 혼잡을 경험했을 때, 이를 발견하고 상대방에게 경고를 보냄. 명시적으로 네트워크에 혼잡이 있음을 알리는 필드 -> 전송 도중에 있던 혼잡을 목적지에 전달(foward ECN) -> 수신지에서 송신지로 다시 그 정보를 보내는 과정(backward ECN)
  • 전체 길이(Total Length): 헤더와 데이터를 포함한 패킷의 전체 길이를 나타냄
  • 식별자(Identification): 생성되는 패킷에 부여되는 고유한 값 -> 목적지에 도착한 패킷들은 이 식별자 값을 기준으로 원래 순서대로 재조립된다.
  • 플래그(Flags): IP패킷의 분할 가능 여부, 마지막 fragment인지 아닌지 알리기 위해 사용
  • 분할 위치(Fragment Offset): 하나의 패킷은 2계층 프로토콜의 MTU(Maximum Transmit Unit; 최대 전송 단위)에 따라 여러 개의 fragment로 분할되어 전송 -> 각각의 분할된 frag가 원래의 패킷을 기준으로 어느 위치에 있었는지 명시하기 위한 offset 값
IP packet을 frame으로 분할
body를 자를 때, header(20byte)는 매번 카피해서 자른 body(1480byte)에 붙여줌 -> fragment
fragment를 다시 IP로 복원할 때, 순서가 필요한데 그것이 Frag offset -> 0번째부터 얼마나 떨어져 있느냐
또한, flags를 통해서 마지막 frag를 확인하면, 해당 frag를 기준으로 이전에 받은 frag로 IP packet을 재조립 -> 제일 마지막 flag는 more flag가 0

프로토콜 별로 MTU가 다름 -> 이더넷의 경우 대ㅑㄱ 1500byte -> 요즘은 이더넷이면 이더넷에 맞게 IP 패킷을 1460byte 맞춰서 제작 + 헤더(20) + 헤더(20)

 

  • TTL(Time-to-Live): 패킷의 루핑(looping)을 막기 위해 사용하는 패킷의 수명을 나타내는 값. 라우터 통과 시마다 1씩 감소, 이 값이 0이 되면 패킷은 폐기 -> UDP의 경우는 괜찮지만, 재전송을 요구하는 protocol의 경우에는, 루핑하는 패킷에 재전송 요청을 반복하면서 통신 혼잡을 가중화
  • 프로토콜(Protocol): 서비스 대상 프로토콜 
  • 헤더 체크섬(Header Checksum): IP 헤더 오류 검사
  • 출발지 IP 주소(Source IP Address): 출발지 장치의 IP 주소
  • 목적지 IP 주소(Destination IP Address): 목적지 장치의 IP 주소
  • 옵션(Option): 패킷의 전송 경로를 포함한 IP 프로토콜의 동작 옵션을 정의


참고자료

 

TCP header (+ TCP 옵션)

안녕하세요. 오늘은 TCP header 구조와 TCP 옵션(Options) 들에 대해서 포스팅하도록 하겠습니다. TCP header Source Port Source port number Destination Port Destination port number Sequence Number 송신자가 보내는 데이터의

hand-over.tistory.com