donaricano-btn

레이어2(Layer2) - 데이터 링크 계층의 프로토콜 이더넷(ethernet)


1. 이더넷의 역할

- 동일 네트워크 내의 네트워크 장비까지 전달 받은 데이터 운반

- OSI7 계층의 물리 계층과 밀접한 관련이 있다

- 케이블 통신에서 사용되기 때문에 이더넷 프레임은 전기 신호로 전송

- 동일 네트워크에서는 MAC주소 사용


2. 이더넷 프레임

- 이더넷 헤더에 MAC 주소를 기입

* ARP 테이블(MAC 테이블)

- IP 주소에 라우팅 테이블과 같다

- 'IP 주소 A에 대응하는 것은 MAC 주소 B 다'

- 인접한 장비의 MAC 주소를 헤더레 기록한 후 최종적으로 OS가 버스를 통해 NIC에게 전달, NIC는 다시 네트워크에 전송한다


3. VLAN(Virtual LAN)

- 네트워크 범위는 네트워크 스위치의 물리 구성에 의해 크게 좌우된다, 유연성 없다

1) VLAN

- 물리 구성에 의존하지 않고 가상적인 네트워크를 나누는 구조

* VLAN ID

- 가상 적으로 나눈 네트워크 숫자

- 이것으로 관리된다

- 물리적으로 떨어져 있는 스위치라도 동일 네트워크에 참가 시키는 것이 가능하다

- 네트워크 스위치의 포트별로 어떤 VLAN_ID와 연결 할지 설정해서 하나의 L2 스위치라도 여러 네트워크를 다 룰 수 있다

- 설령 같은 L2 스위치에 접속된 컴퓨터들이라도 각각 다른 VLAN_ID에 설정된 포트를 사용하고 있는 경우 별도의 L3 스위치나 라우터 없이는 통신 할 수 없다(네트워크가 다르다는 것은 IP 주소가 다르다)

블로그 이미지

리딩리드

,
donaricano-btn

레이어3(Layer3) - 네트워크 계층의 프로토콜 IP(network)


1. IP(Internet Protocol)역할

- TCP 세그먼트가 만들어지면 다음은 IP처리가 시작된다

- 지정한 대상 서버까지 전달 받은 데이터를 전달

- 반드시 데이터가 전달된다는 보장은 없다

- 라우팅


2. 커널 내의 IP 처리

- TCP 세그먼트에서 IP헤더를 붙여 IP 패킷을 생성한다

- 대상 서버까지 IP패킷 형태로 네트워크를 경유해서 도달

- 기본적으로 TCP헤더, IP헤더는 20byte이기 때문에 첫번 째 패킷은 사이즈가 커진다


3. IP주소를 이용한 최종 목적지로의 데이터 전송

- IP에서 최종 목적지 서버까지 복수의 네트워크를 경유해서 데이터를 전송한다. 이때 사용되는 것이 대상 서버를 나타내는 IP주소다


1) IP 주소(IP Address)

- IP 주소 = 네트워크 부 + 호스트 부(network + host)

* 네트워크 부 

- 어떤 네트워크인지 가르킨다

- IP 주소의 어디 까지가 네트워크 부 인지 표시하기 위해 '/24' 와 같은 CIDR(사이더) 표기 사용 하거나 서브넷 마스크를 사용(Subnet mask)

- 같은 네트워크 내 컴퓨터 IP 주소는 네트워크부를 동일 값으로 설정


- 호스트 부 : 해당 네트워크 내에 있는 컴퓨터(소유자)를 가리킨다

* 네트워크 주소(Network address) & 브로드 캐스트 주소(Broadcast address)

- 네트워크 주소 : IP 주소 중 호스트 부의 비트가 모두 0 인것

- 브로드 캐스트 주소 : 호스부의 비트가 1 인것

- 호스트에게 할당 해서는 안되는 특별한 주소이다


4. 라우팅

- IP는 경로 도중에 다양한 처리가 이루어 진다

- IP 주소를 이용해 대상 서버를 지정할 수 있다

