네트워크를 학교 다닐 때 제대로 안 해서 누가 물어보면 아무 대답도 못하는 사람이 되어버렸다.
그래서 공부하는 겸에 TCP, UDP에 대한 간단한 설명을 적어본다.
TCP, UDP 둘 다 OSI 레이어 중 전송 계층 (transport)의 프로토콜의 한 종류다.
전송 계층의 경우 목적지에 데이터를 정확히 전달하기 위한 계층이다.
(하위 레이어인 물리, 데이터 링크, 네트워크 계층 만으로 목적지에 데이터가 덜렁 도착하기는 한다.(고 한다..!))
전송계층은 역할은
- 오류를 점검하는 기능
- 전송된 데이터의 목적지가 어딘지(어떤 어플리케이션인지) 식별하는 기능
크게 두가지로 볼 수 있다.
또한 특징으로는 “신뢰성/정확성” 과 “효율성” 두 가지 다른 특성을 가지고 있는데,
- 신뢰할 수 있고 정확한 데이터 전달하는 통신은 연결형 통신
- 효율적으로 데이터를 전달하는 통신은 비연결형 통신
으로 나눌 수 있다.
TCP
전송 계층에서 사용하는 “연결형 통신” 프로토콜로, 캡슐화 시 TCP헤더를 데이터 앞에 붙이는데
이를 세그먼트(segment)라고 한다.
TCP 헤더는 아래와 같이 생겼다.
TCP는 연결형 통신이기 때문에 연결(connection)을 우선적으로 확보한 다음 데이터를 교환한다.
연결을 위해서는 위 그림에서 Flags(코드 비트, 6비트)를 이용한다. (현재는 9비트를 이용한다고 한다!)
6비트의 자세한 구조는 아래와 같다.
연결 제어를 위해선 위 6비트 중 SYN, ACK 비트 두 개를 이용해 패킷을 3번 교환하는데
이걸 3-way handShake라고 한다.
핸드 셰이킹 중 연결 제어의 과정은 아래와 같다.
데이터를 다 주고 받은 뒤엔 연결을 해제하는데 이땐 FIN, ACK를 이용해 연결 제어를 한다.
이렇게 연결을 맺은 다음 실제로 데이터를 주고받을 때는
위 그림에 Sequence Number (일련번호, 32비트), Acknowledgment Number(확인 응답 번호, 32비트) 를이용한다.
- 일련번호 : 데이터를 보내는 쪽이 받는 쪽에 지금 보내는 데이터가 몇 번째 데이터인지 알려주는 역할
- 확인 응답 번호 : 데이터를 받는 쪽이 보내는 쪽에 다음번 데이터는 몇 번째 데이터를 받아야 하는지 알려주는 역할
이렇게 서로 받은 데이터의 확인 유무와 다음 번째 데이터를 요청하는데 이때 데이터의 유실 혹은 손상 시
재전송을 요청하게 되는데 이걸 “재전송 제어”라고 한다.
하지만 아무리 신뢰성과 정확성이 중요하다지만 이렇게 하나씩 주고받으면 굉장히 느리기 때문에
뭉땡이로 받기 위한 장치가 준비되어있다.
조금 더 전문성 있게 말하자면,
수신 측엔 여러 개의 세그먼트를 한시적으로 보관하는 장소가 존재하는데 이를 버퍼(Buffer)라고 한다.
(이 버퍼가 넘치는 현상은 overflow라고 함)
버퍼가 넘치는 걸 막기 위해 TCP 헤더엔 버퍼의 한계 크기를 적는 Window Size(윈도 크기, 16비트)가 존재한다.
3-way handshake 때 이를 확인하는데 교환 시 수신 측 윈도 크기, 송신 측 윈도 크기를 서로 적어 보내고
작은 쪽에 맞춰 세그먼트를 여러 개 보내게 된다.
전송계층의 또 하나의 역할은 적절한 애플리케이션에 전달하는 역할이 남았다. 전송계층은 이를 port 번호로 구분하게 된다.
위 그림의 source port(출발 포트 번호, 16비트), destination port(목적지 포트 번호, 16비트)가 그 정보를 담는다.
뭔 소리냐?
각 애플리케이션별로 할당된 포트 번호가 있다. 가령 웹서버의 경우 80, 메일의 경우 smtp는 25, pop3는 110 등
그럼 포트가 없거나 잘못될 경우 수신 측 컴퓨터에 도착해도 정확히 어떤 애플리케이션에 전달할지 알지 못한다는 말이다.
(마치 택배가 내가 살고 있는 아파트 동에 도착했지만 우리 집 호수를 몰라 경비실에 맡겨져 있는 것과 같다.)
보통 자주 쓰이는 포트 번호는 아래와 같다.
UDP
udp는 tcp와 다르게 효율성에 특화된 프로토콜로 3-way handshake 같은 과정 없이 데이터를 전송한다.
보통 동영상 전송 등에 쓰인다고 한다.
UDP 헤더는 아래와 같이 생겼다.
위 정리는 모두의 네트워크 책을 통해 배운 내용을 정리한 것이다.
아무래도 쉽게 쓰인 책이다 보니 깊은 내용까지는 아니지만 기초 개념을 잡기에 아주 차고 넘쳤고
이번 기회에 확실히 알게 되었다 (기초!!)
그 외의 이미지 출처는 아래와 같다.
'text > common' 카테고리의 다른 글
변수 메모리 할당 (간단 정리) (0) | 2023.07.31 |
---|---|
transaction에 대한 구구절절 (0) | 2023.07.26 |
POST 길이, 용량 제한 (0) | 2022.11.25 |
자꾸 찾아보기 귀찮아서 쓰는 apache2.4 + php5.x 세팅 (0) | 2022.11.24 |
VScode 뭐가 자꾸 안돼서 세팅 (0) | 2022.10.20 |
댓글