본 포스팅은 모두의 네트워크 책을 읽고 요약한 것입니다.
데이터가 손상되거나 유실되더라도 물리, 데이터 링크, 네트워크 계층은 책임지지 않는다. 전송계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.
네트워크 계층은 목적지까지 데이터를 전달하고, 전송 계층에서는 데이터가 제대로 도착했는지 확인한다.
1. 전송계층의 역할
- 오류를 점검하는 기능: 오류가 발생하면 데이터를 재전송하도록 요청
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능: 전송 계층에서 어떤 애플리케이션에 전송해야 하는지 알려줌
1-1. 전송계층의 특징
- 신뢰성/정확성: 데이터를 목적지에 문제없이 전달하는 것
- 효율성: 데이터를 빠르고 효율적으로 전달하는 것
신뢰할 수 있고 정확한 데이터를 전달하는 통신 => 연결형 통신
효율적으로 데이터를 전달하는 통신 => 비연결형 통신
1-2. 연결형 통신과 비연결형 통신
연결형 통신 | 비연결형 통신 |
상대편과 확인해 가면서 통신하는 방식 | 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식 |
신뢰성/정확성이 우선인 통신이라서 여러 번 확인하고 보낸다. | 효율성이 우선인 통신이라서 확인 절차 없이 일방적으로 보낸다. |
신뢰할 수 있고 정확한 데이터 전송이 필요한 애플리케이션에는 연결형 통신을 이용한다. | 효율적인 데이터 전송이 필요한 애플리케이션에는 비연결형 통신을 이용한다.(ex. 동영상) |
연결형 통신 프로토콜에는 TCP(Transmission Control Protocol: 전송 제어 프로토콜)가 사용된다. | 비연결형 통신 프로토콜에는 UDP(User Datagram Protocol: 사용자 데이터그램 프로토콜)가 사용된다. |
2. TCP의 구조
TCP(Transmission Control Protocol: 전송 제어 프로토콜): 전송 계층에서 신뢰할 수 있는 정확한 통신을 제공하는, 신뢰성/정확성이 우선인 연결형 통신 프로토콜인 TCP
각 계층의 통신 프로토콜을 살펴보면서, 캡슐화와 역캡슐화 개념을 익혔다. 전송 계층에서도 마찬가지로 전송이 일어날 때 헤더를 붙이는 캡슐화와 이를 제거하는 역캡슐화가 일어난다.
- TCP 헤더: TCP로 전송할 때 붙이는 헤더
- 세그먼트(segment): TCP 헤더가 붙은 데이터
연결형 통신은 데이터를 전송하기 전에 연결(connection)이라는 가상의 독점 통신로 확보 작업을 해야하는데, 이 연결을 확립한 후 데이터를 전송할 수 있다.
- 연결(connection): TCP 통신에서 정보를 전달하기 위해 사용되는 가상의 통신로로 연결을 확립하고 데이터를 전송한다.
TCP 헤더의 코드 비트는 TCP 헤더의 107번째 비트부터 112번째 비트까지의 6비트로 연결의 제어 정보가 기록되는 곳이다.
코드비트는 각 비트별로 역할이 있다. 초깃값은 0이고, 비트가 활성화되면 1이 된다.
연결을 확립하려면 이 중 SYN과 ACK가 필요하다.
- SYN: 연결 요청
- ACK: 확인 응답
신뢰할 수 있는 연결을 하려면 데이터를 전송하기 위해 패킷을 교환하는데, 다음 그림처럼 세 번 확인한다.
- 통신을 하려면 컴퓨터2에게 허가를 받아야 해서, 컴퓨터1에서 컴퓨터2로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
- 컴퓨터2는 컴퓨터 1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)를 보낸다. 동시에 컴퓨터 2도 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
- 컴퓨터2의 요청을 받은 컴퓨터1은 컴퓨터2로 허가한다는 응답으로 연결 확립 응답(ACK)를 보낸다.
3. 3 - way 핸드셰이크(three-way handshake)
연결 확립을 할 때 코드 비트의 SYN과 ACK가 1로 활성화된다.
1. 연결 확립 요청 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 0 | 0 | 0 | 1 | 0 |
2. 연결 확립 응답 + 연결 확립 요청 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 1 | 0 | 0 | 1 | 0 |
3. 연결 확립 응답 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 1 | 0 | 0 | 0 | 0 |
3 - way 핸드셰이크: 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것
- 상대방을 확인하고 악수를 하는 것처럼 데이터 통신에서도 확실하게 데이터가 전송되었는지 확인하면서 이루어지는 통신 수단
- 데이터를 전송한 후에는 연결을 끊기 위한 요청을 교환해야 한다.
- 연결을 끊을 때는 FIN(연결 종료)와 ACK(확인응답)을 사용한다.
- 컴퓨터1에서 컴퓨터2로 연결 종료 요청(FIN)을 보낸다.
- 컴퓨터2에서 컴퓨터1로 연결 종료 응답(ACK)을 반환한다.
- 또한 컴퓨터2에서도 컴퓨터1로 연결 종료 요청(FIN)을 보낸다.
- 컴퓨터1에서 컴퓨터2로 연결 종료 응답(ACK)을 반환한다.
연결을 종료할 때는 다음과 같이 FIN과 ACK가 1로 활성화된다.
1. 연결 종료 요청 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 0 | 0 | 0 | 0 | 1 |
2. 연결 종료 응답 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 1 | 0 | 0 | 1 | 0 |
3. 연결 종료 요청 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 0 | 0 | 0 | 0 | 1 |
4. 연결 종료 응답 | |||||
URG | ACK | PSH | RST | SYN | FIN |
0 | 1 | 0 | 0 | 0 | 0 |
4. 일련번호와 확인 응답 번호의 구조
3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 위와 같이 TCP 헤더의 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용한다.
일련번호 | 확인 응답 번호 |
송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려주는 역할을 한다. | 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다. |
전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다. | 다음 번호의 데이터를 요청하는 데도 사용한다. ex) 10번 데이터를 수신하면 11번 데이터를 송신측에 요청한다. 이것을 확인 응답이라고 한다. |
일련번호 '3001'번은 지금 보내는 200바이트 데이터의 첫 번째 바이트의 번호고, 확인 응답 번호는 다음에 보냈으면 하는 데이터의 첫 번째 바이트 번호가 된다.
데이터를 전송하기 전 단계에서 3-way 핸드셰이크로 연결 수립이 이루어질 때, 이 통신에 사용하는 '3001'번과 확인 응답 번호인 '4001'번이 결정된다.
- 컴퓨터1은 컴퓨터2로 200바이트의 데이터를 전송한다.
- 컴퓨터2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3001 + 200 = 3201이므로 3201번부터 보내달라고 요청한다.
- 컴퓨터1은 컴퓨터2로 3201번부터 200바이트의 데이터를 전송한다.
- 컴퓨터2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3201 + 200 = 3401이므로 3401번부터 보내 달라고 요청한다.
1~4번의 과정을 데이터 전송이 완료될 때까지 반복한다.
제전송 제어: 데이터가 항상 올바르게 전달되는 것은 아니기 때문에 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송한다.
- 데이터를 전송하는 도중에 오류가 발생하면 일정 시간 동안 대기한 후 재전송한다.
4-1. 윈도우 크기(Window Size)
TCP의 특징은 세그먼트(데이터) 하나를 보낼 때마다 확인 응답을 한 번 반환하는 방식이기 때문에 효율이 낮다. 하지만 매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다. (버퍼를 사용한다!)
- 버퍼(buffer): 받은 세그먼트를 일시적으로 보관하는 장소
- 버퍼 덕분에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있고, 확인 응답의 효율이 높아진다.
- 오버플로(overflow): 수신 측에게 대량으로 데이터가 전송되면 보관하지 못하고 넘치는 것
- 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 한다.
윈도우 크기(window size): 버퍼 용량의 크기, 얼마나 많은 용량의 데이털르 저장해둘 수 있는지를 나타낸다. 즉, 확인 응답을 일일이 하지 않고 연속해서 송신할 수 있는 데이터 크기
윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단한다.(3-way 핸드셰이크를 하는 동안에 서로의 윈도우 크기를 확인한다.)
- 확인 응답을 기다리지 않고 세그먼트(데이터)를 연속해서 보내면 밑의 그림처럼 통신하게 된다.
- 컴퓨터1은 세그먼트(데이터)를 연속해서 보내고, 컴퓨터2의 윈도우 크기 이내라면 계속해서 보낼 수 있다.
- 즉 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속적으로 전송할 수 있다.
5. 포트번호의 구조
목적지가 어떤 애플리케이션인지 구분하지 못하면 사용자가 홈페이지를 보기 위해 웹 브라우저를 사용하는 데도 메일 프로그램으로 데이터가 전송될 수 있다. 즉, 어느 애플리케이션의 데이터인지 알 수 없기 때문에 이런 일이 일어난다.
이런 일이 일어나지 않게 하기 위해서 TCP 헤더의 출발지 포트 번호(source port number)와 목적지 포트 번호(destination port number)가 필요하다.
포트 번호(port number): 어떤 애플리케이션인지 구분하는 역할
TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있고, 포트 번호는 0~65535번을 사용할 수 있다.
범위 | 포트 종류 | 설명 |
0~1023번 | 잘 알려진 포트(well-known port) | 주요 프로토콜이 사용하도록 예약되어 있다. |
일반적으로 서버 측 애플리케이션에서 사용 | ||
1024~49151번 | 등록된 포트(registered port) | 1024번: 예약되어 있지만 사용되지는 않는 포트 |
1025번 이상: 랜덤 포트라고 하고 클라이언트 측의 송신 포트로 사용 | ||
49152~65535번 | 동적 포트(dynamic port) |
ex) 원룸 아파트 전체 = 컴퓨터 / 집 주인 = 각 애플리케이션 / 각 집 번호 = 포트 번호
즉, A씨(애플리케이션)에게 택배(데이터)를 보내려면 집 번호(포트 번호)를 알아야 한다.
애플리케이션 | 포트 번호 |
SSH | 22 |
SMTP | 25 |
DNS | 53 |
HTTP | 80 |
POP3 | 110 |
HTTPS | 443 |
이처럼 동작하는 애플리케이션은 각각 포트 번호가 있어서 다른 애플리케이션과 서로 구분된다.
데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트번호가 필요하다.
그래서 포트 번호를 붙이지 않고 통신하면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지는 도착할 수 없다.
위 그림과 같이 컴퓨터1에서 컴퓨터2까지 포트번호를 붙여서 통신하면 확실하게 원하는 애플리케이션까지 데이터를 보낼 수 있다.
웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당되기 때문에 서버 측에서는 포트 번호를 정해둬야 하지만 클라이언트 측은 정하지 않아도 된다.
6. UDP의 구조
UDP(User Datagram Protocol: 사용자 다이어그램 프로토콜): 전송 계층에서 데이터를 효율적이고 빠르게 보낼 때 사용되는 프로토콜
- 위에서 말한 것처럼 UDP는 비연결형 통신이기 때문에 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다.
- UDP는 TCP와 달리 효율성을 중요하게 여기는 프로토콜이라 TCP와 같은 신뢰성과 정확성을 요구하게 되면 효율이 떨어지게 된다.
- UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이어서 보통 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳에 사용된다.
6-1. UDP 헤더
UDP 데이터그램: UDP 헤더가 붙은 데이터
TCP와 UDP의 차이
TCP | UDP | |
연결방식 | 연결형 서비스 | 비연결형 서비스 |
전송 순서 | O | X |
수신 여부 확인 | O | X |
신뢰성 | 높음 | 낮음 |
효율성(속도) | 낮음 | 높음 |
통신 방식 | 1:1 | 1:1 / 1:N / N:N |
브로드캐스트(broadcast): 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있는 것
TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신에는 적합하지 않다.
UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으 보내지만, TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없다.
https://velog.io/@majaeh43/%EB%AA%A8%EB%91%90%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-0w8k7ou8
https://m.blog.naver.com/devks0228/221822132594
https://velog.io/@ej_shin/6%EC%9E%A5-%EC%A0%84%EC%86%A1-%EA%B3%84%EC%B8%B5
'network' 카테고리의 다른 글
5. 네크워크의 구조: 네트워크 계층 (0) | 2022.09.15 |
---|---|
4. 네크워크의 구조: 데이터 링크 계층 (0) | 2022.09.14 |
3. 네크워크의 구조: 물리 계층 (0) | 2022.08.26 |
2. 네트워크의 기본 규칙 (0) | 2022.08.18 |
1. 네트워크 기본 지식 (0) | 2022.08.18 |