💡 Application Layer에서 Transport Layer에 바라는 서비스 Application Layer에 서비스 제공 (in TCP/IP 4 계층)
1. data integrity (data 유실 없이 전달) → TCP 제공 2. throughput ex) 최소 x bps이상 보장 → 제공 x 3. timing ex) 내가 보낸 메세지는 x ms 안에 도착하면 좋겠다 → 제공 x 4. security (보안) → 제공 x
컴퓨터에는 여러개의 어플리케이션이 돌아가고, 각 어플리케이션들은 하나 이상의 socket 생성 가능
1) Multiplexing
: 소켓에 의해 Application layer에서 Transport layer로 pkt이 전달될 때,
여러 소켓의 pkt을 수집하여 하나의 segment에 캡슐화하여 Network layer로 전달하는 과정
2)Demultiplexing
: Transport layer 에서 Application layer로 segment가 전달 될 때, 올바른 소켓으로 전달 하는 과정
= 들어온 segment가 어떤 소켓으로 보내져야 할지
→정확한 어플리케이션의 소켓으로 전달해주기 위해 포트넘버를 활용 (in segement의 헤더)
demultiplexing은 들어온 패킷이 UDP인지 TCP인지에 따라 다음 2가지로 나뉜다!
💡 Connectionless demultiplexing (UDP) : dest port # 만 가지고 어떤 socket으로 올려보낼지 판단 (어떤 source IP주소, source port를 갖고 있든 목적지 IP와 포트만 같다면 같은 소켓으로 보냄)
💡 Connection-oriented demultiplexing (TCP) : 4가지 tuple을 가지고 어떤 socket으로 올려보낼지 판단 = ( source IP 주소 / source port # / dest IP 주소 / dest port # ) → connection을 맺은 socket 끼리만 메세지를 주고 받음 !!!
💡 socket : 서로 다른 machine에 존재하는 process 사이의 메세지 교환을 위해 사용하는 system call library
- message를 상대방 socket에 전달하기 위해서, 각 socket들은 unique한 ID, socket 주소를 가지고 있어야 함 - IP 주소 + port number → 소켓의 unique한 ID로 이용 - ( DNS → IP 주소 / port number → 용도별로 고정되어 있음)
Server 1 ) socket() - 소켓 생성 (연결 요청 확인하는 일만 수행) 2) bind() - 소켓에 주소(IP+port#) 할당 3) listen() - 연결 요청 대기 4) accept() - 연결 요청 수락 (새로운 소켓을 생성해서 클라이언트와 연결 = 실제 통신) 5) read() / write() - 데이터 송수신 (버퍼 이용) 6) close() - 클라이언트와 연결에 사용했던 소켓, accept() 로 만들었던 소켓 종료 (2개) ** 듣기 소켓과 연결소켓의 구분을 통해, 통신 중에도 다른 클라이언트의 연결 요청을 받아들일 수 있음
Client 1 ) socket() - 소켓 생성 2) connect() - 소켓 연결 (3 way handshaking) 3) read() / write() - 데이터 송수신 (버퍼 이용) 4) close() - 소켓 연결 종료 (4-way handshaking)