먹었으면 뇌를 쓰자

5. 전송 계층, TCP와 UDP 본문

네트워크

5. 전송 계층, TCP와 UDP

뇌이비 2022. 10. 31. 20:45

전송 계층: 신뢰할 수 있는 데이터 전송하기 

 

짜장면은 국물이 없다. 국물에 붇지는 않지만 오래되면 떡된다. 짬뽕은 국물이 있다. 떡은 되지 않지만 오래되면 팅팅 붇는다. 전송 계층아~ 너도 어쩔 수 없는 네트워크인가봐. 전송 계층의 프로토콜은 정확성을 중시하는 TCP와 효율성을 중시하는 UDP로 나뉜다. 지금까지 배운 물리 계층, 데이터 링크 계층, 네트워크 계층 중에서 가장 이해하기 쉬운 계층이다.  

 

 

전송 계층(transport layer)

 

데이터를 정확하게 전달하고, 오류가 발생하면 재전송을 요청하며, 올바른 목적지를 확인하는 계층이다.

 

연결형 통신

 

정확성을 최우선으로 데이터를 전달한다. TCP(transmission control protocol, 전송 제어 프로토콜) 방식을 사용한다.

 

비연결형 통신 

 

효율성을 최우선으로 데이터를 전달한다. 스트리밍 동영상은 빠른 전송이 필요하기 때문에 비연결형으로 통신한다.

UDP(user datagram protocol, 사용자 데이터그램 프로토콜) 방식을 사용한다.

 

 

TCP부터 살펴보자. TCP의 주요 개념은 세그먼트, 연결, 일련번호와 확인응답번호, 윈도우 크기, 포트번호이다. 그 다음으로 살펴볼 UDP는 단순한 아이라서 세분화하지 않고 바로 특성만 정리할 것이다.

 

 

 

 

 

TCP의 구조 ① 세그먼트

전송 계층에서 TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 한다. TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다. 

 

TCP의 구조 연결

데이터를 전송하기 전, 연결(connection)이라는 가상의 통신로를 만든다. 연결은 TCP 헤더에서 연결의 제어 정보가 기록되는 코드비트(code beat, 6비트)의 각 비트를 통해 이루어진다. 코드비트의 초깃값은 0이고 활성화되면 1로 바뀐다. 

 

연결을 하려면 SYN 비트(연결 요청)와 ACK 비트(확인 응답)가 필요하다. 

SYN/ACK을 통해 패킷을 세 번 교환하는 과정을 3-way 핸드셰이크라고 한다. 

 

1. 컴퓨터 1이 컴퓨터 2에게 연결 확립 요청 SYN을 보낸다.

2. 컴퓨터 2가 컴퓨터 1에게 연결 확립 응답 ACK을 보내고, 동시에 연결 확립 요청 SYN을 보낸다.

3. 컴퓨터 1이 컴퓨터 2에게 연결 확립 응답 ACK을 보낸다. 

 

 

연결을 끊으려면 FIN 비트(연결 종료)와 ACK 비트(확인 응답)가 필요하다.

1. 컴퓨터 1이 컴퓨터 2에게 연결 종료 요청 FIN을 보낸다.

2. 컴퓨터 2가 컴퓨터 1에게 연결 종료 응답 ACK을 보낸다.

3. 컴퓨터 2가 컴퓨터 1에게 연결 종료 요청 FIN을 보낸다.

3. 컴퓨터 1이 컴퓨터 2에게 연결 종료 응답 ACK을 보낸다. 

 

 

TCP의 구조 ③ 일련번호, 확인응답번호 

TCP는 데이터를 분할해서 전송한다. 3-way 핸드셰이크 이후 데이터를 전송할 때 TCP 헤더의 일련번호(sequence number, 32비트)와 확인응답번호(acknowledge number, 32비트)가 사용된다. 만일 데이터를 전송하는 과정에서 오류가 발생하면 일정 시간 대기 후 재전송하는데 이를 재전송 제어라고 한다. 

 

 

 

 

 

 

일련번호는 송신 컴퓨터가 수신 컴퓨터에게 보내야 하는 데이터가 몇 번째인지 알려주는 것이다.

확인응답번호는 수신 컴퓨터가 송신 컴퓨터에게 받을 데이터로 몇 번째가 필요한지 응답하는 것이다. 

이해하기 조금 어렵지만, 아래와 같이 정리해봤다.

 

 

<컴퓨터 1이 송신, 컴퓨터 2가 수신인 상황>

컴퓨터 1 : 안녕~ 이제부터 내가 데이터를 200바이트씩 송신해줄게. 그러면 넌 3001번째를 받아보게 될 거야.(=일련번호) 아참, 이렇게 너랑 나랑 대화하는 동안 너는 4001번째까지 받게 되는 거임.(=확인응답 번호)

