다른 호스트에서 실행중인 App 간, 논리적 상호작용을 담당
End System 에서 실행
Sender, App의 메시지를 Segment로 쪼개어서 Network Layer에 전달
Receiver, Segment를 다시 모아서 Message 완성, Application Layer에 전달
이 두개의 Transport 프로토콜은 TCP, UDP라는 인터넷 Application을 통해 이루어진다.
두 프로토콜은 delay 보장, bandwidth 보장 불가
소켓을 만들때 반드시 host-local port 넘버를 특정하여 보내야함
Datagram을 만들어 UDP socket으로 보낼때 두가지를 특정해야함
-> 목적지가 동일한 IP/UDP 데이터 그램 포트 번호, 그러나 다른 소스 IP 주소 및 소스 포트 번호는, 수신 호스트에서 동일한 소켓으로 지정
D의 source ports는 6428, dest Ports는 5775가 될 것임.
Multiplexing, Demultiplexing 둘다 Segment, datagram의 헤더 필드에 기반하여 동작,
모든 계층에서 이루어짐
목적지 포트 넘버만 사용하여 Demultiplexing 진행
4가지 값(목적지의 아이피와 포트넘버, 출발지의 아이피와 포트넘버)를 사용하여 Demultiplexing 진행
no-frils, bare bones(essential) 인터넷 Transport 프로토콜
-> best-effort Service, UDP Segment는 손실되거나, 동작하지 않을 수도 있음
connectionless
UDP 송/수신측 간 handshaking 없이 진행되며, 각각의 UDP Segment는 독립적으로 실행됨
UDP 가 존재하는 이유
=> UDP는 스트리밍, DNS, SNMP, HTTP/3 에 사용
HTTP/3 같은 경우 UDP에 신뢰성 있는 통신이 필요한데, 신뢰성 혹은 혼잡 제어를 어플리케이션 계층에 더해야 함
잘못된 숫자가 들어오는 것을 확인하기 위해 sum값을 활용.
수신측이 computed 한 checksum 과 송신측이 computed 한 checksum이 불일치하면 ERR!
Sender
UDP 새그먼트를 16비트 정수로 처리
1의 보수를 활용한 추가 checksum 비트 활용 -> UDP Checksum 필드에 집어넣기
Recevier
받아온 새그먼트의 checksum을 계산
만약 계산된 checksum과, checksum 필드의 값을 비교
결과가 다르면 에러 발생
-> 그런데, checksum 이 같다고 해서 100% ERR가 발생하지 않는 것은 아님.
맨뒤 비트 두자리가 다름에도 불구하고 checksum 의 결과는 동일