전송 계층
서로 다른 호스트에서 도는 두 응용에게 논리적인 종단간 통신을 제공하는 계층
- 논리적이라는 말은 전송계층이 두 프로세스가 직접 연결되있다고 느끼게 한다는 것이다
- 전송 계층의 전송측은 메세지를 세그먼트로 쪼개서 네트워크 계층으로 보낸다.
- 수신측은 세그먼트를 재조립해서 응용계층에게 보낸다.
전송 계층이 제공하는 서비스
아래에 모든 서비스를 제공해야 하는 것은 아니다.
- 흐름 통제 : 수진자의 버퍼양을 보면 송신양을 조절하는 것
- 정체 통제 : 네트워크 상황을 보고 정체가 안 일어나게 송신양을 조절하는 것
- 믿을만한 통신 : 보낸 데이터가 로스나 에러도 없고 순서도 맞는 것
- 이름 위해서 위 두개가 필요하다. 로스가 일어나면 안 되기 때문이다.
- 연결 관리 : 상위 두개를 위해선 연결을 유지하여 서로의 상황을 알아야 할 수도 있다.
종류
tcp
- 믿을만한 통신을 제공
- 백프로가 될 수 없다면 그냥 포기한다.
- 버퍼링을 통해 순서를 맞춘다.
udp
- 믿을만하지 않다.
- 운이 좋으면 백프로일 수도 있다.
- 순서도 보장하지 않는다.
- 아무것도 안 하니 ip의 확장이라고 생각할 수 있다.
공통점
- 둘 다 포트번호를 통한 먹스와 디먹스를 제공한다.
- 체크섬을 통해 간단한 에러체크도 한다.
- 딜레이와 대역폭은 보장하지 않는다.
먹스와 디먹스
- 먹스 : 서로 다른 두 응용의 메세지가 하나의 전송계층을 통해서 나가는 것
- 디먹스 : 하나의 전송계층을 통해서 들어온 메세지를 올바른 프로세스에게 분리해서 주는 것
udp에서의 먹스와 디먹스
- 연결이 없다.
- 그래서 소켓을 만들 때 자신의 포트번호만 지정해주면 된다.
- 하나의 소켓은 (ip주소, 포트번호) 정의된다.
- 하나의 소켓을 여러 곳에 보낼 수 있다.
- 연결을 하지 않으니 모든 메세지에 상대방 ip 주소와 포트번호를 적어줘야 한다.

예시를 보면
프로세스1에서는 하나의 소켓으로 여러 프로세스에게 메세지를 보내는 것을 알 수 있다.
하나의 소켓을 정의하는데 자신의 ip 주소와 포트번호만 있으면 되는 것을 볼 수 있다.
tcp에서의 먹스와 디먹스
- 연결이 있다.
- 소켓은 (자신의 ip 주소, 자신의 포트번호, 상대방의 ip 주소, 상대방의 포트번호)로 정의가 된다.
- 서버는 서버 포트로 리스닝 소켓을 만든다.
- 클라이언트가 서버 ip 주소와 포트번호를 이용해 보내면 리스닝 소켓이 받아들여 연결 소켓을 반환한다.

예시
가운데 호스트는 멀티 쓰레드 환경이다. 따라서 p4 p5 p6는 같은 프로세스이므로 ip 주소가 B로 모두 같다.
대화하는 프로세스 쌍 하나당 소켓이 하나가 있어야 한다. 중간 호스트에 여러 소켓이 만들어진다.