프로토콜은 모듈화 , 계층화 되어있다.
모듈이라는 작은 조각들로 구성되어있고, 계층이라는 관계로 구성하고 있다.
프로토콜만 그런것이 아니라, 소프트웨어를 개발한다고하면 기능별로 쪼개는 작업을 한다. (함수 사용) main 함수에 다 넣는것이아니라 함수를 사용해 기능을 쪼갠다.
즉 함수가 하나의 모듈이다.
함수를 호출한 값으로 결과를 리턴해주는 것이 응답 이다.
모듈 사이에는 요청과 응답으로 구성된다.
계층 구조를 갖는다는 것은 바로 밑에 있는 계층에만 요청을 한다.
프로토콜을 만든다고 가정
프로토콜의 기능(Function)
- Address
- Error Control
- Flow Control
- Routing
두 개의 컴퓨터를 물리적으로 연결해도, 전송매체 프로그램이 양쪽에서 동작을 해야 프로그램을 통해서 데이터를 전달할 수있다.
OS(커널)안에 데이터를 받을 수 있도록 프로토콜 라이브러리가 있다.
두 대의 컴퓨터만 있으면 Address는 필요없다.
하지만 여러대 컴퓨터가 있으면 Address라는 것이 필요하다.
즉 송신처(수신) 수신처(데스트네이션)을 결정해야 한다.
각 컴퓨터를 식별할 수 있는 방법이 필요하다. 이것이 Address이다.
Address의 구성요소 (TCP/IP 프로토콜 방식)
- Port No
- Ip Address
- Mac Address
호스트를 식별을 할 수 있다.
Port No → 전송계층에서 사용
IP → 네트워크 계층에서 사용
Mac → 데이터링크 계층에서 사용
TCP/IP에서 보면 Port (TCP/UDP)에서 사용
포트번호 : 프로세스를 식별하기 위해 필요하다.
메시지가 전송될 떄 ip, mac address가 같이 전달된다.
수신자가 수신하면 여러 프로그램이 이미 동작중일텐데, 이것을 프로그램 중 맞는 프로세스를 찾아야 하는데, 이것을 포트번호를 가지고 한다.
수신자의 전송계층에서 포트번호를 보고 프로세스에 맞는 곳에 데이터를 전달한다.
Mac은 물리적 주소 : 하드웨어적 주소
랜 카드에 담겨있는 주소이다.
Ip Address : 사용자가 논리적으로 지정한 주소
대부분의 컴퓨터에는 Mac, IP 한개씩 할당되어 있다.
Mac 한개에 IP 여러개를 할당할 수 도 있다.
IP주소가 필요한 이유는 Routing 작업을 하기위해 필요하다.
만약 여러 대의 컴퓨터 사이에 네트워크라는 곳이 있다면 , 네트워크안에는 라우터라는 것이 존재한다.
라우터는 들어오는 데이터를 어디로 보낼지 결정한다.
라우터가 찾아서 보내는 것을 패킷이라한다.
데이터 계층에서 만드는 것은 프레임이라 한다.
네트워크 상에 돌아다니는 것은 프레임이다.
네트워크 상에 돌아디니는 데이터의 단위를 패킷이라 한다.
데이터 링크를 통해야 프레임이 된다.
라우터가 데이터를 받으면 프레임을 받는 것이다.
데이터 한개가 프레임이다.
데이터가 또 나눠진다.
헤더, 패킷, 트레일러로 나눌 수 있다.
패킷은 또 두개의 조각으로 나눠지는데,
패킷의 앞에 헤더, 뒷부분 세그먼트 가 들어있다.
프레임 헤더 : Mac (수신자, 송신자)
패킷 헤더 : IP (수신자, 송신자)
라우터가 길찾기 할 떄 필요한 것은 IP이다.
프레임을 받아서 패킷 데이터를 꺼내 읽어서 그 안의 도착지 IP 주소를 본다.
어느 방향으로 보내야 더욱 빠르게 보낼 수 있는지 라우터가 다음 라우터까지 보내준다.
즉 여러 개의 라우터를 거쳐서 목적지로 도착한다.
각 라우터마다 프레임을 열어 패킷을 열어 IP를 얻어 다음 라우터로 보내준다.
도착한 컴퓨터가 프레임을 받으면 확인하는 것이 맥 어드레이스이다.
맥 어드레스가 동일하면 맞다고 판단한다.
네트워크에 참여하는 모든 호스트는 유일하게 식별되어야 하고, 식별되기 위해서는 어드레스가 있어야 하는데, 어드레스의 구조가 위의 3 방식이다.
에러 컨트롤에는 유실, 파손(변형) 이 있다.
메시지를 보낼 때 세그먼트로 쪼개서 보낸다고 하였다.
하나의 데이터를 보내기 위해서 데이터 양의따라서 세그먼트의 수가 정해진다.
각 세그먼트 마다 응답을 받아야 다음 세그먼트가 보내는데,
응답이 안오면 유실됬다고 판정한다.
이 에러를 타이머를 통해 송신자 쪽에서 판단한다.
패킷을 잃어버렸다 라는 것을 안건 송신자뿐이다.
없어지는 이유 중 한 가지 이유는 라우터가 길찾기를 하기 위해서 다음으로 넘겨줘야 하지만, 넘기지 않고 버려버려서 생긴다.
버리는 이유는 혼잡이 발생해서 이다.
라우터는 큐의 방식이고 버퍼를 가진다.
자기 버퍼에 담아 들어온 순서대로 보낸다.
혼잡이 발생하게 되면 패킷들이 들어오지못해 버려진다.
두번쨰 이유는 중간에 어떤 원인에 의해 라우터에만 왔다갓다 거린다. (네트워크에서 떠돌아 다닌다)
라우터가 떠돌아 다니는 패킷은 버린다.
해결하는 방법은 재전송뿐이다.
다시 재전송한다.
라우터 들은 서로 혼잡이 걸렸다고 알려준다.
결국 호스트에게도 알려져서 잠깐 대기한다.
다시 혼잡이 풀리면 다시 전송일을 시작한다.
두번째 에러는 파손이다.
프레임의 트레일러 부분의 정보로 에러 체크가 가능하다.
오직 에러가 있다는 정보만 있다고 알려준다.
파손 에러는 수신처에서 판단한다.
해결 방법은 수신처가 송신처에게 부정적인 응답을 보낸다.
이것을 NAK라 한다.
송신자가 부정응답을 받으면 다시 재전송한다.,
플로우 컨트롤
성능의 차이가 있다면 처리속도, 메모리량 등
한번에 데이터를 보내면 한번에 수신을 못할 수도 있기 때문에 , 흐름에 맞춰 송신의 속도를 맞추는 것이 플로우 컨트롤이다.
방법 : sliding window 라는 방법을 쓴다.
라우팅
길찾기
브로드캐스팅 : 모든 호스트에게 데이터를 전달
멀티캐스팅 : 특정 호스트에게 데이터를 전달
TCP/IP는 위에 방식을 다 지원한다.
오류제어
네트워크를 구성할때 종속적으로 구성할 수 있다.
TV는 단방향 이다. 수신만 가능
전이중 : 양방향 전달 → 전화
반이중 : 특정 시점에 한쪽 방향 전달 (양쪽은 가능) → 무전기
서비스 프리미티브
서버 소켓은 클라이언트로부터 요청을 대기한다.
서버 소켓에 클라이언트가 요청을 해 연결이되면
서버에서 다른 소켓을 만들어 클라이언트 소켓이랑 연결한다.
그리고 서버 소켓은 비워진다. (다른 클라이언트 요청을 받기 위해)
서버 소켓은 스레드로 만든다.(동시에 여러 클라이언트 요청을 받아야 하기 때문에)
서버쪽
응용/표현/세션 (프로그램)
전송/네트워크/데이타링크/물리 (OS)
클라이언트
응용/표현/세션 (프로그램)
전송/네트워크/데이타링크/물리 (OS)
connect요청은 전송 계층에서 서버쪽에 보내는 데이터 패킷의 하나이다.
네트워크 계층에게 connet.request라는 요청을 보낸다.
데이터링크쪽에도 똑같이 보낸다.
물리 계층은 데이터를 전달해 서버의 물리 계층에 전달되게 된다.
connect 요청은 와서 IP,주소, 포트번호, 등 정보를 가지고 있다.
서버쪽에서 connect.indication이라는 정보를 계층으로 올린다.
전송계층이 프로그램에 올리고, 프로그램에서 accept를 하면 다시 response를 응답하는데.
connnect.response를 다시 클라이언트로 보낸다.
클라이언트에 도작하면 connect.confirm을 위로 보낸다.
클라이언트가 데이터를 보내면 send 한다 라고 한다.
후에 연결을 끊을 때는 connect와 같이 disconnect를 보낸다.
양쪽 같은 계층끼리 소통이 일어난다.
각 계층으로 이동이 일어날때마다 헤더 추가된다.
또한 수신 호스트에서는 헤더가 제거된다.
즉 캡슐화를 하게 된다.
수신에서는 캡슐을 깬다.
라우팅이 필요한 것은 3계층 까지만 세팅되어 있다.
TCP는 연결형 ,
UDP는 비연결형
ARP : IP주소를 MAC 주소로 변환
RARP : MAC주소를 IP로주소로 변환
'휴지통 > 학부' 카테고리의 다른 글
데이터 전송의 기초 (0) | 2021.10.05 |
---|---|
네트워크 기술 (0) | 2021.09.29 |
컴퓨터 하드웨어 (0) | 2021.09.14 |
머신러닝 기초 지식 (0) | 2021.09.09 |
화일의 기본개념(1) (0) | 2021.09.09 |