[Computer Network] Transport Layer

Y_Y·2022년 11월 8일
0

Computer-Network

목록 보기
5/6

Transport Layer

TCP 통신

  • 연결형 프로토콜
  • 신뢰성 보장
  • 흐름제어 (수신의 연결이 된 것을 확인후 전송)
    • 수신자 버퍼의 상태를 확인
  • 혼잡제어
    • 네트워크 내의 패킷의 수를 조절하여 네트워크 오버플로우를 방지
  • 스트림통신 -> 바이트단위로 전송

Go-Back-N

  1. 누적 Ack
  2. 싱글(단일)타이머 (윈도우별)

Seletive Repeat

  1. 개별 Ack
  2. 개별 타이머 (데이터별)

TCP 세그먼트 구조

설명을 하기위해 세그먼트 0,1,2,3 과 같은 단위로 말했지만 byte 단위이다! (not segments)
TCP Header len : 20byte
Sequence Number : 보낼 데이터의 위치를 보냄
Acknowledgement Number : 받을 데이터의 위치를 보냄
Receive window를 보고 버퍼의 상태 확인 -> 흐름제어
Checksum : 1의 보수
Option 부분에서 MSS 스케일 설정, 연결 설정할 때 확인
만약 Message의 크기가 MSS보다 클 경우 분리하여 전송

TCP 특징

  1. 누적 Ack <- Go-Back-N의 특징
  2. 싱글타이머 <- Go-Back-N의 특징 (타임아웃이 걸리면 타임아웃 걸린 패킷만 보냄, GBN과 약간의 차이)
  3. 버퍼링 <- Selective Repeat의 특징 (지연된, 손실된 데이터를 받을때까지 대기)
  4. 재전송 (Timeout, 중복Ack인 경우 재전송)
  • 타임아웃 시간은 상대적으로 너무 길다
  • 중복된 ACK를 이용하여 손실 세그먼트를 알 수 있다.
  • 송신자가 3 중복 Ack를 수신하면, Ack를 수신하 ㄴ데이터 이후 세그먼트는 손실되었음을 알 수 있다.
    -> fast retransmit : 타임아웃전에 세그먼트를 재전송함.

    왜 3개의 중복 Ack를 받고 빠른 재전송을 하는가
    -> 2개의 중복 Ack까지는 빈번히 일어날 수 있지만 3개의 중복 Ack는 어느정도 확신에 있는 에러가 있다고 판단이 되기 때문에 타임아웃이 발생하기 전에 세그먼트 재전송을 실행한다.

TCP Flow Control

  • 흐름조절
  • 수신자는 여유공간을 세그먼트의 RcvWindow에 포함하여 송신자에게 알림
  • 송신자는 unAck 데이터를 RcvWindow 값에 한정함
    • 수신버퍼 오버플로가 발생하지 않도록

  • Spare room in buffer

RcvWindow = RcvBuffer - {CastByteRcvd - LastByteRcvd}

  • 연결 설정 (3-Way HandShake)
  • 클라이언트는 TCP SYN 세그먼트를 서버에 보냄
    • 초기 클라이언트 순서번호를 명시
    • 데이터 불포함
  • 서버는 SYN를 수신하고 SYNACK 세그먼트로 응답
    • 서버는 버퍼를 할당
    • 서버 초기 순서번호를 규정
  • 클라이언트는 SYNACK를 수신하고 ACK로 응답(데이터를 포함할 수 있음)

  • 종료 설정 (4-Way HandShake)
  • Client는 Server에 TCP FIN 송신
  • Server는 FIN을 수신하고 ACK로 응답하고 FIN을 전송하여 연결종료 상태 진입
  • Client는 FIN을 수신하고 ACK로 응답
    • "timew wait"후 종료
  • Server는 ACK를 수신하고 연결 종료
profile
남을 위해(나를 위해) 글을 쓰는 Velog

0개의 댓글