과제 발표에 사용한 ppt 파일을 첨부하겠습니다. 현재 진행하고 있는 과제는 AI 스쿨의 리팩토링 보안직무 과정의 일부입니다. 만약 해당 과정에 더 관심이 있으시다면 AI스쿨의 공식 카페에 방문하여 더많은 정보를 확인해 주시기 바랍니다.
https://cafe.naver.com/itscholar
이번 과제의 주제는 TCP와 UDP의 특징과 차이점입니다. TCP와 UDP는 제 4계층인 전송계층을 대표하는 두 개의 프로토콜입니다. 전송 계층은 데이터를 세그먼트로 자르고 각 세그먼트가 최적의 방식으로 전송될 수 있게 하는데, 그 최적의 방식 일부가 TCP와 UDP인 것입니다.
먼저 TCP에 대해 알아보겠습니다. TCP는 Transmission Control Protocol 의 약자로, 단순 번역시 전송 제어 프로토콜이라는 의미를 갖습니다. 데이터 전송을 할 때 연결을 지향하며 안정성에 주안점을 준 프로토콜입니다. 그 특징상 필요하기에 흐름제어와 혼잡제어 기능 역시 갖추고 있습니다.
[이미지 1]
TCP의 헤더 구조를 나타낸 표입니다. TCP의 헤더는 먼저 출발지와 목적의 포트 번호를 나타내는 Source port, Destination port. 전송하는 데이터의 순서를 나타내는 Sequence Number. 전송한 데이터의 총 크기를 나타내는 Acknowledgment Number. 헤더의 크기를 나타내는 Data Offset. 미래에 새로운 플래그가 나올 경우에 사용하기 위해 예비해둔 Reserved 필드. 현재 세그먼트의 속성을 나타내고 다양한 기능을 사용하기 위한 Flag 필드. 한 번에 보낼 수 있는 데이터의 크기를 나타내는 Window Size. 데이터의 손실 여부를 판별하는 Checksum 필드. 플래그중 URG 플래그의 기능을 사용할 때, 데이터의 어떤 부분이 URG 플래그에 해당하는지 알려주는 Urgent Pointer. 마지막으로 TCP에 나중에 추가된 기능을 사용하기 위한 Options 필드까지 총 11가지의 영역으로 나뉘어 있습니다.
[이미지 2]
PPT의 플래그 부분을 설명한 페이지입니다. 각각의 플래그들이 어떤 역할을 하는지간략하게 적어두었습니다. 이중에 중심적으로 보아야 할 부분은 TCP의 핵심이라고도 볼 수 있는 플래그들, 그중에 URG, ACK, PSH, RST, SYN, FIN 으로 6가지입니다. 나머지 3개의 플래그는 차후에 TCP의 흐름 제어 기능을 추가하기 위해 리저브드 필드를 변경한 것입니다. 이번 발표에서는 간단하게 이름만 알고 넘어가도록 하겠습니다.
[이미지 3]
TCP의 연결이 어떤 식으로 이루어지는지 보여주는 도표입니다. 사용자가 서버에 SYN(연결 시작) 플래그를 보낸다면 서버는 사용자에게 SYN(연결 시작)과 ACK(수신 양호) 플래그를 동시에 보내게 되고 사용자는 이 신호를 받고 ACK(수신 양호) 플래그를 보내어 서로 연결한 상태가 됩니다. 이런 일련의 과정을 통틀어 3 way handshake 라고 말합니다. 3 way hand shake 과정을 거처 연결이 성립되면 사용자와 서버가 연결 상태가 되어 서로 데이터를 주고받게 됩니다.
[이미지 4]
반대로 연결 종료를 보겠습니다. 사용자가 FIN(연결 종료) 플래그를 보내게 된다면 서버에서 ACK(수신 양호) 플래그를 보내고, 시간차를 두고 FIN(연결 종료) 플래그를 보내게 됩니다. 이 신호를 받게 된 사용자는 ACK(수신 양호)를 보내게 되고 최종적으로 연결이 종료되게 됩니다. 이 과정은 3 way handshake 와 다르게 4번에 걸쳐 이루어지기에 4 way handshake 이라고 합니다.
이 두 가지 과정은 TCP의 상태 천이도를 보게 된다면 더 쉽게 이해할 수 있습니다.
[이미지 5]
위 도표는 TCP 통신 과정에서 사용자나 서버의 상태가 어떤 식으로 변화하는지 나타낸 것입니다. 먼저 사용자의 시점으로 살펴보겠습니다. 사용자는 CLOSED 상태에서 SYN을 보내 SYN_SENT 상태에 들어가게 되고, 서버에게서 SYN, ACK 플래그를 수신받고 ACK를 송신하여 ESTABLISHED 상태에 들어가게 됩니다. 그리고 ESTABLISHED 상태에서 서버와 데이터를 주고받게 되죠.
데이터를 모두 주고받았다면, 사용자는 이제 FIN플래그를 보내게 되고 FIN_WAIT_1 상태에 돌입니다. 그러면 서버에서 사용자에게 ACK 플래그를 전송하여 사용자는 FIN_WAIT_2상태에 들어가게 되고 그 상태에서 사용자는 FIN 플래그를 받으면 ACK플래그를 송신하여 TIME_WAIT 상태에 진입합니다. 최종적으로 CLOSED 상태로 돌아가는 것입니다.
이번엔 서버 기준에서 상태 변화를 알아보겠습니다. 서버는 사용자와 다르게 사용자들의 요청을 듣고 있는 상태일 핑요가 있습니다. 그렇기에 LISTEN 상태에서 시작합니다. LISTEN 상태에서 SYN 신호를 받게 된다면 SYN,ACK 플래그를 보내 SYN_RCVD 상태에 돌입하게 되고, 그 상태에서 ACK를 수신하게 된다면 ESTABLISHED 상태가 되어 데이터를 주고받는 상태가 됩니다.
데이터를 모두 주고 받은 이후에는, 사용자가 서버에 FIN 플래그를 보내기에 서버는 여기에ACK플래그를 보내고 CLOSE_WAIT 상태로 진입합니다. 그리고 잠시 뒤, FIN 플래그를 추가로 보내고 LAST_ACK 상태로 돌입하고, 사용자가 ACK 플래그를 보낸다면 연결이 종료되어 CLOSED 상태로 진입하는 것을 확인할 수 있습니다.
상태천이도를 자세히 보신 분들은 이미 눈치 챘겠지만 사실 연결 종료에는 4 way handshake 방식 말고도 2 way handshake 와 3 way handshake 방식으로도 가능하다는 점입니다. 하지만 표준적으로 많이 사용되는 기능은 아닌 것이 4 way handshake 방식이 가장 안정적으로 사용할 수 있기 때문입니다.
TCP에서 마지막으로 짚고 넘어갈 기능은 타임아웃 기능입니다.
[이미지 6]
타임아웃 기능은 TCP에서 데이터의 무결성을 보장하기 위해서 존재하는 기능입니다. 앞선 헤더의 구조 설명에서 Sequence 필드가 전송하는 데이터의 순서를 나타낸다고 말씀드렸습니다. 전송되는 모든 데이터 패킷에는 순서를 나타내는 숫자가 붙게 되는데, 타임아웃은 이 데이터가 순서대로 전송되지 않았을 경우 재전송을 요청하여 데이터의 무결성을 보장하게 됩니다.
참고자료로 올린 이미지는 타임아웃이 어떤식으로 작동하는지 알려줍니다. 동시에 타임아웃이 전송 속도 면에서는 상당히 비효율적이라는 점도 드러냅니다.
이번에는 UDP에 대해서 알아보겠습니다. UDP는 User Datagram Protocol의 약자로 직역하면 사용자 데이터그램 프로토콜입니다. UDP는 TCP와 다르게 연결을 지향하지 않고 전송속도를 올리는데에 주안점을 둔 프로토콜입니다. 이렇기에 TCP에 비해서 전송속도는 아주 빠르지만 데이터의 신뢰성이 낮습니다.
[이미지 7]
[이미지 8]
TCP와 UDP의 헤더를 비교한 이미지입니다. TCP에서 존재하던 대부분의 기능이 사라졌고 데이터 전송에 정말 필요한 것들만 남은 것입니다.
주소지를 나타내는 Source port와 Destination port. UDP 헤더와 데이터의 크기를 나타내는 Length. 데이터의 손상 여부를 알아내기 위한 Checksum. 그 뒤로는 데이터입니다. 체크섬 필드도 TCP와는 다르게 비활성화가 가능합니다.
[이미지 9]
TCP가 복잡하게 연결에 handshake 과정을 거친 것과 다르게 UDP는 요청이 오면 데이터를 바로 전송하게 됩니다.
'AI 스쿨 리팩토링 보안직무 과정' 카테고리의 다른 글
6주차 과제 - 계층별 프로토콜 (상) (0) | 2022.12.18 |
---|---|
5주차 과제 - OSI 7 계층의 장비들 (0) | 2022.12.18 |
3주차 과제 - OSI 7 Layers (0) | 2022.12.15 |
2주차 과제 - 빈도분석법 (자유주제) (0) | 2022.12.15 |
AI 스쿨 리팩토링 보안직무 과정 시작 (0) | 2022.12.15 |
댓글