본문 바로가기

ComputerScience/Network

Application Layer - 2. transport layer service, TCP/UDP

728x90

이전 시간에 application이 필요로 하는 transport service에 대해 알아보았다.

1. TCP

internet transport protocol 중 하나로 가장 유명하다.

reliable transport : 100% 신뢰성을 보장한다. (전송 보장)

flow control : sender는 receiver의 buffer크기, 메모리를 초과해서 보내지 않는다. (receiver가 너무 바쁘면 천천히 보낸다)

congestion control : network가 너무 바쁘면(overloaded) sender는 보내는 양을 조절한다(throttle)

in-order보장.

반면에 timing, minimun throughput, security는 보장하지 않는다.

connecton-oriented : 데이터를 전송하기 전에 client와 server사이의 setup이 필요하다.

byte-stream-oriented : 1번, 2번 패킷으로 나누어서 보내더라도 받을때는 구분없이 byte스트림으로 받는다.

2. TCP : client/server socket interaction

항상 socket을 통해 listen상태여야 한다. 그래야 connection 요청을 accept할수 있다. 그러면 client TCP, server TCP가 서로 connect된다.

이때 서버는 특정 client를 위한 새로운 socket을 만든다.(만들때마다 포트번호도 다르다) 그래야 하나의 서버가 여러 client와 통신이 가능하다.

1. 서버, client모두 socket 생성. 서버는 항시 connection을 위해 listening중이다.

2. client가 server에게 client socket을 통해서 connect요청을 한다.

3. server socket을 통해 서버가 연결 요청을 accept

4. client만을 위한 개별 connection socket을 생성

5. client는 client socket을 통해 서버에게 요청을 보낸다. ex. GET

6. 서버의 connection socket을 통해 client의 요청을 받는다.

7. connection socket을 통해서 client에게 응답을 보낸다.

8. client가 응답을 받고나면 client socket 종료.

9. 서버의 connection socket도 종료.

*위의 예시에서는 한번 요청과 응답이 오고간 후에 socket을 닫았지만 만든 소켓을 계속 활용해서 여러번 메시지를 주고 받을 수 있다. 굳이 매번 connection을 다시 만들 필요는 없다.

3. UDP

신뢰성, flow control, congestion control, 보안, 타이밍, 순서, throughput 어느 항목도 보장하지 않는다. connection setup도 필요없다.

그럼 udp는 왜 사용하냐고 물어볼 수 있다. 만약 내가 패킷의 90퍼센트라도 받을 필요가 있다면 혹은 네트워크 혼잡도와 무관하게 일정 주기의 응답이 필요하다면 UDP가 필요할 수 있다.

udp는 구현이 간단하다. state를 최소한으로 저장하기 때문에 더 작은 메모리면 충분하고 패킷 자체가 simple, small해서 overhead도 적다.

4. UDP : client/server socket interaction

tcp와 달리 connection이 필요 없기 때문에 모든 패킷마다 dst ip주소와 port넘버를 담아야 한다.

따라서 byte들을 group으로 묶은 개별 datagram들을 보내고 받는다. (패킷 1,2번으로 나눠서 보내면 1,2번으로 나눠서 받는다.)

1. 서버와 클라이언트는 가장 먼저 소켓을 생성한다. (AF_INET은 ipv4, sock_dgram은 udp)

2. 클라이언트는 보낼 datagram을 clientSocket을 통해 서버에게 보낸다.(with server IP, port number)

3. server는 server Socket을 통해 datagram을 수신한다. 

4. 응답을 적어서 server socket을 통해 client에게 보낸다.(with client IP, port number)

5. Internet apps

실제로 응용이 사용하는 application layer protocol과 기반하는 transport protocol을 알아보자.

email, web, file전송 서비스의 경우 신뢰성을 보장하기 위해 TCP를 사용할 수 밖에 없다.

반면 streaming서비스의 경우 UDP를 쓸 수 있다. 하지만 시대가 지나면서 대역폭도 커지고 인터넷 속도가 빨라지면서 TCP도 사용하고 있다.

6. Securing TCP

tcp, udp모두 security를 보장하지 않는다.

암호화를 따로 하지 않는다. 비밀번호 같은 내용도 cleartext로 socket을 통해 전달한다.

tcp에서 이런 보안상 약점을 보완하고자 SSL을 함께 사용한다. SSL은 application layer에 있다. 응용프로그램에서 SSL libraries를 사용해서 tcp와 대화한다.

728x90
반응형

'ComputerScience > Network' 카테고리의 다른 글

Socket programming (Golang)  (0) 2022.03.22
Socket programming (Python)  (0) 2022.03.21
Application Layer - 1. Introduction  (0) 2022.03.21
Wireshark : Sniff HTTP traffic  (0) 2022.03.14
History of Computer Networking and the Internet  (0) 2022.03.14