TCP: Difference between revisions

From IT Wiki
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[분류:네트워크]][[분류:정보처리기사]]
[[분류:네트워크]]
== 플래그 ==
[[분류:정보처리기사]]
; 좀 더 상세한 내용은 [[TCP 제어 플래그|TCP 제어 플래그 문서]] 참조
[[분류:정보보안기사]]
* '''SYN''' : TCP Connection의 최초 접속 시 연결을 요구하는 플래그
[[분류:프로토콜]]
* '''ACK''' : 응답 확인 플래그
 
* '''PSH''' : 데이터를 버퍼링하지 않고 즉석에서 수신자에게 송신하는 것을 요구하는 플래그
;Transmission Control Protocol
* '''URG''' : 긴급 포인터 플래그
;'''양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공하는 전송 계층 프로토콜'''
* '''FIN''' : 접속 종료 플래그 (정상 종료)
 
* '''RST''' : 접속 종료를 위한 리셋 플래그 (강제 종료)
== TCP의 특징 ==
 
*신뢰성 있는 연결을 지향한다.
*세그먼트에 순번을 지정하여 데이터의 순서를 유지한다.
*3-Way Handshaking을 통해 연결하고 4-Way Handshaking을 통해 연결을 종료한다.
 
== TCP 헤더 ==
[[파일:TCP 세그먼트 헤더.jpg]]
 
* Source Port : 출발지 포트번호
* Destination Port : 목적지 포트번호
* Sequence Number : 바이트 단위로 순서화되는 번호로, 이것을 통해 신뢰성(3-Way Handshake) 및 흐름제어(sliding Window) 기능 제공
* Acknowledgment Number : 수신하기를 기대하는 다음 byte 번호 (마지막으로 수신에 성공한 번호의 +1)
* Offset : 헤더 길이 필드이며 IPv4와 마찬가지로 나누기 4 계산 후 2진수로 작성됨
* Reserved : 예약된 필드, 현재 사용되지 않음
* Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드
* [[TCP 제어 플래그]]
** U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트
** A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨
** P (Push) : 밀어넣기 비트, TCP 버퍼가 일정한 크기만큼 쌓여야 하는데 이거 상관없이 데이터를 계속 밀어 넣겠다
** R (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋하게 됨
** S (Syn) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
** F (Fin) : 종료 비트
* Urgent Pointer : 어디서부터 긴급 값인지 알려주는 플래그 (TCP Flags의 U와 세트)
 
==플래그==
 
;좀 더 상세한 내용은 [[TCP 제어 플래그|TCP 제어 플래그 문서]] 참조
 
*'''SYN''' : TCP Connection의 최초 접속 시 연결을 요구하는 플래그
*'''ACK''' : 응답 확인 플래그
*'''PSH''' : 데이터를 버퍼링하지 않고 즉석에서 수신자에게 송신하는 것을 요구하는 플래그
*'''URG''' : 긴급 포인터 플래그
*'''FIN''' : 접속 종료 플래그 (정상 종료)
*'''RST''' : 접속 종료를 위한 리셋 플래그 (강제 종료)
 
==3-Way Handshaking==
 
;TCP 연결 수립 과정


== 3-Way Handshaking ==
; TCP 연결 수립 과정
[[image:3-way-handshake.png|500px|http://www.mdpi.com/2076-3417/6/11/358/htm]]
[[image:3-way-handshake.png|500px|http://www.mdpi.com/2076-3417/6/11/358/htm]]


== 4-Way Handshaking ==
==4-Way Handshaking==
; TCP 연결 종료 과정
 
# [Client(FIN_WAIT1) -> Server(CLOSE_WAIT)] FIN+ACK
;TCP 연결 종료 과정
# [Client(FIN_WATI2) <- Server(CLOSE_WAIT)] ACK
 
# [Client(TIME_WAIT) <- Server(LAST_ACK)] FIN+ACK
#[Client(FIN_WAIT1) -> Server(CLOSE_WAIT)] FIN+ACK
# [Client(TIME_WAIT) -> Server(CLOSED] ACK
#[Client(FIN_WATI2) <- Server(CLOSE_WAIT)] ACK
#[Client(TIME_WAIT) <- Server(LAST_ACK)] FIN+ACK
#[Client(TIME_WAIT) -> Server(CLOSED] ACK
 
==같이 보기==
 
*[[TCP/IP]]
*[[UDP]]

Latest revision as of 20:08, 3 February 2022


Transmission Control Protocol
양종단 호스트 내 프로세스 상호 간에 신뢰적인 연결지향성 서비스를 제공하는 전송 계층 프로토콜

TCP의 특징[edit | edit source]

  • 신뢰성 있는 연결을 지향한다.
  • 세그먼트에 순번을 지정하여 데이터의 순서를 유지한다.
  • 3-Way Handshaking을 통해 연결하고 4-Way Handshaking을 통해 연결을 종료한다.

TCP 헤더[edit | edit source]

TCP 세그먼트 헤더.jpg

  • Source Port : 출발지 포트번호
  • Destination Port : 목적지 포트번호
  • Sequence Number : 바이트 단위로 순서화되는 번호로, 이것을 통해 신뢰성(3-Way Handshake) 및 흐름제어(sliding Window) 기능 제공
  • Acknowledgment Number : 수신하기를 기대하는 다음 byte 번호 (마지막으로 수신에 성공한 번호의 +1)
  • Offset : 헤더 길이 필드이며 IPv4와 마찬가지로 나누기 4 계산 후 2진수로 작성됨
  • Reserved : 예약된 필드, 현재 사용되지 않음
  • Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드
  • TCP 제어 플래그
    • U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트
    • A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨
    • P (Push) : 밀어넣기 비트, TCP 버퍼가 일정한 크기만큼 쌓여야 하는데 이거 상관없이 데이터를 계속 밀어 넣겠다
    • R (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋하게 됨
    • S (Syn) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
    • F (Fin) : 종료 비트
  • Urgent Pointer : 어디서부터 긴급 값인지 알려주는 플래그 (TCP Flags의 U와 세트)

플래그[edit | edit source]

좀 더 상세한 내용은 TCP 제어 플래그 문서 참조
  • SYN : TCP Connection의 최초 접속 시 연결을 요구하는 플래그
  • ACK : 응답 확인 플래그
  • PSH : 데이터를 버퍼링하지 않고 즉석에서 수신자에게 송신하는 것을 요구하는 플래그
  • URG : 긴급 포인터 플래그
  • FIN : 접속 종료 플래그 (정상 종료)
  • RST : 접속 종료를 위한 리셋 플래그 (강제 종료)

3-Way Handshaking[edit | edit source]

TCP 연결 수립 과정

http://www.mdpi.com/2076-3417/6/11/358/htm

4-Way Handshaking[edit | edit source]

TCP 연결 종료 과정
  1. [Client(FIN_WAIT1) -> Server(CLOSE_WAIT)] FIN+ACK
  2. [Client(FIN_WATI2) <- Server(CLOSE_WAIT)] ACK
  3. [Client(TIME_WAIT) <- Server(LAST_ACK)] FIN+ACK
  4. [Client(TIME_WAIT) -> Server(CLOSED] ACK

같이 보기[edit | edit source]