티스토리 뷰

Transport Layer

  • Transport Layer is responsible for the delivery of a message from one process to another.
  • 3계층과 뗄수없는 매우 밀접한 관계에 있는 계층이다. NAT의 경우 IP & PORT 의 조합으로 통신을 하게 된다.
    • Network Layer : Host 간 통신
    • Transport Layer : network layer에 의존한 프로세스 간 통신
    • IP 주소 + Port 번호 -> Socket Address가 된다. 소켓 통신은 콘센트를 소켓에 꽂듯이 직접 연결해서 통신하는 방법이다.

 

트랜스포트 계층 역활

전송파트

Message를 전송할 만한 segments로 Dividing해서, Numbering하고, Sending까지 한다.

  • Segments가 너무 크다면 : 전송한 패킷에 오류가 발생할 확률도 높아지고, 재전송의 오버헤드도 올라간다.
  • Segments가 너무 작다면 : 고정적인 Header영역으로 인해 payload가 너무 작아져서 비효율적으로 데이터를 보내야 하는 문제가 있다.
  • Numbering은 패킷의 순서를 보장하기 위해서 한다. (네트워크 상에서는 순서를 보장할 수 없으므로 도착할 때 확인해서 조합한다)
수신파트

모든 Segments를 수신받아서 Error Checking을 하고 Message로 Reassemble한다. (only TCP)

  • Error Detecting & Error Resolve에는 여러가지 방법이 존재한다. FEC, CRC
TCP 계층을 이용하는 서비스 구분

UDP : IP Telephony, Streaming Video (Zoom, Netflix)

특징

  • 신뢰할 수 없다.
  • 전송이 빠르다.
  • 손실 데이터를 재전송하지 않는다.
  • 전달받은 데이터를 그대로 처리한다.
    • -> Ack를 필요로 하지 않는다.
  • Connection-less하다.

TCP : SMTP (e-mail), HTTP

특징

  • 신뢰할 수 있다.
  • 손실 데이터를 재전송해줘야 한다.
  • 전달받은 데이터를 순서대로 재조합해서 처리해야한다.
    • -> Ack를 필요로 한다.
  • Connection-oriented하다.

기능

  • Congestion Control (네트워크 혼잡제어) : 네트워크상 패킷의 오버헤드로 데이터 손실 가능성이 있을 경우 Receiver, Sender가 같이 전송을 제어하는 것.
  • Flow Control (수신측 흐름제어) : Reciver에 패킷이 몰려서 데이터 손실 가능성이 있을 경우 전송측에서 제어해주는 것.
  • Connection Setup : 서버-클라이언트간 원할한 전송을 위해서 미리 자원을 확보해 두는 작업.

제공하지 않는 기능

  • Delay Guarantees : 데이터를 전송할 때 수신측이 얼마의 Delay내에 받을 것이라고 보장해줄 수 없다.
  • Bandwidth Guarantees : 특정 서비스를 이용할 때 필요한 최소 전송속도가 있는데 이를 보장해줄 수 없다.

UDP : User Datagram Protocol

특징

  • best effort
    • 주어진 대역폭에서 최선을 다한다는 것으로, 네트워크 환경/상황에 맞춰서 최선을 다해서 보낼 뿐 전송을 위해 추가적인 노력을 하지 않는 것을 의미한다. 즉, 최선을 다한다는 것은 스위치/라우터가 전송을 위해 자신의 역활을 다하는 정도로 볼 수 있다.
  • connectionless
    • 송신자와 수신자간 handshaking 없이 통신한다.
    • UDP Segment는 다른 패킷들은 고려하지 않고 무작정 보낸다.
  • 사용 : 스트리밍, DNS에서 사용한다.
  • UDP에서 reliable한 전송을 위해서는 클라이언트 단에서 해줘야한다. (보통 그러면 TCP를 사용한다)
Segment Header

UDP checksum

  1. Sender에서 보내는 세그먼트의 모든 비트를 16비트 단위씩 끊어서 숫자로 취급해서 더한다.
  2. 더한 값을 Segments의 checksum에 적는다.
  3. 수신측에서 전달받은 Segment의 모든 비트를 똑같이 16비트 씩 숫자로 더한다.
  4. 해당 값을 checksum과 비교해서 오류를 Detect한다. (같으면 : no error, but maybe errors, 다르면 : error)

 

반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday