Post

L4 전송 계층





전송 계층

  • 송신자의 프로세스와 수신자의 프로세스 간의 연결을 제공한다.
  • 이전까지의 네트워크 환경은 기본적으로 비신뢰성 환경이다.
    • 데이터가 전송 중에 유실되거나 손상될 수도 있다.
  • 신뢰성 있는 전송을 할 수 있게 해주는 것이 전송 계층이다.
  • 연결지향과 신뢰성, 정확성의 TCP와
  • 비연결지향과 효율성의 UDP가 있다.



포트

  • 특정 프로세스를 나타내는 주소이다.
  • 하나의 포트는 하나의 프로세스만이 사용이 가능하다.
  • 반대로 하나의 프로세스가 여러개의 포트를 사용할 수는 있다.
  • 0 ~ 65535의 범위를 가질 수 있다.
  • 포트 번호는 세 가지로 나눌 수 있다.
    • 0 ~ 1023 : well-known port
    • 1024 ~ 49151 : registered port
    • 49152 ~ 65535 : dynamic port


  • well-known port
    • 0 ~ 1023
    • 특정한 애플리케이션을 위해서 정해진 포트 번호이다.
    • 강제적인 것이 아니다.
well-known port 
FTP20, 21
SSH22
TELNET23
DNS53
DHCP67, 68
TFTP69
HTTP80
HTTPS443
  • registered port
    • 1024 ~ 49151
    • 특정 서비스로 인해 등록된 포트 번호이다.
    • 역시 강제적인 것은 아니다.
registered port 
MySQL3306
HTTP 대체8080
  • dynamic port
    • 49152 ~ 65535
    • 어느 프로그램에서나 사용할 수 있는 포트 번호이다.



만약 내 크롬과 네이버가 통신을 한다고 하면,

  • 네이버 서버는 80포트를 사용하고, 내 크롬은 60000 포트를 사용한다.
    • 크롬으로 네이버 스포츠를 띄우면 (네이버 ip의 80포트로 스포츠 요청을 보내면)
    • 네이버는 내 ip의 60000번 포트로 스포츠 응답을 보낸다.
    • 내 60000번 크롬에 네이버 스포츠 화면이 뜬다.
  • 내가 크롬을 하나 더 띄웠다고 할 때 걔는 50000번 포트를 사용한다.
    • 50000번 크롬으로 네이버 뉴스를 띄우면 (네이버 ip의 80포트로 뉴스 요청을 보내면)
    • 네이버는 내 ip의 50000번 포트로 뉴스 응답을 보낸다.
    • 50000번 크롬은 네이버 뉴스를 띄운다.
  • 나는 크롬을 두 개 띄워놨지만, 걔네는 서로 다른 화면을 보여주고 있다.
    • 50000번 크롬이 네이버에게 요청을 보냈을 때, 60000번 크롬에게는 아무 영향도 없었다.
    • 같은 크롬을 두 개 띄웠음에도 서로 영향을 주지 않고 정확한 결과를 보여줬다.
    • 네이버의 응답이 포트 번호를 보고 잘 찾아갔기 때문이다.



세그먼트


img-description 세그먼트


  • L4의 PDU이다.
  • TCP는 복잡하고 길고
  • UDP는 단순한 모양을 갖는다.
  • 얘네 모양은 뒤에 각각의 차례에 살펴본다.





UDP

  • User Datagram Protocol
  • 또는 Universal Datagram Protocol이라고도 한다.
  • 비연결지향형
    • 데이터를 전송하기 전에 연결의 과정이 따로 없기 때문에,
    • 브로드캐스팅에 적합하다.
  • 비신뢰성
    • 전송 방식이 매우 단순하다.
    • 그래서 서비스의 신뢰성이 낮다.
      • 데이터그램의 도착 순서가 보장되지 않고,
      • 데이터그램의 중복이 있을 수도 있고,
      • 통보 없이 데이터그램의 누락이 있을 수도 있다.
    • 그래서 속도가 빠르다.
  • 일반적으로 오류의 수정이나 검증이 필요없는 경우에 많이 쓰인다.