1) 대상 서버가 항상 같은 곳이 아닌 다른 네트워크에 있다면?

- 최종 목적지에 도착 할 떄까지 목적지를 알고 있는 라우터에게 전송 부탁

* 라우터

- IP 패킷을 받은 라우터는 해당 IP 패킷의 헤더에 목적지를 확인해서 보낼 곳을 찾는다

- 라우팅 테이블을 이용(목적지 정보가 적힌 테이브)

* 기본 게이트 웨이(default gateway)

- 외부와 접속하는 네트워크는 보통 기본 게이트 웨이라는 라우터가 있다

- 외부 세계와 연결된 라우터를 기본 게이트 웨이로 지정 해야한다

- 네트워크 A와 네트워크 B 사이에 소속된 서버가 IP 패킷을 보내려한다

: IP 주소를 가지고 목적지가 E네트워크 라는건 알 수 있지만 라우팅 테이블에 정보가 없다

: 이 경우 기본 게이트 웨이에게 패킷을 보낸다

* TTL(Time to Live)

- 라우팅간에 라우팅 테이블 주소가 잘못 되어 패킷이 네트워크 상을 떠돌아 다니는 현상 발생(패킷 좀비)

- IP 헤더는 생존 시간 정보를 가지고 있다

- 예로 TTL = 64 면 라우터를 한번 경유 할 때마나 1씩 감소한다, 0이되면 라우터는 해당 패킷을 파기한다


블로그 이미지

리딩리드

,
donaricano-btn

레이어4(Layer4) - TCP의 기능


1. 포트 번호를 이용한 데이터 전송

- TCP에서는 포트 번호를 사용해서 어떤 어플리케이션에 데이터를 전달 할 지 판단한다

- TCP 포트 번호는 0~65535 까지 있다


2. 연결(Connection) 생성

- TCP는 소켓을 생성 할 때도 중요한 역할을 한다

1) 가상 경로(Virtual circuit)

- TCP는 연결형 프로토콜로, 연결이라 불리는 가상 경로를 생성한다

- 연결 = 가상 경로 생성

* 포트 리슨(LISTEN)

- 애플리케이션 서버측이 미리 통신 준비를 하고 있는 상태

- 서버 프로세스는 OS에게 포트번호 00에게 통신 의뢰가 오면 나에게 연결해라고 하는 것

2) 3-way handshaking

a. 통신 상대인 서버측 OS에게 가상 경로를 열도록 의뢰한다

b. 서버측에서는 리슨 하고 있는 포트 번호로 통신 요구가 온다, 서버는 문제가 없으면 열어도 된다는 응답을 한다

c. 클라이언트 측도 확인 했다는 메시지를 보내며, 이 떄 처음으로 가상 경로가 열린다

- 이 연결(3 way hand-shaking)은 애플리케이션, 즉 두개의 소켓 사이에 전용 회선이 있는 것처럼 통신한다?

- 단지 TCP 통신을 시작 할 때 상대 서버에 포트 번호와 연결을 열어달라고 부탁만 할 뿐, 특별한 일을 안한다. 데이터 전송 자체는 IP에 위임한다

- 물리적인 경로가 막혀도 가상 경로인 TCP 연결은 끊어 지지 않는다


3. 데이터 보증과 재전송 제어

- 연결이 생성된 후에야 데이터 송수신이 시작된다

1) 데이터 손실 방지

* 확인 응답 + 재전송에 의해 구현

a. 수신 측에 TCP 세그먼트가 도착하면 수신 측은 송신 측에게 도착 했다는 ACK를 반환(TCP 세그먼트)

b. 송신 측ACK가 돌아 오는 것을 보고 전송한 세그먼트가 무사히 도착한 것을 알 수 있다

c. ACK가 오지 않으면 TCP 세그먼트가 사라질 가능 성이 있으므로 언제든지 재전송이 가능하도록 전송이 끝난 TCP 세그먼트라도 ACK 돌아오기 까지 소켓 버퍼에 남겨둔다

* 데이터 순서 보증

- 각 TCP 세그먼트에 시퀀스 번호 부여

