TCP 통신과 UDP 통신의 개념과 차이점!

더보기

게임 프로젝트를 진행하며 UDP 통신에 대한 연구를 진행하였지만(결국 적용엔 실패하였지만) 정작 TCP와 UDP에 대해 설명해보라고 하면

에... TCP는 신뢰할 수 있는 정보인 대신 비교적 느리구... UDP는 신뢰성이 부족한 대신 빠릅니다...! 밖에 대답할 수 없어서 자료를 이것 저것 찾아봤다.

 

TCP(Transmission Control Protocol)

신뢰할 수 있지만 복잡한 전송 계층 프로토콜. IP에 연결 지향 기능 및 신뢰성을 추가한다.

TCP는 신뢰할 수 있는 스트림 전달 서비스로, 중복되거나 손실된 데이터 없이 한 호스트에서 전송한 데이터 스트림을 다른 호스트로 전다할 수 있도록 보장한다. 패킷 전송은 신뢰할 수 없으므로, 재전송을 사용하는 긍정 수신확인이라고 하는 기술을 사용하여 패킷 전송의 신뢰성을 보장한다. 이 기본 기술을 사용하려면 수신인이 데이터 수신 시 수신확인 메시지로 응답해야 한다.

발신인은 전송한 각 패킷의 레크드를 보존하고 다음 패킷을 전송하기 전에 수신확인을 기다린다. 또한 패킷 전송 당시의 타이머도 보존하여 타이머가 만료되면 패킷을 다시 전송한다. 타이머는 패킷이 손실되었거나 손상되었을 경우 필요하다.

3 Way Handshake

TCP가 연결지향적인 특성을 가지게 해주는 과정이 3 way handshake

 

ACK : 승인을 서명하거나, 응답을 보내기 위해, 통신 프로토콜의 일부로서 통신 프로세서나 컴퓨터 사이를 지나가는 신호

SYN : TCP가 통신을 연결할 때 쓰는 flag

 

UDP(User Datagram Protocol)

비연결성(따라서 신뢰할 수 없음)전송 프로토콜이다. UDP는 오류 검사를 거의 수행하지 않으며 호스트 간 통신 대신 프로세스 간 통신을 제공하는 것 이외에 IP 서비스에 아무것도 추가하지 않는다.

UDP는 최소한의 오버헤드가 발생하는 단순 프로토콜이다. 따라서 프로세스에서 소규모의 메시지를 전송하려고 하며 신뢰성이 중요하지 않은 경우에 UDP를 사용할 수 있다. UDP를 사용하여 메시지를 전송할 경우 TCP를 사용하는 경우보다 시간이 덜 걸린다.

멀티미디어 및 멀티캐스팅 애플리케이션에 편리한 프로토콜

 

UDP 사용분야

- 인터넷 전화

- 온라인 게임

- 영상 스트리밍

 

 

(내가 이해한대로) 한번 그려보았다.

이런 느낌인가... 하구...

말할 때 마다 상대가 듣고있는지 확인하고 대꾸 없으면 대꾸 할 때까지 찔러보는 느낌

친한 친구 단톡방 st

 

요약

TCP : 신뢰성있다, 느리다

UDP : 빠르다, 정보의 손실이 있을 수 있다

TCP가 신뢰성 있고 느린 요인 : 3 way handshake

참고자료

https://youtu.be/ikDVGYp5dhg

https://www.ibm.com/docs/ko/rtw/9.0.1?topic=transports-sockets-overview 

 

반응형

UDP(User Datagram Protocol)

컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약의 일종

 

- 기본적인 것은 TCP와 동일하지만 TCP보다 신뢰성이 없다.

- 받는 쪽에서 데이터를 제대로 받는지 신경쓰지 않는다

- ip주소와 prot 번호를 알면 데이터 전송이 가능하다

 

server코드

# UDPServerSocket.py

import socket

if __name__ == '__main__':
    host = '127.0.0.1'
    port = 4455
	
    # 소켓 생성 
    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	# 바인딩
    server.bind((host, port))
	
    
    while True:
        data, addr = server.recvfrom(1024)
        data = data.decode("utf-8")

        print(f"Client : {data}")

        data = data.encode("utf-8")
        server.sendto(data, addr)

 

client코드

# UDPClientSocket.py

import socket

if __name__ == '__main__':
    host = '127.0.0.1'
    port = 4455
    # address의 약자
    addr = (host, port)

	# 소켓 생성
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    while True:
        data = input("Enter a word : ")

        data = data.encode("utf-8")
        client.sendto(data, addr)

        data, addr = client.recvfrom(1024)
        data = data.decode("utf-8")
        print(f"Server:{data}")

server 실행 후 client를 실행한다

# 서버 열기
python UDPServerSocket.py

# 클라이언트 열기
python UDPClientSocket.py

텍스트가 보내지는지 간단하게 확인할 수 있다

반응형

+ Recent posts