(10분 테크톡) TCP / IP
TCP/IP
목차
- 인터넷
- TCP/IP 계층
- TCP/IP 흐름
- 신롸할 수 있는 TCP
1. 인터넷
- 전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크 시스템
2. TCP / IP
- 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합
3. TCP / IP의 계층
1) Application Layer
- 특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받을 수 있음
- FTP, HTTP, SSH, Telnet, DNS, SMTP
2) Transport Layer
- 송신된 데이터를 수신측 애플리케이션에 확실히 전달하게 함
- TCP, UDP, RTP, RTCP
3) Internet Layer
- 수신 측까지 데이터를 전달하기 위해 사용됨
- IP, ARP, ICMP, RARP, OSPF
4) Network Access Layer
- 네트워크에 직접 연결된 기기 간 전송을 할 수 있도록 해줌
- Ethernet, PPP, Token Ring
4. TCP / IP의 흐름
- “www.google.com”을 웹브라우저에 입력하면 무슨일 일어날까?
1) Application Layer (HTTP)
- (http) www.google.com(:80)
- HTTP로 작성된 해당 요청 처리 부탁해요
- 아래와 같은 HTTP Request 메세지를 구글 80포트로 보냄
2) Transport Layer (TCP)
- SP : 시작 포트 번호
- DP : 목적지 포트 번호
3) Internet Layer (IP)
- SA : 시작 IP 주소
- DA : 목적지 IP 주소
- 지금은 www.google.com이라는 도메인 정보만 알고 있음
- DNS 프로토콜을 통해서 도메인 정보로 IP주소를 알아낼 수 있음
3-1) DNS
- DNS에게 domain에 대한 IP주소를 알고 싶다고 요청
-
그러면 OS에서 DNS서버로 요청을 보내게 됨
- DNS서버 주소는 이미 컴퓨터에 등록이 되어있음
- DNS 또한 HTTP와 같은 애플리케이션 계층 프로토콜이다. (53번 포트)
- DNS도 HTTP Request로 도메인이 담긴 쿼리를 도메인 서버로 보냄
- Transport Layer에서 UDP라는 프로토콜을 사용
- UDP는 TCP와는 다르게 헤더가 간단
- UDP는 비연결지향형 프로토콜이기 때문이다.
4) Network Access Layer
- 물리적으로 연결된 공유기의 MAC 주소가 필요하다.
- 이공유기를 통해 다른 네트워크와 연결이 가능
- 게이트웨이라고 부르기도 함
- netstat -rn 명령어를 통해 게이트웨이 IP를 알 수 있음
- IP주소로 MAC주소를 알아내기 위해 ARP 프로토콜을 사용
4-1) ARP
- IP주소를 MAC주소로 바꾸어주는 주소해석 프르토콜
5) 3 - way - Handshaking
- TCP는 연결 지향형 프로토콜이기 때문에 송신측과 수신측이 서로 연결되는 작업이 필요하다.
-
3-way-Handshaking을 사용하기위해 TCP 헤더에 표시한 플래그들이 사용됨
- 이러한 플래그들을 컨트롤 비트하고 부름
-
SYN, ACK 플래그가 사용됨
- 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보냄
- 서버는 SYN 요청을 받고, 클라이언트에게 요청을 수락한다는 ACK, SYN 플래그가 설정된 패킷을 보냄
- 클라이언트는 서버에게 다시 ACK를 보냄
- 이제부터 연결이 이루어지고 데이터가 오가게 됨
6) NAT (Network Address Translation)
- 내가 사용하는 컴퓨터는 Private IP를 사용하고 있다.
- Private IP는 외부에서 사용하는 IP주소를 찾지 못한다.
- 그래서 공유기를 통해 나갈때 public ip로 주소를 변환하여 나가는 작업이 필요
- 이러한 작업을 NAT 이라고 함
7) Routing
- 구글 서버에 도착하기 위해 여러 라우터를 거쳐가야 함
8) ARP
- 라우팅을 거쳐 구글 서버가 있는 곳까지 도달하게 되면
- 패킷의 IP헤더에 기록된 구글 서버 IP 주소를 통해 MAC주소를 얻어와야 함
- 라우터가 연결된 네트워크에 브로드캐스팅이 됨
- 목적지 구글서버가 자신의 IP로 온 ARP 요청을 받고 MAC주소를 응답해줌
- MAC주소를 알았으니 데이터가 물리적으로 전달 될 수 있음
9) Transport Layer (Server)
- 포트번호 80이 적혀있다.
- 이것을 보고 80번 포트를 사용하고 있는 애플리케이션에게 데이터를 전달해줘야 하는 것을 알 수 있음
10) Application Layer (Server)
- 웹 서버가 사용될 HTTP Request 데이터를 얻을 수 있음
11) Routing (to Client)
- HTTP Request를 받고 응답을 돌려보냄
"/"
에 매핑된 GET요청을 처리해서 적절한 HTML을 응답해줌
12) 4 - Way - Handshaking
- HTTP의 요청과 응답과정이 끝나면 연결을 종료해야 함
- 여기서도 TCP 컨트롤 비트가 사용됨
- ACK, FIN 플래그 사용
- 클라이언트가 서버로 연결을 종료 하겠다는 FIN 플래그를 전송
- 서버는 클라이언트에게 ACK 메세지를 보내고 자신의 통신이 끝날 때 까지 기다림
- 서버가 통신이 끝나면 클라이언트로 FIN을 보냄
- 클라이언트는 확인했다는 의미로 서버에게 ACK을 보내면 연결이 종료됨
- 서버가 FIN을 보내는 과정에서 한가지 문제가 발생할 수 있음
- 서버가 FIN을 보내기 전에 보냈던 데이터가 FIN보다 늦게 도착할 경우 서버에게 FIN을 받았다고 클라이언트가 바로 연결된 소켓을 닫아버리면
FIN을 보내기전에 보낸 패킷은 영영 클라이언트가 받을 수 없게 됨 - 그래서 클라이언트는 서버로부터 FIN 요청을 받더라도 일정시간동안 소켓을 닫지 않고 혹시나 아직 도착하지 않은 잉여 패킷을 기다림
- 서버가 FIN을 보내기 전에 보냈던 데이터가 FIN보다 늦게 도착할 경우 서버에게 FIN을 받았다고 클라이언트가 바로 연결된 소켓을 닫아버리면
5. 신뢰할 수 있는 TCP
- 요즘 세상에 우리는 엄청나게 큰 데이터를 주고 받음
-
그래서 한개의 패킷으로만 주고 받기에는 상당한 무리가 있음
- 그래서 데이터를 잘게 쪼개서 보내게 되고 많은 패킷을 보내게 됨
- 그리고 이많은 패킷은 엄청 복잡한 인터넷을 통해 목적지로 이동하게 됨
-
이것을 가능하개 해주는게 신뢰할 수 잇는 프로토콜인 TCP 이다.
- TCP는 흐름제어, 오류제어, 혼잡제어를 통해 신뢰성있는 데이터 전송을 보장
댓글남기기