-
TCP/IP 4계층?학교 수업/네트워크 2020. 4. 30. 17:26
TCP/IP protocol suite
- 개념 : OSI 7계층보다 먼저 개발된 네트워크 모델, 4계층으로 구성
OSI 7계층은 네트워크의 표준이 되기는 하지만, 네트워크가 OSI를 이용해 실제적으로 구현되는 예는 거의 없다.
실질적인 통신는 TCP/IP 프로토콜 모델을 기반으로 구현된다.
- 각 계층별 설명(전 포스팅에서 설명한 OSI계층별 설명과 동일, 다른 점은 몇 개의 계층이 합쳐져 있다는 점)
1. 데이터링크계층
- OSI 7계층에서 물리계층과 데이터링크 계층에 해당
- 하드웨어적인 요소와 관련되는 모든 것을 지원하는 계층
- 송신측 컴퓨터의 경우 상위 계층으로부터 전달받은 패킷에 물리적인 주소은 MAC 주소 정보를 가지고 있는 헤더를 추가하여 프레임을 만들고, 프레임을 하위계층인 물리 계층으로 전달한다.
- 수신측 컴퓨터의 경우 데이터 링크 계층에서 추가된 헤더를 제거하여 상위 계층인 네트워크 계층으로 전달한다.
- 주요 프로토콜 : Ethernet 등
2. 네트워크계층
- OSI 계층에서 네트워크 계층에 해당
- 라우팅 기능 + 상위 트랜스포트 계층으로부터 받은 데이터에 IP패킷 헤더를 부여 IP패킷을 만들고 이를 전송
- 주요 프로토콜 : IP, ARP, ICMP, IGMP 등
3. 전송계층
- OSI 계층에서 전송계층에 해당
- 네트워크 양단의 송수신 호스트 사이에서 신뢰성 있는 전송 기능 제공
- 주요 프로토콜 : TCP, UDP, SCTP
4. 응용계층
- OSI 계층에서 세션계층, 프레젠테이션계층, 애플리케이션 계층에 해당
- 응용프로그램들이 네트워크서비스, 메일서비스, 웹서비스 등을 할 수 있도록 표준적인 인터페이스 제공
- 주요 프로토콜 : Telnet, FTP, SNTP, SMTP, HTTP 등
- TCP/IP 계층을 이용한 통신 흐름
송신하는 측은 애플리케이션 계층에서부터 내려가고, 수신하는 측은 네트워크 계층부터 올라간다.
1. 데이터 캡슐화(Data encapsulation) : 송신 측 입장에서 데이터 생성 과정
각 계층을 지나면서 각각의 헤더(header)를 붙이는 작업을 캡슐화라고 한다.
헤더? 각 계층에서 해야할 일들을 정의한 데이터
헤더를 따르는 데이터는 페이로드(payload), 바디(body)로 부른다.
2. 역캡슐화 : 수신 측 입장에서 데이터 생성과정
상위 프로토콜 계층으로 올라가며 각 헤더 부분을 삭제하는 작업을 역캡술화라고 한다.
- 각 계층별 프로토콜에 대해 자세하게
1. 데이터 링크 계층 : 패킷을 전달하는 인터페이스와 관련딘 하드웨어를 제어하는 기능
1) Ethernet
- 회선상에서 데이터를 전송하는 여러 가지 방식들중 현재 전세계적으로 90%이상 사용되는 대표적인 네트워크 형태이다.
- 데이터를 전송하기 위해 CSMA/CD 라는 약속을 사용하며 전송속도는 현재 10~1000Mbps 까지 다양하게 존재한다.
- 이더넷에 접속되어 있는 장치들은 어느때라도 데이터를 전송할 수 있는데, 전송하기 전에 회선이 사용 중인지 감시하고 있다가 회선이 비어 있을 때 데이터를 전송한다. 만약 데이터를 전송하는 시점에 다른 장치가 동시에 전송을 개시하면 충돌이 발생하게 되며, 충돌한 데이터들은 버려지고 데이터를 전송한 장치들에게 재전송을 요구하게 된다.
2. 네트워크 계층 : 네트워크 상의 패킷 이동을 제어하는 기능
1) IP(Internet Protocol)
- TCP/ IP 기반의 인터넷 망을 통하여 데이터 전달을 담당하는 프로토콜이다.
(데이터 경로 설정 즉, 라우팅 기능 수행)
- 패킷의 완전한 전달을 보장하지 않는다. (비신뢰성, 비연결성)
- IP패킷 헤더 내에 수신 및 발신 IP주소를 포함한다.
IP 주소
각각의 host를 구분하기 위해 사용되는 주소
하나의 IP주소에는 network ID와 host ID가 존재 (network id가 같으면 같은 network 라는 뜻)
IP주소는 현재 2가지 체계가 존재한다.
① IPv4 : 32bit 길이의 식별자
일반적으로 8bit씩 끊서 이를 0~255의 10진수로 나타내며, 각 숫자는 점(.)으로 구분
예시) 127.0.0.1 : 자기 자신을 가리키기 위한 IP 주소
0.0.0.0 : IP주소 할당받기 전 임시로 사용하는 IP주소
IPv4에서는 주소를 A,B,C,D,E class로 나누어 network id와 host id를 구분한다.
(인터넷상의 모든 host들을 관리하기 힘들므로 네트워크 범위 지정해서 관리 쉽게 하려고)
실제 네트워크에서 사용하는 class는 A, B, C class 이다.
· A class : 처음 8bit가 network id, 나머지는 host id
네트워크 할당은 128 곳에 가능하며(네트워크 비트 8bit니깐 2^8), 최대 호스트 수는 16,777,214개
· B class : 처음 16bit가 network id, 나머지는 host id
네트워크 할당은 16,384 곳에 가능하며, 최대 호스트 수는 65,534개
· C class : 처음 24bit가 network id, 나머지는 host id
네트워크 할당은 2,097,152 곳에 가능하며, 최대 호스트 수는 254개
· D class : 멀티캐스트를 위한 주소
네트워크 전송 방법
유니캐스트(unicast) : 1:1
브로드캐스트(broadcast): 1:all
멀티캐스트(multicast)? 1:N 특정 그룹에게만
· E class : 미래에서 사용하기 위해 남겨둔 주소
class 구별 방법?
IP 주소에서 쓸 수 있는 숫자의 범위는 0~255로 되어 있기에
첫 번째 Octet에서 0~255까지의 숫자를 5개로 나누어서 A, B, C, D, E Class로 구분· A Class : 0 ~ 127 (0.0.0.0 ~ 127.255.255.255)· B Class : 128 ~ 191 (128.0.0.0 ~ 191.255.255.255)· C Class : 192 ~ 223 (192.0.0.0 ~ 233.255.255.255)· D Class : 224 ~ 239 (224.0.0.0 ~ 239.255.255.255)· E Class : 240 ~ 255 (240.0.0.0. ~ 255.255.255.255)② IPv6 : IPv4주소가 고갈됨에 따라 기존의 IPv4주소체계를 128bit 크기로 확장한 차세대 주소
IPv4와 달리 일반 숫자 표현을 10진수가 아닌 16진수로 표기
2) ARP (Address Resolution Protocol)
- 인터넷에 연결되는 모든 호스트는 네트워크 계층 주소에 해당하는 32bit의 IP주소를 가지고 있다.
- LAN에서 어떤 컴퓨터에 IP패킷을 물리적으로 전달하기 위해서는 먼저 그 장비의 MAC주소를 알아야 하는데 어떤 장비의 IP주소를 가지고 그 장비의 MAC 주소를 알아내기 위한 절차(프로토콜)를 ARP 라고 한다.
MAC주소(media access contol address) :
네트워크 세그먼트의 데이터 링크 계층에서 통신을 위한 네트워크 인터페이스에 할당된 고유 식별자
- ARP 동작원리 : ARP request & ARP response
ARP request : 송신측이 목적지의 MAC 주소를 알아내기 위한 과정
ARP response : 목적지에 해당하는 곳에서 자신의 IP주소와 MAC주소를 직접적으로 응답하는 과정
송신 측 목적지 ip주소 패킷을 모든 컴퓨터에게 보낸다. (ARP request, 브로드캐스트)
↓
모든 호스트들과 라우터는 송신자가 보낸 ARP 요청 패킷을 수신
↓
목적지 ip에 해당하는 곳에서 자신의 MAC주소 응답 (ARP response, 유니캐스트)
- 동일한 목적지 호스트에 IP패킷을 연속하여 보낼 때 매번 ARP를 사용하면 ARP를 처리하기 위한 패킷들을 자주 전송하게 되어 대역 이용률이 떨어진다. 이와 같이 매번 ARP request 패킷을 발송하지 않도록 하기위하여, ARP로 얻은 최근의 정보를 캐시에 기록해 두는 것이 효율적이다.
**참고**
네트워크 계층에서 IP와 ARP를 이용한 패킷 전달 과정 그림
3) RARP (Reverse Address Resolution Protocol)
- ARP의 역과정 , 즉 48 비트의 MAC주소로부터 그 장비의 32비트 IP 주소를 알아내는 과정을 RARP
4) ICMP (Internet Control Message Protocol)
- 인터넷 계층 프로토콜 중 ICMP는 호스트 또는 라우터 사이에 오류정보, 제어 메세지를 전달하는데 사용되며 주로 IP가 이용하지만 ping과같은 응용프로그램이 직접 사용하는 경우도 있다.
5) IGMP (Internet Group Message Protocol)
- 로컬 네트워크상의 멀티캐스팅 그룹관리를 위한 프로토콜
- 하나의 라우터와 여러 호스트로 구성되는 서브네트워크 상에서, 호스트들이 어떤 멀티캐스트 그룹에 속하는 가를 라우터가 알도록 하기위한 일종의 그룹 관리용 프로토콜
** ICMP, IGMP등은 데이터 전송용 프로토콜이 아니고, 네트워크상에 이벤트 또는 변화를 알리는데 사용되는 제어용 프로토콜이다. **
3. 전송계층 : 두 호스트 간에 종단 간 연결은 맺고 데이터를 전달할 수 있는 기능
1) UDP (User Datagram Protocol)
- IP를 사용하는 네트워크 내에서 컴퓨터들 간에 메시지들이 교환될 떄 제한된 서비스만을 제공하는 통신 프로토콜
- TCP와는 달리 메세지를 패킷으로 나누고, 반대편에서 재조립 하는 등의 서비스는 제공 x
- 특징
① Connectionless : 송수신측 연결 과정 없이 즉시 데이터 전송
② Unreliable : datagram이 사라지거나 중복되어도 상관x
③ No flow/congestion control
- 교환해야 할 데이터가 매우 적은 네트워크 응용프로그램들은 처리시간 단축을 위해 TCP보다 UDP사용
2) TCP (Transmission Control Protocol)
- 인터넷 상의 컴퓨터들 사이에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용되는 프로토콜
IP가 실제로 데이터의 배달처리를 하는 동안, TCP는 데이터 패킷을 추적 관리
- IP가 처리할 수 있도록 메세지를 여러 개의 패킷들로 확실히 나누고, 반대편에서는 완전한 메세지 재조립
- 특징
① Connection oriented : 송수신측 통신을 위해 미리 연결 맺음
연결 과정
Three way handshake : TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 세션을 수립하는 과정 (양쪽 모두 데이터를 전송할 준비가 되있음을 보장)
STEP 1 : 송신측에서 수신측으로 접속을 요청하는 SYN 패킷을 보낸다.
STEP 2 : 수신측은 SYN 요청을 받고, 송신측에 요청에 수락한다는 ACK과 SYN 패킷을 발송해 송신측이 다시 ACK으로 응답하기를 기다린다.
STEP 3 : 송신측이 수신측에 ACK을 보낸 이후로 부터는 연결이 이루어지고 데이터가 오간다.
연결 종료 과정
Four way handshake
STEP 1 : 송신측에서 수신측으로 연결 종료를 요청하는 FIN 패킷을 보낸다.
STEP 2 : 수신측은 알겠다는 ACK 패킷을 전송하고, 자신의 통신이 끝난때까지 기다린다.
(아직 전송할 데이터가 남아있다면 이어서 전송)
STEP 3 : 수신측의 통신이 완전히 끝났다면 연결 종료 요청에 합의한다는 의미로 송신측에 FIN 패킷 전송한다.
STEP 4 : 송신측이 확인했다는 ACK 패킷 보낸다.
☆client는 서버로부터 FIN+ACK을 받은 후 바로 종료되지 않는다.
TIME_WAIT상태를 1~2분 정도 유지 후 closed로 이동하며 완전 종료된다.
è 바로 closed가 되지 않는 이유
① SàC FIN+ACK에 대한 응답으로 CàS ACK을 전송한다.
이때 서버는 자신이 보낸 FIN+ACK이후 일정시간 동안(TIME-OUT) 상대로부터 ACK을 받지 못하면 FIN을 다시 보낸다.
이경우를 대비하여 client는 바로 종료하지 않고 TIME_WAIT상태를 일정시간 유지
② Server와 client간 연결이 종료된 후 다시 연결될 수 있으며 이때 문제 발생하지 않도록 TIME_WAIT상태를 일정 유지한다.
서버는 client buffer를 찾을 때 (IP주소, port number)쌍으로 이루어진 client ID를 이용한다.
만약 같은 client가 같은 port number을 가지고 2차 연결한 뒤 1차 연결 때 packet이 늦게 전송되면, 이 packet과 2차 연결 때 packet이 구분되지 않는다. (1차와 2차가 IP주소와 port number이 같기 때문)
이 문제를 해결하기 위해 client 연결 종류 시 TIME_WAIT상태를 일정시간 유지함으로써 이 기간동안 같은 client가 server로 연결요청 보낼 때 생성되는 port number를 이전 number와 다르게 설정한다.
② Reliability : 신뢰성있게 Error detection & recovery 수행
Error 종류
- Bit Level Error
Channel/Physical Link Level에서 발생하는 Error로 Data의 값이 바뀐 경우.
- Packet Level Error
Network/Data Link Level에서 발생하는 Error로 Data가 사라지는 경우.
Network의 router에서 입력 Data가 많으면 버퍼에 쌓이다가 없어지는 경우.
Loss, Out of Order, Duplicate
Error Detection 방법
- Bit Level Error : CRC (Error Detection Code)
- Packet Level Error : ARQ (Acknowledgement, Sequence Number)
Error recovery 방법 : Retransmission
③ Flow & Congestion control
- flow control : 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
시간당 송신자가 보내는 패킷의 양이 수신자가 수신할 수 있는 패킷의 양을 넘어서지 않게 하는 것이다.
내부 방식으로는 stop and wait 방식과 sliding window 방식 존재
stop and wait : 매번 전송한 패킷에 대해 확인 응답ACK을 받아야만 그 다은 패킷을 전송하는 방법, RTT(retransmission timer)안에 ACK가 오지 않으면 재전송
예시)
예시처럼 ACK을 제대로 보냈지만, ACK이 lost되거나 RTT를 넘기면 불필요한 재전송이 일어나는 단점 존재
sliding window : 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
Stop and wait의 단점을 보완하는 방법으로 가장 많이 사용되는 방법.
윈도우(window) : 단위 시간 내에 보내는 패킷의 수
** 참고 *****************************************************************************************
Silly Window Syndrome
body보다 header의 크기가 큰 패킷의 전송이 잦음으로 네트워크가 혼란스러운 상황
송신측 신드롬 ? application이 tcp버퍼안에다가 천천히 데이터 보내서 생긴 신드롬
작은 사이즈의 데이터를 잦은 전송을 해서
수신측 신드롬 ? 데이터의 처리가 느려질 경우 생긴 신드롬
작은 사이즈의 데이터를 여러번 받아야 해서
************************************************************************************************
- congestion control : 송신측의 데이터 전달과 네트워크의 데이터 처리속도 차이를 해결하기 위한 기법
송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달
만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리 할 수 없게 된다.
이런 경우 호스트들은 또 다시 재전송을 하게 되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시킨다.
따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡제어라 한다.
흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서의 전송 문제를 다룬다.AIMD 방식을 통해 control
AIMD(Additive Increase / Multiplicative Decrease) :
처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법.
만일 패킷전송을 실패하거나 일정 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄인다.
((이 방식을 사용하는 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만 시간이 흐르면 평형 상태로 수렴하게 되는 특징 존재))
문제점은 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지는 못한다는 점. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식이다.
3) SCTP (Stream Control Transmission Protocol)
- TCP와 UDP의 단점을 개선한 전송계층 기술로 고속전송과 신뢰성을 보장한다.
4. 어플리케이션 계층 : TCP/IP 프로토콜을 이용하는 서비스
1) Telnet
- 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 프로토콜
- 원격 접속 서비스로서 특정 사용자가 네트워크를 통해 다른 컴퓨터에 연결하여 그 컴퓨터에서 제공하는 서비스를 받을 수 있게 한다.
2) FTP (File Transfer Protocol)
- 파일 전송 프로토콜
3) SNMP (Simple Network Management Protocol)
- SNMP는 TCP/IP 프로토콜 그룹을 이용하여 인터넷상에서 장치를 관리하기위한 기반구조이다. 이것은 인터넷을 감시하고 관리하기 위한 기본적인 운영을 제공한다.
4) SMTP (Simple Mail Transfer Protocol)
- 전자 우편을 보내고 받는데 사용되는 TCP/IP 프로토콜이다.
5) HTTP (Hyper Text Transfer Protocol)
- Web-Browser같은 응용프로그램을 통해 Web-Client와 Web-Server사이에 데이터를 전송하는 프로토콜 이다.
- 평문 (암호화 하지않은) 통신이기 때문에 도청이 가능하다.
6) HTTPS (Hyper Test Transfer Protocol Secure)
- HTTP의 약점을 보안하기 위하여 HTTP 암호화나 인증 등의 구조를 더한 것이다.
- 웹페이지의 로그인이나 쇼핑의 결제 화면 등에서 사용되고 있다.
'학교 수업 > 네트워크' 카테고리의 다른 글
TCP와 IP data format (0) 2020.06.22 OSI 7계층? (0) 2020.04.29 네크워크란? (0) 2020.04.29