컴퓨터통신#3
LeeMir, 16 March 2021
3장 - Transport Layer
Transport Layer Services
- 서로 다른 host에서 돌아가고 있는 App Processes에게 Logical Communication을 제공함
- Transport Protocols는 end systems에서 기능함
- send side : Application Layer로부터 Message를 받아 Segment로 나눠줌(TCP)
- receive side : Segments들을 Message로 재조립해 Application Layer로 올려줌
- Transport Protocol의 종류는 무수히 많으나, 인터넷에서는 TCP와 UDP을 사용함
- Application을 제작할 때에는 하나만 선택해야함
Transport Layer vs Network Layer
- Network Layer : End host들 간의 Logical Communication(IP)
- Transport Layer : Application Processes간의 Logical Communication
- 상대적으로 낮은 계층인 Network Layer가 Transport Layer에 서비스를 제공해야함
Internet Transport-Layer Protocols
- TCP : 전송 순서에 맞게 Application으로 전송함 (reliable, in-order)
- 하는 일이 많음
- flow control
- congestion control
- connection setup(연결 지향형)
- UDP : 전송 순서 신경쓰지 않고 Application으로 전송 (unreliable, unordered)
- 단순한 일을 함
- IP 또한 unreliable, unordered의 특성을 가짐
- “Best-Effort” : unreliable, unordered하므로 Router에서는 단지 FIFO로 데이터를 전송함
- Services Not Available :
- Delay Guarantees (시간성 요구사항)
- 모든 Packet은 평등함 (어떤 Packet도 우선순위를 갖지 않음) => unreliable, unordered한 IP를 쓰기 떄문
- Bandwidth Guarantees
- Router의 Queue Scheduling이 중요함
- Delay Guarantees (시간성 요구사항)
Multiplexing / Demultiplexing
- 송신(Sender)측에서 Multiplexing을, 수신(Receiver)측에서 Demultiplexing을 해줌
- Multiplexing : Application과 Transport 사이에 여러 개의 Socket이 존재하는데, 이 Socket의 Port 번호를 데이터의 Header에 추가해 Segment로 나눔
- Demultiplexing : Segment를 재조립하면서 Header를 읽어 맞는 Socket으로 보냄
- TCP든 UDP든 Segment의 Header에는 32bits의 크기 중 16bits는 source port #, 나머지 16 bits는 dest port #를 뜻함
- Demultiplexing
- 각 Datagram에는 Port번호 뿐 아니라, Destination IP와 Source IP도 들어있음
- Connectionless(UDP) Demux
- Source IP나 Source Port #가 다를지라도 Destination에서는 동일한 Socket으로 전달될 수 있다
- Application에서 Source IP를 읽어서 구분할 수 있기 때문!
- Connection-oriented(TCP) Demux
- TCP에서 Socket은 다음 네 개에 의해 구분된다
- Source IP Address
- Source Port Number
- Dest IP Address
- Dest Port Number
- UDP와 달리 모두 다 다른 Socket으로 전달되어야 한다
- TCP에서 Socket은 다음 네 개에 의해 구분된다
UDP : User Datagram Protocol
- 특별한 기능이 존재하지 않음(No Frills)
- IP의 “Best Effort” Service 그 자체만 제공
- 데이터가 손실되어도 따로 처리하지 않음
- 순서가 뒤바뀌어와도 그 상태 그대로 전송함
- Connectionless
- 송수신자간 Handshaking을 하지 않음(TCP에서 함)
- UDP의 User Datagram(segment)는 독립적으로 움직임
- UDP의 쓰임새
- DNS(도메인 또는 32-bit IP 주소)
- SNMP(Simple Network Message Protocol)
- Streaming multimedia apps(그룹 통신, 방송)
- 시간성이 중요(데이터가 중간에 아주 조금 소실되어도 됨)
- 다수 통신에 유리, TCP는 1대1만 가능
- Reliability를 제공하지 못함
- 단, Application Layer에서 Error 처리를 하는 방식으로 Reliability를 제공할 수 있음
UDP : User Datagram Header
- Header에는 4개의 Field가 존재
- source port #, dest port #, length, checksum 총 64 Bits = 8 Bytes(Overhead)
- length : Header를 포함한 User Datagram 전체 길이를 명시(끝을 알려줌)
- checksum : error 유무 명시
- Header를 제외한 나머지 부분에는 메시지의 내용이 있음 => Payload
- Why is there a UDP?
- UDP는 연결 설정을 따로 하지 않음(연결 설정은 Delay가 존재)
- 굉장히 Simple함
- Header Size가 작음
- Congetstion Control을 하지 않음
RDT(Reliable Data Transfer) 1.0 : Reliable Transfer Over a Reliable Channel
-
가정
- No Bit Errors
- No Loss of Packets
-
송신
-
rdt_send(data)
packet = make_pkt(data)
udt_send(packet)
-
-
수신
-
rdt_rcv(packet)
extract(packet,data)
deliver_data(data)
-
RDT2.0 : Channel With Bit Errors
- 가정
- Flip된 Bits가 존재 (0 => 1, 1 => 0)
- Checksum을 통해 검출
- Flip된 Bits가 존재 (0 => 1, 1 => 0)
- UDP에서는 Error가 검출되면 버리면 그만이지만 TCP에서는 Recover을 해줘야함
- TCP Recover
- Error가 검출이 되지 않으면 수신자가 송신자에게 ACKs(positive ACKnowledgements) 전송
- Error가 검출되면 수신자가 송신자에게 NAKs(Negative AcKnowledgements) 전송
- 송신자가 NAK를 받게 되면 데이터를 재전송함