TCP / UDP

kio·2023년 6월 4일
0

CS

목록 보기
25/30

TCP

Transmission Control Protocol로써 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다.

보통 2가지 역할을 한다.
1. 받을 대상 호스트가 연결 가능 상태인지 확인 및 연결을 수립하는 역할
2. 전송을 제어해주는 정보를 패킷에 추가해주는 역할

다음과 같은 특징을 가진다.
1. 신뢰성
- TCP의 가장 중요한 특징은 신뢰할 수 있는 말단 장치간 데이터 전달이다. 신뢰성을 제공 하려면, TCP는 손상되거나 없어지거나 중복되거나 네트워크 계층에서 순서가 틀어져서 전달된 데이터를 복구해야 한다. TCP는 신뢰성을 실현하기 위해 적극적 수신, 통지, 재전송 체계를 사용한다.
2. 흐름제어
- TCP 데이터 세그먼트를 송수신하는 컴퓨터는 CPU와 네트워크 대역폭의 차이 때문에 서로 다른 데이터 속도로 작동할 수 있다. 결국 수신자가 처리할 수 있는 것처럼 훨씬 더 빠른 속도로 송신자가 데이터를 보낼 가능성이 많다. TCP는 송신자가 보낸 데이터의 양을 제어하는 흐름 제어 메커니즘을 구현한다.
3. 다중화
- TCP에서는 한 라우터의 많은 프로세스가 TCP 통신 서비스를 동시에 사용할 수 있다. 이것을 TCP 다중화라 한다. 이들 프로세스는 같은 네트워크 인터페이스에서 통신할 수 있으므로 네트워크 인터페이스의 IP 주소로 식별된다. 그러나 한 컴퓨터의 같은 네트워크 인터페이스를 사용하는 모든 프로세스는 공통의 IP 주소를 가지고 있으므로, 네트워크 인터페이스의 IP 주소외에도 더 많은 것이 필요하다. TCP는 TCP를 사용하는 응용프로그램에 포트 번호 값을 연계시킨다. 각 연결은 서로 다른 포트 쌍을 사용하므로, 이 연관성은 원격 컴퓨터의 응용 프로그램 프로세스들 사이에 여러 연결이 존재할 수 있게 한다. 응용 프로그램 프로세스에 대한 포트의 바인딩은 각 컴퓨터에서 독립적으로 처리된다.
4. 연결형 서비스
- 응용 프로그램 프로세스는 TCP를 사용하여 데이터를 보낼 수 있는 상태가 되려면 먼저    연결을 설정해야 한다.
5. 양뱡향 운반 가능
- 즉, 하나의 전송선로에서 데이터가 동시에 양쪽방향으로 전송될 수 있는 것을 의미한다.

3-Way Handshake

 받을 대상 노드(호스트)가 서비스 가능 상태인지 확인하기 위해서는 해당 노드가 활성 상태인지 확인하기 위해 통신을 해야 한다. TCP에서는 3 Way Handshake라는 방식으로 해당 노드와 통신을 수행하게 된다.


1. SYN - 어플리케이션이 서버에 통신을 위한 연결을 요청하는 단계
2. SYN + ACK - 서버가 어플리케이션에 자신이 활성 상태임을 알리고 어플리케이션에서도 포트를 열어 연결을 활성화하라는 요청 메세지를 전송
3. ACK - 어플리케이션이 서버의 요청 메세지를 수락하여 연결이 수립

쉽게말해 다음과 같은 단계를 가진다.
1. 나 너랑 연결하고 싶은데 너 연결가능하니?
2. 나 연결가능하고 연결하고 싶으면 이렇게 해
3. 넹!

4-Way Handshake

 논리적인 접속 상태를 "해제"하기 위해서도 필요한 과정이며, sever, client는 tcp 연결이 해제되며 연결을 위해 사용하였던 리소스의 정리가 일어나게 된다.


1. 연결을 종료하고자 하는 client 는 server 에게 tcp header 의 flags 필드의 FIN 을 1을 세팅하여 전송하고 소켓을 FIN_WAIT_1 상태로 변경합니다.
2. FIN 을 받은 server CLOSE_WAIT 상태로 변경되며 FIN 에 대응 되는 ACK 를 전송해 줍니다. ACK 전송을 받은 client 는 FIN_WAIT_2 상태로 변경되며 server 의 FIN 을 기다립니다.
3. server 는 연결 종료를 위해 FIN 패킷을 client 에게 전송하며 소켓을 LAST_ACK 상태로 변경합니다.
4. FIN을 받은 client 는 TIME_WAIT 상태로 변경되며 FIN 에 대응되는 ACK 를 server 에 전송합니다. ACK 를 받은 server 는 소켓을 CLOSED 상태로 변경합니다.
5. 시간이 경과한 뒤, client 도 소켓을 CLOSED 상태로 변경합니다. (MSL 은 커널마다 지정된 시간 확인필요)

