본문 바로가기
Learning-log -CS/Network

네트워크 - 4계층 프로토콜, 포트번호, TCP, UDP, TCP Flag (2022.09.15~16)

by why제곱 2022. 9. 19.

1. 4계층 프로토콜 - TCP, UDP


4계층은 전송 계층으로 송신자의 Process와 수신자의 Process를 연결하는 통신 서비스를 제공한다.

전송 계층은 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 다중화와 같은 서비스를 제공한다.

 

이때 TCP 프로토콜과 UDP 프로토콜이 있는데 이 둘의 차이점은 아래와 같다.

(자세한 내용은 아래 쪽에서 더 자세히 살펴볼 것이다.)

 

- TCP 프로토콜 : 친절, 연결된 후 데이터 전송, 받았는지 확인 후 다음 data 전송, 과정 복잡

- UDP 프로토콜 : 안전한 연결 지향하지 않음, Myway 간단

 

이 둘의 차이점은 이렇듯 극명하게 나뉘는데 TCP프로토콜이 친절하게 하나 하나 짚어주고 가르쳐준다면  UDP프로토콜은 최소한의 연결만 제공하고 대신 효율을 높이는 프로토콜이라고 볼 수 있다.

 

 

 

2.  포트번호


특정 Process와 특정 Process가 통신을 하기 위해 사용하며, 하나의 포트는 하나의 프로세스만 사용 가능하다. 역으로 하나의 프로세스가 여러 개의 포트를 사용하는 것은 가능하다.

 

 

- 포트번호의 분류

 

1) Well-known 

가장 잘 알려진 포트번호. 알아야 한다.

이 중 HTTP와 HTTPS가 특히 중요하다.

단, 포트번호는 절대적인 것은 아니므로 무조건 지켜야 하는 건 아니다. HTTP는 주로 포트번호로 80을 사용하지만 80을 사용하지 않은 HTTP도 있을 수 있다.

 

2) Registered

Well-known 까지는 아니지만 유명한 정도의 포트번호

 

오라클DB : 1521

MySQL : 3306

MS원격 데스크탑 : 3389

 

3) Dynamic

일반 사용자들이 사용 / 49152 ~ 65535 중 아무거나 하나를 사용

 

 

 

3. UDP


사용자 데이터그램 프로토콜(User Datagram Protocol)

전송 방식이 매우 단순해서 서비스의 신뢰성이 낮고 데이터 그램의 도착 순서가 바뀌거나 중복되거나, 누락되기도 한다.

오류 검사와 수정이 필요없는 프로그램에서 수행할 것을 가정한다.

 

- 사용하는 프로그램  : DNS 서버 / tftp 서버(파일공유) / RIP프로토콜 (라우팅 정보 공유)

 

- 구조

 

 

4. TCP


전송제어 프로토콜(Transmission Control Protocol) 

인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간 통신을 안정적이고 순서대로, 에러 없이 가능하게 한다.

 

이론적으로 TCP는 UDP보다 느리다곤 하지만 사람이 그 차이를 체감할 정도는 아니라고 한다.

 

1) 구조

 

▶ Source Port : 보낸 이의 포트 번호

▶ Destination Port : 받는 이의 포트 번호

▶ Offset :

▶ Reserved : 예약된 필드로 보통 사용 안함 

▶ TCP flags : TCP의 flags

▶ Window : 상대방과 연결된 상태에서 데이터를 주고 받을 때, 데이터를 얼마나 더 보내도 괜찮은 지에 대한 정보.

 

2) TCP 플래그

 

TCP는 상대방에게 상태를 계속 물어보는데 그 때의 정보가 들어있는 값으로 연결하려는 건지, 데이터를 보내는 건지, 응답인지, 급한지, 초기화하려는 건지 등의 정보가 담겨 있다.

C E U A P R S F 로 구성되어 있으며 이 중 앞 쪽 C E를 제외하고 U A P R S F에 대해 순서대로 알아보겠다.

 

U : Urgent Flag / 긴급, 우선순위 높은 데이터임을 의미

A : ACK Flag (애크플래그) / 승인 플래그. 물어본 것에 대한 응답임을 의미

P : Push Flag / TCP 버퍼가 일정 크기만큼 쌓여야 패킷을 추가적으로 전송하는데, 이와 상관없이(버퍼가 채워지기를 기다리지 않고) 즉시 전달하겠다는 의미

R : Resest Flag / 초기화 비트 . 연결되어 있는 상태에서 문제가 발생하여 연결을 재설정

S : Sync Flag / 동기화 비트. 상대방이랑 연결을 시작할 때 사용되는 flag. 이 플래그가 보내진 후부터 동기화 시작

F : Fin Flag / 종료 비트. 데이터를 모두 주고 받은 후 연결을 끊겠다는 의미

 

3) TCP 통신과정

 

 - 3 way handshake : 클라이언트와 서버가 연결하는 과정으로 과정은 아래와 같으며 이 때 각 패킷의 TCP의 SEQ/ACK 번호는 아래 그림의 규칙을 따른다. 이는 보안을 위해 중요한 부분이다.

 

 

① 클라이언트가 웹서버에 패킷 전송( TCP Flag 부분에 Sync 플래그가 담김)

② 클라이언트의 패킷을 받은 서버는 그 클라이언트에게 응답하는 패킷 전송

③ 클라이언트는 연결 최종 확인 패킷 재전송

 

 

여기까지 클라이언트와 서버의 연결이 완료된다.  이렇게 연결까지 마친 후 요청내용을 보내야하는데 이 때 연결한 클라이언트가 아닌 다른 누군가가 통신을 시작하면 막대한 피해를 입힐 수 있기 때문에 이는 보안과 깊은 관련이 있다.

 

연결을 마친 후에는 클라이언트가 다시 요청내용을 보내는 것으로 데이터 통신이 시작된다.

 

데이터 통신을 위해 패킷을 주고 받는 과정에도 SEQ와 ACK 번호의 규칙을 지켜야한다. 

규칙은 아래와 같다.

 

 

4) TCP 상태전이도

 

TCP의 연결상태 변화를 나타낸 것으로 굉장히 복잡하고 다양한 상태가 있으나, 앞서 살펴본 연결 순서에 각각 클라이언트와 서버는 어떤 상태인지 정도만 살펴보려 한다.

 

이 부분은 추후 더 깊이 네트워크를 공부해 나가면서 다시 한번 살펴봐야겠다 ,,

 

① 클라이언트가 웹서버에 패킷 전송( TCP Flag 부분에 Sync 플래그가 담김)

    클라이언트 : SYN_SENT(active open)   서버 : Listen(passive open)

② 클라이언트의 패킷을 받은 서버는 그 클라이언트에게 응답하는 패킷 전송

   클라이언트 : SYN_SENT       서버 : SYN_RECEIVED

③ 클라이언트는 연결 최종 확인 패킷 재전송

   클라이언트&서버 : EASTABLISHED(데이터 전달상태)

 

 


 

본 게시글은 따라하면서 배우는 IT님의 영상을 보고 학습한 후 복습&추가 공부한 내용을 작성한 학습기록입니다.

혹시 내용 중 오류가 있다면 댓글 남겨주시면 수정하겠습니다.

 

[따라學IT] 01. 네트워크란 무엇인가? - YouTube