인터넷 프로토콜 스위트(internet protocol suite)란?
- 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합
- 이를 TCP/IP 4계층 또는 OSI 7계층 모델로 설명하기도 함
2.2.1 계층 구조

-
OSI 계층은 애플리케이션 계층을 세 개로 쪼개고 링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 표현하는 것이 다르며, 인터넷 계층을 네트워크 계층으로 부른다는 점이 차이
-
특정 계층이 변경되었을 때 다른 계층이 영향받지 않도록 설계 (ex. 전송 계층에서 TCP를 UDP로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치해야 하는 것은 X. 유연하게 설계)

1. 애플리케이션 계층
- FTP, HTTP, SSH, SMTP, DNS 등 응용 프로그램이 사용되는 프로토콜 계층. 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층
**FTP
- 장치와 장치 간의 파일을 전송하는데 사용되는 표준 통신 프로토콜
**SSH
- 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
**HTTP
- World Wide Web을 위한 데이터 통신의 기초이자 웹 사이트를 이용하는 데 쓰는 프로토콜
**SMTP
- 전자 메일 전송을 위한 인터넷 표준 통신 프토로콜
**DNS
- 도메인 이름과 IP 주소를 매핑해주는 서버
- 예를 들어, www.naver.com에 DNS 쿼리가 오면 [Root DNS] -> [.com DNS] -> [.naver DNS] -> [.www DNS] 과정을 거쳐 완벽한 주소를 찾아 IP 주소를 매핑
- 이를 통해 IP 주소가 바뀌어도 사용자들에게 똑같은 도메인 주소로 서비스 가능
2. 전송 계층
- 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공
- 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할
- TCP, UDP
- TCP는 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인하며 '가상회신 패킷 교환 방식' 사용
- UDP는 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 '데이터그램 패킷 교환 방식' 사용
**가상회선 패킷 교환 방식
- 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 '순서대로' 도착하는 방식

**데이터그램 패킷 교환 방식
- 패킷이 독립적으로 이동하며 최적의 경로를 선택해 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 '순서가 다를 수' 있는 방식

**TCP 연결 성립 과정
신뢰성 확보할 때, '3-웨이 핸드셰이크(3-way handshake)' 진행

클라이언트가 서버와 통신할 때 세 단계의 과정을 거침
- SYN 단계
- 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄
- ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호. 장치마다 다를 수 O
- SYN + ACK 단계
- 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN+1을 보냄
- ACK 단계
- 클라이언트는 서버의 ISN+1한 값인 승인번호를 담아 ACK를 서버에 보냄
**SYN
- SYNchronization의 약자. 연결 요청 플래그
**ACK
- ACKnowledgement의 약자. 응답 플래그
**ISN
- Initial Sequence Numbers의 약자. 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호
**TCP 연결 해제 과정
'4-웨이 핸드셰이크(4-way handshake)' 진행

- 1번
- 먼저 클라이언트가 연결을 닫으려고 할 때, FIN으로 설정된 세그먼트 보냄. 클라이언트는 FIN_WAIT_1상태로 들어가고 서버의 응답을 기다림
- 2번
- 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어감
- 클라이언트가 세그먼트를 받으면 FIN_WAIT_2상태에 들어감
- 3번
- 서버는 ACK를 보내고 일정 시간 이후 클라이언트에 FIN 세그먼트 보냄
- 4번
- 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됨.
- 이후 클라이언트는 어느 정도 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제
왜 굳이 일정 시간 뒤에 연결을 닫을까? (TIME_WAIT)
- 지연 패킷이 발생할 경우 대비하기 위함. 패킷이 뒤늦게 도달하고 이를 처리하지 못하면 데이터 무결성 문제 발생
- 두 장치가 연결이 닫혔는지 확인하기 위함. 만약 LAST_ACK 상태에서 닫히게 되면, 다시 새로운 연결을 하려 할 때 장치는 줄곧 LAST_ACK로 되어 있어 접속 오류가 나타날 것
**TIME_WAIT
- 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태. 지연 패킷 등의 문제점을 해결할 때 쓰임.
- CentOS6, 우분투는 60초. 윈도우는 4분
- OS마다 조금씩 다를 수 O
**데이터 무결성(data integrity)
- 데이터의 정확성과 일관성을 유지하고 보증하는 것
3. 인터넷 계층
- 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층
- IP, ARP, ICMP 등이 있고, 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달
- 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결적인 특징
4. 링크 계층
- 전선, 광섬유, 무선 등으로 실질적으로 데이터 전달
- 장치 간에 신호를 주고받는 '규칙'을 정하는 계층
- 네트워크 접근 계층이라고도 함
- 이를 물리 계층과 데이터 링크 계층으로 나누기도 하는데, 물리 계층은 무선 LAN과 유선 LAN을 통해 0과 1로 이루어진 데이터를 보내는 계층을 말함
- 데이터 링크 계층은 '이더넷 프레임'을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하는 계층
**이더넷 프레임
- 데이터 링크 계층에서 사용되는 전송 기본 단위.
- 프레임은 데이터를 담는 컨테이너라고 보면 됨

