오늘은 TCP/IP 계층에서 3계층을 담당중인 전송 계층 = 트랜스포트 계층에 대해서 다뤄보겠습니다.
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
통신 과정(프로토콜 계층별 관점)
통신 과정을 탑다운 방식으로 살펴보겠습니다.(전송 측)
채팅을 한다고 가정하면, 프로그램에서 메시지를 생성하고 소켓 라이브러리를 통해 전송 계층에 전달합니다.
전송 계층에서는 보낼 데이터 + 자신의 정보(TCP)를 더해서 인터넷 계층에 보냅니다.
인터넷 계층인 IP도 자신의 패킷을 생성해서 앞의 데이터에 덧붙입니다.
각 계층마다 정보를 덧붙여서 인터넷으로 전달합니다.
TCP/IP 패킷 정보
- IP패킷에 TCP 관련 정보 포함
- TCP 관련 정보 : 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등
- TCP 관련 정보가 포함되어 IP 만으로 해결하지 못했던 순서 제어 문제 등을 해결할 수 있게 된다.
TCP의 특징
TCP (Transmission Control Protocol : 전송 제어 프로토콜)
1. 연결지향 - TCP 3 way handshake(가상 연결)
2. 데이터 전달 보증
3. 순서 보장
4. 신뢰할 수 있는 프로토콜
5. 현재는 대부분 TCP 사용
연결지향 TCP 3 way handshake
SYN : 접속 요청
ACK : 요청 수락
1. 클라이언트에서 서버로 SYN 메시지 전송
2. 서버가 꺼져있으면 SYN 메시지 이후에 반응이 없으므로 그대로 연결 종료
3. 정상적으로 서버가 가동중이면 서버에서는 SYN와 함께 ACK 메시지를 전송
4. 클라이언트가 ACK전송 (+ 데이터)
5. 1번과 2,3번 4번까지의 과정이 끝난 뒤에 최종적으로 데이터 전송
데이터 전달 보증
단순히 데이터만 전송하고 끝이 아니라 응답 메시지를 전달받기 때문에 데이터가 정상적으로 전달되었는지 알 수 있습니다.
순서 보장
보낸 순서와 달리 다른 순서로 도착한다면 순서가 꼬인 패킷부터 다시 보내도록 서버가 클라이언트로 요청합니다.
그럼 클라이언트는 그 부분부터 재전송해서 원하던 순서로 패킷을 전송할 수 있습니다.
순서와 관련된 정보가 TCP/IP 패킷에 있기 때문
UDP 특징
UDP (User Datagram Protocol : 사용자 데이터그램 프로토콜)
1. 기능이 거의 없는 편
3. 비연결지향
4. 데이터 전달, 순서를 보장하지 않음
5. IP에 PORT와 체크섬의 정보가 추가된 형태
6. 애플리케이션 단에서 추가 작업이 필요함
7. 단순하고 빠르다는 장점이 있음
연결형과 비연결형
연결형
연속된 흐름(stream)의 데이터 송수신이 가능
큰 파일 전송시에도 데이터가 중간에 끊어지는 것에 대하여 사용자가 신경쓸 필요 없음
많은 양의 데이터를 전송해야할 때나 신뢰성 있는 연결이 필요할 때, 또는 데이터의 순서 보장이 필요할 때 사용(TCP의 특징중 장점에 해당하는 내용들이 필요할 때 사용하면 되겠네요.)
비연결형
연결을 설정하고 해제하는 절차 없이 바로 데이터를 주고받는 방식으로 데이터그램 서비스라고도 부릅니다.
연결형에서 SYN 전송하고 ACK 받고.. 이런 과정이 없는 형태입니다.
프로토콜 헤더 처리에 필요한 오버헤드(연결설정 지연 등)가 연결형 서비스보다 적어 간단한 패킷을 주고받는 경우에 유리합니다.(UDP 특징 7번에 해당)
UDP를 사용하는 경우
아무리 생각해도 신뢰성을 보장해주고 순서도 보장해주는 TCP/IP가 더 좋을텐데 UDP를 사용하는 경우는 어떤 경우일까요??
1. UDP만을 사용하도록 권장되어 있는 경우
강제적이니 어쩔 수 없습니다.
2. 패킷을 브로드캐스트 혹은 멀티캐스트 해야 하는 경우
3. 종종 실시간 서비스의 경우 TCP의 헤더를 처리할 시간조차 부족해서 UDP를 이용하기도 한답니다.
참고
김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의
jkkang.net/unix/netprg/chap1/net1_2.html
'web' 카테고리의 다른 글
인터넷 통신 (0) | 2021.03.12 |
---|---|
동기(Synchronous) vs 비동기(Asynchronous) (0) | 2021.03.03 |
Cookie & Session (0) | 2020.07.29 |
[Web] POST 요청 시 한글 깨짐 현상 (0) | 2020.07.19 |
[Web] POST 요청 (0) | 2020.07.19 |