네트워크/개념
Network - TCP / UDP의 개념과 특징, 차이점
bok01
2022. 4. 18. 14:55
728x90
전송 계층에서 사용되는 프로토콜 ( TCP / UDP )
-> TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜
- TCP와 UDP는 포트 번호를 이용하여 주소를 지정하는것과 데이터 오류검사를 위한 체크섬 존재하는 두가지 공통점을 가지고 있다
- 정확성(TCP)을 추구할지 신속성(UDP)을 추구할지를 구분하여 나뉜다.
- 데이터를 중요하게 생각하여 확실히 주고받고 싶을 때는 ‘TCP(Transmission Control Protocol)’를 사용
- TCP는 통신할 컴퓨터끼리 ‘보냈습니다’, ‘도착했습니다’라고 서로 확인 메시지를 보내면서 데이터를 주고받음으로써 통신의 신뢰성을 높인다.
- 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스
- 데이터의 신뢰성은 제쳐두고 어쨌든 빨리 보내고 싶을 때는 ‘UDP(User Datagram Protocol)’를 사용
- UDP는 데이터를 보내면 그것으로 끝이므로 신뢰성은 없지만 확인 응답과 같은 절차를 생략할 수 있으므로 통신의 신속성을 높인다.
- VoIP(Voice over IP)나 시간 동기, 이름 해결 등과 같이 무엇보다 속도를 필요로 하는 서비스
- 데이터를 중요하게 생각하여 확실히 주고받고 싶을 때는 ‘TCP(Transmission Control Protocol)’를 사용
포트 번호로 서비스를 식별
- ‘0~1023’은 ‘잘 알려진 포트(well-known port)’ : 웹 서버나 메일 서버 등과 같이 일반적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용
- ‘1024~49151’은 ‘등록된 포트(registered port)’ : 제조업체의 독자적인 서버 소프트웨어가 클라이언트의 서비스 요청을 대기할 때 사용
- ‘49152~65535’는 ‘동적 포트(dynamic port)’ : 서버가 클라이언트를 식별하기 위해 사용
TCP의 개념과 특징
->TCP(Trasmission Control Protocol)는 연결 지향적 프로토콜
*연결 지향적 프로토콜 : 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미
- 클라이언트가 연결 요청(SYN 데이터 전송)을 하고,
- 서버가 연결을 수락하면 통신 선로가 고정되고,
- 모든 데이터는 고정된 통신 선로를 통해서 순차적으로 전달
=> 따라서 TCP는 데이터를 정확하고 안정적으로 전달
- TCP는 호스트간 신뢰성 있는 데이터 전달과 흐름제어를 한다.
- 신뢰성 있는 데이터의 전송을 위해 확인작업
- TCP는 패킷을 성공적으로 전송하면(ACK) 라는 신호를 날리고
- 만약에 ACK 신호가 제 시간에 도착하지 않으면 Timeout이 발생하여 패킷 손실이 발생한 패킷을 다시 전송
- TCP는 이렇게 데이터를 송신할때마다 확인 응답을 주고받는 절차가 있으므로 통신의 신뢰성이 올라간다.
TCP의 단점
- 데이터로 보내기 전에 반드시 연결이 형성되어야함.
- 1 : 1 통신만 가능함.
- 고정된 통신 선로가 최단선(네트워크 길이)이 아닐경우 상대적으로 UDP보다 데이터 전송속도가 느림.
TCP의 특징
- 연결형 (connnection-oriented) 서비스로 연결이 성공해야 통신이 가능
- 데이터의 경계를 구분하지 않는다. (바이트 스트림 서비스)
- 데이터의 전송 순서를 보장 (데이터의 순서 유지를 위해 각 바이트마다 번호를 부여)
- 신뢰성있는 데이터를 전송 (Sequence Number, Ack Number를 통한 신뢰성 보장)
- 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
- 연결의 설정(3-way handshaking)과 해제(4-way handshaking)
- 전이중(Full-Duplex), 점대점(Point to Point) 서비스
- UDP보다 전송속도가 느리다.
3 way handshake 방식 (SYN, ACK)
- TCP 통신을 위한 네트워크 연결은 3 way handshake 이라는 방식으로 연결
-> 3 way handshake 방식은 서로의 통신을 위한 관문(port)을 확인하고 연결하기 위하여 3번의 요청/응답 후에 연결이 되는 것을 뜻한다.(이 과정에서 가장 많은 시간이 소요되어 UDP방식보다 속도가 느려지는 주요 원인으로 지목됩니다.)
연결 과정
- Client에서 Server에 연결 요청을 하기위해 SYN 데이터를 보낸다.
- Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경
- 그리고 요청을 정상적으로 받았다는 대답(ACK)와 Client도 포트를 열어달라는 SYN 을 같이 보낸다.
- Client에서는 SYN+ACK 를 받고 ESTABLISHED로 상태를 변경하고 서버에 ACK 를 전송
- ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다.
위와 같이 3번의 통신이 정상적으로 이루어지면, 서로의 포트가 ESTABLISHED 되면서 연결이 된다.
TCP state ( netstat 명령어를 통해 확인 가능 )
- LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태
- SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태
- SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태
- ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태
- FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태
- TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태
- CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
- CLOSED : 완전히 종료
UDP의 개념과 특징
-> UDP(User Datagram Protocol)는 전송계층의 비연결 지향적 프로토콜
*비연결 지향적 : 데이터를 주고받을 때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미
- 연결 과정이 없기 때문에 TCP보다는 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어짐
- 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전달 될 수 있다
- 먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있으며 최악의 경우 잘못된 선로로 전송되어 유실
- 이럴 경우 TCP와는 다르게 UDP는 중간에 패킷이 유실이나 변조가 되어도 재전송을 하지 않음
- 먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있으며 최악의 경우 잘못된 선로로 전송되어 유실
UDP의 단점
- 데이터의 신뢰성이 없음
- 의미있는 서버를 구축하기위해서는 일일이 패킷을 관리해주어야 함
UDP의 특징
- 비연결형 서비스로 연결 없이 통신이 가능하며 데이터그램 방식을 제공
- 데이터 경계를 구분한다. (데이터그램(datagram) 서비스)
- 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- 신뢰성 없는 데이터를 전송한다. (데이터 재전송과 데이터 순서 유지를 위한 작업을 하지 않는다.
- 패킷관리가 필요
- 패킷 오버헤드가 적어 네트워크 부하가 감소되는 장점.
- 상대적으로 TCP보다 전송속도가 빠르다.
TCP / UDP 비교
1. 공통점
- 포트 번호를 이용하여 주소를 지정
- 데이터 오류 검사를 위한 체크섬 존재
2. 차이점
TCP | UDP | |
연결방식 | 연결형 서비스 | 비 연결형 서비스 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 전송 순서 보장 | 전송 순서 바뀔 수 있음 |
수신 여부 확인 | 수신 여부를 확인 | 수신 여부를 확인하지 않음 |
통신 방식 | 1:1 통신만 가능 | 1:1 / 1:N / N:N 통신 모두 가능 |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
반응형