Simple is IT, 누구나 보고 누구나 깨닫는 IT

OSI 7 계층 별 설명_Transport Layer 본문

Simple is IT/Network

OSI 7 계층 별 설명_Transport Layer

currenjin 2020. 4. 25. 15:12

전송 계층( Transport Layer )

- 송, 수신자 간 프로세스를 연결하는 통신 서비스를 제공한다.

- 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 다중화 등 ( TCP, UDP )

* Process : 메모리에서 실행되는 프로그램

* 속도 : UDP > TCP, 안정성 : TCP > UDP

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

- 연결 지향 전송 방식을 사용한다.

- 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로,

에러없이 교환할 수 있게 한다.

TCP Header (20 byte 옵션제외)

Source Port, Destination Port : 출발지, 목적지 Port

Sequence Number : 송신측의 보낼 데이터 스트림의 단위를 나타내는 순번.

Acknowledgment Number : 자신이 수신할 때 상대방이 보내야 할 송신 순번을 가짐.

Offset : 4로 나눔

Reserved(예약) : 사용안함

Window : 보냄과 받음 확인 ( 사용 공간 확인 )

TCP Flags

TCP Flags

! Acknowledgment : 승인함

! Push : 데이터 넣기

! Reset : 초기화

! Sync : 상대와 연결 시 무조건 사용

계속되는 연결 상태 확인

! Final : 종료선언

Urgent Pointer : TCP Flags의 Urgent bit와 세트이다.

TCP의 연결 수립 과정 ( 3Way Handshake : 악수 )

- TCP를 이용한 통신 중 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정

1. Client가 Server에게 요청 패킷을 보낸다.

2. Server가 Client의 요청을 받아들이는 패킷을 보낸다.

3. Client는 이를 최종적으로 수락하는 패킷을 보낸다.

ex)

1way - Flag : SYN : Client

S:100 A:0 ( S : 랜덤한 값 생성 )

2way - Flag : SYN+ACK : Server

S:2000 A:101 ( S : 랜덤한 값 생성, A : 1way의 S값 + 1 )

3way - Flag : ACK : Client

S:101 A:2001 ( S : 2way의 A값, A : 2way의 S값 + 1 )

TCP의 데이터 송수신 과정

1. Client가 다시 요청 시엔 SEQ번호와 ACK번호가 그대로이다.

2. Server가 요청 받을 때 SEQ번호는 받은 ACK번호가 된다.

3. Client의 ACK번호는 받은 SEQ번호 + 데이터크기

ex)

1 - Flag : PUSH + ACK : Client

S:101 A:2001 ( 연결 수립 과정 중 3way 부분의 값을 그대로 사용 )

2 - Flag : PUSH + ACK : Server

S:2001 A:201 ( S : 1번의 A값, A : 1번 S값 + 보내는 데이터 )

3 - Flag : ACK : Client

S:201 A:2501 ( S : 2번의 A값, A : 2번의 S값 + 받는 데이터 )

TCP 상태 전이도

active opne : 능동

passive opne : 수동

LISTEN : 요청 대기 상태

ESTABLISHED : 연결 수립 상태

실선 : Client

점선 : Server

실습

-> 아무 웹 접속 후 TCP Stream, Flow Graph 확인해보면 자세하게 나와있다.

-> netcat 프로그램으로 가상머신과 테스트 후 캡쳐화면 확인.

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

- 단순한 전송에 사용되고, 오류의 검사와 수정이 필요 없는 프로그램에서 주로 수행

- 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다.

UDP Header (8 byte)

DNS( UDP/53 ), TFTP( UDP/69 ), RIP 등

실습

-> VM과 HOST에서 tftpd 프로그램 테스트

- tftpd로 HOST -> VM 파일 옮긴 후 패킷캡쳐 확인

Port Number

- 특정 프로세스끼리 통신을 하기 위해 사용( 하나의 포트번호는 하나의 프로그램만 )

- 연결 정보 : netstat -ano

Well-Known( 잘 알려진 포트 번호 )

FTP : 20, 21

SSH : 22

TELNET : 23

SMTP : 25

DNS : 53

DHCP : 67, 68

TFTP : 69

HTTP : 80

POP3 : 110

HTTPS : 443

Registered(유명한 포트 번호)

Oracle DB Server : 1521

MySQL Server : 3306

MS Remote Desktop : 3389

Dynamic(일반 사용 포트 번호)

49152 ~ 65535


-> netstat -ano 확인

- TCP는 상태가 활발함, UDP는 상태가 없음. ( 연결, 비연결형의 차이점 드러남 )

- PID( Process ID ) : 프로그램을 구분하는 ID ( 유동적인 ID )

# 서비스 실행이 되지 않을 때에는 PID와 상태로 인식 가능


Comments