네트워크 - Transport Layer
- Transport services and protocols
: 서로 다른 호스트의 프로세스간 논리적인 연결 제공
: 종단 시스템 간에 동작하는 첫번째 layer
: send side에서 app msg를 segment로 쪼개 network layer로 전송
: receive side에서는 segment를 message로 재조립하여 application layer로 전송
- Transport vs. Network layer
: Transport는 프로세스간 논리적인 연결
: Network는 호스트간 논리적인 연결 TCP vs. UDP
: 두 프로토콜 모두 delay, bandwidth guarantees 이용 불가
: 많은 application들은 하나의 transport layer protocol을 사용하므로 Multiplexing and Demultiplexing이 필요함
- TCP(Transmission Control Protocol)
: 신뢰성, 메세지 순서 보장
: 연결성(발신자 수신자간 handshaking)
: point-to-point
: full duplex (전이중 방식), 하나의 Connection에서 양쪽으로 데이터 흐름
: 혼잡 제어, pipelined(window size로 혼잡 및 흐름 제어)
: send & receive buffers
: HTTP, FTP, SMTP, Telnet 등에 사용
TCP segment structure
■ 3-hand-shaking
■ 4-hand-shaking
- UDP(User Datagram Protocol)
: 비신뢰성, 메세지 비순서
: 비연결성(발신자와 수신자간의 handshaking 없이 port만으로 소켓 구별, no-frills extension of “best-effort” IP)
: 설계방식에 따라 full duplex, half duplex (반이중 방식)
: reliability를 application layer상에 추가(RUDP)할 수 있지만 app-specific error만 복구 가능
: RTT가 너무 짧으면 불필요한 재전송 발생, RTT가 너무 길면 느린 reaction과 segment 손실 가능성
: RIP(Routing Information Protocol), DNS, NFS(Network File System), SNMP(Simple Network Management Protocol)등에 사용
UDP segment structure
■ Checksum
: segment의 에러 체크
: header + data + pseudo-header의 sum의 16 bit-one's complement 값
: 모든 Data값과 checksum값을 더했을 때 모든 bit가 1로 채워져있다면 에러가 없음을 의미, 에러가 검출되면 해당 segment는 버려짐
- Multiplexing and Demultiplexing
- Demultiplexing
: host는 IP datagrams을 받음(IP와 PORT로 적합한 소켓을 구별)
: 각 datagram은 source IP address, destination IP address를 가짐
: 각 datagram은 1 transport-layer segment를 가짐
: 각 segment는 source, destination port를 가짐
1. Connectionless demultiplexing
2. Connection-oriented demultiplexing
Principles of Reliable data transfer(RDT)
: FSM(Finite State Machine)? 각각 loop를 돌고 있는 상태
: ACKs(ACKnowledgements)? 수신자가 패킷을 받았다고 발신자에게 보내는 신호
: NAKs(Negative ACKnowledgements)? 수신자가 패킷에 에러가 있다고 발신자에게 보내는 신호(seq# ack로 대체)
: rdt 1.0? 수신, 발신 FSM을 분리 -> rdt 2.0? 에러 복구에 대한 ACK, NAK 도입 -> ACK/NAK 에러 발생시 발신자는 알수없으므로 중복 전송 가능성 -> rdt 2.1? 발신자는 ACK/NAK를 받았을 경우에만 재전송, 각 패킷에 sequence number를 붙임, 수신자는 중복 패킷 버림 (stop and wait) -> ACK/NAK에서 에러가 발생할 경우 전송한 패킷을 재전송 가능성 -> rdt 2.2? NAK 대신 마지막으로 받은 패킷의 seq를 ACK에 붙여 전송 -> 패킷이나 ACK에서 에러나 손실이 발생하면 무한정 기다리게 됨 -> rdt 3.0? time-out 도입
1. Forward Error Correction(FEC)
: Realtime communication
: 수신자로 하여금 에러를 수정할 수 있도록 redundant bits를 추가
2. Retransmission
: 수신자가 에러를 감지하고 발신자에게 data를 다시 전송해달라고 요청
: ARQ(Automatic Repeat reQuest)
: 수신자 피드백 방식, 오류검출만으로도 통신회선의 신뢰성 제고, 실시간 처리에는 부적합한 에러 제어 방법
: 오류 검출, 수신 여부 피드백, 재전송 기능 등이 필요
■ Stop and Wait
: 한 번에 하나씩 긍정 확인응답(ACK)을 받고, 후속 데이터 전송
: 가장 단순하나, 다소 비효율적
: 반이중 방식에서도 가능(Pipelining를 이용하여 효율 증가)■ Go back N(GBN or Continuous ARQ)
: Pipelining Protocol
: 반이중 방식
: Sliding Window 방식
: 한번에 여러 개를 보낸후 하나의 긍정 확인응답(ACK)을 받고, 후속 데이터 전송.
: 발신자는 패킷 n에 대해 timeout 발생시 패킷 n과 window 안에 있는 seq #이 n보다 높은 모든 패킷을 재전송
: 수신자가 예기치 않은 패킷을 받을 경우, 그 패킷을 버리고 가장 최근에 받은 패킷의 ACK를 재전송
■ Selective Repeat
: Pipelining Protocol
: 전이중 방식
: Go back N 과 비슷하지만 오류가 발생된 패킷 이후 또는 오류 발생된 패킷만을 재전송
: 수신자는 순서가 다르더라도 Receiver Window 안에 포함되는 패킷이라면 받을수 있으며 Buffer 해놓음.