[컴퓨터 네트워크] 전송 계층 1

woo·2023년 3월 8일
0

컴퓨터 네트워크

목록 보기
3/7
post-thumbnail

한번에 여러개 패킷을 보내고 한번에 여러개 처리하여 성능을 향상시켜야한다.
TCP는 transport layer에서 중요한 개념인 reliable data transport의 원리 및 구현하는 메커니즘 으로 파이프라인 방식의 프로토콜을 구현한다.
1. Go-Back-N
2. select repeat

Go-Back-N(GBN)

sender는 한번에 여러개 보내게 되는데, 여러개의 기준 window 사이즈( 버퍼 크기 )를 기준으로
에크(ACK) : 쌓는(culmulative) 에크, ex.ACK11 -> 11번까지 잘 받았으니까 이제 12번 패킷을 보내라!

receiver는 자기가 받아야할 패킷 넘버만 기다린다. receiver에도 윈도우 사이즈 만큼의 버퍼를 가지고 있다.

-> window 사이즈는 4, receiver는 pkt2 기다리고 있는데 다른 pkt가 오면 버린다.(loss) receiver는 sender에게 ACK1을 보냄. 그러다가 2번이 timeout하게 되면 2번부터 다시 window 사이즈 만큼 재전송함

-> timeout 된 패킷은 하나인데 window 사이즈 만큼 모든 패킷을 재전송하니 성능이 떨어짐

selective repeat


재전송 할때 ACK를 받지 못한 패킷만 재전송한다.


-> 유실된 2번 패킷만 재전송한다.


-> sender에서 0,1,2를 보냈는데 0,1,2 ACK이 모두 유실되어 sender은 0을 다시 보낸다.
하지만 receiver은 자신은 0,1,2 ACK를 모두 보냈다고 생각하기에 sender가 다시 보낸 0을 재전송이라 생각하지 않고 다음 sequence의 0이라고 생각하는 문제가 발생한다. 만약 sequence number를 늘리게 되면 이문제가 해결이 된다. 그렇다고 해서 어느 정도 까지 늘려야하는가 생각해봐야한다.

적절한 sequence number를 사용하는 것이 중요하다.

TCP

  • point-to-point : 한 쌍의 프로세스들의 연결, 더 엄격하게는 소켓 한 쌍 끼리의 통신
  • reliable , in-order byte stream : 바이트를 순서대로 유실되지 않고
  • pipelined
  • flow controlled : receiver가 받은 수 있는 만큼만 sender에서 보냄
  • congestion controlled : 내부 네트워크 상황을 고려해 sender에서 보냄


-> 맨 아래있는 data -> message가 담김
-> 나머지는 필드들(source/ destination port 번호, sequence number, acknowledgement number ... )은 header

TCP에서 사용하는 sequence number는 메시지에서 데이터에는 일정한 단위씩 잘라서 담기게 되는데, 이때 담기는 바이트의 첫번째 번호들의 모음이다.
TCP에서 사용하는 ACK는 쌓는(culmulative) 에크이다. ex.ACK11 -> 10번까지 잘 받았으니까 이제 11번 패킷을 보내라! ( Go-Back-N의 ACK와 다르니 주의! )


-> host A가 seq = 42인 패킷을 보냈으니 host b는 42번 패킷까지 잘 받았다는 의미에서 ack = 43을 host A에게 보냄

패킷을 보내고 timeout이 될때까지 패킷에 대한 ACK가 오지 않으면 패킷이 유실되었다고 판단한다. timeout의 크기 = RTT( seqence number가 보내지고 ACK가 날아올때 까지 )가 제일 이상적인데 RTT는 상황에 따라 계속 변한다.(편차가 심하다.) DevRTT를 구해서 사용한다.


-> Go-Back-N과 같이 타이머가 하나이지만 타이머가 터지면 해당 범위를 전체 다 재전송이 되는게 아니라 selective repeat처럼 해당 패킷만 재전송된다.

TCP는 최적화 기법으로 sender가 똑같은 패킷의 ACK가 반복해서 3개가 더 받으면( 3 duplicate ACK ), 총 4개의 같은 패킷 ACK가를 받으면 타이머가 터지지 않아도 그 패킷이 유실되었다고 판단한다.(fast retransmit)

profile
🌱 매일 성장하는 개발자

0개의 댓글

관련 채용 정보