예를들어 두 사람이 전화를 하고 있다.
두 사람이 전화를 원활하게 하기 위해서는
how: 핸드폰으로
when : 같은시간에
what : 같은 주제를
나눠야 원활하게 의사소통이 가능하다.
protocol도 이와 마찬가지다.
Syntax: data format
semantics: 메세지를 전달하거나 받는것에 대한 동작
ex) control information, error handling
Timing: networ entity들 사이에서 메세지를 받거나 보내는 순서
ex) speed matching sequencing
등의 규칙을 맞춰줘야 한다.
TFTP 라는 파일전송 프로토콜을 예로 보자.
Syntax 에서는 아래 그림과 같은 TFTP packet format을 사용한다.
semantics에서는 메세지로 정보를 주고 에러를 handling 한다.
timing은 block sequence number를 통해서 순서를 정해준다.
TCP와 IP는 Layered Reference Model이다.
그렇다면 왜 Layering을 할까??
그림에서도 알 수 있듯이 각 layer는 관심사가 분리되어 있다.
때문에, 다른 계층에 일에는 간섭할 수 없고 자신의 계층에 관련된 기능만 수행한다.
이러한 특징은 높은 유지보수성과 쉬운 테스트라는 장점이 존재한다.
TCP/IP란 네트워크 프로토콜 스위트로 온라인 상에서 더 안전하고 효율적인 데이터 전송의 필수 요건을 정의한다.
TCP/IP는 4계층 또는 5계층으로 구성되어, OSI 7계층 모델을 대체한다.
TCP(Transmission Control Protocol) 전송제어 프로토콜이라 부르며, 한 기기에서 다른 기기로 데이터 전송하는 것을 담당한다.
IP(Internet protocol) 이 프로토콜은 데이터의 조각을 최대한 빨리 대상 IP 주소로 보내는 역할을 표시한다.
TCP/IP는 통신 규칙 모음이고, 프로토콜 스위트라고 부르기도 한다. TCP/Ip 4계층은 이러한 규칙이나 프로토콜이 적용되는 특정한 조건을 의미한다.
TCP/IP 4계층은 TCP/IP 모델이 다양한 기기나 앱에서 효율적으로 통신하고 데이터를 전송할 수 있도록 하는 방식이다.
이 프로토콜은 앱에 구축되어 사용자가 상호작용 하기 가장 쉬운 계층이다. 응용 계층은 사용자가 네트워크에 접근할 수 있도록 한다.
사용자 인터페이스를 제공하고, 이메일, 원격파일 접근 및 전송, 공유 데이터베이스 관리 등의 서비스를 제공한다.
주로 사용되는 통신규약들은 다음과 같다.
SMTP(Smile Mail Transfer Protocol)
메일 프로그램에서는 인터넷 전자우편을 보낼 때 이용하게 되는 표준 통신 규약.
HTTP(Hypertext Transfer Protocol)
인터넷 브라우저는 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약
FTP(File Transfer Protocol)
파일전송규약
DHCP(Dynamic host Configuration protocol)
동적호스트 설정 통신 규약
SNMP(Simple Network Management Protocol)
간이 망 관리 프로토콜
전송 계층에는 TCP 뿐만 아니라, UDP(User Datagram Protocol)도 있다.
UDP는 TCP보다 훨씬 간단해서, 다른 데이터에 비해서 안전하게 보호될 필요가 없는 실시간 응용 프로그램에서 사용된다.
UDP는 TCP보다 신뢰도가 낮고 오류 검출, 흐름 제어 등의 기능을 제공하지 않아 패킷을 빠르게 전송하는 응용 계층에서 이용되고 있다.
TCP는 두 네트워크 사이에 연결을 형성하고 효율적으로 작업하기 위해 데이터를 작은 패킷으로 나눠서 데이터를 전송한다.
TCP
UDP
인터넷 계층 프로토콜에는 IP 뿐만 아니라
주소 변환 규약(Address Resolution Protocol: ARP),
인터넷 그룹 관리 프로토콜(Internet Group Management Protocol:IGMP),
인터넷 제어 메시지 프로토콜(Internet Control Message Protocol:ICMP)
가 있다.
인터넷 계층은 네트워크 간의 데이터 패킷 전송을 관리한다.
ARP: 네트워크 계층 주소와 링크 계층 주소 사이의 변환을 담당하는 프로토콜
IGMP: 그룹 멤버쉽 구성, 그룹 관리위한 프로토콜
ICMP: 인터넷 통신 서비스 환경에서 오류에 대한 알림과 관련된 메시지 전달
데이터 전송의 최하위 계층으로, 네트워크 인터페이스 계층이라고도 부른다.
여기서는 데이터가 원하는 IP주소(즉, 공유기)에 도달할 뿐 아니라, 해당 네트워크 내의 연결된 기기에 연결되어 있는지 확인하는 역할을 한다.
데이터 링크 계층은 원하는 기기의 MAC 주소를 확인하고 이더넷 케이블, 와이파이를 통한 데이터 전송을 관리하는 등의 작업을 담당한다.
간단히하면, Encapsulation은 데이터 출발 준비 과정이고, Decapsulation은 데이터 도착과정이다.
✍️Encapsulation
Encapsulation: 각 계층을 지나면서 해야할 일들을 헤더에 붙이는 작업
user Data가 생성되면 각각의 계층에서 Header를 붙인다.
Header : 각 계층에서 할 일들을 정의한 오버헤드
1. Application Layer
에서 데이터(http,ftp,smtp)를 Transport Layer로 보낸다
Transport Layer
가 데이터를 받으면 전송방식에 따라서 UDP 또는 TCP의 헤더를 데이터 앞에 붙여서 NetworkLayer를 붙인다. TCP 헤더에는 src port 정보와 dest port 정보가 있다. 웹페이지 요청을 위해서는 웹서버에 접속해야 하므로 dest port는 80이고 src port는 본인이 안쓰고 있는 포트를 랜덤하게 할당한다.
Network Layer
에서는 시작주소와 도착지주소(IP)가 담긴 헤더를 UDP 또는 TCP에 붙여서 Data link Layer로 전송한다. ip 헤더에는 src ip정보와 dest ip정보가 있다. src ip는 자기 pc에 할당된 ip주소 이고, dest ip는 DNS 서버를 통해 접속하고자 하는 곳의 ip주소를 얻는다.(e.g) www.google.com)
Data link Layer
에서는 packet에 Ethernet 헤더를 붙인다. Ethernet헤더에는 src mac 정보와 dest mac정보가 있다.
src mac 정보는 pc lan카드에 있다.
dest mac 정보는 ARP Routing 과정(최종적으로 목적 웹서버까지 도착하기 위해 내 옆에 있는 누구한테 보내야하는지를 확인하는 과정)을 통해서 파악할 수 있고,
frame(= packet)은 전기적 신호로 바뀌어 송신된다.
frame의 dest mac 정보는 스위치를 통과하면서 계속 바뀐다.(dest mac 주소는 dest 스위치에 따라 바뀌니까)
✍️Decapsulation
그러다가 frame은 스위치를 통해 router까지 전달되고 router는 dest mac 주소를 확인한뒤 자기한테 온 데이터가 맞으면 Ethernet헤더를 제거하고 ip헤더를 본다.(packet을 해석한다.) router는 dest ip 정보를 보고 google 웹서버까지 도달하기 위해 거쳐야하는 다른 router로 frame을 보낸다.(router도 mac주소를 가지고 있으므로 이 과정에서도 dest mac주소는 계속 바뀐다.)
=> 최종적으로 목적 웹서버에 도착할때까지 dest ip정보(목적 웹페이지 ip)만 유지되고 frame(packet)의 dest mac주소는 계속변해가면서 몇개의 스위치와 몇개의 라우터를 거쳐 네트워킹이 되는 것이다.
✍️예를들어, frame이 google 웹서버에 도착하면
Ethernet 헤더를 확인해서 dest mac주소를 확인한뒤 나한테 온게 맞으면 Ethernet헤더를 때고 상위 layer에 올린다.
그다음, ip 헤더를 확인해서 dest ip주소를 확인한뒤 나한테 온게 맞으면 ip헤더를 떼고 상위 layer에 올린다. 이후,
tcp 헤더를 확인해서 dest port번호를 확인한뒤 dest port번호를 쓰고 있는 어플리케이션한테(웹 서버가 사용하는 웹 데몬 ex)apache) 데이터를 보낸다. -> 데이터 수신 완료
Multiplexing?
Application Layer에서 패킷이 소캣에 의해 Transport Layer로 전달 될 때, 여러 소캣의 패킷을 수집하여 하나의 세그먼트 캡슐화하여 Network Layer로 전달하는 과정
(transport header에 추가 하는 과정)
Demultiplexting: Transport Layer에서 세그먼트가 Application Layer로 전달 될 때, 올바른 소켓으로 전달하는 과정
올바른 소켓으로 전달 하는법? -> 세그먼트의 헤더정보를 통해 전달
데이터 그램(Network layer의 패킷)에는 source IP, destination IP주소를 갖고 있다.
데이터 그램은 하나의 세그먼트(Transport layer의 패킷)을 포함한다.
세그먼트에는 source port#,destination port#를 갖고 있다.
host는 IP address 와 Port numbers 를 통해 세그먼트를 적절한 소켓에 전달한다.
여기서 UDP 세그먼트에는
이렇게 포함 되어 있고
TCP 세그먼트에는 출발지 도착지 IP주소가 포함되어 있다.