트랜스포트 계층 프로토콜은 다른 호스트에서 동작하는 어플리케이션 프로세스간의 논리적 통신을 제공한다. 네트워크가 호스트간 연결을 지원했다면, 트랜스포트 레이어는 프로세스간의 링크를 관리한다. 이러한 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현된다. 세그먼트 단위를 사용한다.
네트워크 계층 : host - host → 트랜스포트 계층 : process - process
애플리케이션 레이어에서 소켓이 존재한다. 이 소켓들은 각각 유일한 식별자를 갖는다. 트랜스포트 레이어도 직접전달하는게 아니라 소켓을 통해서 데이터를 전달하게 된다.
Demultiplexing (역다중화) : 수신 측의 트랜스포트 계층은 수신 소켓을 식별하기 위해서 세그먼트 필드를 검사한다. 그리고 해당 소켓으로 보내준다.
Multiplexing (다중화) : 출발지 호스트에서 소켓으로부터 데이터를 모으고 세그먼트에 헤더 정보를 캡슐화해서 전달하는 것
포트 번호는 0~65535까지의 16비트 정수다. 0~1023 → 잘 알려진 포트 번호
clientSocket = socket(AF_INET, SOCK_DGRAM)
# 현재 호스트에서 UDP 포트로 사용하지 않는 1024~65535 포트번호 할당
clientSocket.bind(('',19157))
# 특정 포트 번호를 정적으로 할당
UDP 는 목적지 IP 주소와 , 목적지 Port.num 만 보고 세그먼트를 보낸다. 따라서 출발지 IP 주소와 출발지 Port.num 이 달라도 목적지의 주소만 같다면 같은 목적지 소켓을 향해 같은 프로세스로 갈 것이다.
출발지 IP 주소화 출발지 Port.num 은 recvfrom() 함수를 통해서 추출되어 회신하기를 원할 때 사용된다.
TCP 에서는 4가지 요소로 소켓을 식별한다. → 출발지 IP, 출발지 Port.num, 목적지 IP, 목적지 Port.num
TCP 서버 애플리케이션은 ‘환영 소켓’을 가지고 있다. 이것은 Port.num이 12000인 TCP 클라이언트로 부터 연결 설정 요청을 기다린다.