네트워크

[OSI 7계층,TCP/IP 5계층] 3계층, 4계층

콩콩(๓° ˘ °๓)♡ 2024. 5. 23. 17:33

3계층 : 네트워크 network 계층

ICMP 전송

* ICMP : Internet Control Message Protocol, 네트워크의 연결성을 확인하고 오류를 보고받기 위한 프로토콜
L3라우터가 ICMP 리퀘스트를 받았을 때 어디로 보낼지 결정하는 방법
: 라우팅 테이블을 보고 패킷이 1번 2번 어디에도 속하지 않을때 0으로 defalult 설정된 서브넷 마스크를 가진 포트로 패킷을 내보낸다.
L2 스위치의 포워딩 테이블과 같은 역할 but 엔지니어가 직접 설정함 (CCNA, CCIE)
랜에서 랜으로 갈때, 다른 wan으로 갈때 2계층의 주소가 자동적으로 바뀌면서 넘어간다.


망분리 : 서브넷 마스크는 같게, IP 주소 마지막 숫자는 다르게
- 하나의 망에서 쓸 수 있는 호스트의 수는 반으로 줄어듦
서브넷 마스크의 숫자를 늘리면 망이 분리됨


IPv4 고갈 문제

- 2^32 -> 약 46억개(특수용도 제외, 약 36억개)
- 국가별 IP 주소 대역 할당 종료
- NAPT 기술로 연명 
- 근본 해결책 : IPv6

===============================================

4계층 : 전송 transport 계층

: TCP, UDP가 대표적이며 애플리케이션 계층에서 받은 메시지를 기반으로 세그먼트/데이터그램으로 쪼개고 데이터가 오류없이 순서대로 전달되도록 도움을 주는 계층.

 

연결성

: 세션의 성립 여부

* 세션 : 네트워크 상에서 종단 간 일회용 논리적 연결

  • 비연결성 : 세션을 성립하지 않음, 단순 전송만 담당. UDP
  • 연결지향성 : 세션을 이용한 신뢰성 있는 통신 기능을 추가적으로 제공. TCP

* 신뢰성

: 데이터의 소실, 중복, 지연, 순서역전 없이 데이터를 전달하는 것을 완전히 보장

  • 오류제어 : 세그먼트 유실 시, 다시 전송하는 것
  • 흐름제어 : 수신자의 처리 능력을 고려해 데이터 송신량을 조절하는 것
  • 혼잡제어 : 네트워크가 혼잡할 때 보내는 데이터의 양을 조정하는 것

TCP

키워드 : 신뢰성 / 흐름제어, 오류제어, 혼잡제어 / streaming, 연결형


1. 송수신 측의 데이터 처리율에 차이가 있을 경우 패킷을 drop 해버림(100m/sec - 10m/sec)
-> 속도를 낮춤 :  흐름제어
2. 리피터 : 거리가 멀어서 신호가 감쇠될 때 복원/보완해주는 장비  : 오류제어
-> 그러나 오류 발생 가능성이 여전히 존재
+ L3라우터가 고장나는 경우, 자연재해로 신호가 왜곡되는 경우
3. 라우터에서 처리할 수 있는 양보다 신호가 많이 들어온다면 그 이상의 데이터는 drop 될 수 밖에 없음
-> 호스트(송신) 측에서 스스로 속도를 낮춤 : 혼잡제어

Maximum Segment Size
10M 데이터를 한 번에 보내지 않음 -> mss로 쪼갬 
왜? 하나라도 손실되면 전체 데이터를 쓰지 못함 -> mss로 쪼개면 손실된 패킷의 데이터만 다시 보내면 됨
한번에 보낸 패킷들이라도 L3 라우터는 혼잡이 발생할 경우 다른 경로로 보냄 -> tcp에는 송수신 버퍼가 있어 이를 다시 재정렬 하고 유저측으로 전송함
: TCP Packet에서 User data(L5~7) 최대크기
MSS = MTU(L3~7) - L3 header size - L4 headersize
연결 시(3핸드쉐이크) mss 교환 후 작은 것 사용(고정된 값 아님)

 

전송 방식 비교

streaming 전송방식(TCP)
송신측에서 보낸 데이터의 사이즈와 수신측에서 받는 데이터의 사이즈가 무조건 같지 않다 -> 데이터 양의 합만 같음(단 수신측은 mms 한도 내로만 받음)
datagram 전송방식(UDP)
데이터를 덩어리로 보내며 송신량과 수신량이 일치함

3way hand shake 필요이유 (TCP)


1. 송수신 전, MSS, RWND등 정보 교환
2. 송수신 버퍼 등 Kernel에서 기능들 생성

 

4way hand shake
통신해제
서버에서 먼저 요청
ack와 fin을 따로 / 같이 보냄
closed = 커널 메모리에서 송수신 버퍼를 해제
클라이언트에서 fin에 대한 ack를 받을 수 있게 얼마간 기다렸다가 close 함 : TIME_WAIT

-> TIME_WAIT : 지연 패킷이 발생했을 때 데이터 무결성을 해결하기 위함. 두 배의 최대 세그먼트 수명(MSL) 시간을 기다리며, 기본적으로 MSL은 2분. 또한 연결을 올바르게 닫힌상태로 만들기 위해 존재. 예를 들어 CLOSED가 아닌 LAST_ACK로 되어 있으면 그 다음 연결 때 오류가 나타남.