전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크 시스템
국가간의 통신은 해저 케이블망을 통해 데이터를 주고받고 있다.
인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합
www.google.com
을 웹 브라우저에 입력하면 무슨일이 일어날까?
netstat -rn
IP주소 : 논리적 주소 / 32bit
MAC주소 : 물리적 주소 / 48bit
4개의 Layer를 통해 패킷이 완성되었다.
패킷이 네트워크로 나갈 준비가 되었지만
TCP는 연결지향형 프로토콜
이다. 따라서 송신측과 수신측이 연결되는 작업이 필요하다.
이러한 작업을 3 Way Handshaking
이라고 한다.
3 way handshaking을 사용하기 위해서는 TCP 헤더에 표시한 플래그인 SYN, ACK(=컨트롤비트)들이 사용된다.
1. 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보낸다.
2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 SYN과 ACK 플래그가 설정된 패킷을 보낸다.
3. 클라이언트는 서버에게 다시 ACK를 보낸다.
이후에는 연결이 이루어지고 데이터가 오가게 된다.
내가 사용하는 컴퓨터는 private IP를 사용한다. 따라서 공유기를 통해 외부로 나갈때 public IP 로 변환하는 작업이 필요하다.
이를 NAT(Network Address Translation)
이라고 한다.
우리집 공유기를 거쳐 구글 서버로 도착하려면 여러 라우터를 거쳐야 한다. 라우터가 목적지 경로를 찾아 나가는 과정을 라우팅이라고 한다.
구글 서버가 연결된 라우터까지 도착하게 되면 패킷의 IP 헤더에 기록된 구글 서버의 IP주소를 통해 MAC 주소를 얻어와야한다. 이때 ARP 프로토콜을 사용한다.
이때 ARP는 라우터가 연결된 네트워크에 브로드캐스팅 된다.
목적지 구글 서버가 자신의 IP로 온 ARP 요청을 받고 MAC 주소를 응답한다.
ARP로 IP주소를 통해 MAC주소를 얻고 목적지 주소에 데이터가 도착할 수 있다.
Network Access Layer의 MAC주소와 Internet Layer의 IP주소로 데이터가 목적지까지 도달했다.
Transport Layer에서는 목적지 포트번호에 80번이 적혀있다.
따라서 80포트를 사용하고 있는 애플리케이션에게 데이터를 전달해야 한다는 것을 안다.
Application Layer 까지 오면 웹 서버가 사용될 HTTP Request 데이터를 얻을 수 있다.
HTTP 요청과 응답과정이 끝나면 연결을 종료해야 한다.
여기서도 TCP 컨트롤비트가 사용된다.
이 단계에서는 ACK과 FIN 플래그가 사용된다.
1. 클라이언트가 서버로 연결을 종료하겠다는 FIN플래그를 전송한다.
2. 서버는 클라이언트에게 ACK 메시지를 보내고 자신의 통신이 끝날때까지 기다린다.
3. 서버가 통신이 끝나면 클라이언트에게 FIN을 보낸다.
4. 클라이언트는 확인했다는 의미로 서버에게 ACK를 보낸다
이렇게 총 4단계로 연결이 종료되고 이를 4-Way-Handshaking 이라고 한다.
여기서 한가지 더!
서버가 FIN을 보내는 과정에서 FIN보다 먼저 보냈던 데이터가 FIN보다 늦게 도착할 경우가 있다.
따라서 클라이언트는 FIN을 받고 나서 일정시간 동안 소켓을 닫지 않고 아직 도착하지 않은 잉여패킷을 기다린다.
이를 TIME_WAT
이라고 한다.
흐름제어
오류제어
혼잡제어
→ 신뢰성 있는 데이터 전송을 보장