**유선 LAN(IEEE802.3)
- 유선 LAN을 이루는 이더넷은 IEEE802.3이라는 프로토콜을 따르며 전이중화 통신을 사용
**전이중화(full duplex) 통신
- 양쪽 장치가 동시에 송수신할 수 있는 방식. 송신로와 수신로로 나눠서 데이터를 주고받으며 현대의 고속 이더넷은 이 방식을 기반으로 통신함

**CSMA/CD
- 이전에는 유선 LAN에 '반이중화 통신'중 하나인 CSMA/CD(Carrier Sense Multiple Access with Collision Detection) 방식 사용.
- 데이터를 '보낸 이후' 충돌이 발생한다면 일정 시간 이후 재전송하는 방식
- 수신로와 송신로를 각각 둔 것이 아니고 한 경로를 기반으로 데이터를 보내기 때문에, 데이터를 보낼 때 충돌에 대비해야 함
**유선 LAN을 이루는 케이블
- TP 케이블이라 불리는 트위스트 페어 케이블과 광섬유 케이블이 대표적
- 트위스트 페어 케이블
-
여덟 개의 구리선을 두 개씩 꼬아 묶은 케이블

-
케이블은 구리선을 실드 처리하지 않고 덮은 UTP 케이블과 실드 처리하고 덮은 STP로 나눠짐.
-
우리가 많이 볼 수 있는 케이블은 UTP 케이블로 흔히 LAN 케이블이라고 함
-
랜선을 꽂을 수 있는 커넥터를 RJ-45 커넥터라고 함

- 광섬유 케이블
- 광섬유로 만든 케이블
- 레이저를 이용하여 통신하기 때문에 구리선과 비교할 수 없을 만큼 장거리 및 고속 통신 가능
- 보통 100Gbps 데이터 전송
- 광섬유 내부와 외부를 다른 밀도를 가지는 유리나 플라스틱 섬유로 제작해서 한 번 들어간 빛이 내부에서 계속적으로 반사하며 전진하여 반대편 끝까지 가는 원리 이용

- 빛의 굴절률이 높은 부분을 코어, 낮은 부분을 클래딩
****무선 LAN(IEEE802.11)
- 수신과 송신에 같은 채널을 사용하기 때문에 반이중화 통신 사용
**반이중화 통신(half duplex)
- 양쪽 장치는 서로 통신할 수 있지만, 동시에는 통신할 수 없으며 한 번에 한 방향만 통신할 수 있는 방식

