프로토콜
- 네트워크 통신을 하기 위해서 통신에 참여하는 주체들이 따라야 하는 형식, 절차, 규약
OSI Model (7 layer)
- 각 레이어에 맞게 프로토콜이 세분화돼서 구현
- 각 레이어의 프로토콜은 하위 레이어의 프로토콜이 제공하는 기능을 사용하여 동작
7L: Application layer
- 애플리케이션 목적에 맞는 통신 방법 제공
- HTTP, DNS, SMTP, FTP
6L: Presentation layer
- 애플리케이션 간의 통신에서 메시지 포맷 관리
- 인코딩 ↔ 디코딩, 암호화 ↔ 복호화, 압축 ↔ 압축 풀기
5L: Session layer
- 애플리케이션 간의 통신에서 세션을 관리
- RPC(Remote Procedure Call)
4L: Transport layer
- 애플리케이션 간의 통신 담당 (어떤 어플리케이션에 데이터를 전달하면 되는지?)
- 목적지 애플리케이션으로 데이터 전송
- 안정적이고 신뢰할 수 있는 데이터 전송 보장(TCP)
- 필수 기능만 제공(UDP)
3L: Network layer
- 호스트 간의 통신 담당(IP) (어떤 호스트에 데이터를 전달하면 되는지?)
- 목적지 호스트로 데이터 전송
- 네트워크 간의 최적의 경로 결정
2L: Data link layer
- 직접 연결된 노드 간의 통신 담당 (어떤 노드에 데이터를 전달하면 되는지?)
- MAC 주소 기반 통신(ARP: IP주소를 MAC주소로 변환)
1L: Physical layer
- bits 단위의 row 데이터로 바꿔 데이터 전송
![](https://velog.velcdn.com/images/oyeon/post/e9bd83b2-ba53-4bbd-999f-3f4292fccdf7/image.png)
Youtube 시청하려는 client 가 message를 보내는 과정
- message를 application layer의 정보를 담은 header 와 함께 포장하고 presentation layer 로 내린다 (7L → 6L)
- 포장된 값을 다시 layer의 정보를 담은 header와 함께 포장하고 넘기는 과정을 2L까지 반복.
- Data link layer의 정보를 담은 header와 Data link layer의 trailer (전송 후에 에러가 없었는지 확인하는 용도)를 만들어 함께 포장한 후에 physical layer로 내린다 (2L → 1L)
- Physical layer 는 데이터를 bits 단위의 row 데이터로 바꿔 다음 노드(Router 또는 Server가 될 것이다. 여기서는 Router 라고 가정)로 전송
- Router는 전송받은 bit 단위 데이터를 이해할 수 있는 데이터(헤더가 붙어있는 데이터)로 변환하여 data link layer 로 올린다 (1L → 2L)
- Data link layer에서 header와 trailer를 확인하고 이런저런 처리를하고 문제가 없으면 떼어내 network layer로 올린다 (2L → 3L)
- Router에서 network layer의 header에 목적지 ip가 있기 때문에 이 정보를 바탕으로 다음으로 이동해야 하는 노드(다른 Router 또는 Server가 될 것이다. 여기서는 Server라고 가정, 다른 Router일 경우 5단계 ~ 9단계 반복)를 파악. Network layer 헤더에서 고쳐줄 내용을 일부 고친 후에 다시 data link layer로 내린다 (3L → 2L)
- Data link layer는 두 노드 사이의 통신을 담당할 것이기 때문에 관련된 정보들을 header와 trailer에 담아서 physical layer로 넘긴다.(2L → 1L)
- Physical layer 는 데이터를 bits 단위의 row 데이터로 바꿔 Server 로 전송
- Server는 전송받은 bit 단위 데이터를 이해할 수 있는 데이터(헤더가 붙어있는 데이터)로 변환하여 data link layer 로 올린다. (1L → 2L)
- Data link layer에서 header와 trailer를 확인하고 이런저런 처리를하고 문제가 없으면 떼어내 network layer로 올린다 (2L → 3L)
- Network layer에서는 헤더를 확인하여 IP가 목적지 호스트인 것을 확인. 이런저런 처리를 하고 헤더를 떼어내고 Transport layer 로 올린다(3L → 4L)
- Transport layer에서는 애플리케이션 간의 데이터를 전달하기 때문에, 헤더를 참고하여 어떤 애플리케이션에 전달하면 되는지 판단하여 유튜브 Server application 으로 전달하면 되는지를 확인하고, 헤더를 떼어내어 session layer 로 올린다(4L → 5L)
- 5L → 6L, 6L → 7L 도 비슷한 과정으로 이런저런 처리 후, 헤더를 떼어내고 올린다.
- 7L: application layer에서는 최종적으로 헤더를 보고 이런저런 처리 후 떼어낸다. 그러면 처음에 client가 보낸 message를 받게 된다.
용어
- Encapsulation: 위의 예시에서 내리는 과정(포장)
- Decapsulation: 위의 예시에서 올리는 과정(포장까기)
프로토콜 계층(TCP/IP stack)
![](https://velog.velcdn.com/images/oyeon/post/3c6776d6-eafd-446e-8be9-6b54bf773d35/image.png)
4L: 애플리케이션 계층 - HTTP, FTP
3L: 전송 계층 - TCP, UDP
2L: 인터넷 계층 - IP
1L: 네트워크 인터페이스 계층(NIC)
과정
- 4L: 프로그램이 Hello, world! 메시지 생성
- 4L → 3L: SOCKET 라이브러리를 통해 메시지 전달
- 3L → 2L: 메시지 데이터 포함하여 TCP 정보 생성 후 인터넷 계층 전달
- 2L → 1L: TCP 데이터 포함하여 IP 패킷 생성 후 NIC 전달
- 1L: IP패킷 포함하여 Ethernet frame 으로 감싸 LAN카드 통해 인터넷으로 전달
TCP 특징
전송 제어 프로토콜(Transmission Control Protocol)
- 연결지향 - TCP 3 way handshake (가상연결)
1) Client가 SYN(접속요청) 보냄
2) Server가 SYN+ACK 보냄
3) Client가 ACK(요청수락) 보냄
- 데이터 전달 보증
1) Client가 데이터 전송
2) Server가 데이터를 잘 받았다고 Client에게 응답
- 순서 보장
1) Client가 패킷1, 2, 3 순서로 전송
2) Server로 패킷1, 3, 2 순서로 도착
3) Server는 Client에게 패킷2부터 다시 보내라고 요청
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
- 하얀 도화지에 비유(기능이 거의 없음)
- 연결지향 X - TCP 3 way handshake
- 데이터 전달 보증 X
- 순서 보장 X
- 단순하고 빠름
- IP와 거의 같음(PORT, checksum 정도 추가)
reference
https://www.youtube.com/watch?v=6l7xP7AnB64&list=PLcXyemr8ZeoSGlzhlw4gmpNGicIL4kMcX&index=2
https://velog.io/@oyeon/OSI-7-Layer
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard