인터넷 : 전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크 시스템
TCP/IP : 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합
4계층 구성
Application Layer : 특정 서비스를 제공하기 위해 애플리케이션끼리 정보를 주고 받을 수 있음
ex) FTP, HTTP, SSH, Telnet, DNS, SMTP
Transport Layer : 송신된 데이터를 수신측 애플리케이션에 확실히 전달(포트번호를 사용해서 애플리케이션을 찾아줌)
ex) TCP, UDP, RTP, RTCP
Internet Layer : 수신측까지 데이터를 전달하기 위해 사용(IP주소를 바탕으로 올바른 목적지로 찾아갈 수 있도록 해줌)
ex) IP, ARP, ICMP, RARP, OSPF
Network Access Layer : 네트워크에 직접 연결된 기기간 전송(MAC주소 사용)
ex) Ethernet, PPP, Token Ring
TCP/IP 흐름
Http://www.google.com(:80) 입력 : 80포트로 HTTP Request 메세지를 보내는 의미
(1)구글 서버로 전송하기 위해 패킷을 만들어야 함(각 계층별 필요한 정보 추가 필요)
(1-1) Application Layer(Http) : Http Request가 들어감
(1-2) Transport Layer(TCP) : SP(시작 포트번호), DP(목적지 포트번호) 포함
(1-3) Internet Layer(IP) : SA(시작 IP주소), DA(목적지 IP주소) 포함
-> DNS 활용하여 DA(목적지 IP주소) 확인
(1-4) Network Access Layer : MAC주소를 알아와야함
-> 웹서버의 MAC주소가 아닌 사용자의 물리적으로 연결된 공유기의 MAC주소 필요
-> 공유기를 통해 다른 네트워크와 연결 가능(게이트웨이 라고도 함)
-> netstat -rn 명령어를 통해 게이트웨이 확인 가능
-> IP주소로 MAC주소를 알아내기 위한 ARP 프로토콜(IP주소를 MAC주소로 바꿔주는 주소해석 프로토콜) 사용
(2) 요청을 보내기 전 TCP는 연결지향형 프로토콜 임을 고려 -> 3-way-handshaking 필요(송, 수신측 연결)
-> TCP 헤더에 적힌 플래그 사용(컨트롤 비트) : 이 중 SYN과 ACK 사용
(3) private IP(개인IP)는 외부 네트워크 환경에서 IP주소를 찾지 못함
-> 공유기를 통해 나갈 때 Public IP 주소로 변환하여 나가야 함
-> NAT (Network Address Translation) 이라 함
(4) 공유기를 나가고 나서 목적지 서버(google)로 가기 위해 여러 router를 거쳐야 함
-> 라우터 : 네트워크와 네트워크를 연결해주는 역할
-> 라우팅 : 라우터를 통해 목적지를 찾아가는 것
(5) 구글 서버가 연결된 라우터에 데이터가 도착을 하면 패킷에 기록된 구글 IP주소를 통해 MAC주소를 얻어야 함
-> ARP 프로토콜 사용(브로트캐스트)
(6) Internet Layer의 IP주소와 Network Access Layer의 MAC주소로 올바른 목적지(Google)에 도착 성공
(7) Transport Layer : 목적지 포트번호 80번 확인 -> 80번에 전달 확인
(8) Application Layer : HTTP Request 데이터를 얻을 수 있음
(9) Google에서 응답
(10) HTTP요청, 응답이 끝나면 연결을 해제해야 함(TCP 컨트롤비트 사용-FIN, ACK) -> 4-way-handshaking
-> 서버 FIN 보내면 발생할 수 있는문제점 : 서버가 FIN을 보내기 전 보냈던 데이터가 FIN보다 늦게 도착할 경우
-> 클라이언트가 FIN을 수신했다고 연결된 소켓을 닫아버리면, FIN을 보내기 전에 보낸 패킷은 클라이언트가 받을 수 없음
-> 클라이언트는 서버로부터 FIN 요청을 받더라도 일정시간 동안 소켓을 닫지 않고 아직 도착하지 않은 잉여 패킷을 기다림(TIME_WAT 상태)
DNS
TCP : 흐름/오류/혼잡제어를 통해 신뢰성있는 데이터 전송을 보장해줌