TCP/IP 모델 기준으로 각각의 레이어에서 지키는 프로토콜들
클라이언트 컴퓨터가 서버 컴퓨터에게 요청을 보내고, 다시 응답을 받을 때까지 데이터가 순서대로 거쳐가는 프로토콜(규칙) 체계를 모형화한 것을 OSI 모델 또는 TCP/IP 모델이라고 한다. 과거에는 주로 OSI 모델이 표준 모형으로 제시되었고, physical 부터 application 까지 7단계로 구성된다. 이 계층구분은 다소 개념적이고 이상적어서, 이후에 좀더 현실세계의 프로토콜체계에 맞도록 일부 계층을 통합해 4계층으로 구성한 TCP/IP 모델이 제시되었다. 프로토콜 계층 체계를 어떻게 구분하는지가 기술의 차이를 만드는 것은 아니며, 최근에는 OSI 에서 위쪽의 3계층을 application 으로 통합해 5계층으로 구성한 TCP/IP 체계가 표준 프로토콜 체계로 통용되고 있다고 한다.
프로토콜은 출발지와 목적지로 이루어진 데이터 헤더에 대한 규칙이다. 즉, 이 데이터가 어느 클라이언트로부터 시작했고 어느 서버로 간다는 정보이다. 따라서 서버에서 응답을 줄때는 출발지와 목적지가 반대로 바뀐다.
클라이언트의 application 계층, 혹은 상위 3계층에서는 어떤 데이터를 전송할지와 포맷을 결정하고, transport 부터 시작되는 하위 계층에서는 데이터를 전송하는 것 자체에 집중한다.
OSI 모델 기준으로 application, presentation, session 세개의 계층을 TCP/IP 모델에서는 application 계층으로 통합하여 다룬다. 웹브라우저가 대표적인 application 에 속한다.
목적지 : HTTP://10.20.30.10/index.html
이렇게 HTTP 프로토콜에 맞추어 가지고 오고자 하는 파일 이름을 입력하면 데이터 통신이 시작된다. 데이터의 포맷이 이미지인지, 영상인지 결정되고 (presentation) , 요청 프로세스가 시작된다. (session)
TCP 헤더
출발지 : 포트번호 32768 (랜덤)
목적지 : 포트번호 80 (일반적인 서버 포트번호)
transport 부터의 프로토콜에서는 이전 계층에서 넘어온 데이터 앞에 헤더를 붙인다. 클라이언트 컴퓨터가 서버컴퓨터에 요청하는 데이터는 TCP, IP, Ethernet 프로토콜을 하나씩 거칠 때마다 헤더가 추가로 붙어서 캡슐화된다. 마지막 physical 계층에서는 유선 또는 무선 통로를 통해 전기신호를 서버컴퓨터의 physical 계층으로 보내고, 서버에서 데이터는 physical 에서부터 application 까지 한단계씩 거치면서 헤더를 하나씩 떼어내 역캡슐화된다. 서버의 transport 에서 마지막 헤더를 제거할 때, TCP 헤더에 담긴 출발지 포트번호와 목적지 포트번호를 인식하여 클라이언트와 서버 간의 세션이 형성되고 요청에 대한 응답을 클라이언트에 보낼 때까지 세션은 유지된다. (세션 유지 및 만료에 대한 공부 필요)
application 계층에서는 데이터의 크기에 대해서는 별 관심이 없다. 그저 서버에 요청할 데이터와 응답받을 데이터가 무엇이고, 어떤 포맷인지에 대한 정보만 제공하고 transport 계층으로 데이터를 넘긴다. transport 계층에서는 이 데이터가 안전하게 서버까지 도달할 수 있을지가 중요하고, 그 사이에 데이터 전송이 끊기지 않도록 보장해야 한다. 그래서 크기가 큰 데이터를 처리할 때에는 작은 단위로 쪼갠다. 이 쪼개진 작은 단위를 TCP 에서는 세그먼트, UDP 에서는 데이터그램이라고 부른다.
쪼개진 데이터들은 차례대로 멀티플렉싱이라는 기술을 이용해 논블로킹 방식으로 네트워크 계층으로 전송된다. 문제가 있는 세그먼트 혹은 데이터그램이 있다면 전체 데이터 중 해당 조각만 다시 보내기 때문에 효율적이다.
IP 헤더
출발지 : url 172.16.0.1
목적지 : url 10.20.30.10
네트워크 계층에서는 TCP 헤더 앞에 IP 헤더가 새로 붙는다. 이제 각각의 쪼개진 데이터(세그먼트 / 데이터그램)들은 패킷이라는 새로운 이름을 부여받는다. 클라이언트와 서버가 서로 다른 네트워크에 있다면(대부분 그러하다), 라우터를 통해서 서로를 인식한다.
Ethernet 헤더
출발지 : Mac Address AA:BB:CC:11:22:33
목적지 : Mac Address 2A:34:D2:11:23:A1
트레일러
CRC
맥어드레스는 6바이트의 숫자배열로 이루어지는데, 앞의 3바이트는 제조사 번호, 뒤의 3바이트는 제조사에서 부여한 고유번호이기 때문에, 통신이 가능한 모든 디바이스는 고유의 맥어드레스를 가지며 다른 디바이스와 절대 중복되지 않는다.
data Link 계층에서는 Ethernet 헤더를 IP 헤더 앞에 붙이고 논리적인 세션을 생성하여 실질적으로 데이터를 전송할 준비를 한다. 그리고 지금까지와는 다르게 데이터의 맨 뒤에 트레일러라는 꼬리를 붙여서 오류 검증 정보(CRC)를 추가한다. 데이터의 신뢰도를 높이기 위함이다. 이제 각각의 패킷은 프레임이라는 새로운 이름을 부여받는다.
physical 계층에서 데이터들은 특정 주파수 혹은 전기신호로 인코딩되어 스위치로 향하고, 해당 신호가 서버의 physical 계층에 무사히 도달한다면 앞서 말한 역캡슐화가 시작된다.
Photo by Jordan Harrison on Unsplash
참고자료
https://www.youtube.com/watch?v=y9PG-_ZNbWg