TCP & UDP

Nam Eun-Ji·2020년 11월 26일
0

HTTP

목록 보기
9/9
post-custom-banner

protocol
컴퓨터나 네트워크 장비가 서로 통신하기 위해 미리 정해놓은 약속, 규약



TCP

Transmission Control Protocol

  • 신뢰성있는 데이터 전송을 지원하는 연결지향형 프로토콜
  • 패킷의 교환을 근간으로 하는 IP(Internet Protocol, 인터넷 프로토콜)를 기반으로 작동한다. 기본적으로 IP와 함께 사용되기 때문에 TCP/IP라고 불린다.
  • IP : 호스트 사이의 데이터 교환을 목적으로 만들어진 프로토콜로써 오로지 데이터 교환을 위한 임무만을 수행한다. 즉 네트워크 상에서 발생할 수 있는 데이터 누락, 패킷의 순서 뒤바뀜 등의 데이터 교정와 관련된 기능을 가지고 있지 않다.
  • TCP : IP가 제공하지 않는 데이터 교정과 관련된 기능을 제공한다.
  • TCP는 패킷을 성공적으로 전송하면 Acknowledgement(ACK) 라는 신호를 날린다. 만일 ACK 신호가 제 시간에 도착하지 않으면 Timeout이 발생하여, 패킷 손실이 발생한 패킷에 대해 다시 전송해준다.
  • 장점 : 흐름제어와 혼잡제어를 지원하며 데이터의 순서를 보장한다. 흐름제어란, 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것을 말하며, 혼잡제어란, 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것을 말한다.
  • 단점 : TCP는 UDP에 비해 속도가 느리다.

TCP 헤더 및 메시지 포맷

Source Port/ Destination Port
Source Port는 메시지를 보내는 측에서 통신을 위해 사용하는 Port 번호이며, Destination Port는 목적지, 즉 메시지를 받는 측의 통신 Port 번호이다. 이와 더불어 IP 헤더에 있는 Source address/ Destination Address 를 이용하면 유일하게 식별되는 통신 연결을 만들 수 있게 된다.

Sequence Number
TCP 세그먼트 안의 데이터의 송신 바이트 흐름의 위치를 가리킨다. 다른 호스트로 전달되는 패킷은 여러 개의 서로 다른 경로를 거치면서 전달되다 보니 패킷의 순서가 뒤바뀔 수 있다. 이를 수신 측에서는 재 조립해야 할 필요가 있는데 이 때 Sequence Number를 이용하여 조립하게 된다.

Acknowledgment Number
다음에 받을 것으로 예상되는 데이터의 순서 번호를 나타낸다.

Reserved
현재는 사용하지 않지만, 나중을 위해서 예약된 필드이다.

TCP Flags
TCP Flags 값은 패킷의 내용이 어떤 목적으로 전달될 것인지를 설정할 수 있도록 하는 부분이다.

URG : 긴급 데이터를 나타낸다.
ACK : 원격 호스트의 Sequence Number에 대한 응답 목적을 위해 사용된다. 즉 데이터를 잘 받았다는 것을 알려주기 위한 목적으로 사용된다.
PSH : 해당 데이터가 어플리케이션에 즉시 전달되어야 할 때 사용
RST : 연결을 재설정하는데 사용된다.
SYN : TCP 연결을 만들 때 양 호스트 간의 Sequence Number를 동기화 하기 위한 목적으로 사용
FIN : 더 이상 보낼 데이터가 없어 종료를 요청할 때 사용된다. 정상적인 종료의 경우 FIN을 설정하여 사용한다.

Check Sum
TCP 데이터가 중간에 훼손되거나 변조되는 경우 이를 체크할 수 있는 장치가 필요한데, 이 때 사용되는 것이 Check Sum이다.


TCP 연결 : 3-way handshaking

  • 역할 1. 양쪽 모두 데이터를 전송할 준비가 되어 있다는 것을 알 수 있다.
    실제로 데이터 전달이 시작되기 전에 한 쪽이 다른 쪽에 준비 되어 있다는 것을 알 수 있도록 한다.
  • 역할 2. 양쪽 모두 상대편에 대한 초기 Sequence Number를 알 수 있도록 한다.

  1. SYN 세그먼트(클라이언트의 동기화 정보 전송)
    클라이언트는 Source port에 자신을 나타내는 port number를 넣고, Destination port 에는 서버를 가리키는 port number를 넣는다. Sequence number에는 클라이언트의 초기 순서 번호를 넣고, Acknowledgment number에는 0을 넣고, Flag는 SYN bit를 1로 설정하여 전송한다.

  2. SYN + ACK 세그먼트(서버의 동기화 정보 전송 + SYN 세그먼트 수신 확인)
    서버는 Source port에 자신을 나타내는 port number를 넣고, Destination port에는 송신자를 나타내는 port number를 넣는다. Sequence number에는 서버의 초기 순서 번호를 넣고, Acknowledgment number에는 “클라이언트의 초기 순서 번호 + 1” 의 값을 넣고, Flag는 SYN과 ACK bit를 모두 1로 설정하여 전송한다.

  3. ACK 세그먼트(SYN 세그먼트 수신 확인)
    클라이언트는 (1)과 동일하게 Source port와 Destination port 를 설정하고 Acknowledgment number에는 “서버의 초기 순서 번호 + 1” 의 값을 넣고, Flag는 ACK bit를 1로 설정하여 전송한다.

