TCP 프로토콜 구조

1=1·2024년 1월 10일
0

SK shieldus 16

목록 보기
6/10
post-thumbnail

TCP

TCP/IP 네트워크는 애플리케이션 계층에게 두가지 구별되는 트랜스 포트 계층 프로토콜 제공

  • TCP : 네트워크 애플리케이션을 설계 할 때 두가지 트랜스포트 프로토콜 중 하나를 명시해야 함
    • Stream-Oriented Transport Protocol
    • 상위 계층(IP 프로토콜)에서 payload된 데이터를 단편화

Connection Oriented Protocol (연결 지향 프로토콜)

  • 가상회선 : 물리적으로 전용 회선이 연결되어 있는것 처럼 가상의 연결 통로를 설정해서 통신하는 방식으로 가상의 연결 통로
  • 순서제어 : 논리적인 연결 통로를 통해 데이터를 주고 받음으로써 데이터 전송 순서 보장
  • 스트림 기반의 전송 방식 사용 : 임의의 크기로 나누어 연속해서 전송하는 방식

Reliable Protocol (산뢰할 수 있는 프로토콜)

  • 흐름제어 수행 (Flow Control)
    : 흐름제어란 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 젆송하는 것
  • 오류제어 수행 (Error Control)
    : 데이터의 오류나 누락 없이 안전한 전송을 보장해 주는 것 (체크섬 수신측에서 검증)
  • 혼잡제어 수행 (Congestion Control)
    : 혼잡 제어란 네트워크 혼잡 정도에 따라 송신자가 데이터 전송량을 제어

TCP 구조

  1. Source port : 패킷을 송신하는 시스템의 포트번호를 나타냄. 클라이언트의 경우 예약된 0-1023의 well-known 포트 번호를 제외한 번호를 임의로 생성하고 서버의 경우 일반적인 서비스 제공시 well-known 한 포트를 사용한다
  2. Destination Port: 패킷을 수신할 시스템 포트 번호
  3. Sequence Number : 세그먼트 (각 계층 패킷의 구분을 위해 4계층(세그먼트), 3계층 (패킷), 2계층 (프레임)으로 구분
  4. Acknowledge Number: 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 순서번호를 나타냄. Sequence Number의 확인 응답으로 부터 데이터 전송자에게 패킷을 받았으니 그 다음 패킷을 송신하는 의미로 사용. 상대방이 다음에 전송할 패킷의 Sequence Number이기도 함
  5. Header Length : TCP 헤더의 전체 길이를 byte 단위로 표시
  6. Reserved : 미래를 위해 예약된 필드로 항상 0으로 설정
  7. Flags CWR: 송신자가 자신의 윈도우 사이즈를 줄인다 ( 혼잡 감지시 수신자가 ECE를 설정하여 송신자에게 알림
  8. URG : Urgent Point 필드와 함께 사용되고 플래그 설정시 TCP 는 해당 세그먼트를 전송 큐의 제일 앞으로 보냄
  9. ACK : SYN에 대한 확인의 의미 3 way handshacking에서의 SYN과 reset을 제외하고 모든 세그먼트에 ACK가 설정됨
  10. PSH: 일반적으로 모든 데이터를 전송하고 마지막에 보내는 신호로 수신측은 데이터를 즉시 전송하라는 의미
  11. RST : 송신자가 유효하지 않은 연결을 시도할 때 거부하는데 이용되고 또한 통신의 연결 및 종료를 정상적으로 할 수 없을 때 이용된다
  12. SYN: 통신 시작시 연결을 요청하고 ISN 을 교환한다
  13. FIN: 연결 종료
  14. Window size: 송신 시스템에서 자신이 수용하는 한 버퍼의 크기를 byte 단위로 나타냄 통신하는 동안 송수신자는 해당 필드를 통해 수신 사이즈를 계속 변경
  15. Checksum : 데이터가 전송 중에 손실되지 않고 원본과 동일한지 검사
  16. Urgent Point: Urgent flag 설정시 urgent 데이터의 마지막 byte 의 일련 번호를 urgent point 필드에 저장. 해당 부분까지 긴급하게 처리를 요함

TCP 연결 설정

3-way handshaking

  • TCP/IP 프로토콜을 이용해서 통신하는 응용프로그램은 데이터를 주고받기 전에 먼저 연결을 진행함
  • TCP는 양방향 통신이기에 클라이언트-클라이언트 형태가 존재
  • 연결을 먼저 요청하는 Host -> Client
  • 연결을 먼저 요청받는 Host -> Server

1) Client > Server : TCP, SYN
2) Server > Client : TCP, SYN, ACK
3) Client > Server : TCP, ACK


< 3 way-handshake에서 사용되는 TCP 헤더필드 >

Sequence Number

  • Segment에 있는 첫번째 바이트 스트림 번호

  • TCP 연결, 종료시에는 Sequence Number을 임의의 랜덤값으로 설정 (SN이 노출시에 공격자가 위조패킷을 보낼 수 있기 때문에

    Control bits

  • ACK

    • 패킷을 받았다는 응답
    • 최초 연결의 첫 번째 세그먼트를 제외한 모든 Segment의 ACK 비트는 1로 설정
  • SYN

    • 연결을 요청할 때 SYN bit을 1로 설정 ( SYN bit = 1 이면 TCP 연결을 요청하는 과정인 것을 알 수 있음 )
    • 다른 모든 경우에는 SYN bit를 0으로 설정




4-way handshaking

세션을 종료하기 위해 수행되는 절차

1) Client(FIN_WAIT) > Server : FIN flag 전송
2) Server(CLOSE_WAIT) > Client : ACK 전송
3) Server(LAST_ACK) > Client : 연결이 종료되었다는 FIN flag 전송
3) Client(TIME_WAIT) > Server(CLOSE) : 종료메시지 확인 ACK 전송


IP

  • MTU ( Maximum Transfer Unit )
    : 네트워크 기기가 전송 할 수 있는 최대 전송 단위


  • 단편화 ( Fragmentation )
    • MTU가 큰 네트워크에서 MTU가 작은 네트워크로 데이터그램이 전송 될 경우 데이터그램은 나누어서 보내져야 함

    • 데이터그램의 재조립은 최종 목적지 호스트에 의해서만 수행

    • 재조립으로 인해 발생하는 비효율성 때문에 전송 중 재조립 안됨

    • 단편화 관련 필드 : Identification, Flag, Fragmentation offset


  • MSS (Maximum Segment Size )
    - TCP 상에서 전송할 수 있는 사용자데이터 최대 크기
    MSS = MTU - IP Header 크기 -TCP Header 크기

0개의 댓글