일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- aws 자격증
- 물리구성도
- 인프콘
- 남궁성
- 테슬라폰
- 네트워크
- 자바의 정석
- 인터페이스
- 계층화
- 논리구성도
- 역캡슐화
- 파이썬 1712
- 개발바닥
- 데이터 송수신
- java
- 상속
- 파이썬
- TCP/IP
- network
- 10866
- modifiers
- 프로토콜
- 백준 2775
- 자바
- 1764
- 다형성
- AWS CLF
- l3 스위치
- 유선LAN
- 백준 1712
- Today
- Total
병훈's Blog
네트워크 뿌수기 - TCP는 신뢰성이 있는 통신 본문
TCP란?
TCP(Transmission Control Protocol)란 신뢰성이 있는 애플리케이션 간의
데이터 전송을 하기 위한 프로토콜입니다.
TCP를 이용하면
애플리케이션 프로토콜에는
신뢰성을 확보하기 위한
구조를 넣어둘 필요가 없습니다.
TCP에 의한 데이터 전송 절차
TCP에 의한 애플리케이션 간 데이터 전송은 다음과 같이 이루어집니다.
- TCP 커넥션 맺기
- 애플리케이션 간 데이터 송수신
- TCP 커넥션 끊기
우선, 데이터를 송수신하는 애플리케이션 간의 통신이
정상적으로 이루어질 수 있는지 확인합니다.
이 확인 프로세스는 3-웨이 핸드쉐이크(커넥션 맺기)라고 불립니다.
(3웨이 핸드쉐이크가 ping 이랑은 뭐가 다른 거지?)
** ping : 다른 호스트에 IP 데이터그램이 도착할 수 있는지 검사하는 것을 의미한다.
핑(Ping)을 수행하는 프로그램은 ICMP echo request라는 메시지를 원격 호스트로 보낸 후 응답을 기다린다.
** 3-웨이 핸드셰이크 : 로컬 호스트/클라이언트와 서버 간의 연결을 생성하기 위해 TCP/IP 네트워크에서 사용되는 방법
다음으로 애플리케이션이 다루는 데이터를 TCP로 송신하기 위해서는
애플리케이션의 데이터에 애플리케이션 프로토콜 헤더(HTTP 헤더)와 TCP 헤더를 추가할 필요가 있습니다.
이를 TCP 세그먼트라고 표현하기도 합니다.
이때 애플리케이션의 데이터 크기가 크면 분할하여
복수의 TCP 세그먼트로서 전송합니다.
어떻게 분할했는지는 TCP 헤더에 기술되고,
목적지에서 차례대로 원본 데이터로 조립합니다.
또한, 데이터가 도착하면 받았다고 확인해 줍니다.
데이터 수신 확인을 ACK(acknowledge)라고 부릅니다.
만약, 일부 데이터가 제대로 도착하지 않았다면 데이터를 재전송합니다.
또 네트워크가 혼잡하면, 데이터 전송 속도를 제한합니다.
이런 데이터 전송 구조를 플로우 제어라고 합니다.
마지막으로 애플리케이션의 데이터 전송이 모두 끝나면
TCP 커넥션을 끊습니다.
TCP 헤더 형식
TCP로 전송하고 싶은 애플리케이션의 데이터에
TCP 헤더를 추가해, TCP 세그먼트라고 합니다.
TCP 헤더의 형식은 정해져 있습니다.
TCP 헤더에서 중요한 부분만 간단히 설명하겠습니다.
가장 중요한 것은 포트 주소(포트 번호)입니다.
포트 주소(포트 번호)로 적절한 애플리케이션 프로토콜에
데이터를 배분할 수 있기 때문입니다.
그리고, 신뢰성 있는 데이터 전송을 위해서 시퀀스 번호와 ACK 번호라는 것이 있습니다.
시퀀스 번호는 '시퀀스(순서)'라는 이름처럼 TCP로 전송하는 데이터 순서를 나타냅니다.
데이터가 분할되어 있을 때에는 시퀀스 번호로 어떻게 데이터를 분할했는지 알 수 있습니다.
ACK 번호는 데이터를 바르게 수신했음을 확인하기 위해 이용합니다.
데이터 분할 구조
TCP에는 데이터를 분할하는 기능도 있습니다.
TCP에서 애플리케이션의 데이터를 분할하는 단위는
MSS(Maximum Segment Size)라고 부릅니다.
MSS를 넘는 크기의 데이터는 MSS 단위로 나누어 송신합니다.
MSS의 표준 크기는 1460byte 입니다.
웹에 접속할 때 웹서버 애플리케이션에서 웹사이트의 데이터를 송신하는 경우에
TCP로 분할하는 모습을 생각해 봅시다.
애플리케이션 프로토콜로 HTTP를 이용하므로
웹사이트의 데이터에는 HTTP 헤더가 추가됩니다.
이것이 TCP가 처리할 데이터입니다.
MSS로 나누고 각각에 TCP 헤더를 추가해 복수의 TCP 세그먼트로 만듭니다.
원래 데이터를 어떻게 분할했는지는 TCP 헤더 내 시퀀스 번호를 통해 알 수 있습니다.
Point
- TCP로 애플리케이션 사이에서 신뢰성 있는 데이터 전송을 할 수 있다.
- TCP에 의한 데이터 전송의 흐름은 다음과 같다.
- TCP 커넥션 맺기
- 애플리케이션 간 데이터 송수신
- TCP 커넥션 끊기
- 전송하고 싶은 애플리케이션의 데이터에 TCP 헤더를 추가해 TCP 세그먼트로서 전송한다.
- 필요하면 TCP로 데이터를 분할한다.
- TCP로 데이터를 분할하는 크기를 MSS라고 부른다.
'Computer > Network' 카테고리의 다른 글
네트워크 뿌수기 - DNS는 네트워크의 전화번호부 (0) | 2022.12.25 |
---|---|
네트워크 뿌수기 - UDP는 데이터를 배분만 할뿐 (0) | 2022.12.25 |
네트워크 뿌수기 - 포트 번호 (Port Number) (0) | 2022.12.24 |
네트워크 뿌수기 - ARP로 IP와 MAC 주소를 대응시킴 (0) | 2022.12.24 |
네트워크 뿌수기 - ICMP로 데이터 수신 확인 (0) | 2022.12.24 |