Network

TCP/IP(TCP, UDP 전송방식)

Caminante 2020. 3. 14. 06:08

TCP/IP

- 네트워크를 상호 연결시켜 정보를 전송할 수 있도록 하는 기능을 가진 다수의 프로토콜이 모여있는 집합이다.

- OSI 7계층처럼 추상적인 레이어 역할을 하는 것이 아닌 실용적인 네트워크 연결을 위해 만들어졌다.

TCP, UDP

- TCP와 UDP 프로토콜은 모두 전송계층에서 동작하는 프로토콜이다.

- 두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고있다.

(운영체제의 일부로 구현되어 있어서 우린 코드만 구현해서 그걸 이용하면 된다)

· 전송 방식

1) TCP

- TCP는 신뢰성있는 데이터 전송을 지원하는 연결지향형 프로토콜.

- TCP는 패킷을 성공적으로 전송하면 Acknowledgement(ACK)라는 신호를 날린다. 만일 ACK 신호가 제 시간에 도착하지 않으면 Timeout이 발생하여, 패킷 손실이 발생한 패킷에 대해 다시 전송해준다.

- 연결지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작한다. 또한, 흐름제어와 혼잡제어를 지원하며 데이터의 순서를 보장한다. 흐름제어란, 보내는 측과 받는 측의 데이터 처리 속도 차이를 조절해주는 것을 말하며, 혼잡제어란, 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것을 말한다.

하지만 TCP는 UDP에 비해 속도가 느리다는 단점이 있다. 따라서 대부분의 웹 HTTP 통신, 이메일, 파일 전송에 사용된다.

* 포트 번호 : 접속된 다수의 응용프로그램을 구분하기 위한 번호

범위 : 0 ~ 65535

예약된 번호 0 ~ 1023 / 1024 ~ 49151 중 하나 선택

클라이언트와 서버가 TCP 소켓 인터페이스를 사용하여 상호작용하는 방법

1) 웹 서버는 커넥션을 기다리기 시작한다.
2) 클라이언트는 URL에서 IP주소와 포트 번호를 알아내고 서버에 TCP 커넥션을 생성하기 시작한다.
커넥션 생성은 서버와의 거리, 서버의 부하, 인터넷 혼잡도에 따라서 시간이 걸린다.
3) 일단 커넥션이 맺어지면 클라이언트는 HTTP 요청을 보내고 서버는 그것을 읽는다.
4) 서버가 요청 메시지를 다 받으면, 그 요청을 분석하여 클라이언트가 원하는 동작을 수행하고, 클라이언트에게 데이터를 보낸다.
5) 클라이언트는 그것을 받아 응답 데이터를 처리한다. 

 

 

TCP 서버의 기본 구조

· 서버는 먼저 실행하여 클라이언트가 접속하기를 기다린다(listen)

· 클라이언트가 서버에 접속(connect)하여 데이터를 보낸다(send)

· 서버는 클라이언트 접속을 수용(accept)하고, 클라이언트가 보낸 데이터를 받아서(recv) 처리한다.

· 서버는 처리한 데이터를 클라이언트에 보낸다(send).

· 클라이언트는 서버가 보낸 데이터를 받아서(recv) 자신의 목적에 맞게 사용한다.

동작 원리

TCP 서버에 TCP 클라이언트가 접속하여 통신을 수행하는 과정은 다음과 같다.

1. 서버는 소켓을 생성한 후 클라이언트가 접속하기를 기다린다.

이때 서버가 사용하는 소켓은 특정 포트 번호와 결합되어(bind)있어서 이 포트 번호로 접속하는 클라이언트만 수용할 수 있다.

2. 클라이언트가 접속한다. 이때 TCP 프로토콜 수준에서 연결 설정을 위한 패킷 교환이 이루어진다.

3. TCP 프로토콜 수준의 연결 절차가 끝나면, 서버는 접속한 클라이언트와 통신할 수 있는 새로운 소켓을 생성한다. 서버가 클라이언트와 데이터를 주고 받을 때는 이 소켓을 사용한다. 기존의 소켓은 새로운 클라이언트의 접속을 수용하는 용도로 계속 사용한다.

4. 두 클라이언트가 접속한 후의 상태이면, 서버측에서 총 세 개의 소켓이 존재하며, 이 중 두 소켓이 실제 클라이언트와 통신하는 용도로 사용된다. 서버측 소켓과 클라이언트측 소켓이 1대1로 대응하며, 한 클라이언트가 두 개 이상의 소켓을 사용하여 서버에 접속하는 것도 가능하다.

 

2) UDP

- UDP는 비연결형 프로토콜이다. 따라서 TCP와 달리 연결 설정이 없으며, 혼잡제어를 하지 않기 때문에 TCP보다 빠르다는 장점이 있다. 하지만 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있다. UDP는 이러한 특징때문에 DNS, 멀티미디어에서 사용된다.

- UDP는 헤더에 있는 Checksum 필드를 통해 최소한의 오류는 검출한다. 최근에는 속도가 빠른 UDP에 신뢰성있는 데이터 전송을 추가하여 서버를 구현하기도 한다.

- 기본적인 것은 TCP와 동일.

- UDP에서 대기상태는 실제 데이터를 받기 위한 대기상태이다(TCP와의 차이점).

- 클라이언트에서 데이터를 보내면 즉각적으로 받아버린다. 코드도 TCP에 비해 간단하다.

- 비연결형 : ip 주소와 port 번호를 알면 데이터 전송 가능.

REFERENCE

https://dbehdrhs.tistory.com/80

https://www.youtube.com/watch?v=XBgl90VsSBQ

https://www.youtube.com/watch?v=wSBopIDzTNs

https://ko.wikipedia.org/wiki/%EC%84%9C%EB%B2%84

http://wiki.hash.kr/index.php/%EC%84%9C%EB%B2%84

http://wiki.hash.kr/index.php/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8

https://swalloow.tistory.com/77

https://armful-log.tistory.com/15

https://madplay.github.io/post/network-tcp-udp-tcpip