이와 같은 3-Way Handshaking 과정이 끝나면 두 호스트는 데이터를 주고 받을 수 있는 상태가 된다.


TCP 연결해제 : 4-way handshaking

  1. FIN + ACK 세그먼트(클라이언트에서 서버 방향의 연결 종료 요구)
    데이터 전송을 끝내려는 클라이언트는 Sequence number에는 전송하는 세그먼트의 순서번호를 넣고, Acknowledgement number에는 마지막으로 서버에 전송했던 ACK와 같은 확인 번호를 넣고, Flag는 FIN, ACK bit를 1로 설정하여 전송한다.

  2. ACK 세그먼트(FIN + ACK 세그먼트 수신 확인)
    서버는 (1)의 확인 번호(Acknowledgement number)를 순서번호(Sequence number)에 넣고, Acknowledgement number에는 다음에 받을 순서번호 즉, “(1)에서 반은 Sequence number + 1”의 값을 넣고, Flag는 ACK bit를 1로 설정하여 전송한다. 이 단계가 정상적으로 끝나면 클라이언트에서 서버 방향으로의 연결은 종료된다.

  3. FIN + ACK 세그먼트(서버에서 클라이언트 방향의 연결 종료 요구)
    절차2에서 클라이언트에서 서버로의 연결은 종료되었지만, 서버에서 클라이언트 방향으로의 연결은 여전히 사용할 수 있으므로 서버는 여전히 클라이언트 방향으로 데이터를 전송할 수 있다. 서버는 더 이상 보낼 데이터가 없다면, (1)의 확인 번호(Acknowledgement number)를 순서 번호(Sequence number)에 넣고, Acknowledgement number에는 다음에 받을 순서 번호 즉, “(1)에서 받은 Sequence number + 1”의 값을 넣고, Flag는 FIN, ACK bit를 1로 설정하여 전송한다.

  4. ACK 세그먼트(FIN + ACK 세그먼트 수신 확인)
    클라이언트는 Sequence number에는 (3)의 Acknowledgement number를 넣고, Acknowledgement number에는 다음에 받을 순서번호 즉, “(3)에서 받은 Sequence number + 1” 의 값을 넣고, Flag는 ACK bit를 1로 설정하여 전송한다. 이 단계가 정상적으로 끝나면 남아있던 서버에서 클라이언트 방향으로의 연결이 종료되어 클라이언트와 서버간의 모은 TCP 연결이 종료된다.



UDP

User Datagram Protocol

  • 전송계층의 비연결형 프로토콜
  • 장점 : TCP와 달리 연결설정이 없으며, 혼잡제어를 하지 않기 때문에 TCP보다 빠르다.
  • 단점 : 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있다.
  • 헤더에 있는 Checksum필드를 통해 최소한의 오류는 검출한다.
  • 최근에는 속도가 빠른 UDP에 신뢰성있는 데이터 전송을 추가하여 서버를 구현하기도 한다.


TCP vs UDP

두 프로토콜 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP프로토콜을 기반으로 구현되어 있다.

TCPUDP
연결지향형 프로토콜(연결이 성공해야 통신 가능)비연결지향형 프로토콜(연결 없이 통신 가능)
바이트 스트림을 통한 연결(데이터의 경계를 구분하지 않음)메시지 스트림을 통한 연결(데이터의 경계를 구분함)
혼잡제어, 흐름제어혼잡제어, 흐름제어 지원하지 않음
순서 보장, 상대적으로 느림순서 보장되지 않음, 상대적으로 빠름
신뢰성 있는 데이터 전송, 안정적데이터 전송을 보장하지 않음
일대일 통신일대일, 일대다, 다대다 통신
packet: segmentpacket: datagram
HTTP, 전자우편, 파일전송에서 사용DNS, Broadcasting (도메인, 실시간 동영상 서비스에서 사용)


단어 설명

패킷

패킷이란 헤더와 바디로 구성된 바이트 단위의 짧은 신호. 헤더는 데이터의 수신처에 대한 정보가 들어가며 바디에는 전달할 데이터가 실린다. 패킷은 회선이 혼잡할 경우 IP 프로토콜에서 폐기될 수 있기 때문에 다른 경로를 가진 두 개의 라우터를 통해 수신처에 전달된다.

SYN

Synchronize sequence Number
TCP 연결을 만들 때 양 호스트 간의 Sequence Number를 동기화 하기 위한 목적으로 사용되며 마지막으로 FIN의 경우 더 이상 보낼 데이터가 없어 종료를 요청할 때 사용된다. 정상적인 종료의 경우 FIN을 설정하여 사용한다.

profile
한 줄 소개가 자연스러워지는 그날까지
post-custom-banner

0개의 댓글