Network
TCP/IP
foxlee
2021. 6. 30. 14:15
네트워크 아크텍처중 하나로 지금은 TCP/IP만 사용됨
계층구조
- 애플리케이션층
- HTTP, SMTP, DNS, DHCP 등의 프로토콜
- 애플리케이션에서 다루는 데이터 형식, 절차 결정
- 문자, 이미지 등의 데이터를 표현
- 트랜스포트층
- TCP / UDP (프로토콜) - 애플리케이션에 데이터 할당/배분
- TCP
- 데이터 송수신하는 애플리케이션 간의 통신이 정상적으로 이루어졌는지 확인함
- TCP 헤더에는 포트 번호를 포함하여 애플리케이션의 프로토콜에 데이터를 배분함
- 출발지, 목적지 포트가 포함됨(포트는 같은 IP내 프로세스 구분(애플리케이션 구분)을 위함)
- 3 Way Handshake
- TCP 커넥션 맺기
- 데이터 송수신
- 애플리케이션 프로토콜 헤더와 TCP 헤더를 추가후 TCP 세크먼트를 전송(크기가 크면 분할하여 여러개의 세크먼트 전송)
- 데이터가 도착하면 수신확인(ACK- 전송된 데이터 만큼 더해줌)을 송신자에게 보내서 데이터가 잘 도착했음을 확인/ 실패시 재전송
- TCP 커넥션 끊기
- A->B (syn) seq:1000, ack: - -내가 보내는 패킷에 1000을 부여하니 수신하면 다음에는 패킷 1001을 전달요청하시오.(데이터 1000 bytes를 추가하면 2001로 요청하시오)
- B->A (syn) seq:2000, ack:1001 - seq:내가 보내는 패킷에 2000을 부여하니 수신하면 다음패킷에 2001을 부여하라고 요청하시오, ack: 1000은 잘 받았으니 다음에 1001를 부여한 패킷을 보내시오.
- A->B (syn) seq:1001, ack:2001
-
-
- 데이터 분할 (순서 보장, 데이터 전달 보장)
- 데이터 분할 시, 전송 시 시퀀스 번호와 ACK 번호를 통해서 확인, 조립함
- 큰 데이터 =
- HTTP 헤더 + 데이터 =>
- TCP헤더 + HTTP헤더 + 데이터조각1 / TCP헤더 + 데이터조각2 / TCP헤더 + 데이터조각3 로 분할하여 전송(TCP 헤더의 시퀀스 번호로 분할된 데이터 순서 알수 있고, HTTP헤더+데이터조각1, 데이터조각2, 데이터조각3 은 각각 MSS(Maximum Segment Size)의 표준 크기 1460바이트임
- 순서가 맞지 않으면 다시 보냄(1,2,3->1,3,2 => 2부터 다시 보내)
- 참고) 이더넷헤더 + IP헤더(20바이트) + TCP헤더(20바이트) + HTTP헤더,애플리케이션데이터(1460바이트) 로 이더넷헤더를 제외하여 1500바이트가됨
- 데이터 분할 (순서 보장, 데이터 전달 보장)
- UDP
- 데이터그램
- 상대방의 애플리케이션의 동작여부는 확인하지 않고 데이터 송신만함(전숑 효율이 좋지만 신뢰성은 낮음)
- 데이터를 쪼개는 기능이 없어 애플리케이션층에서 쪼개야함
- 예) IP전화 = 일반적으로 1초를 50개로 쪼개서 보냄
-
- 인터넷층
- IP, ICMP, ARP
- 엔드투엔드 통신 = 다른 네트워크에 존재하는 목적지까지 데이터를 전송하는 것
- 라우터 = 다른 네트워크끼리 연결하고 데이터를 전송하는 기기
- 엔드투엔드 통신에 이용하는 프로토콜이 IP 이고, 라우팅(라우터에 의한 네트워크 간의 전송)을 통해 통신
- ICMP (Internet Control Message Protocol) = 내가 보낸 메시지를 목적지에서 그대로 보내주세요 하는 요청을 보냄(Ping 과 같이 목적지에 데이터 전송이 가능한지 확인)
- ICMP 의 주 기능은 에러 리포트(도달 불능 메시지), 진단 기능
- ARP (Address Resolution Protocol) = IP를 MAC 주소를 대응시킴(=주소해석)
- 이더넷 헤더에 MAC주소를 지정해야하므로 MAC 주소가 필요함
- APR 요청을 브로드캐스트해 목적 MAC 주소를 질의하고 목적지에서 자신의 IP임을 확인하고 ARP 캐시를 갱신하여 출발지의 IP-MAC 주소를 업데이트 하고, MAC 주소를 출발지로 보내서 출발지에서도 동일하게 ARP 캐시를 갱신하여 목적지의 IP-MAC주소를 업데이트함
- IP 헤더에는 출발지 IP와 목적지 IP 주소가 32 비트로 각각 할당되고, IP 헤더가 데이터 + HTTP 헤더 + TCP 헤더에 더해져서 IP 패킷이 되고, 라우터가 IP 패킷을 전송하는 것을 라우팅이라 함
- 네트워크 인터페이스층
- 이더넷, 무선 LAN(WIFI)
- 같은 네트워크 안에 데이터 전송(예, 같은 네트워크 안에 존재하는 PC1, PC2가 레이어2 스위치로 구성되어(연결되어) 있는 경우 레이어2 스위치를 통해 PC2에 데이터 전송)
데이터 송수신 규칙
- 각 계층에서는 캡슐화/역캡슐화가 일어남
- 각 계층에서 프로토콜 헤더를 추가하는 캡슐화와 헤더를 보고 프로토콜을 처리하는 역캘슙화가 일어남
- 한 예로 웹브라우저 데이터 + HTTP 헤더(애플리케이션 계층) -> + TCP 헤더(트랜스포트층) -> + IP 헤더(인터넷층) -> + 이더넷 헤더(+FCS)가(네트워크 인터페이스층) 추가됨
- 수신 순서
- PC에 데이터가 물리적 신호로 도착하면 0,1,로 데이터를 변환하고, 이더넷 헤더를 참조해 자기 앞으로 온 데이터인지 확인 + FCS 데이터 오류 없는지 확인
- 자신에게 온 게 맞다면 이더넷 헤더와 FCS를 제거한 후 IP 헤더를 통해 자신에게 온 데이터인지 확인
- 자신에게 온 게 맞다면 IP 헤더를 제거한 후 TCP 헤더를 참조해 어느 애플리케이션 데이터인지 확인
- 해당 애플리케이션으로 데이터를 전송하여 HTTP 프로토콜에 맞게 처리함
데이터를 부르는 방식 - (각 계층에서 불러지는 이름으로, 이름에 따라 어느 계층을 주목해야하는 지 명확해짐)
- HTTP 메시지 - 애플리케이션층
- TCP 세그먼트 / UDP 데이터그램 - 트랜스포트층
- IP 패킷 - 인터넷층
- 이더넷 프레임 - 네트워크 인터페이스층
IP 주소
- IP 주소는 8비트씩 0~ 255 사이의 10진수이고 4개의 숫자로 32비트이고 . 을 사용해 구분함 = 192.0.0.1
- IP 주소는 통신 상대가 되는 호스트(인터페이스)를 식별하기 위한 정보이고, IP 주소는 인더넷 등의 인터페이스와 연관지어 설정됨.
데이터 전송 대상(한 곳, 여러곳)
- 유니캐스트: 단 한곳으로 데이터 전송. IP주소가 유니캐스트 IP주소 / 같은 데이터를 여러곳으로 보낼때 이 방식을 반복하는 것은 효율이 좋지 않아 브로드캐스트와 멀티캐스트 사용
- 브로드캐스트: 같은 네트워크 상에 똑같은 데이터 전송
- 멀티캐스트: 특정 그룹에게 데이터 전송 - 특정 그룹은 다른 네트워크에 포함될 수 있음
- 유니캐스트 IP주소: 네트워크부 + 호스트부
- 서브넷마스크: 네트워크부와 호스트부를 구분해줌 네트워크부는 1 호스트부는 0
- 서브넷마스크가 255.255.255.0 일때 255.255.255 가 네트워크부, .0 이 호스트부임을 알수 있음
- 예) 192.168.1.0/24 는 결국 192.168.1.0이고 이는 네트워크 주소를 나타냄 192.168.1.255 는 해당 네트워크주소 + 호스트부분이 255 = 브로드캐스트 IP 임 IP 주소들은 192.168.1.1/24, 192.168.1.2/24 등임 됨
- 브로드캐스트 IP 주소: 255.255.255.255
- 멀티캐스트 IP 주소: 224.0.0.0 ~ 239.255.255.255
네트워크 접속
- 물리적인 접속과 논리적인 접속의 두가지가 일어나고, 물리적 접속은 네트워크 인터페이스층, 논리적인 접속은 인터넷층임
- 예를 들어 호스트 IP 192.168.1.1/24를 설정하면, 192.168.1.0/24 네트워크에 접속하여 TCP/IP 사용한 통신이 가능해짐
공인주소/사설주소
- 공인주소
- 공인 IP 주소 = 퍼블릭 IP 주소 = 인터넷을 이용(통신하기 위해)하는 IP 주소), ISP에서 할당함
- 사설주소
- 사설 네크워트에서 사용하며, 외부 인터넷으로 통신하려면 NAT이 필요함(192.168.0.X)
- 사설주소의 범위
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
- IP헤더에 출발지 주소가 사설 주소/ 목적지 주소가 공인 네트워크 주소로 되어 있으면 목적지 주소로 요청을 잘 가지만, 응답으로 올때의 목적지IP 주소가 사설 주소가 되어 이 경우 IP 패킷은 폐기되어 버려짐(즉, 서버로 요청은 할 수 있으나 응답은 오지 않음)
- 주소 변환이 필요함(NAT)
NAT
- 사설 네트워크에서 인터넷으로 요청을 전송할때 출발지의 IP주소를 변경(사설주소->공인주소)함
- 라우터(송신, 수신)는 주소 변경에 대한 정보를 NAT 테이블에 보존해둠
- 응답이 라우터에 도착하면 NAT 테이블을 보고 목적지 IP 주소를 변환함