반응형

TCP / IP 4계층

TCP/IP : 인터넷과 관련된 다양한 프로토콜의 집합 → OSI 7계층을 4계층으로 단순화한 모델의 의미

 

TCP/ IP 계층 설명

 

 

계층을 4단계로 나눈 이유는 각 계층마다 독립성을 보장하기 위함으로, 

문제가 발생했을 때 해당 계층만 확인하면 된다는 말과 같습니다. 

 

각 계층의 역할은 다음과 같습니다. 

  1. 링크 계층
    • 인터넷 계층에서 형성된 패킷을 전기신호 또는 광신호로 바꾸어 전달
  2. 인터넷 계층
    • IP( Internet Protocol ) 프로토콜은 인터넷 계층에 존재하며, 링크 계층을 통해 물리적으로 연결된 호스트 사이에서 패킷의 전달 경로를 결정
    • 즉, IP 프로토콜은 라우팅 방법을 정의하는 것인데, 상위 계층인 전송 계층이 데이터 전달의 신뢰성을 책임진다는 가정하에 어떤 경로로 패킷을 전송할 것인가에 초점
  3. 전송 계층
    • 인터넷 계층에서 결정한 목적지까지 실제 데이터를 신뢰성 있게 전송하는 역할
    • TCP와 UDP라는 프로토콜이 존재
  4. 응용 계층
    • 응용프로그램들 간의 데이터 통신이 이루어지는 계층
    • 메일보내기( SMTP ), 파일 전송( FTP ), 웹에 접속( HTTP ) 

 

TCP/ IP 패킷 캡슐화 과정

 

 

 

 

TCP, UDP 프로토콜

TCP 프로토콜

  • 연결 지향 프로토콜
  • TCP 프로토콜에서는 데이터 송수신을 위해 클라이언트와 서버의 소켓이 연결되어 있어야 하며, 데이터가 유실되면 데이터 재전송을 요청함으로써 신뢰성을 보장
  • 즉, 신뢰성 있는 데이터 전송이 가능하다는 장점으로 인해 HTTP, FTP, TELNET 등 대부분의 응용 계층 프로토콜의 전송 계층

UDP 프로토콜

  • 비연결 지향 프로토콜입니다.
  • 전송한 데이터가 잘 전달이 되었는지 확인하지 않고 단지 데이터만 보낸다는 점이 TCP와의 차이점
  • 즉, 신뢰적이지 않으며( 비신뢰성 ), 대신 속도가 빠르다는 장점 존재. → 신뢰성 추가를 위해 헤더에 checksum 존재
  •  UDP 프로토콜은 음악이나 동영상 스티리밍(streaming)과 같은 서비스에 적합

 

TCP 연결 / 해제 

TCP / IP 프로토콜은 OS 안에 라이브러리로 내장되어있고, 

연결을 위한 3 way handshake(클라이언트와 통신하기 전 3번의 악수)와 

종료를 위한 4 way handshake 의 과정들은 OS 에서 알아서 처리

 

 

Socket : 응용 계층이 하위 계층인 TCP/IP 계층의 역할을 몰라도 되도록 TCP/IP 역할을 감춰주는 역할,
                 즉 소켓은 프로그래머가 커널 내부를 몰라도 TCP/IP 사용할 수있도록 하는 프로토콜 인터페이스

 

 

TCP 연결 : 3 way handshake

  1. 클라이언트에서 서버에 연결 요청하는 SYN 데이터 전송
  2. 서버가 SYN을 받으면 ACK+ SYN 를 클라이언트쪽에 포트를 열어달라는 데이터 전송
    • 서버 상태 : LISTEN → SYN_RCV 로 상태 변경
  3. 클라이언트에서 서버로부터 해당 데이터를 받으면, 포트를 열고 확인을 위해 서버에 ACK 데이터 전송
    • 클라이언트 상태 : ESTABLISHED 상태로 변동
  4. ACK 데이터를 받은 서버 역시 ESTABLISHED 상태로 변경되면서 클라이언트와 서버 연결 

 

 