- 일반적으로 장치가 신호를 수신하기 시작하면 응답하기 전에 전송이 완료될 때까지 기다려야함
- 둘 이상의 장치가 동시에 전송하면 충돌이 발생하여 메시지가 손실되거나 왜골될 수 있어서 충돌 방지 시스템 필요
**CSMA/CA
- 반이중화 통신 중 하나로 장치에서 데이터를 보내기 전에 캐리어 감지 등으로 사전에 가능한 한 충돌을 방지하는 방식을 사용
과정
1. 데이터를 손싱하기 전에 무선 매체를 살핌
2. 캐리어 감지 : 회선이 비어 있는지 판단
3. IFS(Inter FrameSpace) : 랜덤 값을 기반으로 정해진 시간만큼 기다리며, 만약 무선 매체가 사용 중이면 점차 그 간격을 늘려가며 기다림
4. 이후에 데이터 송신
- 이와 반대되는 전이중화 통신은 양방향 통신이 가능하므로 충돌 가능성이 없기 때문에 충돌을 감지하거나 방지하는 메커니즘 필요 x
**무선 LAN을 이루는 주파수
- 무선 LAN (WLAN, Wireless Local Area Network)은 무선 신호 전달 방식을 이용하여 2대 이상의 장치를 연결하는 기술
- 비유도 매체인 공기에 주파수를 쏘아 무선 통신망 구축.
- 주파수 대역은 2.4GHz 대역 또는 5GHz 대역 중 하나를 써서 구축
- 2.4GHz는 장애물에 강하지만 전자레인지나 무선 등 전파 간섭이 일어나는 경우가 많음
- 5GHz는 사용할 수 있는 채널 수도 많고 동시에 사용할 수 있어서 상대적으로 깨끗한 전파 환경을 구축할 수 O
**와이파이(wifi)
- 전자기기들이 무선랜 신호에 연결할 수 있게 하는 기술
- 흔히 공유기라고 하는 무선 접속 장치(AP, Access Point) 필요
- 이를 통해 유선랜에 흐르는 신호를 무선랜 신호로 바꿔주어 신호가 닿는 범위 내에서 무선 인터넷 사용 가능
- 무선랜은 와이파이뿐만 아니라 지그비, 블루투스 등 더 있음
**BSS(Basic Service Set)
- 기본 서비스 집합. 단순 공유기를 통해 네트워크에 접속하는 게 아닌 동일 BSS 내에 있는 AP들과 장치들이 서로 통신이 가능한 구조
- 근거리 무선 통신 제공, 하나의 AP만을 기반으로 구축이 되어 있어 사용자가 한 곳에서 다른 곳으로 자유롭게 이동하여 접속하는 것은 불가
**ESS(Extended Service Set)
- 하나 이상의 연결된 BSS 그룹
- 장거리 무선 통신을 제공. BSS보다 더 많은 가용성과 이동성 지원.
- 사용자는 한 장소에서 다른 장소로 이동하며 중단없이 네트워크에 계속 연결할 수 O

**MAC 주소
- 컴퓨터나 노트북 등 각 장치에는 네트워크에 연결하기 위한 장치(LAN 카드)가 있는데, 이를 구별하기 위한 식별번호. 6바이트(48비트)
계층간 데이터 송수신 과정
-
HTTP를 통해 웹 서버에 있는 데이터를 요청한다면?

-
애플리케이션 계층에서 전송 계층으로 보내는 요청 값들이 캡슐화 과정을 거쳐 전달되고, 다시 링크 계층을 통해 해당 서버와 통신을 하고, 해당 서버의 링크 계층으로 부터 애플리케이션까지 비캡슐화 과정을 거쳐 데이터가 전송
**캡슐화 과정
- 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정

- 애플리케이션 계층의 데이터가 전송 계층으로 전달되며 '세그먼트' / '데이터그램'화 되며 TCP(L4) 헤더가 붙여짐.
- 인터넷 계층으로 가며 IP(L3) 헤더가 붙여지게 되며 '패킷'화
- 이후 링크 계층으로 전달되며 프레임 헤더와 프레임 트레일러가 붙어 '프레임'화
**비캡슐화 과정
- 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정

- 캡슐화된 데이터를 받게 되면 링크 계층에서부터 타고 올라오며 프레임화된 데이터는 다시 패킷화를 거쳐 세그먼트, 데이터그램화를 거쳐 메시지화가 되는 비캡슐화 과정이 일어남
- 최종적으로, 사용자에게 애플리케이션의 PDU인 메시지로 전달됨
2.2.2 PDU (Protocol Data Unit)
-
네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위
-
제어 관련 정보들이 포함된 '헤더', 데이터를 의미하는 '페이로드'로 구성
-
계층마다 부르는 명칭이 다름
-
애플리케이션 계층 : 메시지
-
전송 계층 : 세그먼트(TCP), 데이터그램(UDP)
-
인터넷 계층 : 패킷
-
링크 계층 : 프레임(데이터 링크 계층), 비트(물리 계층)
-
ex. 애플리케이션 계층은 '메시지'를 기반으로 데이터를 전달하는데, HTTP의 헤더가 문자열인 것


- PDU 중 아래 계층인 비트로 송수신하는 것이 모든 PDU 중 가장 빠르고 효율성이 높음
- 하지만, 애플리케이션 계층에서는 문자열을 기반으로 송수신을 하는데, 그 이유는 헤더에 authorization 값 등 다른 값들을 넣는 확장이 쉽기 때문