#03 네트워크 기초 : OSI 4계층 : UDP, TCP 통신과정 (WireShark)

728x90
반응형

01. 4계층에서 하는 일 (전송계층)

: 송신자와 수신자의 프로세스를 연결하는 통신 서비스

[출처] 따라하면서 배우는 IT // TCP, UDP

(1) TCP : 연결 / 데이터 주고 받을 때 

(2) UDP : 비연결 / 데이터 던지기

 

 

02. 포트번호

: 특정 프로그램이 사용하는 주소 

: 하나의 포트는 하나의 프로세스만 사용 가능 

: 하나의 프로세스는 여러개의 포트 사용 가능

[출처] 따라하면서 배우는 IT // well-known 포트

(1) well-known 포트 : HTTP 80 / HTTPS 443 

(2) registered 포트 : 오라클 DB 서버 (1521) / MYSQL 서버 (3306) / MS 원격 데스크탑 (3389)

(3) dynamic 포트 :일반 사용자들이 사용하는 포트  (49152 ~ 65535) 

 

 

03. 프로그램 연결정보

: cmd > "netstat -ano" (연결정보 확인)

cmd - " netstat -ano "

* 네이버 실행 후 netstat -ano 확인 : 443은 HTTPS / 12468은 PID (내 pc 구글 크롬)

(PID는 작업관리자에서 확인가능)

 

 

04. UDP 프로토콜

(1) 비연결 + 전송방식 단순 & 신뢰성이 낮음 

(2) 오류의 검사와 수정이 필요없는 프로그램에서 수행

(3) DNS 서버 (도메인 물으면 IP 주소 알려주는 DNS서버)

(4) tftp 서버 (파일전송 서버) / RIP 프로토콜 (라우팅 정보 공유)

 

* 파일전송 UDP 프로토콜로 하면 좋을까?

=> 큰 파일을 전송에는 부적합함

=> 동영상 스트리밍 서비스  

 

 

* TFTP --> OSI 7계층

* 한줄에 16바이트 (총 24바이트 )

 

[출처] 따라하면서 배우는 IT // UDP

* UDP (User Datagram Protocol)

* 출발지 포트(2바이트) / 목적지 포트 (2바이트) / 길이 (2바이트)  / checksum (2바이트)  = 8 바이트

 

 

05. TCP 프로토콜

(1) 연결성 + 안정적으로, 순서대로, 에러없이 통신 가능

 

[출처] 따라하면서 배우는 IT // TCP

 

* TCP (기본 20바이트 ~ 60바이트)

 출발지 포트(2바이트) / 목적지 포트 (2바이트) / 

  Sequece Number (4바이트)

  Acknowledgement Number (4바이트)

 Offset ( 헤더의 길이 )

 Reserved (예약된 필드 => 사용 안함)

 Checksum

 Window (연결지향성, 데이터 보내도 되는지 확인할때, 얼마만큼 더 보내?, 사용 공간을 상대방에게 알려줌)

[출처] 따라하면서 배우는 IT // TCP Flags

* TCP Flags (1 || 0)

U : Urgent Pointer ( 긴급 bit: 우선순위가 높은 데이터니 먼저 처리해줘)

A : Acknowledgment  ( 승인)

P : Push ( TCP 버퍼 상관없이 계속해서 데이터를 넣겠다 : 많이 안씀) 

R : Reset  ( 초기화 )

S : Syn (동기화 : 연결할때 무조건 사용 ) ⭐

F : Fin (종료)

 

TCP Flags (1 ❘❘ 0)

 

06. TCP 통신과정 (1) 연결 수립과정

(1) 연결 수립 과정 (3 Way Handshake)

* 클 > 서 : 요청 패킷 보냄 (반대 케이스 없음)

* 서 > 클 : 요청 받아들이는 패킷 보냄

* 클 > 서 : 최종적으로 수락하는 패킷 보냄 

[ WireShark로 보는 3 way Handshake ]
(중요포인트 1) 02 : syn 플래그가 설정이 되서 간다 + Sequence 번호 & Ack 번호가 세팅되어 간다

* 00 00 00 64 ( Sequence 번호)  / 00 00 00 00 (Ack 번호) / 02 (syn 플래그 설정)

 

* 12 (syn+ Ack 플래그) : 

 

* 웹서버에서는 SYN + ACK 같이 세팅해서 보냄 

* 클라이언트에서 최종적으로 수락하는 패킷 보내기.

 

* Ack 받는 쪽에서 줄때, 받은 Sequence Number +1 (S:100 => A: 101)

* 두번째 (S:2000_랜덤한 숫자 생성)

=> 클라이언트 입장에서 받은 Sequence Number +1 (A: 2001로 함)

=> ⭐ Sequence Number를 처음이 아닌경우, 받은 Ack 번호를 Sequence Number로 보

   

 

* 연결되고 나서는, 또 클라이언트가 서버에 요청 보냄

 

 

07. TCP 통신과정 (2) 데이터 송수신 과정

* TCP 이용한  데이터 통신

=> 단순히 TCP 패킷만 캡슐화해서 통신 x 

=> 페이로드 포함한 패킷 주고 받을 때의 일정한 규칙

Flag: PSH + ACK

 

클라이언트가 보낸 데이터의 크기 (100) => ACK :201 // 두번째 보낼때 데이터 크기 (500) => ACK : 2501

 

* 보낸 쪽에서 또 보낼때, SEQ 번호와 ACK 번호 그대로

* 받는 쪽에서 SEQ 번호 = ACK 번호

* 받는 쪽에서 ACK 번호 = SEQ 번호 + 데이터 크기

   (페이로드가 있을때는 데이터의 크기가 들어감, 없으면 +1)

 

 

08. TCP 연결상태의 변화

(1) LISTEN

: 서버쪽에서 포트번호를 사용하고 있는 상태 

=> 클라이언트의 요청을 듣고있는 상태 => 응답할 수 있도록

=> 서버는 항상 LISTEN 상태여야 함

 

(2) ESTABLISHED

: 3 Way Handshake가 끝나면 되는 상태 (통신 가능한 상태)

: 클라이언트와 서버 모두 ESTABLISHED 상태여야지 데이터를 주고받음

* TCP가 동기화하면서 주고받는데, 동기화한 내용만 출력해서 볼 수 있음 

 

 

* 주고받은 패킷들을 간략하게 보여주는 그래프

 

 

 

 

끝.

 

 

출처 : 따라하면서 배우는 it 

 
반응형