[Network] TCP/UDP

황인용·2020년 7월 11일
0

Network

목록 보기
6/14
post-thumbnail
post-custom-banner

TCP(Transmission Control Protocol)

  • 네트워크 상에서 데이터를 메세지의 형태(세그먼트라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜
  • TCP/IP 와 함께 사용하는데,
    IP는 데이터의 배달을 처리한다면, TCP는 패킷을 추적 및 관리
  • 연결형 서비스로 가상 회선 방식을 제공
    • 3-way handshaking, 4-way handshaking 방식으로 제공
  • 흐름제어 및 혼잡제어를 제공
    • 흐름제어
      • 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버 플로우를 방지하는 것
      • 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막음
    • 혼잡제어
      • 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지
      • 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막음
    • 높은 신뢰성을 보장
    • UDP보다는 속도가 느림
    • 전이중(Full-Duplex), 점대점(Point-to-Point)방식
      • 전이중
        • 전송이 양방향으로 동시에 일어날 수 있다.
          e.g. 전화
      • 점대점
        • 각 연결이 정확히 2개의 종담점을 가지고 있다
    • 멀티캐스팅이나 브로드캐스팅은 지원하지 않음
    • 연속성보다 신뢰성있는 전송이 중요할 때 사용

TCP 헤더

  • Source/Destination Port : 출발지/목적지 포트번호
  • Sequence Number : 전달되는 바이트에 대한 Sequence Number로 1씩 증가
  • Acknowledgement : 수신측에서 수신하고자 하는 바이트의 번호
  • Checksum : 데이터를 포함한 세그먼트 전체의 오류를 검사하기 위한 필드
  • Urgent Pointer : 긴급 데이터를 우선적으로 처리할 것을 수신측에게 알리기 위한 목적으로 사용하는 필드
  • Flag : 플래그 필드
  • Control bit : 플래그 비트, 6bit, URG-ACK-PSH-RST-SYN-FIN 의미를 가짐

3-way handshake

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(connection Establish)하는 과정
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 함
  • 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

3-way handshake 과정

  1. A → B : SYN
    - 접속 요청 프로세스 A가 연결 요청 메세지 전송(SYN)
    - 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다
    - PORT 상태
    - A : CLOSED
    - B : LISTEN
  2. B → A : SYN + ACK
    - 접속 요청을 받은 프로세스 B가 요청을 수락했으면, 접속 요청 프로세스인 A도 포트를 열어 달라는 메세지를 전송( SYN + ACK )
    - 수신자는 Acknowledgement Number 필드를 Sequence Number + 1 로 지정하고, SYN와 ACK 플래그 비트를 1로 설정한 세그먼트를 전송
    - PORT 상태
    - A : CLOSED
    - B : SYN_RCV
  3. A → B : ACK
    - PORT 상태
    - A : ESTABLISHED
    - B : SYN_RCV
    - 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내, 연결을 맺음(ACK)
    - 이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다
    - PORT 상태
    - A : ESTABLISHED
    - B : ESTABLISHED

4-way handshake

  • TCP의 연결 해제(Connection Termination)하는 과정
  • A 프로세스(Client)가 B 프로세스(Server)에 연결 해제를 요청하는 과정

4-way handshake 과정

  1. A → B : FIN
    - 프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송
    - 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
  2. B → A : ACK
    - 프로세스 B는 일단 확인 메세지를 보내고 자신의 통신이 끝날 때까지 기다린다
    (이 상태가 TIME_WAIT 상태)
    - 수신자는 Acknowledgement Number 필드를 Sequence Number + 1로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송
    - 자신이 전송할 데이터가 남아있다면 이어서 계속 전송
  3. B → A : FIN
    - 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송
  4. A → B : ACK
    - 프로세스 A는 확인했다는 메세지를 전송

UDP(User Datagram Protocol)

  • 데이터를 데이터그램 단위로 처리하는 프로토콜
  • 비연결형 서비스로 데이터그램 방식을 제공
    • 연결을 위해 할당되는 논리적인 경로가 없다
    • 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 된다
    • 데이터를 서로 다른 경로로 독립적으로 처리
  • 정보를 주고 받을 때, 정보를 보내거나 받는다는 신호절차를 거치지 않음
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
  • 신뢰성이 낮음
  • TCP보다 속도가 빠름
  • 신뢰성보다는 연속성이 중요한 서비스 e.g. 실시간 서비스(streaming)에 사용

UDP헤더

  • Source/Destination Port : 출발지/목적지 포트번호
  • Length : 헤더와 데이터를 합한 사용자 데이터그램의 전체 길이(0~65,535)
  • Checksum : 데이터그램의 헤더와 데이터 전체의 오류 검사를 위해 사용

참고

포트(PORT) 상태 정보

  • CLOSED: 포트가 닫힌 상태
  • LISTEN: 포트가 열린 상태로 연결 요청 대기 중
  • SYN_RCV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
  • ESTABLISHED: 포트 연결 상태

플래그 정보

  • URG : 긴급 포인터가 있다는 것을 나타냄
  • 0 : 일반
  • 1 : 긴급
  • ACK : 확인 응답번호가 기술되어 있음
  • 0 : ACK 없음
  • 1 : ACK
  • PSH : 데이터를 주고 받을 때 사용
  • RST : 연결을 재설정 할때 사용
  • SYN : 연결을 초기화 하기 위해 순서번호를 동기화
  • FIN : 송신측이 데이터를 전송을 종료

정리

profile
dev_pang의 pang.log
post-custom-banner

0개의 댓글