- TCP헤더에 기록된다

2) 재전송 제어

* 재전송 하는 시점은?

- 타임아웃: 일정 시간 내에 ACK가 없으면 재전송

- 복 ACK : 송신 측이 같은 ACK를 받으면 재전송(수신 측에서 사라진 세그먼트를 계속 요구)

    : 3회 까지 기다렸다가 전송한다(가끔 전송지연으로 늦게가는 세그먼트 때문에)


4. 흐름 제어와 폭주 제어

- ACK를 기다리면서 데이터를 보증하면 시간이 오래 걸려서 효율이 나쁘다

- ACK를 기다리지 않고 전송하는 것이 좋다

1) 윈도우(Window)

- TCP는 어느 정도의 세그먼트 수 라면 ACK를 기다리지 않고 전송하는 개념

* 윈도우 크기(Window size)

- ACK를 기다리지 않고 전송 가능한 데이터 크기

* 슬라이딩 윈도우(sliding window)

- 신 측의 수신 윈도우, 송신 측폭주 윈도우

- 수신 측폭주 윈도우 크기를 조정해서 폭주 윈도우수신 윈도우 중 작은 쪽을 송신 윈도우로 채택하며, 이 범위 내에서는 ACK를 기다리지 않고 전송

- ACK 가 오면 해당 TCP 세그먼트는 재전송할 필요가 없기 때문에 송신용 버퍼에서 삭제하고 송신 윈도우를 다음으로 이동한다

- 윈도우를 이동하는 방식


블로그 이미지

리딩리드

,
donaricano-btn

레이어4(Layer4) - 전송계층프로토콜 TCP

- 소켓기록된 애플리케이션 데이터 커널 내에서 통신 대상에게 전달하기 위한 준비를 시작한다

- 첫번 째 임무 수행하는 것이 전송 계층 프로토콜인 TCP이다


1. TCP의 역할

1) 애플리케이션이 보낸 데이터를 그형태 그대로 상대방에게 확실히 전달한다

2) 담당

- 서버가 송신할 때와 서버가 수신한 후 애플리케이션에게 전달할 때로, 상대 서버까지 전송하는 부분은 하위 계층인 IP에게 모두 위임한다

- IP만으로 통신 할 수 있지만, IP에는 데이터가 상대방에게 확실히 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능이 없다

3) 기능

- 포트 번호를 이용해서 데이터 전송

- 연결생성

- 데이터 보증과 재전송 제어

- 흐름 제어와 폭주 제어


2. OS의 커널안에서 TCP 처리 흐름

1) 애플리케이션 프로세스가 소켓에 데이터를 기록한다

2) 소켓에 기록된 데이터는 큐를 경유해서 커널 내 네트워크 처리 부분에 전달된다

3) 커널에 전달된 데이터는 '소켓 버퍼'라는 메모리 영역에서 처리된다

4) 데이터에 TCP 헤더를 붙여 TCP 세그먼트를 생성한다

5) 하나의 TCP 세그먼트로 전송할 수 있는 최대 크기를 MMS라고 한다


3. TCP 세그먼트(TCP segment)

1) TCP Segment(TCP Packet) : 데이터(data) + TCP 헤더

2) TCP 헤더(TCP Header)

- 도착 지점 포트 번호, TCP 기능을 표현하기 위한 정보


3) MSS(Maximum Segment Size) 

- 하나의 TCP 세그먼트로 전송 할 수 있는 최대 데이터 크기

- 링크 계층으로 사용해서 데이터를 전송 하기 때문에 MSS는 링크 계층에서 전송 할 수 있는 최대 크기에 의존하며, 환경이나 설정에 따라 달라진다

4) MTU(Maximum Transfer Unit)

- 링크 계층에서 전송 할 수 있는 최대 데이터 크기

5) 세그먼트 분할

- 예로 2000byte의 데이터가 애플리케이션에 등록된다면 MSS의 크기가 1460byte이기 때문에 세그먼트는 1460과 540으로 분할 된다



블로그 이미지

리딩리드

,