TCP 종료 : 4 way handshake

  1. 초기 상태 
    • 클라 : ESTABLISHED
    • 서버 : ESTABLISHED 
  2. 클라이언트가 통신을 종료 하자는 FIN 데이터 전송 → 자신의 상태 종료 요청 후 ACK를 기다린다는 의미의 FIN_WAIT_1으로 상태 변동
  3. 서버는 확인 후 클라이언트에 ACK 데이터를 보내며 애플리케이션 소켓 닫음
    • 서버 : 자원을 정리하는 데 시간이 소요되므로, CLOSE_WAIT 상태로 변동
    • 클라 : 서버로 부터 응답 올때 까지 기다린다는 FIN_WAIT_2 상태로 변동
  4. 애플리케이션에서 소켓을 닫으면, 서버 → 클라이언트로 FIN 데이터 전송
    • 서버 : 클라로부터 받을 마지막 ACK 기다리는 LAST_ACK 상태로 변동
  5. 클라이언트는 FIN 데이터 받으면 TIME_WAIT 상태로 변동되며 서버에서 ACK 데이터 보냄
    • 클라 : CLOSED
  6. 서버 역시 ACK를 받았기 때문에 CLOSED

 

해당 과정에서 FIN_WAIT_1, FIN_WAIT_2  의 상태가 시간이 지나면 자동 TIME_OUT 되지만, 너무 그 시간텀이 길어서 많은 수의 소켓이 늘어난다면 

메모리 부족으로 소켓을 오픈하지 못하기 때문에, 

TIME OUT 시간을 적절히 조절할 필요가 있습니다. → 유닉스 환경에서 NDD 명령어 통해 확인 가능 

예시)

-- time_wait 종료 시간 확인

ndd -get /dev/tcp tcp_time_wait_interval



-- time_wait 종료 시간 30초로 설정

ndd -set /dev/tcp tcp_time_wait_interval 30000





-- fin_wait_2 타임 아웃 시간 확인

ndd -get /dev/tcp tcp_fin_wait_2_timeout



-- fin_wait_2 타임 아웃 시간 5분으로 설정

 ndd -set /dev/tcp tcp_fin_wait_2_timeout 300000

 

IP 확인

리눅스 - nslookup 명령어 사용

 

질의 방법

nslookup [-type = record] DomainName DNS Server

 

자주 사용되는 DNS Record type

-type의미

a IPv4
aaaa IPv6
MX 메일서버
NS 네임서버
SOA 마스터네임서버
SRV 정방향
txt 텍스트
PTR 역방향
CNAME 실제 , 정식 도메인 이름에 별칭 이름 매핑하는 DNS 레코드

 

 

리눅스 명령어 예시

원하는 도메인 ip 확인 예시

C:Users780-32bit>nslookup simplexi.com

서버: ad-pdc.intra.simplexi.com

Address: 192.168.xx.90

이름: simplexi.com

Address: 222.122.xxx.6



C:Users780-32bit>nslookup www.simplexi.com

서버: ad-pdc.intra.simplexi.com

Address: 192.168.xx.90

이름: www.simplexi.com

Address: 222.122.xxx.6



C:Users780-32bit>nslookup mail.simplexi.com

서버: ad-pdc.intra.simplexi.com

Address: 192.168.xx.90

이름: mail.simplexi.com

Address: 203.231.xxx.10

특정 네임서버 통해서 ip 정보 확인

C:Users780-32bit>nslookup simplexi.com ns.dacom.co.kr

서버: ns.lgdacom.net

Address: 164.124.101.2

권한 없는 응답:

이름: simplexi.com

Address: 222.122.xxx.6



C:Users780-32bit>nslookup mail.simplexi.com kns.kornet.net

서버: kns.kornet.net

Address: 168.126.63.1

권한 없는 응답:

이름: mail.simplexi.com

Address: 203.231.xxx.10

 

 

 

반응형

+ Recent posts