→ Open in Slid
Socket programming
socket은 UDP를 이용해 client-server간에 데이터를 전송할 수도 있고, TCP를 사용할 수도 있다.
UDP를 사용할 경우
- client - server 간 통신을 위한 set-up이 필요없기 때문에 데이터 전송 전에 handshaking이 필요가 없게 된다.
- 내보내는 메시지에 목적지 주소와 포트번호를 붙여서 보낸다. (중요)
- 일반적으로 client의 IP주소와 port번호는 알려져 있지 않다. 그렇다면 이를 어떻게 알아내나? - 자기가 받은 segment로부터 추출하게 된다. (중요)
Client/server socket interaction: UDP
client - server간에 통신이 이루어지기 위해서는 server 프로세스가 먼저 실행되고 있어야 한다.
그러기 위해선 먼저
- server socket을 먼저 생성한다.
- 이후 client socket을 생성한다.
- client socket에서 서버의 port번호와 IP주소를 패킷에 붙여서 내보낸다.
- 그럼 이를 server는 server socket을 이용해 읽어들이게 된다.
- 그럼 server socket이 답을 하기 위해서는 client address와 port number를 명시해야 한다. (그러나 이는 client process조차 모른다.) - 이는 운영체제가 알아서 mapping하기 때문 - 그러나 server는 client가 데이터를 내보낼 때 붙어있는 번호를 이용해 이를 extract(추출)해서 알게 된다.
- 그럼 client는 client socket을 이용해 이를 읽고 client socket을 닫게 된다.
- server socket은 계속 실행된다!!
Example app: UDP client

Example app: UDP server

Socket programming with TCP
클라이언트는 반드시 서버와 연결되어야 한다.(handshake필요)
- 서버가 반드시 먼저 실행중이어야 한다.
- 서버는 socket(welcome or door socket)을 생성하는데, 이는 client의 contact를 받아들이기만을 위한 용도다.
- 이후 client는 TCP socket을 생성
- client가 server에 contact하기 위해서는 IP주소와 port번호를 명시를 해줘야 한다. (TCP socket을 통해서)
- 이러면 client TCP와 server TCP가 connection을 맺게 된다.
- 이후 아까 만들어두었던 door socket으로 받아들이면, server TCP는 해당 client만을 위한 새로운 socket을 생성한다.
- TCP socket programming을 할 때는 목적지를 별도로 명시하지 않는다.
- 왜냐하면 목적지 app에서 상대방 socket이 누구라는 걸 TCP계층에서 이미 알고 있기 때문
그렇다면 왜 TCP는 door socket 같은게 필요하며, client 별로 새로 socket을 생성해야 하는가?
- 이는 TCP가 byte-stream을 교환하기 때문이다
- UDP는 독립적이다. 따라서 UDP에서는 message 하나를 받으면 그 message에 대한 답을 보내주면 끝이다.
- But TCP에서는 server-client 통신 중 다른 client의 contact 또한 받을 수 있어야 하기 때문에 이렇게 작동한다.
- server socket은 connection socket(초기에 contact를 위해 열어놓았던 socket)만 종료시킨다!!
Client/server socket interaction: TCP

Example app: TCP client

Example app: TCP server

P2P 아키텍쳐
- P2P 아키텍쳐에서 각 Endsystem은 클라이언트이자 서버이다.
- 유저가 증가하면 Request도 늘고 Response도 는다.
- 스스로 몸집을 키워나가는 Self - Scalabilty(확장성) 특징을 가지고 있다.
- Bit Torrent
- - 파일은 256kb로 나뉜다.
- - 토렌트 : 피어들의 그룹
- - 트렉커 : 그룹에 속한 피어들의 정보를 저장한다.
- - tit for tat 원칙으로 작동한다. -> 나한테 많이 전송해준 유저에게 나도 많이 전송한다.
- - Starvation을 막기 위해 무작위로 최대한 전송해주고 응답을 tit for tat 원칙으로 평가한다
Summary
application architecture
- client - server
- P2P (확장성의 장점을 가지고 있다)
application service requirements
- reliability(신뢰성 - 오류없이), bandwidth(전송속도), delay(지연율)
Internet transport service model
- 현재 인터넷 서비스에서는 신뢰성을 높이는 작업만을 할 수 있다. 따라서 사용되는 것이 TCP
- connection-oriented, reliable: TCP
- unreliable, datagrams: UDP
specific protocols
- HTTP
- FTP
- SMTP, POP, IMAP
- DNS
- P2P: BitTorrent, DHT
socket programming (우리 스스로가 network application을 작성하는데 필요로 한 게 바로 socket이다!)
Transport Layer - 전송계층 (Chapter 3)
- 지금까지 공부했던 Application Layer는 전송을 담당하는 계층이 아니다. Http는 사용자가 만들어낸 데이터를 메세지로 만드는 '규칙'이었고 DNS는 도메인-IP간 매핑을 해주는 '서비스'였다.
- 애플리케이션 계층의 웹브라우저든 이메일 클라이언트든 모두 "프로세스"이다. TCP는 프로세스 간 "Logical Communication"을 담당한다.
- Logical Communication, 논리적 통신이란 실제 전송이 아니라 메세지를 주고받는 과정에서 오류체크, 흐름제어 등을 한다는 것이다.
- 전송계층의 두 프로토콜
TCP : Transmission Control Protocol
UDP : User Datagram Protocol
멀티플렉싱, 디멀티플렉싱
- 멀티플렉싱(보내는 쪽)이란? ( Multiplexing, 줄여서 mux라고도 한다.)
- 하나의 통신 채널로 여러개의 데이터를 동시에 보내는 것이다.
- 여러 애플리케이션들이 전송계층으로 메세지를 전달하면 전송계층에서는 헤더(목적지를 찍어줌)를 붙여서 캡슐화하고 네트워크 계층으로 일렬로 내려보낸다.
- 디멀티플렉싱(받는 쪽)이란? ( Demultiplexing, 줄여서 demux라고도 한다.)
- 수신 측 전송 계층에서 네트워크 계층에서 일렬로 올라온 데이터들을 헤더정보를 보고(sender 측에서 찍어준 목적지를 보고) 알맞은 각 애플리케이션 소켓으로 전달하는 것이다.
- Connection Oriented demuxTCP의 경우 연결을 맺는데 사용되는 Door Socket이 있고 커넥션 별로 소켓이 따로 있다.
- 따라서 한 프로세스가 커넥션 마다 소켓 하나씩을 가지므로 여러개의 소켓을 가질 수 있다.
- 따라서 demux를 위해선 목적지 프로세스와, 출발지 프로세스에 대한 정보가 필요하다.
- 목적지 프로세스 구분을 위해 : 목적지 IP, 포트번호
- 출발지 프로세스 구분을 위해 : 출발지 IP, 포트번호
- 따라서 TCP는 총 네개의 정보가 필요하다.
How demultiplexing works
segment - header와 payload로 이루어짐.
transport 계층에서 만들어내는 data unit을 segment라고 한다.
- header에 반드시 포함되어야 하는 필드: source port, destination port
- payload