TCP Protocol [Network]

SnowCat·2022년 12월 27일
0

CS - Network

목록 보기
8/11
post-thumbnail

TCP 프로토콜이란?

  • TCP(Transmission Control Protocol)는 인터넷에서 프로그램 간에 통신을 순서대로 에러없이 안정적으로 할 수 있게 해주는 프로토콜
  • UDP통신에 비해 안정적인 대신 상대적으로 속도가 느림

TCP 프로토콜의 구조

  • Source Port/Destination Port: 출발지/목적지의 포트 번호
  • Sequence Number: 전송하는 데이터의 순서를 나타내는 번호
  • Acknowledgement Number: 상대방으로부터 다음에 받아야 하는 Sequence Number
  • Offset: 헤더의 길이를 4바이트 단위로 표기
  • Reserved: 예약된 공간으로 사용하지 않음
  • TCP Flags: TCP 통신에서 상태를 알리는 기호 부분
    C, E: 잘 사용되지 않음
    U(Urgent): 데이터의 우선순위가 높은 중요한 데이터임을 알림
    A(Acknowledge): 패킷을 잘 받았음을 표현하는 신호
    P(Push): TCP Buffer가 채워지는 것을 기다리지 않고 바로 패킷을 보낼 것을 요청할 때 사용하는 신호
    F(Finish): TCP 통신을 끝내겠다는 것을 알리는 신호
    S(Synchronization): TCP 통신을 시작할 때 연결 요청에 사용되는 신호
    R(Reset): 연결을 재설정할 때 사용하는 신호
  • Window: 받고자 하는 데이터의 양을 표기하는 부분
  • Checksum: 데이터 검증을 위해 필요한 부분
  • Urgent Pointer: Urgent Flag 사용시 중요한 데이터의 위치를 알려주기 위한 부분
  • Options: 추가적인 정보가 필요할 때 4바이트 단위로 사용

TCP를 이용한 통신과정

1. 3way Handshake

  • TCP통신에서 프로세스간의 연결을 위해 가장 먼저 수행되는 과정
  • 우선 클라이언트가 서버에 연결을 요청하는 패킷을 보냄
  • 서버는 클라이언트의 응답 요청을 받으면 이를 수락하고, 클라이언트에게 연결을 할 것인지를 묻는 패킷을 다시 보냄
    Acknowledge Flag, Synchronoization Flag를 동시에 사용하며 Acknowledgement Number는 클라이언트에서 보낸 패킷의 값에 1을 더한 값, Sequence Number는 무작위의 값을 사용함
  • 클라이언트는 서버의 응답요청을 수락하는 패킷을 보내 3way Handshake이 종료되고, 데이터를 주고받을 수 있게 됨
    Acknowledgement Number는 서버에서 보낸 Sequence Number에 1을 더한 값, Sequence Number는 Acknowledgement Number는 서버에서 보낸 Acknowledgement Number와 동일함

2. 데이터 송수신 과정

  • 3way Handshake 이후 우선 클라이언트에서 서버에 데이터 전송 요청
    Acknowledgement Number, Sequence Number는 3way Handshake에 응답요청을 수락했을 때 사용한 값과 동일한 값을 보냄
  • 서버는 요청에 응답하는 데이터를 클라이언트에 전송
  • 클라이언트는 데이터를 잘 받았음을 알리는 패킷을 서버에 전송
  • 연결 요청이후 Acknowledgement Number는 클라이언트/서버에서 받은 Sequence Number 값에 페이로드된 데이터 크기를 더한 값, Sequence Number는 클라이언트에서 받은 Acknowledgement Number와 동일함
    그림은 처음 클라이언트가 보낸 페이로드된 데이터가 100byte, 서버가 보낸 페이로드된 데이터가 500byte인 상황

TCP 상태전이도

  • TCP 연결상태를 그림으로 나타낸 전이도
  • LISTEN 상태는 서버가 포트를 사용하고 있어 클라이언트의 요청을 들을 수 있는 상태를 의미함
    클라이언트는 LISTEN 상태의 서버에 데이터를 보낼 때 SYN_SENT 상태가 됨, 서버는 요청을 수락하는 패킷을 보낼 때 SYN_RCVD 상태가 됨
  • ESTABLISHED 상태는 서버와 클라이언트가 연결되어 데이터를 전달할 수 있는 상태를 의미함

출처:
https://www.youtube.com/watch?v=cOK_f9_k_O0&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=21
https://codingtalk.tistory.com/243
https://inuplace.tistory.com/821

profile
냐아아아아아아아아앙

0개의 댓글