img-description UDP 프로토콜


  • Source Port
    • 출발지 포트 번호
  • Destination Port
    • 도착지 포트 번호
  • Length
    • UDP 헤더의 길이 + 뒤의 페이로드 길이
  • Checksum
    • 역시 오류를 체크하기 위한 값





TCP

  • Transmission Control Protocol
  • 연결지향형
  • 신뢰성
    • UDP에 비해 기능도 많고 복잡하다.
      • 에러 제어, 흐름 제어, 혼잡 제어
    • 안정적인 통신을 지향한다.
      • 데이터를 안정적이고,
      • 데이터의 순서를 보장하고,
      • 에러 없이 통신할 수 있게 한다.
    • UDP보다 상대적으로 느리다.



img-description TCP 프로토콜


  • Source Port
    • 출발지 포트 번호
  • Destination Port
    • 도착지 포트 번호
  • Sequence Number

  • Acknowledgment Number

  • Offset
    • 헤더의 길이를 나타낸다.
    • IP랑 마찬가지로 4로 나눠서 값의 위치를 적는다.
  • Reserved
    • 미래를 위해 예약된 필드
    • 사용되지 않음
  • TCP flags
    • TCP 헤더가 어떤 기능을 수행하는 지를 나타내는 플래그이다.
    • C E U A P R S F 8개가 있지만,
      • 보통 U A P R S F만 사용한다고 한다.
  • Window
    • 데이터를 얼만큼 보내줘도 되는지 알리기 위한 용도
    • 아래에서 window에 대해 자세한 설명을 한다.
  • Checksum
    • 오류를 확인하기 위한 값
  • Urgent Pointer
  • TCP Options
    • 추가 정인 옵션들
    • 0~10개까지 붙을 수 있다. (4바이트씩)



TCP flags

  • URG
    • 긴급 비트
    • 긴급 데이터라고 알리는 용도
    • 송신 측에서 얘를 1로 채워서 보내면,
      • 정해진 순서와 상관없이 이 데이터를 먼저 송신한다.
  • ACK
    • 승인 비트
    • Acknowledgement Number 얘가 유효한지 아닌지를 알리는 용도이다.
      • 승인 비트가 1이면, Acknowledgement Number가 유효하다.
      • 0이면, Acknowledgement Number가 유효하지 않다. (무시됨)
  • PSH
    • 푸쉬 비트
    • 버퍼링된 데이터를 바로 상위 계층으로 푸쉬하는 용도이다.
    • 수신 측의 버퍼가 가득 차지 않았을 때,
      • 푸쉬 비트가 1로 설정된 패킷이 날라왔다.
      • 그럼 버퍼를 바로 푸쉬한다.
  • RST
    • 초기화 비트
    • 강제 연결 초기화의 용도이다.
    • 연결 상의 문제가 발생되었을 때 연결을 강제 초기화 한다.
  • SYN
    • 동기화 비트
    • 연결 시작의 용도이다.
    • 송수신 간의 Sequence Number의 동기화
  • FIN
    • 종료 비트
    • 연결 해제의 용도이다.
    • 송수신 간의 데이터 전송이 모두 끝나서 종료하고 싶을 때 사용된다.



3-way handshake

  • 프로세스와 프로세스 간에 TCP를 사용해서 통신을 할 때, 가장 먼저 수행되는 연결 과정이다.
    • 클라이언트가 서버에 요청 패킷을 보내고
      • SYN
    • 서버가 요청을 수락하는 패킷을 보내고
      • SYN + ACK
    • 클라이언트가 최종적으로 수락하는 패킷을 보낸다.
      • ACK
  • 이 과정을 Three way handshake라고 하고, 얘가 끝나면 그 뒤에 데이터 통신이 이뤄진다.



4-way handshake

  • 프로세스 간의 통신이 모두 끝나고, 연결을 종료하는 과정이다.
    • 클라이언트가 서버에게 연결 종료를 요청한다.
      • FIN
    • 서버가 연결 종료 요청에 대한 응답을 보낸다.
      • ACK
    • 이번엔 서버가 연결 종료 요청을 보낸다.
      • FIN
    • 클라이언트도 연결 종료 요청에 대한 응답을 보낸다.
      • ACK





This post is licensed under CC BY 4.0 by the author.