<컴퓨터 2가 송신, 컴퓨터 1이 수신인 상황>

컴퓨터 2 : 오키. 너 4001번째까지 보내줘야 함.(=일련번호) 데이터 받았으니까 이제 3201번째 보내줘.(=확인응답 번호) 

<다시 컴퓨터 1이 송신, 컴퓨터 2가 수신인 상황>

컴퓨터 1 : 자 3201번째 받아라.(=일련번호) 4001번째까지 언능 가보자고.(=확인응답 번호)

<다시 컴퓨터 2가 송신, 컴퓨터 1이 수신인 상황>

컴퓨터 2 : 4001번째까지 언제 가보냐고~(=일련번호) 다음은 3401번째 보내라.(=확인응답 번호) 

.
.
.
~이 대화를 4001번째까지 반복하는 모임~

 

 

 

TCP의 구조 윈도우 크기 

통신 효율을 높이기 위해 세그먼트를 연속해서 보내고 한꺼번에 확인 응답을 받을 수 있다. 이 때 세그먼트는 버퍼(buffer)라는 장소에 일시적으로 보관된다. 버퍼의 크기보다 세그먼트가 많아져 오류가 나는 것을 오버플로(overflow)라고 한다.

 

오버플로가 발생하지 않도록 TCP 헤더에는 윈도우 크기(window size, 16비트)가 들어있다. 3-way 핸드셰이크를 할 때 1번째 교환에서 컴퓨터 2(수신)는 컴퓨터 1(송신)의 윈도우 크기의 초깃값을 확인한다. 2번째 교환에서 컴퓨터 1(수신)도 컴퓨터 2(송신)의 윈도우 크기 초깃값을 확인한다. 서로의 윈도우 크기 초깃값을 확인했으니 3번째 교환에서 연결을 확립한다.

 

이제 통신할 때 오버플로가 되지 않도록 윈도우 크기에 맞게 세그먼트를 연속으로 보내고, 한꺼번에 확인 응답을 한다. 

 

 

TCP의 구조 포트번호

포트번호(port number)는 올바른 목적지, 즉 데이터가 어떤 애플리케이션으로 가야 하는지를 구분한다. 만약 포트번호를 붙이지 않고 통신하면 컴퓨터에 데이터가 도착해도 애플리케이션까지 도달하지 않는다. TCP 헤더의 출발지 포트번호(source port number)와 목적지 포트번호(destination port number)가 사용된다.   

 

포트번호는 0~65535번을 사용한다. 0~1023번 포트는 서버 컴퓨터에서 사용하는 주요 애플리케이션(HTTP 등)이 미리 선점해놨다. 이 포트를 잘 알려진 포트(well-known port)라고 한다. 1024번은 예약은 되어있지만 실제로는 안 쓰이고, 1025번 이상부터는 랜덤 포트(random port)라고 해서 클라이언트 컴퓨터의 송신 포트로 임의 배정된다. 

 

아래의 프로세스에서 컴퓨터 1의 웹 브라우저는 랜덤 포트 1025번이 자동 배정된 것으로, 컴퓨터 2는 데이터를 받고 확인 응답을 할 때 목적지 포트번호를 정하지 않아도 이 랜덤 포트로 알아서 전송된다.  그렇지만 컴퓨터 1은 데이터를 보낼 애플리케이션의 목적지 포트번호 80번을 꼭 정해야 한다. 그래야 53번이 아닌 80번으로 확실히 갈 수 있다. 

 

 

 

 

UDP의 구조 

전송 계층에서 UDP로 전송할 때 붙이는 헤더를 UDP 헤더라고 한다. UDP 헤더가 붙은 데이터를 UDP 데이터그램(UDP datagram)이라고 한다.

 

UDP는 TCP처럼 송신과 확인 응답을 일일이 거치지 않는다. 목적지도 확인하지 않고 데이터를 연속해서 따다닥 보낸다. 따라서 UDP는 랜에 있는 모든 기기에 일괄적으로 데이터를 보낼 수 있는데, 이를 브로드캐스트(broadcast)라고 한다.  

 

 

 

 

 

 

 

 

 

 

 

* 이 게시물은 미즈구치 카츠야의 책 '모두의 네트워크'에 담긴 내용을 개인 공부 목적으로 정리한 것입니다.

 

모두의 네트워크 | 미즈구치 카츠야 - 교보문고

모두의 네트워크 | 네트워크를 전혀 몰라도 괜찮다! 초보자와 비전공자를 위한 가장 쉬운 네트워크 입문서[모두의 네트워크]는 이제 막 네트워크를 공부하기 시작했거나 공부해야겠다고 마음먹

product.kyobobook.co.kr

 

Comments