OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다.
사용자나 애플리케이션에서 네트워크에 접근할 수 있게 해주는 계층으로 웹, 전자우편 등의 서비스들을 제공하며 데이터를 메시지 단위로 구성해서 처리한다.
예) HTTP, FTP, DNS, SMTP, TELNET
전송받은 데이터를 공통으로 이해할 수 있는 데이터로 변환해 주는 과정으로, 데이터 단위를 메시지 단위로 구성해서 처리한다.
예) JPEG, MPEG, XDR
통신하는 사이에서 접속을 유지, 설정, 동기화, 종료시켜 주는 역할을 하는 계층으로, 데이터 단위를 메시지 단위로 구성하여 처리한다.
예) SSH, RPC, TLS
메시지의 발신지와 목적지 간의 신뢰성을 보장하기 위한 계층으로, 데이터를 세그먼트 단위로 구성해서 통신 과정에서 발생하는 오류를 복구하고 흐름을 제어하는 계층이다. 예) TCP,UDP
End-to-end의 연결이 관심사. (경로X)
데이터를 패킷 단위로 구성하여 데이터를 어디로 전송해야 하고 어떤 경로(라우팅)로 전송할 것인지를 책임지는 계층이다.
예) IP, ICMP, IGMP, X.25, ARP, OSPF
장비와 장비 사이의 경로가 관심사이다.
데이터에 오류가 없도록 비트(Bit)로 된 데이터 앞에 헤더와 뒤에 트레일러를 붙여 프레임이라는 논리적 단위로 만들어 전송하는 계층이다.
예) Ethernet, Token Ring, PPP, ISDN, WiFi, FDDI
0과 1로 표현된 비트(Bit)를 전기 신호로 변환하여 전송 매체를 통해 전송하는 계층이다.
예) 동축 케이블, 광섬유, 모뎀, DSU, CLU
4계층 또는 5계층으로 나누기도 한다.
TCP, IP는 OS 상에서 구현된다.
Switching = routing + forwarding
Switch: 임의의 입력 포트와 임의의 출력 포트를 연결시켜 주는 통신 장비
Switching 방식
IPV4는 Datagram Switching으로 작동한다.
Application layer는 사용자에게 서비스를 제공한다.
서버를 거치지 않고 클라이언트끼리 직접 통신하는 방식이다.
중앙서버 없이 컴퓨터간의 통신에 사용되며 파일교환이 쉽다는 장점이 있다.
특정 layer를 의미하는 것은 아니다.
Controller + client protocols + interpreters
인터넷 상의 특정 문서나 그림의 고유한 주소이다.
Protocol + host + post + path
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이다.
HTTP(HyperText Transfer Protocol) 메서드는 웹 클라이언트가 서버에게 요청을 보내는 데 사용되는 행동 또는 명령을 나타낸다.
GET
, HEAD
, OPTIONS
, PUT
, DELETE
GET
: 서버에 존재하는 리소스를 단순히 읽어오기만 하는 메소드이기 때문에 당연히 여러번 수행되어도 결과값은 변하지 않는다. 마찬가지로 HEAD
, OPTIONS
메소드도 조회에 대한 메소드이기 때문에 멱등하다고 할 수 있다.PUT
: 서버에 존재하는 리소스를 요청 내용에 따라 대체하므로, 올바르게 구현되었다면 여러번 수행해도 그 결과는 동일할 것이다.DELETE
: 데이터의 존재 유뮤에 따라 응답 코드는 다르겠지만, 요청을 처리한 후에 파일이 존재하지 않는 서버의 상태는 동일하므로 올바르게 구현되었다면 멱등성이 보장될 것이다.POST
, **PATCH**
POST
: 메소드가 호출될 때 마다 서버에 데이터가 추가되어 상태가 변경되기 때문에 멱등성을 위배한다PATCH
: PATCH
메소드는 항상 멱등성을 보장한다고 할 수 없다. PATCH
는 멱등성을 보장하도록 설계할 수 있지만, 멱등성을 보장하지 않도록 설계할 수도 있다. PUT
은 요청에 대한 리소스를 통째로 바꿔버리기 때문에 멱등성이 보장되지만, PATCH
는 리소스의 일부에 대하여 변화를 명령할 수 있기 때문이다.{
"operation": "add",
"age": 10
}
위 요청을 PATCH
메소드로 실어 보낸다면, 해당하는 리소스의 age
필드는 요청마다 10씩 증가하게 될 것 이다. 따라서 단일 호출에 대한 응답과 다중 호출에 대한 응답에 대한 서버의 상태가 다를 것이고, 곧 이는 멱등하지 않음을 의미한다.GET
, OPTIONS
, HEAD
와 같이 조회에 사용되는 메소드를 안전하다고 이야기할 수 있다.PUT
과 DELET
메소드는 멱등성을 갖지만, PUT
은 리소스를 수정하고, DELETE
는 메소드를 제거하므로 안전한 메소드라고 할 수 없다.HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다. 응답은 5개의 그룹으로 나누어진다.
상태 코드 | 상태 | 의미 |
---|---|---|
2XX | Success | 클라이언트가 요청한 동작을 수신하여 이해하였고 승낙하였으며 성공적으로 처리하였다. |
200 | Ok | 서버가 요청을 성공적으로 처리하였다. |
201 | Created | 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다. |
202 | Accepted | 요청을 수신하였지만 그에 응하여 행동할 수 없다. |
3XX | Redirection | 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다. |
301 | Moved Permanently | 지정한 리소스가 새로운 URI로 이동하였다. |
303 | See Other | 다른 위치로 요청하라. |
307 | Temporary Redirect | 임시로 리다이렉션 요청이 필요하다. |
4XX | Client Error | 클라이언트가 요청한 동작을 수신하여 이해하였고 승낙하였으며 성공적으로 처리하였다. |
400 | Bad Request | 이 응답은 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다. |
401 | Unauthorized | 지정한 리소스에 대한 액세스 권한이 없다. |
403 | Forbidden | 지정한 리소스에 대한 액세스가 금지되었다. |
404 | Not Found | 지정한 리소스를 찾을 수 없다. |
5XX | Server Error | 클라이언트의 요청은 유효한데 서버가 처리에 실패하였다. |
500 | Internal Server Error | 서버가 처리 방법을 모르는 상황이 발생했다. 서버는 아직 처리 방법을 알 수 없다. |
501 | Not Implemented | 요청 방법은 서버에서 지원되지 않으므로 처리할 수 없다. |
502 | Bad Gateway | 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미한다. |
200 응답: 성공의 의미는 HTTP 메소드에 따라 달라진다.
202 응답: 요청 처리에 대한 결과를 이후에 HTTP로 비동기 응답을 보내는 것에 대해서 명확하게 명시하지 않다. 이것은 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우를 위해 만들어졌다
Binary Framing 계층 추가: 메세지를 Frame 단위로 분할하여 추가적으로 binary로 인코딩
동시 요청을 위한 Multiplexing: 요청마다 Stream이라는 흐름의 단위로 나누어 처리하게 한다. 하나의 커넥션이 여러 개의 stream을 통해 전달되면 다중화가 가능하게 되었다. -> HOL 해결
Stream Prioritization: 리소스간 우선순위 설정 가능
Header 압축: 연속된 요청의 경우 중복된 헤더의 전송으로 오버헤드가 많이 발생했다. Header의 메타 데이터를 압축하여 오버헤드 감소.
성능 향상: HTTP/3.0은 QUIC 프로토콜을 기반으로 하며, 이는 TCP보다 빠른 연결 설정과 데이터 전송을 제공합니다. 병렬로 다수의 데이터를 송수신할 수 있어 전반적인 웹 페이지 로딩 속도를 향상시킵니다.
저렴한 핸드셰이크 비용: QUIC은 핸드셰이크를 줄이고 연결 설정 비용을 최소화하여 빠른 속도를 유지합니다.
기존 프로토콜과의 하위 호환성: HTTP/3.0은 기존의 HTTP/1.x 및 HTTP/2.0과 호환되도록 설계되어 있어 기존 웹 서버 및 브라우저에서도 사용이 가능합니다.
도입의 복잡성: 기존의 HTTP/1.x 및 HTTP/2.0과는 다르게 새로운 프로토콜인 HTTP/3.0을 도입하는 것은 초기에는 일정한 도전과 적응이 필요합니다.
네트워크 관리의 어려움: QUIC은 UDP를 사용하기 때문에 기존의 TCP와는 다른 특성을 가지고 있습니다. 네트워크 관리 및 디버깅이 더 어려울 수 있습니다.
TCP는 congestion control로 한계가 존재하기 때문에, UDP를 이용해 구현한다.
보안이 기본적으로 들어가 있다.
클라이언트는 서버와의 연결을 시작하기 위해 ClientHello 메시지를 전송한다.
이 메시지에는 클라이언트가 지원하는 TLS 버전, 암호화 스위트(Cipher Suite) 목록, 압축 방법, 세션 ID, 랜덤 데이터(Nonce) 등이 포함된다.
서버는 클라이언트의 ClientHello 메시지를 수신하고, 이에 응답하는 ServerHello 메시지를 전송한다.
이 메시지에는 서버가 선택한 TLS 버전, 암호화 스위트, 세션 ID, 랜덤 데이터(Nonce) 등이 포함된다.
서버는 클라이언트에게 자신의 디지털 인증서를 전송합니다. 이 인증서는 서버의 신원을 확인하기 위해 사용됩니다.
인증서에는 서버의 공개 키와 인증 기관(CA)의 서명이 포함됩니다.
서버는 ServerHelloDone 메시지를 전송하여 초기 서버 메시지를 마무리합니다.
클라이언트 인증이 필요한 경우, 클라이언트는 자신의 인증서를 서버에 전송합니다.
클라이언트 키 교환:
클라이언트는 ClientKeyExchange 메시지를 전송하여 세션 키를 설정하는 데 필요한 키 교환 정보를 서버에 전송합니다.
보통 클라이언트는 서버의 공개 키를 사용하여 프리마스터 시크릿(Premaster Secret)을 암호화하여 서버에 전송합니다.
클라이언트와 서버는 서로 전송된 랜덤 데이터와 프리마스터 시크릿을 사용하여 대칭 키(세션 키)를 생성합니다.
이 세션 키는 이후의 데이터 암호화에 사용됩니다.
클라이언트는 ChangeCipherSpec 메시지를 전송하여 이후의 메시지가 협상된 암호화 및 압축 알고리즘을 사용할 것임을 알립니다.
클라이언트는 Finished 메시지를 전송하여 핸드셰이크가 완료되었음을 알립니다. 이 메시지는 협상된 세션 키로 암호화됩니다.
서버 완료 메시지:
서버도 ChangeCipherSpec 메시지를 전송하여 이후의 메시지가 협상된 암호화 및 압축 알고리즘을 사용할 것임을 알립니다.
서버는 Finished 메시지를 전송하여 핸드셰이크가 완료되었음을 알립니다. 이 메시지 역시 협상된 세션 키로 암호화됩니다.
전송 불가시 30분 단위로 재전송 시도, 정해진 기간 동안 전송 불가지 중단 및 송신자에게 통보
수신자의 메일 서버는 항상 listening 중이지만, 수신자는 그렇지 않다. 따라서 5번 과정은 pull 과정인 POP3, IMAP으로 이루이진다.
220 <서버 도메인 또는 IP 주소> ESMTP <서버 소프트웨어 정보>
)를 보낸다.<CR><LF>
로 구분한다.메일 본문 전송에서는 ASCII만 지원된다. 하지만 실사용에서는 ASCII만의 활용은 한계(오디오, 비디오)가 존재한다. 따라서 MIME을 활용하여 ASCII Data가 아닌 것을 Base64 Encoder, Decoder를 활용하여 ASCII 문자로 변환하여 전송한다.
MIME은 전자 메일을 위한 확장 프로토콜로서, 다양한 종류의 데이터를 전자 메일로 전송하기 위한 표준을 정의한다.
MAP (Mail Access Protocol)은 전자 메일을 서버에서 클라이언트로 전달하는 데 사용되는 프로토콜이다. 주로 이메일 클라이언트가 서버에 접근하여 전자 메일을 가져오는 데에 활용된다.
메일 서버를 웹 서버로 구현하여 웹 브라우저에서 HTTP로 메일 서버에 접속하여 통신한다.
인터넷에서는 통신을 위해 숫자로 이루어진 IP주소를 이용한다. DNS(Domain Name System)는 숫자로 된 네트워크 IP 주소를 사람들이 알기 쉽게 문자와 숫자를 통해 식별할 수 있도록 변환해주는 시스템이다.
인터넷 호스트에 부여되는 문자형의 유일한 이름이다. 계층적인 도메인 관리 구조에 의해 도메인명의 유일성이 유지된다.
유일한 도메인 이름을 관리하기 위해 계층적인 도메인 구조를 갖는다.
Mail server aliasing(메일 서버 별칭 서비스): 사용자의 메일서버 별칭을 복잡한 정규 호스트명으로 변환한다.
Load distribution(부하 분산 서비스): 동일 서버명(도메인명)으로 서로 다른 IP 주소의 다중 복제 서버를 배치할 수 있다. 동일 서버명에 대한 DNS 요청에 대해 다른 IP 주소를 돌아가며 응답하게 한다.
하나의 서버가 모든 DNS 질의를 처리하게 한다.
상위 서버는 하위(중간) 서버의 일부 정보만을 갖고 있다.
TLD 서버들에 대한 IP 주소를 제공한다.전세계에 수백 개의 복제 서버가 존재한다. 13개의 관리 기관에 의해 관리된다.
사용자는 DNS에 query를 보내면 지역(Local, IPS Recursive) DNS 서버에 도착하고 이는 Root Server에게 전송되어 접속된다.
최상위 도메인에 대한 DNS 서비스를 담당한다. 일반적으로 책임(Authoritative) DNS 서버에 대한 IP 주소를 제공한다.
.kr 도메인 관리는 KRNIC에서 관리한다.
특정 호스트의 도메인명 정보를 유지하고 있는 서버이다. 규모가 큰 기관은 대부분 자신의 호스트들에 대한 책임 DNS 서버를 유지한다. 소규모 기관은 외부의 책임 DNS 서버를 위탁한다.
Route 53이 대표적인 위탁 업체이다.
DNS 서비스를 요청하는 클라이언트 호스트가 소속된 DNS 서버이다. 소속된 호스트들의 DNS 서비스 요청을 대행한다.
해당 방법은 Local Server가 모든 DNS Server(Root Server, TLD Server, Authoritative Server)에게 query하는 방식으로 작동한다.
일반적으로 일반 사용자의 DNS 쿼리는 recursive 방식을 사용한다. 사용자가 웹 브라우저나 다른 네트워크 응용 프로그램을 통해 도메인 이름을 입력하면, 사용자의 로컬 DNS 서버는 해당 쿼리를 받고 이를 처리하기 위해 recursive 방식을 사용하게 된다.
해당 방법은 Local Server가 하위 Server에게 query하여 찾아서 알려주는 방식으로 작동한다.
DNS 서버가 다른 DNS 서버에 쿼리를 보낼 때 iterative 방식을 사용한다. 일반적으로 캐시된 정보가 없는 경우에는 iterative 방식으로 동작하게 된다.
특정 서버가 다른 서버에게 질의를 하고 응답을 받으면 이 정보를 클라이언트 방향으로 전달하기 전에 자신의 캐시 메모리에 저장한다.
해당 서버가 동일한 도메인명에 대한 해석을 요청하는 질의를 수신하면 다른 서버에게 질의 메시지를 전달하는 대신 캐시 메모리 정보를 응답한다.
특정 도메인명에 관한 정보가 해당 서버에 캐싱된 이후에 책임 서버에서 갱신되었다면 캐시 메모리는 잘못된 정보를 유지하게 된다.
따라서 이러한 캐싱 정보는 일정 시간(TTL)이 지나면 자동적으로 삭제하게 한다.
DNS 서버에 정보가 저장되고 서비스되는 단위이다.
(name TTL class type value)
www.uos.ac.kr
의 IPv4 주소를 나타낼 때 사용된다.name=호스트명, value=IPv4 주소
name=도메인, value=Authoritative DNS server의 호스트명
name=별칭 호스트명, value=정규 호스트명
name=호스트명, value=IP주소
name=호스트명, value=IPv6 주소
name, TTL, class, SOA, 주요 서버, 이메일, 시리얼, 갱신 간격 , 재시도 간격, 만료 간격, 최소 TTL
- 주요 서버: 이 도메인에 대한 주요 네임 서버의 FQDN (Fully Qualified Domain Name).
- 이메일: 도메인 관리자의 이메일 주소.
- 시리얼: SOA 레코드의 변경을 추적하기 위한 일련번호. 각 변경 시마다 증가시켜야 합니다.
- 갱신 간격: 이 SOA 레코드를 얼마나 자주 새로 고칠지를 나타냅니다.
- 재시도 간격: 실패한 새로 고침을 얼마나 자주 다시 시도할지를 나타냅니다.
- 만료 간격: 다른 네임 서버에게 이 도메인에 대한 정보를 얼마 동안 사용할 수 있는지 나타냅니다.
- 최소 TTL: 다른 서버에게 이 도메인에 대한 정보를 얼마 동안 캐시에 저장할지 나타냅니다.
도메인명(uos.ac.kr)과 Authoritative Server(1차, 2차)의 IP 주소를 등록 기관에 제출한다.
웹 서버명과 IP 주소의 A 유형 RR을 Authoritative Server에 저장한다.
등록 대상 도메인명의 유일성을 검증한다.
도메인을 담당하는 책임 DNS 서버에 대한 NS 유형 RR과 A 유형 RR을 상위 DNS 서버(ex. TLD)에 등록한다.
SSH는 Secure Shell의 약자로, 네트워크 상의 다른 컴퓨터에 안전하게 접속하기 위해 사용되는 암호화된 네트워크 프로토콜이다. 주로 원격 로그인과 원격 명령어 실행을 위해 사용되며, 안전한 데이터 전송을 보장한다. SSH는 암호화된 연결을 통해 데이터와 명령어를 보호하며, 불법적인 도청 및 위변조로부터 네트워크 통신을 보호한다.
Network Layer는 Host에서 Host의 데이터 전송 서비스를 제공한다. 반면에 Transport Layer는 Network Layer의 서비스를 이용해서 Host 내의 프로세스와 프로세스 간의 데이터 전송 서비스를 담당한다.
Segmentation: 응용 프로세스가 전송할 때 메시지를 네트워크 계층이 교환 가능한 크기로 나누는 것
Reassembly: 여러 개의 Segment를 모아서 원래의 메시지로 합치는 것
Multiplexing: 여러 프로세스의 정보(포트 번호)를 모아서 하나로 처리하는 것
Demultiplexing: 도착한 정보를 여러 해당 프로세스로 나누는 것
Multiplexing&Demultiplexing으로 하나의 IP(호스트) 내의 여러 프로세스를 포트 번호를 통해 식별한다.
윈도우 OS는
C:\Windows\System32\drivers\etc\services
경로에 Well Known 포트를 저장하고 있다
Transport layer의 Header가 IP 패킷의 data 영역의 들어가게 되고, Header에 포트 번호가 적힌다.
서비스 | TCP | UDP |
---|---|---|
Segmentation&Reassembly | O | O |
Multiplexing&Demultiplexing | O | O |
무결성 확인 | O | O |
신뢰 전송 | O | X |
혼잡 제어 | O | X |
Transport layer이 제공하는 응용 프로세스 통신 통로의 자료구조이다.
소켓은 Source, Destination IP와 포트 번호의 쌍에 번호를 부여한 것이다.
Transport layer에서 제공되는 Connection의 종류에는 Connectionless와 Connection-oriented가 존재한다.
Pseudoheader는 UDP checksum의 계산에 사용되는 보조 정보다. 이는 IP 헤더의 일부분과 함께 사용되는데, UDP 헤더와 데이터를 함께 검사하기 위해 IP 헤더의 일부(출발지 IP 주소, 목적지 IP 주소, 0으로 채워진 패딩 바이트, 상위 계층 프로토콜 필드, UDP 길이)와 UDP 헤더, 그리고 실제 데이터를 포함하여 checksum을 계산한다.
수신자가 Datagram을 받았을 때, 훼손 여부(무결성)를 판단할 수 있다.
Checksum을 제외한 값을 전부 더해서 뺀 값을 Checksum에 저장한다. 수신 쪽에서 Checksum을 포함해서 0이 나와야 한다.
멀티미디어 데이터는 BPS가 어느 정도 유지되어야 한다. TCP는 전송 속도를 흐름 제어 때문에 마음대로 조절하기 때문에 적절하지 않다.
Segment를 정상적으로 수신한다면, 수신자는 ACK Segment를 회신한다. 훼손일 경우 수신자는 Segment를 폐기하고, 손실일 경우 수신자는 손실여부를 인지할 수 없다.
송신자는 ACK Segment를 받을 때까지 Segment를 반복해서 전송한다.
이를 해결하기 위해 SN(Sequnce Number)를 도입하였다.
헤더에 SN(Sequence Number) 필드를 통해 각 Segment를 구분한다.
TCP의 SN(Sequence Number) 필드는 32 bit이다. SN(Sequence Number)는 통신 과정에서 많이 필요할 수도 있는데, 몇 bit가 적합할까?
SN(Sequence Number)를 1 bit만을 사용하는 프로토콜을 의미한다.
0과 1만으로도 손실을 파악할 수 있다. Flow, Error Control 모두 가능하다.
낮은 링크 사용 효율성이 문제다.
Large RTT에서 ACK 패킷이 도착할 때까지 기다려야하므로 비효율적으로 작동한다. 더 효율적으로 만들기 위해 pipelining 적용 가능하다.
ACK가 회신 되기전 RTT 동안 M개의 Segment를 전송한다. 기존보다 M배 높은 효율을 가진다. 이때 최대 pipelining segment의 수(M)가 송신 윈도우 size가 되고 그만큼의 패킷을 보낼 수 있다.
오류 Segment로부터 이후의 모든 Segment들을 재전송한다.
Go-Back-N 프로토콜에서 Cumulative(Accumulative) ACK는 수신 측에서 송신 측으로 전송된 프레임을 정상적으로 수신했음을 알리는 확인 응답(ACK)이다.
Cumulative(Accumulative) ACK는 특정 시점까지의 모든 연속적인 프레임을 수신했음을 나타내므로, 그 시점 이전의 모든 프레임에 대한 확인이 된다.
즉, 현재 받을 패킷()이 아닐 경우, 모두 폐기하는 방식은 순차적으로 ACK를 확인하므로 이 방법을 Cumulative(Accumulative) ACK라 한다.
송신 후 버퍼에 유지되어서, 오류 발생 시 재전송한다.
Sender의 window size를 적절하게 정하지 못해서 위 그림에서 문제가 발생한다. 0번 패킷과 4번 패킷을 같게 인식한다.
윈도우 size가 크고 패킷 하나가 오류일 때, 많은 패킷들을 재전송해야 될 수도 있다.
오류 Segment만 선택적으로 재전송한다.
TCP는 1:1 소켓 연결을 지원하므로, 연결 설정 과정(handshaking)이 필요하다.
하나의 서버가 여러 클라이언트와 통신하기 위해서는 서버 IP와 서버 Port Number는 공유 가능하다.
GBN과 SR을 통합한 형태이다.
Multicasting은 지원 불가
sender와 receiver의 크기가 같을 필요는 없다.
3-way Handshaking으로 클라이언트와 서버 간에 동기를 맞추는 과정이다.
rwnd: 헤더의 윈도우 사이즈 필드 설정
연결 설정을 위해 클라이언트 TCP가 서버 TCP에 전송한다.
SYN Segment를 수신한 서버 TCP가 클라이언트 TCP에 전송한다.
SYN+ACK Segment를 수신한 클라이언트 TCP가 서버 TCP에 전송한다.
DATA 전송 후에는 TCP 연결 종료를 위해 4-Way Handshaking을 진행한다.
Termination은 client와 server 중 아무나 먼저 요청 가능하다.
두 가지 옵션 존재
FIN Segment: ACK를 위해 SN 1 소비
ACK Segment: Data가 없으면 SN 소비 없음
클라이언트 시간 대기(Time-Wait)를 통해 마지막 ACK Segemtn 손실 시에 재전송 되는 FIN Segment를 처리한다. 일반적으로 3초이다.
TCP 계층에서 데이터는 byte stream이지만, IP 계층에서는 적당한 크기의 packet들로 보내야 하므로, TCP에서도 이에 맞춰 segment로 나누어 보낸다.
Application 계층에서 내려온 데이터를 TCP가 Segmentation되고 하위 계층으로 내려가면서 Encapsulatation이 된다.
Base 20 + Optional 40 = 60이 최대 헤더 길이이다.
응용 프로토콜(프로세스)를 식별한다.
시작 순서 번호(ISN)부터 이미 송신된 바이트의 다음 바이트 번호(데이터의 첫번째 바이트 번호), 세그먼트 송신자에 의해 부여된다.
순서대로 수신된 세그먼트의 마지막 바이트의 다음 바이트 번호(수신을 기대하는 세그먼트의 순서 번호), 세그먼트 수신자에 의해 부여한다.
헤더 필드 전체 길이(20~60 바이트), 4바이트 워드 단위로 표시(5~15)
긴급 데이터의 위치를 나타낸다.
piggybacking으로 인해 확인 응답을 기존의 데이터 프레임에 함께 실어서 전송할 수 있다. 이렇게 하면 추가적인 데이터 전송이 필요 없어지고, 대역폭을 효율적으로 활용할 수 있다.
Segment 송신 후 ACK 수신까지 걸리는 시간이다. 네트워크 혼잡도에 따라 가변적인 시간이다.
RTTm(측정한 RTT값)들의 평균인 RTTs를 계산한다.
RTTs = E[RTTm]
|RTTs - RTTm| 평균을 계산한다.
RTTd = E[|RTTs - RTTm|]
RTO = RTTs + 4RTTd
TimeoutInterval = EstimatedRTT + 4*DevRTT
4배가 적절하다고 판단
누적 수신 확인이 되지 않은 가장 오래된 세그먼트에 대한 재전송 타이머 유지한다.
ACK를 받지 못한 Segment를 항상 재전송하는 것은 아니다.
Sender는 다음의 세 가지 경우에 segment를 재전송한다.
Sender의 TCP 헤더 Sequence Number 필드에 5001이 적어져 있고, Receiver가 그 데이터 바이트 크기를 계산해서 ACK 응답을 전송한다.
Timeout 전에 중복 ACK 발생하는 경우
송신 TCP가 지나치게 많은 데이터를 한꺼번에 송신함으로써 수신 TCP의 버퍼가 넘쳐(overflow) 데이터 손실이 발생하는 문제를 방지하는 메카니즘이다.
수신 TCP는 자신의 수신 버퍼내의 여유 공간의 크기를 송신 TCP에게 알려주고, 송신 TCP는 통지된 여유 공간의 크기 보다 적은 양의 데이터를 송신한다.
rwnd: 수신할 수 있는 데이터의 양
연결 설정 시에 수신버퍼크기와 동일하게 설정한다. 수신 데이터의 버퍼 저장과 응용 프로세스에 의한 버퍼 데이터 읽기 과정에서 수신 윈도우가 변화한다.
Sender의 Window: 응용 계층에서 데이터를 버퍼에 보내면 TCP가 그 데이터를 읽어주는 임시 버퍼이다.
마지막으로 송신한 바이트 번호와 확인 세그먼트를 통해 마지막으로 수신 확인된 바이트 번호의 차이가 항상 수신윈도우 보다 작게 유지해야 한다.
LastByteSent - LastByteAcked ≤ rwnd
수신 TCP가 송신 TCP로 전달하는 ACK Segment 수신윈도우 필드에 포함되어 통보한다.
IP계층에서 데이터가 계속 들어오고 응용 계층에서 데이터를 처리하지 못하면 rwnd가 0이 될 수 있다.
수신윈도우가 0이 되면, 송신 TCP가 수신 TCP에게 1 바이트 세그먼트를 주기적으로 전송하여 해결한다.
Receiver는 rwnd 값으로 send window 크기를 조절하여 flow control을 한다.
Congestion은 너무 많은 traffic의 유입으로 network 중간의 router들의 buffer가 overflow 되는 것이다. Receiver는 congestion에 대해 못하며, rwnd로는 조절할 수 없다. TCP는 congestion window (cwnd)를 이용하여 send window 크기를 조절한다. cwnd(Congestion Window의 크기) 값을 늘리거나 줄일 때의 단위로서 MSS(maximum segment size)가 관여한다.
LastByteSent - LastByteAcked ≤ min(rwnd, cwnd)
Send TCP는 오로지 ACK들을 가지고 네트워크의 상황으로 판단한다.
천천히 속도를 올려보는 방식이다.
즉, cwnd는 1씩 증가하지만, RTT 입장에서는 2배씩 증가하는 것이다.
만약 제한없이 cwnd 의 값을 exponentially increase 한다면, 결국 전송속도가 너무 커지고, 이는 network 의 congestion을 유발할 것이다.
이를 미리 회피 (congestion avoidance)하고자, ssthresh(임계치) 이후에는 ACK 하나를 받을 때마다 cwnd 의 값을 (1/ cwnd)만큼 증가시킨다.
이것은 send window 전체가 ACK를 받으면 RTT마다 cwnd의 값을 1 증가시키는 것과 같다. 결과적으로 그림과 같이 매 RTT 마다 cwnd 의 값이 1 증가하게 되며, 시간 함수로 그려보면 cwnd 의 값이 additive increase 하는 선형적(linear)인 증가를 나타낸다.
Three duplicate ACKs가 왔을 때, 경미한 혼잡 상황이라 판단하고 fast recovery 구간으로 진입한다. 정상 ACK가 수신되어 오류 복구가 완료되면 Slow Start 단계를 건너뛰고 Congestion Avoidance 단계로 진입한다.
TCP는 운영체제의 커널에 설치되어 있다.
TCP Congestion Control은 AIMD(Additive increase, multiplicative decrease) 패턴을 따른다.
천천히 늘리고, 확 줄이는 방식으로 동작한다.
Wmax를 넘어가는 순간, bottle neck에서 segment loss가 발생하여 속도를 절반으로 감소한다. 따라서 troughput의 평균값은 (3/4) * Wmax가 된다.
CUBIC은 상승할때, 지수함수의 꼴로 증가시킨다.
AIMD에 의해 두 TCP connection은 고르게 통신한다.
IP간의 연결 설정이 전혀 없으며, 각 Datagram이 독립적으로 전달된다.
Hop이란 인터넷 연결의 구간을 의미한다. 예를 들어서 Host에서 라우타 사이의 경로, 라우터와 라우터 사이의 경로가 하나의 Hop에 해당된다. Ip는 Next Hop까지의 전달만을 책임진다. Next hop을 전달하는 라우팅테이블이 결정한다.
TCP/IP계층 모델에서 3계층에 해당되는 네트워크 계층이다. 데이터링크 계층의 여러 프로토콜과 통신할 수 있다.
IP의 Header는 필수 값(20Byte)와 옵션(40Byte)을 포함하기에 가변 길이를 가진다.
Service type과 Protocol의 차이점은?
MAC + TYPE + Ethernet data{ IP Header(Protocol field = TCP) + IP Data(TCP Segment)} + Frame
TCP에서 MSS가 필요한 이유는 MTU가 네트워크마다 크기가 다르기 때문에 적용한다. 서브넷에 따라 MTU가 다르기 때문에 Fragmentation이 필요하다. 서브넷을 통과한 후에 또 Fragmentation 해야 될 수도 있기 때문에 최종 목적지에서 재조립된다.
각 Header를 자를 수는 없으니, Data를 잘라서 Fragmentation을 진행한다.
각 Fragmentation 마다 header 정보가 붙게 된다. 원본 Header에서 필드를 일부 수정해서 덧붙인다.
0 ~ 1399, 1400~2799, 2800~일 경우, offset은 각각 0, 175, 350이 된다.
인터넷에서 통신 장치를 유일하게 식별한다. IP주소는 Network ID + Host ID으로 구성한다. 여기서 Host ID가 0일 경우, 이를 네트워크 주소라 한다.
네트워크 주소 기반으로 라우팅을 활용하여 라우터에서 Network ID 기반으로 라우팅하게 된다.
왜 Network ID + Host ID로 나누었을까? 이는 분류의 편리성 때문이다. Host ID만으로 구분한다면, Host만으로 찾아가야하 라우팅 테이블이 굉장히 커지게 된다. 이 때문에 라우팅 테이블 탐색 시간의 오버헤드가 크다
아래 그림에서 네트워크의 수는?
라우터에 연결된 호스트를 이루는 네트워크 3개와 라우터 사이를 P2P로 이어주는 네트워크 3개가 이루어져 있다. 따라서 Network ID는 6개가 필요하다.
IP주소는 Network ID와 host ID로 구성된다. DDN IP 주소는 8비트씩 끊어서 십진수로 표현한 것을 의미한다.
호스트의 개수가 250개이므로 최소 256개가 필요하다.
클래스 주소(Classful Addressing): Network Id와 Host Id가 고정되어 있다.
비클래스 주소(Classless Addressing): Network Id의 크기가 가변적이다.
사설 IP주소는 여전히 Classful IP Address로 사용한다,
위와 같은 낭비되는 ip주소들 때문에 현재는 Classless IP 주소를 사용한다.
클래스가 존재하지 않는 도메인간 라우팅 기법을 의미한다.
비클래스 IP 주소에서는 Network IP가 몇비트까지인지 확인할 방법이 없다. 따라서 IP 주소에서 Network ID의 길이를 표시하는 서브넷 마스크가 필요하다. 이를 통해 네트워크의 크기(Host 개수)를 결정한다.
Unicast Address (유니캐스트 주소): 유니캐스트 주소는 단일 송신자와 단일 수신자 간의 통신을 위한 주소다. 네트워크에서 특정 호스트를 식별하고 특정 호스트에게 데이터를 전송하기 위해 사용된다. 대부분의 IP 주소가 유니캐스트 주소에 속합니다.
Broadcast Address (브로드캐스트 주소): 브로드캐스트 주소는 같은 네트워크 상의 모든 호스트에게 메시지를 보내기 위한 주소이다. IPv4에서는 특정 주소 (예: 모든 비트가 1로 설정된 주소)가 브로드캐스트 주소로 사용된다. 그러나 IPv6에서는 브로드캐스트 개념이 없으며, 다른 메커니즘을 통해 멀티캐스트를 사용한다.
Anycast Address (에니캐스트 주소): Anycast Address는 여러 호스트 중 하나를 식별하기 위한 주소로, 동일한 주소를 갖는 여러 호스트 중 가장 가까운 호스트에게 패킷이 전송된다. 에니캐스트는 주로 특정 서비스를 제공하는 여러 서버 간의 로드 밸런싱이나 회복성을 향상시키기 위해 사용된다.
Multicast Address (멀티캐스트 주소): 멀티캐스트 주소는 그룹 내 또는 다른 네트워크의 여러 호스트에게 동시에 데이터를 전송하기 위한 주소다. 특정 그룹에 속한 호스트들만 해당 데이터를 수신한다. 멀티캐스트는 효율적인 데이터 전송을 위해 사용되며, 주로 IPTV, 온라인 게임, 비디오 스트리밍 등에서 활용됩니다.
멀티캐스트 주소 범위는 IPv4에서는 224.0.0.0부터 239.255.255.255까지의 주소 범위이며, IPv6에서는 ff00::/8의 주소 범위를 사용한다.
NIC가 네트워크 할당의 단위가 된다.
네트워크 3개면 네트워크 ID가 다른 NIC가 존재하게 된다.
Source에서 Destination까지의 데이터 delay.
Throughput은 Bottleneck이 결정한다.
Packet 흐름의 양을 제어해야 한다.
Packet 흐름을 높여야 한다.
근본적인 해결: IPv6 주소체계 사용
IPv6를 적용하려면, 모든 라우터를 바꿔야한다는 문제점 존재
부분적인 해결: DHCP(동적 주소 할당), NAT(Network Address Translation)
라우팅에서 Hop-by-Hop으로 작동하기 위해서 Network ID를 식별할 수 있는 Subnet Mask가 필요하다.
라우터는 라우팅 테이블을 자료구조를 가지고 있는데, 호스트는 라우팅 테이블 정보가 존재하지 않는다. 따라서 다른 네트워크로 보내기 위해 어떤 라우터로 보내야하는지에 대한 구성정보를 알아야한다.
이러한 구성 정보를 자동으로 설정하게 하는 것이 DHCP 프로토콜이다.
DHCP 서버에 의해 호스트 구성 정보를 동적(자동)으로 할당한다.
디폴트 게이트웨이란?
장점
- 사용자 편의성
- IP 주소 절약(필요할 때 적절한 IP 부여, 동시 접속자수만큼 할당)
DHCP는 이중화,삼중화 필수이다. 단일 장애 포인트가 되므로 DHCP가 다운되면 고정 IP제외하고 나머지는 작동하지 않는다.
DHCP와 통신하기 위해 목적지, 출발지IP가 필요하다. 자신의 IP도 모르는데, 어떤 방식으로 여러 DHCP 중 하나로 구성 정보를 할당 받을 수 있을까?
Broadcast ID란 IP에서 host ID 부분이 전부 1인 주소이다. 현재 클라이언트는 Network ID, Host ID를 모르기 때문에, 모든 비트가 전부 1인 주소를 자신이 소속된 broadcast 주소를 뜻한다.
DHCP offer: DHCP는 할당 여부를 판다하고, 승인되면 offer 메시지를 전송한다. Source IP에 DHCP 주소와 Dest IP는 여전히 broadcast 주소이다. your address(할당할 주소)를 작성하여 클라이언트에 IP를 할당한다. 어느 DHCP로부터 왔는지를 나타내는 DHCP Server ID를 작성한다(대부분 IP를 사용).할당하는 IP 주소의 TTL까지 전송한다.
DHCP request: 클라이언트는 여러 DHCP로부터 응답을 받을 수 있기 때문에, 그 중에 하나를 선택하여 선택된 DHCP서버에게 Request 메시지를 전송한다. Src IP는 아직 확정이 안되었기 때문에 0으로 표시하고, Dest IP는 여전히 Broadcast 주소를 사용한다.
여전히 dest IP를 broadcast주소로 사용하는 이유는? 모든 DHCP 서버에게 전송하여 나머지 DHC서버들이 클라이언트가 IP주소를 사용하지 않는 것을 알려주기 위함이다. 이를 통해 다시 해당 IP 주소를 IP 주소 풀에 그대로 유지한다.
DHCP ACK: Request에 대한 응답으로 ACK를 전송한다.
Broadcast를 하게되면, 같은 네트워크에 연결된 DHCP에게만 전달된다. 그러면 네트워크 내에 DHCP가 존재하지 않는다면 어떻게 처리해야 할까?
따라서 디폴트 게이트위이에 연결된 라우터에 Relay Agent를 설치해서 타 네트워크의 DHCP로부터 구성 정보를 받을 수 있다.
Relay Agent를 통해서 Discover, offer 메시지를 다른 네트워크에 전달한다. Relay Agent는 IP-Helper-Address 명령어를 통해 설정한다.
인터넷에서 사용되는 주소이며, 공인된 기관에 의해서 할당된 주소이다.
사설 IP 주소는 내부 네트워크에서 사용되는 주소로, 인터넷에서 직접 접근할 수 없다. 인터넷 IP 주소 관리 대상에 불포함되며, 다른 네트워크에서 중복 사용 가능하다.
사설 IP 주소는 라우터에서 처리가 안되기에 연결이 되지 않으며, 나머지는 공인 IP 범위이다.
NAT는 사설 IP 주소를 사용하는 내부 네트워크에서 외부로 나갈 때, 내부에서 사용된 사설 IP 주소를 공인 IP 주소로 변환한다. 요청과 응답에 대하여 NAT를 통해 변환되게 된다.
정적 NAT은 내부 네트워크의 각 내부 IP 주소를 미리 정의된 하나의 공인 IP 주소와 일대일 대응시키는 방식이다.
사용 가능한 공인 IP 주소 풀이 있으며, 내부 디바이스가 외부로 통신을 시도할 때마다 공인 IP 주소가 동적으로 할당된다.
위 방식은 IP 주소 풀의 개수만큼 인터넷 연결을 할 수 있다는 한계가 있다.
NAPT는 사설 네트워크에서 여러 개의 서비스들의 포트 번호와 사설 IP 주소를 통해 하나의 공인 IP 주소에 여러 개의 사설 IP 주소를 변환한다.
Private address뿐만 아니라 private port까지 고려하여 구분하므로 컴퓨터 내의 응용 프로그램의 프로세스 단위로 구분한다.
인터넷은 라우터들을 서로 연결되어 구성된다. 이러한 인터넷을 라우터와 링크를 각각 노드와 엣지로 표현할 수 있다. 기본 아이디어는 가중치가 있는 그래프로 표현한다.
Graph G = (N, E): N개의 노드와 E개의 간선으로 표현한다.
가중치는 전용선의 비용, 비트 에러의 정도 등으로 정의할 수 있다.
출발지 라우터와 목적지 라우터를 연결하는 경로 중 링크 비용의 합이 가장 작은 경로를 찾는다.
N1
에서 N2
까지의 모든 경로인 X, Y, Z를 저장하게 되면 라우팅 테이블이 커진다. 따라서 인터넷의 Hop-by-Hop 기술을 이용해 라우팅 테이블에 다음 라우터와 비용을 저장한다.
인터넷을 가중치 그래프로 모델링할 수 있어야 한다. Least Cost Routing (LCR)은 네트워크에서 효율적인 경로를 선택하기 위한 알고리즘 중 하나이다.
가중치 그래프로 모델링
Graph에서 Tree로 해석한다.
Tree: Root로부터 모든 노드가 유일한 경로로 연결되어야 하고 Loop가 없다.
B
C
모든 경로에 대해 최소 경로를 찾을 수 있다.
Distance vertor routing 알고리즘은 초기의 Distance vector를 통해 모든 Distance vector를 구할 수 있는 알고리즘이다.
특정한 노드를 루트로 가정하고, 자신으로부터 least cost tree를 만들고 다른 모든 노드들까지의 Distance vector의 초기값을 생성할 수 있다.
아직까지는 직접 연결되지 않은 노드들의 거리는 알 수 없다.
주기적으로 이웃 라우터와 패킷을 주고 받으며 링크의 상태를 파악한다.
Bellman-Ford 공식을 통해 경로를 업데이트한다.
그림처럼 각 노드는 전체 노드들에 대하여 각자 Least-cost tree 기반의 DV를 갖도록 신속하게 수렴한다.
Good news는 빨리 퍼지지만, Bad news(네트워크 끊어짐, ...)는 천천히 퍼져나간다.
이는 Count-to-infinity problem을 야기한다.
특정 경로의 업데이트를 해당 경로로 전파하지 않도록 하는 원칙을 적용하는 방식이다.
라우터가 더 이상 사용할 수 없는 경로에 대한 정보를 다른 라우터에게 전파할 때 해당 경로의 거리 값을 무한대(∞)로 설정하여 전달하는 방식이다.
3개 이상의 라우터 간에 순환 경로 발생 시 Poison Reverse가 Count-to-infinity problem을 보장받을 수 없다.
각 노드가 자신에게 붙어 있는 링크의 상태를 체크하고, 체크한 링크 정보를 모든 노드에 전파한다. 그 후 모든 노드들이 least cost tree를 생성한다.
Link State Routing은 Global Routing으로 모든 라우터가 모든 링크의 비용 정보를 알고 있다.
자신의 링크 상태 정보(LSP)를 전체 라우터와 공유하여 모든 노드가 같은 정보를 유지하게 한다.
다익스트라 알고리즘과 별개의 라우팅 프로토콜에 의해 수행된다.
LS의 단점은?
모든 목적지까지 전체 경로 정보(Entire Path) 자료 구조를 저장한다. 따라서 순환 경로(loop) 탐지 가능하다.
다양한 경로 속성들(Path Attributes)의 조합으로 경로 정보 제공한다. 송신자는 경로 벡터의 경로 속성들을 사용하여 다양한 경로를 조합하여 최적의 경로를 선택한다.
조합은 Policy는 cost나 선호하는 경로 등을 고려하여 종합적으로 정해진다.
Distance Vector는 distance와 next router의 정보만을 갖고 있다. 순환 경로 발생 가능하다.
policy를 통해서 최소 비용만을 고려하는 것이 아닌 다양한 선택지를 제공할 수 있다.
즉, Path vector는 '어떤 경로를 거쳐서 간다'를 메모한 것.
전체 인터넷을 하나의 routing algorithm으로 구현하면 다음과 같은 문제가 발생한다.
따라서 인터넷을 Autonomous System(AS)라는 영역들로 나누고, AS내에서는 하나의 intra-domain routing algorithm을 적용하고 AS 간에는 더 큰 개념의 inter-domain routing algorithm을 적용한다.
Rounting Protocol 입장에서 인터넷을 정의하면 AS(Autonomous System)들을 연결한 네트워크라 할 수 있다.
인터넷에서의 네트워크 관리 단위로 정의되는 독립된 네트워크다. AS는 경로 선택 및 라우팅 결정을 자유롭게 수행할 수 있는 하나의 관리 도메인으로 간주된다.
보통 하나의 ISP가 관리하는 영역이며 ICANN으로부터 고유한 번호를 부여 받는다. 하나의 AS 내에서는 동일한 Routing Algorithm이 운용된다.
Single-Homed AS (단일 홈드 AS): 하나의 인터넷 서비스 제공자(ISP)에만 연결된 경우를 의미한다. 일반적으로 작은 기업이나 조직이 단일 ISP와의 연결을 통해 인터넷에 접속하는 경우에 해당한다. 한 가지 경로만을 통해 외부와 통신하기 때문에 라우팅 정책이 단순하다.
Multi-Homed AS (다중 홈드 AS): 둘 이상의 ISP와 연결된 경우를 나타낸다. Multi-Homed AS는 여러 경로를 통해 외부와 통신할 수 있으며, 이는 회복성과 성능 향상을 제공할 수 있다. 다중 홈드 AS의 경우 여러 ISP와의 계약을 통해 다양한 연결 옵션을 활용할 수 있다.
Domain 1의 경우, 두 개의 AS와 연결되어 있다. 하지만, Domain 5에서 Domain 2로 가는 data는 전달하지 않는다.
Transit AS: 외부 네트워크로 가는 트래픽을 다른 AS에게 전달하는 역할을 하는 AS다. 다른 AS들 간의 중계 역할을 수행한다. 예로서, Tier-1 또는 Tier-2 ISP 네트워크.
경유 AS로 사용 가능하다.
위 그림에서 Domain 4 뒤에 Domain 6이 존재하고 Domain 4와만 연결되어 있으면 Domain 6이 Stub AS이다.
전체 인터넷을 여러 개의 AS로 구분하고, AS 내부는 각각 독립적인 라우팅 프로토콜을 적용한다. 따라서 AS간 라우팅은 각 AS를 연결하는 라우터들 간에 별도의 프로토콜러 수행된다.
Distance-Vector algorithm기반 Intra-domain routing protocol이다.
모든 링크의 비용은 1이므로 홉의 개수가 distance가 된다.
Count-in-infinity를 방지하기 위해 최대 16으로 설정했다.
Network Address & Distance = Distance Vector
이웃끼리의 갱신이 이루어진다.
2-1. 수신된 경로가 기존 라우팅 테이블에 없으면 경로를 추가한다.
2-2. 수신된 경로의 거리가 라우팅 테이블의 기존 경로 거리보다 작으면 수신 경로로 갱신
2-3. 수신된 경로의 거리가 라우팅 테이블의 기존 경로 거리보다 크더라도 다음 라우터가 동일하면 수신 경로로 갱신한다. 이는 동일한 다음 홉 라우터를 경유하는 경로의 거리 비용이 증가한 경우이다.
2-4. 1~3번이 아닌 경우 수신된 경로 무시한다.
안정이 되면, forwarding table이 완성이 된다.
응답 메시지가 오면, 각 목적지에 대해 수신 경로 거리에 1을 더하여 새로운 경로 거리 계산 → RIP는 모든 링크의 비용을 1로 계산하기 때문이다.
1번째 칼럼과 3번째 칼럼을 뺀 것이 DV이다.
라우팅 트래픽 발생량
주기적으로 발생되는 RIP 메시지는 목적지 망 주소와 거리 정보를 포함하는 많은 목록의 라우팅 정보를 포함하므로 라우팅 트래픽 발생량이 많다.
라우터의 성능 저하
짧은 주기로 발생되는 RIP 메시지를 수신할 때마다 라우터는 수신된 메시지의 목록의 각 항목을 자신의 거리 테이블의 관련 항목과 비교하고 처리해야하므로 라우터의 성능 저하가 초래하게 된다.
느린 전파 속도
라우팅 테이블 갱신 정보는 한 번에 하나의 라우터씩 전달되기 때문에 갱신 정보의 전파 속도가 느리다.
차등화된 라우팅 불가
RIP의 모든 링크 비용은 1로 설정되므로 요구되는 서비스 유형(예, 거리보다 전송 속도가 높은 경로 선택)에 따라 차등화된 경로 선택이 원천적으로 불가능하다.
Link-State routing 기반의 intra-domain routing protocol이다.
OSPF 메세지는 UDP/TCP 등을 사용하지 않고, 직접 IP 데이터그램(프로토콜 ID : 89)에 의해 운반된다.
Routing Protocol로도 분류되지만, 라우터들간의 Link-State를 공유하는 protocol로도 쓰인다.
1번이 OSPF의 역할이다.
1,2,3,4가 OSPF의 역할이다.
이웃 관계 설정을 위해 멀티캐스팅을 이용한다. DR이 존재하는 경우, DR 라우터와만 이웃관계를 설정한다.
OSPF에서 네트워크에 연결된 모든 라우터는 OSPF 프로세스를 실행하고, 이들 라우터 간에 OSPF 메시지 교환을 통해 라우팅 정보를 공유한다. 하지만 이러한 메시지 교환을 전체 네트워크에서 수행하는 것은 비효율적일 수 있다.
이 때, 모든 라우터에 flooding하는 것이 아닌 대표 라우터에게만 flooding하는 DR (Designated Router)이 사용된다.
AS의 규모가 커지면, flooding으로 인한 라우터 트래픽과 네트워크 상태 정보의 양이 증가한다.
OSPF에서 하나의 AS에서 여러 개의 영역으로 나누어, 각 영역을 독립적으로 OSPF 라우팅을 수행한다. 영역 간의 라우팅은 백본 영역(Backbone Area)를 통해서 수행한다.
각 OSPF 라우터가 자신의 연결된 링크 정보를 포함하고 있는 LSA이다. 가장 대표적이며 대부분의 라우터가 보내는 LSP이다.
OSPF 네트워크에서 DR (Designated Router)가 지정된 경우, DR은 해당 네트워크에 대한 Network LSA를 생성한다. 이 LSA에는 DR 및 BDR (Backup Designated Router)에 대한 정보가 포함되어 있다.
OSPF의 분할된 영역 간에 라우팅 정보를 교환하는 데 사용된다. ABR (Area Border Router)가 Type 3 LSA를 생성하여 다른 영역으로부터 받은 외부 라우팅 정보를 전달한다.
OSPF의 다른 영역으로부터 외부 라우팅 정보를 가져올 때 사용된다. ABR는 이 정보를 Type 4 LSA로 변환하여 해당 정보를 다른 영역에 전파한다.
외부로부터 수신한 외부 라우팅 정보를 나타낸다. 이 LSA는 OSPF 네트워크에 외부 라우팅 정보를 주입하는 데 사용된다.
Path Vector 기반의 AS간에 적용할 수 있는 유일한 inter-domain routing protocol이다.
목적지에 도착하기 위해 통과하는 AS의 목록이다. 순환 경로 탐지 가능하고, 반드시 구현되어야 한다.
경로 벡터를 알려준 직전 AS의 라우터 주소를 알려준다.
NEXT-HOP 라우터의 네트워크 주소는 IGP(RIP/OSPF)에 의해 AS 내부 라우터에 공유된다.
AS의 외부로의 트래픽(Outbound Traffic)에 대한 최적 경로를 결정하기 위한 선호도를 지정한다. LOCAL-PREF를 확인해서 더 높은 것을 갱신한다.
AS 내부로의 트래픽(Inbound Traffic)에 대한 최적 경로를 결정하기 위한 선호도를 지정한다. MED가 작은 경로로 전달하게 된다.
Local-Pref과 반대이다.
AS 내부에서 NEXT-HOP에 대한 라우팅 비용이 가장 작은 경로를 선택한다.
eBGP: AS 경계 라우터 간에 동작한다. TCP 연결로 eBGP 피어를 형성한다.
iBGP: AS 내의 라우터들 간에 동작한다. AS내의 라우터들 간에 1:1 TCP 연결을 통해 iBGP 피어를 형성한다.
TCP 연결이기에 논리적 연결로도 가능하다.
eBGP, iBGP 내부 라우팅 프로토콜(RIP, OSPF)로 구현한다. EX). R8
iBGP, 내부 라우팅 프로토콜(RIP, OSPF) 구현한다. EX) R7
IP의 특징으로 비연결형(상대방의 상태 미확인), 비신뢰적(전송 오류에 대한 미확인) 서비스라는 특징을 갖는다. 따라서 IP에 대하여 네트워크에서 발생하는 에러 메시지 및 제어 메시지를 전달하는 데 사용되는 프로토콜이다.
1번에서 IP 헤더와 3번에서의 IP 헤더 내용이 다르다. 3번에서의 IP의 source는 error reporting의 대상이고 destination은 누구지...?
오류 보고와 질의 메시지로 두 가지의 메시지 그룹으로 나눈다.
목적지 호스트 또는 네트워크에 도달할 수 없을 때 발생하는 오류 메시지이다.
수신 호스트가 송신 호스트에게 트래픽을 감소시키도록 요청하는 메시지입니다. 네트워크 혼잡을 막기 위해 사용됩니다.
패킷이 목적지에 도달하지 못하고 TTL (Time-to-Live) 값이 0이 되거나, Fragmentation이 완료되기까지의 시간이 초과될 때 발생하는 오류 메시지이다.
라우터가 호스트에게 다른 라우터를 통해 패킷을 전송하도록 경로를 변경하라고 알리는 메시지입니다.
IP 헤더나 데이터 부분에 오류가 있을 때 발생하는 메시지로, 잘못된 IP 헤더 또는 잘못된 TCP/UDP 헤더와 같은 오류를 나타낼 수 있습니다.
ping
명령을 통해 호스트 간에 상태를 확인하기 위해 사용되는 메시지이다. Echo Request는 요청을, Echo Reply는 응답을 나타낸다.
호스트가 자신의 IP 주소에 대한 넷마스크 정보를 알
지 못할 경우 사용한다. 하부 네트워크의 라우터에게 주소 마스크 요청 메시지를 직접 또는 방송(broadcast)으로 전송한다. 라우터는 주소 마스크 응답 메시지를 통해 넷마스크 정보를 제공한다.
호스트의 현재 시간을 요청하고 응답하기 위해 사용되는 메시지이다.
호스트가 같은 네트워크의 라우터에 관한 정보를 얻기 위해 라우터 요청 메시지 방송한다. 라우터 요청 메시지를 받은 라우터는 라우터 광고 메시지를 사용하여 자신의 주소 정보를 전송한다. 라우터는 주기적으로 광고 메시지 전송 가능하다.
Query message를 통해 네트워크 상황을 파악할 수 있다.
특정 라우터나 호스트가 alive, responding하는지 확인한다. ICMP의 echo request and reply를 이용한다.
traceroute (Linux) or tracert (Windows)
인터넷에서는 주소를 IP주소와 MAC 주소를 사용한다. IP 주소는 인터넷 상에서 통신 장치를 지정할 때 사용하고 NIC가 물리적으로 통신할 때는 물리(MAC) 주소를 사용하게 된다.
어떠한 경우에도 수신자의 IP 주소를 항상 알고 있다.
경우 | 송신자 | 수신자 |
---|---|---|
1 | 출발지 호스트 | 목적지 호스트 |
2 | 출발지 호스트 | 지역 라우터 |
3 | 라우터 | 다음 라우터 |
4 | 라우터 | 목적지 호스트 |
송신자는 수신자의 IP주소는 알고 있지만, 물리 주소는 모르고 있는 상태이다. 따라서 송신자는 수신자 IP 주소에 대응되는 서브넷 주소(MAC 주소)를 획득해야 한다.
수신자 IP 주소에 대응되는 서브넷 주소를 동적으로 변환한다.
ARP의 메시지는 Request와 Response를 사용하고, 모두 같은 format을 사용한다.
목적지 주소는 Broadcast 주소가 되어야 한다.
ARP를 매번 이더넷 주소를 요청하면, 시간이 소요된다.
ARP 응답 메시지를 받은 송신자는 자신의 캐쉬 테이블(cache table)에 해당 수신자의 IP 주소와 물리 주소를 등록한다.
동일한 IP 주소를 가진 수신자에게 데이터그램을 재전송할 때 캐쉬 테이블에서 신속하게 변환한다. 성능 향상에도 기여한다.
캐쉬 테이블에 저장된 주소 변환 정보는 일정 시간이 경과되도록 사용되지 않으면 삭제한다. 서브넷의 동적 변화를 적절하게 반영할 수 있게 하고 테이블 크기를 적절한 범위내로 유지한다.
라우팅: 최적의 경로를 찾는 것
포워딩: IP 패킷을 실제로 전송하는 작업
hop은 라우터를 의미?
Forwarding table에 가장 긴 destination 부터 위로 정렬한다. 그러면 상위 row에서부터만 비교하여 매치될 경우, forwarding한다. Longest Matching 방식.
Default address는 0.0.0.0/0으로 작성한다.
Piggybacking을 이용한다. 자신의 데이터의 정보를 포함하여 ACK 번호에 끼워서 보낸다.
payload == sdu
Routing: 가장 좋은 경로를 찾는 것
네트워크 계층 헤더의 Source IP Address와 Destination IP Address를 통해 찾아간다.
/#
를 붙여 prefix의 길이 표시Window 10 IP 주소 및 subnet mask 확인 방법: cmd -> ipconfig
167.199.170.82/27
- 네트워크 주소의 비트 개수: 27
- 호스트 주소의 비트 개수: 32-27=5
- IP주소 비트 표현: 10100111 11000111 10101010 010/10010
- (00000~11111)32개의 주소를 가질 수 있다.
- 서브넷 마스크: 11111111 11111111 11111111 111/00000
- 서브넷 주소: 10100111 11000111 10101010 010/00000
Forwarding Table에 Host 주소를 작성하게 되면 테이블이 비대해진다. 따라서 Host 주소가 아닌 네트워크 주소를 작성하게 된다. 즉, Forwarding Table에서는 네트워크 주소를 통해 라우팅된다.
ICANN: 인터넷 주소 관리국
ISP가 1000개의 주소를 요청하면, 2의 지수 승인 1024개를 부여한다. 호스트 주소가 1024개이여야 하므로, 네트워크 주소로 18.14.12.0/22를 부연한다.
라우터 입장에서는 4개의 Block을 합치면 160.70.14.0/24로 합칠 수 있다.
라우터가 Forwarding Table을 만드는데 Block에 대하여 각각 Row를 만드는 것이 불필요할 수 있다. 아예 주소를 합쳐서 하나의 Row로 Forwarding Table에 작성하는 것이 효율적일 수 있다.
Dynamic Host Configuration Protocol
컴퓨터가 DHCP로 부터 IP를 받고 떠나면 반납한다.
접속 초기에 이러한 정보를 DHCP 서버에 요청하여 얻어온다.
응용계층의 프로토콜이고 UDP 기반으로 작동한다.
IP Aggregation을 진행하면, R2 라우터에 추가 row가 필요함
기존 IPv4에서 레이블을 붙여서 옮겨감
레이블 스위칭을 위한 계층
MPLS를 통한 virtual circuit을 사용 가능
IPv6에서 레이블 값을 넣을 수 있는 필드가 있다. 따라서 따로 계층이 필요없다.
TCP, UDP, ICMP, IGMP, OSFP는 페이로드에 들어간다.
ICMP, IGMP, OSFP는 네트워크 계층의 페이로드에 들어간다. 전송 계층에 들어가는 것 같지만, 역할은 네트워크 계층에서의 역활과 같기 때문에 네트워크 계층으로 분류한다.
(45000028000100000102 ...)_16
IPv4 패킷이 도착하면 8개의 숫자가 32비트이다. 따라서 (45000028/00010000/0102 ...)_16
이고 헤더에서 (01)_16
이 TTL이다. 즉, 하나의 hop으로 이동 가능하다.
Wrapped Sum의 보수를 Checksum 값에 대입한다. 따라서 Error의 여부는 Wrapped Sum과 Checksum의 합이 0인지 아닌지를 판단한다.
Payload에 대한 Error를 체크하는 것이 아니다. Error에 대한 해결이 아니다.
IP packet은 전송 중에 다양한 형태의 네트워크를 통과하는데, 경우에 따라 크기가 작은 조각들로 나누어지는 때가 있음
패킷 처리 단위 사이즈가 작다면, fragmentation 과정을 통해 작게 만들어 처리한다.
IP 보안 관련 프로토콜: IPSec
이동 단말에 대해 IP 서비스를 중단 없이 제공하기 위한 Mobile IP 표준이다.
하지만, Cellular 망과 WiFi의 발전으로 주목 받지 못함.
그룹 관리 프로토콜
Colon Hex 방법으로 IPv6 128-bit 주소 체계를 나타낸다.
Colon hex로 표현해도 여전히 길고 중간에 많은 0을 포함하기 때문에 colon hex 표현에서 다음과 같이 축약함
Zero Compression
(one-to-one):
• It defines a single interface. It is for one-to-one
communications.
(one-to-any):
• It defines a group of computer that all share a
single address.
• 목적지 주소가 anycast 인 패킷은 목적지
그룹 내에서 중 하나의 computer 에게 전송
예) DNS 서버그룹
• Anycast address 도 unicast address 블록에서
할당받으므로 IP 주소만 봐서는 구분이 안됨.
(one-to-many):
• 수신자 그룹 내의 모든 computer 가 데이터를
수신함.
• Multicast address 블록이 준비되어 있음.
(one-to-all))
• IPv6에는 broadcast address 가 따로 없음.
• All-node multicast address로 broadcast 기능을
대체함
• Random 64-bit value (Windows)
• EUI-64 (Linux, Mac OS) using MAC address
• CGA(Cryptographically Generated Address)
RA(Router Advertisement)
Configuration Flag
State는 메모리...?
Registered와 Dynamic는 딱히 구분하지 않는다.
전송 속도 조절을 하는 것.
Receiver가 받을 수 있는 속도에 맞춰 Sender의 속도를 조절하는 것.
Pushing: 일단 데이터를 보내고, Consumer가 데이터 속도에 대한 알림(push)를 보낸다.
Pulling: 데이터를 전송하기 전에 Consumer가 데이터를 받을 준비가 되면 Producer에게 데이터 요청을 보낸다.
1. Sender의 응용 계층에서 데이터 생성됨.
2. Sender의 Transport layer에 push 방식으로 전송
3. Sender의 Transport layer에서 Receiver의 Transport layer로 push 방식으로 전송
4. Receiver의 Transport layer에서 응용계층으로 pullung 방식으로 전송
에러 검출은 Error detection code 또는 Correction code를 이용한다. 순서는 Sequence 번호를 이용한다.
m=4인 경우, 총 15 비트 표현 가능.
Box 왼쪽: 전송이 끝남
Box 오른쪽: 아직 전송하면 안되는 패킷
Box 안 파란색: 보내고 ACK를 기다리는 패킷 (OutStanding Packet)
BOX 안 흰색: 응용 계층에서 메시지가 내려오면 보낼 수 있는 패킷
라우터에 버퍼가 꽉 차서 버려질 수동 있다. 트래픽 로드가 네트워크의 capacity보다 클 때 발생한다.
Connectionless vs Connection-oriented
Connectionless: Datagram Switching, UDP
Connection-Oriented: Virtual-Circuit Switching, TCP
Process-To-Process 통신을 위해 전송 계층의 통신을 위해 포트 번호를 부여한다.
MTU(Maximum Transmission Unit): 하나의 패킷, 세그먼트가 가질 수 있는 최대 길이