쉽게말하면 다음과 같은 과정을 가진다.
1. 나 너랑 연결 끊고 싶어!
2. 그래? 알았어 잠만 나 정리좀
3. 정리다했어 우리 끊자
4. 알았어 난 끊었어~~

예외상황

Denying connection

서버가 연결 요청을 거부하는 상황으로 장치가 사용중이거나, 오프라인이거나 연결을 거부하는 보안적이 사유등이 있다. 이때 RST를 보내 다시 연결하라고 지시한다. 이때 클라이언트는 여러번 SYN을 보내고 안되면 연결이 안되다고 자체 판단한다.

Aborting connection

이는 연결이 정상 종료되기전에 기존 TCP연결을 종료하는 행위를 일컫는 말이다. 예를들어 SYN 패킷에 응답을 하지 않는 경우, 두 장치에서 오류나 충돌이 발생한 경우, 보안문제로 의도적으로 프로그램을 종료하는 경우 등이 있다.\
TCP 연결이 중단되면 연결을 시작한 장치는 RST(재설정) 패킷을 원격 장치로 보내 연결을 종료해야 함을 나타냅니다. 그런 다음 원격 장치는 RST 패킷을 확인하고 연결을 종료합니다.\
경우에 따라 응용 프로그램은 원격 장치에 FIN(종료) 패킷을 전송하여 TCP 연결 중단을 시작할 수 있습니다. 그런 다음 원격 장치는 FIN-ACK(완료 확인) 패킷으로 응답하고 두 장치가 모두 FIN 패킷을 확인하면 연결이 닫힙니다.

Selective ACK vs Cumulative ACK

Selective ACK

이는 데이터의 어떤 세그먼트가 성공적으로 수신되었고 어떤 세그먼트가 누락되었는지에 대한 보다 자세한 정보를 제공한다. 수신자가 SACK 패킷을 송신자에게 보낼 때 누락된 데이터 세그먼트에 해당하는 시퀀스 번호 목록이 포함된다. 이를 통해 발신자는 전체 데이터 블록을 재전송할 필요 없이 누락된 데이터 세그먼트만 재전송할 수 있다.

Cumulative ACK

이는 TCP에서 사용되는 기본 ACK 메커니즘이다. 누적 ACK를 사용하면 수신자는 특정 시퀀스 번호까지의 모든 데이터가 성공적으로 수신되었음을 나타내는 단일 ACK 패킷을 송신자에게 보냄으로써 데이터 블록의 수신을 확인한다. 이는 데이터의 일부가 누락되거나 순서가 잘못된 경우 보낸 사람이 전체 데이터 블록을 다시 전송해야 함을 의미한다.

이렇게 정의나 동작과정을 보면 Selective ACK이 좋아보이지만 왜 TCP는 Cumulative ACK을 사용할까?
당연히 잘못된 패킷이 뭐지 알수 있는 Selective ACK은 효율적이고 네트워크 혼잡을 줄일수 있지만, 그만큼 어떤 것을 잃어버렸는지 서버와 클라이언트가 저장하고 연산해야한다. 하지만 Cumulative ACK은 잃어버린 한 부분만 기억하고 나머지를 다 요구하면 되기 때문에 저장이나 연상에서 상당히 유리하다.

그럼 Selective ACK은?\
초기의 TCP 는 cumulative ACK 을 기반으로 했다. 그런데 뒤에 것을 다 버리다보니 비효율적이고, 이런 비효율성은 기간 프로토콜인 IP 가 패킷을 많이 까먹을수록 급속도로 비효율적으로 변하기 시작했다. 예를 들어 무선 통신에서의 IP 라면 까먹는 것도 많을테니 TCP 는 상당히 많은 양을 재전송 해야 된다. 그리고 사용자 입장에서 이건 매우매우매우매우 느리다고 느끼게 된다.통신망이 10% 불안정해지면, 속도가 10% 를 까 먹는 것이 아니라 몇 배 이상 속도가 안 나게 된다. 그 때문에 나중에는 selective ACK 을 TCP의 옵션으로 채택했다.

UDP

UDP(User Datagram Protocol)는 인터넷 프로토콜(IP) 제품군의 전송 계층에서 작동하는 네트워크 프로토콜입니다. 사전 "핸드셰이크"나 전용 종단 간 연결을 설정하지 않고도 한 장치에서 다른 장치로 데이터를 보낼 수 있는 연결 없는 프로토콜입니다.

언제 보통사용하나요?
UDP의 장점 중 하나는 발신자와 수신자 간의 연결 설정 및 유지 관리가 필요하지 않기 때문에 TCP보다 오버헤드가 낮다는 것입니다. 따라서 짧은 대기 시간과 높은 처리량이 필요하지만 온라인 게임이나 라이브 비디오 스트리밍과 같이 일부 데이터 손실을 허용하는 애플리케이션에 적합한 선택입니다.

0개의 댓글