반응형
TCP / IP 4계층
TCP/IP : 인터넷과 관련된 다양한 프로토콜의 집합 → OSI 7계층을 4계층으로 단순화한 모델의 의미
TCP/ IP 계층 설명
계층을 4단계로 나눈 이유는 각 계층마다 독립성을 보장하기 위함으로,
문제가 발생했을 때 해당 계층만 확인하면 된다는 말과 같습니다.
각 계층의 역할은 다음과 같습니다.
- 링크 계층
- 인터넷 계층에서 형성된 패킷을 전기신호 또는 광신호로 바꾸어 전달
- 인터넷 계층
- IP( Internet Protocol ) 프로토콜은 인터넷 계층에 존재하며, 링크 계층을 통해 물리적으로 연결된 호스트 사이에서 패킷의 전달 경로를 결정
- 즉, IP 프로토콜은 라우팅 방법을 정의하는 것인데, 상위 계층인 전송 계층이 데이터 전달의 신뢰성을 책임진다는 가정하에 어떤 경로로 패킷을 전송할 것인가에 초점
- 전송 계층
- 인터넷 계층에서 결정한 목적지까지 실제 데이터를 신뢰성 있게 전송하는 역할
- TCP와 UDP라는 프로토콜이 존재
- 응용 계층
- 응용프로그램들 간의 데이터 통신이 이루어지는 계층
- 메일보내기( 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
- 클라이언트에서 서버에 연결 요청하는 SYN 데이터 전송
- 서버가 SYN을 받으면 ACK+ SYN 를 클라이언트쪽에 포트를 열어달라는 데이터 전송
- 서버 상태 : LISTEN → SYN_RCV 로 상태 변경
- 클라이언트에서 서버로부터 해당 데이터를 받으면, 포트를 열고 확인을 위해 서버에 ACK 데이터 전송
- 클라이언트 상태 : ESTABLISHED 상태로 변동
- ACK 데이터를 받은 서버 역시 ESTABLISHED 상태로 변경되면서 클라이언트와 서버 연결
TCP 종료 : 4 way handshake
- 초기 상태
- 클라 : ESTABLISHED
- 서버 : ESTABLISHED
- 클라이언트가 통신을 종료 하자는 FIN 데이터 전송 → 자신의 상태 종료 요청 후 ACK를 기다린다는 의미의 FIN_WAIT_1으로 상태 변동
- 서버는 확인 후 클라이언트에 ACK 데이터를 보내며 애플리케이션 소켓 닫음
- 서버 : 자원을 정리하는 데 시간이 소요되므로, CLOSE_WAIT 상태로 변동
- 클라 : 서버로 부터 응답 올때 까지 기다린다는 FIN_WAIT_2 상태로 변동
- 애플리케이션에서 소켓을 닫으면, 서버 → 클라이언트로 FIN 데이터 전송
- 서버 : 클라로부터 받을 마지막 ACK 기다리는 LAST_ACK 상태로 변동
- 클라이언트는 FIN 데이터 받으면 TIME_WAIT 상태로 변동되며 서버에서 ACK 데이터 보냄
- 클라 : CLOSED
- 서버 역시 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
반응형
'Web > web dev' 카테고리의 다른 글
로드밸런스(L4 vs L7) (0) | 2021.12.16 |
---|---|
LDAP , AD (0) | 2021.05.31 |
임베디드 OS 만들기 -2장 hello world 출력 (0) | 2019.09.23 |
임베디드 OS 만들기 환경설정 - (4)U-BOOT 설치 (0) | 2019.09.14 |
임베디드 OS 만들기 환경설정 - (3)qemu 설치 (0) | 2019.09.13 |